diff --git a/runtime.c b/runtime.c
index cdaaa0e..01f26df 100644
a
|
b
|
C_regparm void C_fcall really_mark(C_word *x) |
3267 | 3267 | if(is_fptr(h)) { |
3268 | 3268 | val = fptr_to_ptr(h); |
3269 | 3269 | |
| 3270 | /* When we marked the bucket, it may have already referred |
| 3271 | * to the _moved_ symbol. Re-check: |
| 3272 | */ |
| 3273 | if(C_enable_gcweak && |
| 3274 | (C_block_header(val) & C_HEADER_TYPE_BITS) == C_SYMBOL_TYPE && |
| 3275 | (wep = lookup_weak_table_entry(*x, 0)) != NULL) { |
| 3276 | if((wep->container & WEAK_COUNTER_MAX) == 0) ++wep->container; |
| 3277 | } |
| 3278 | |
3270 | 3279 | if((C_uword)val >= (C_uword)tospace_start && (C_uword)val < (C_uword)tospace_top) { |
3271 | 3280 | *x = val; |
3272 | 3281 | return; |
… |
… |
C_regparm void C_fcall really_mark(C_word *x) |
3280 | 3289 | /* Link points into fromspace and into a link which points into from- or tospace: */ |
3281 | 3290 | val = fptr_to_ptr(h); |
3282 | 3291 | |
| 3292 | /* See above: might happen twice */ |
| 3293 | if(C_enable_gcweak && |
| 3294 | (C_block_header(val) & C_HEADER_TYPE_BITS) == C_SYMBOL_TYPE && |
| 3295 | ((wep = lookup_weak_table_entry((C_word)p, 0)) != NULL || |
| 3296 | /* Also check against original location if forwarded later. |
| 3297 | * TODO: Can this even occur? |
| 3298 | */ |
| 3299 | (wep = lookup_weak_table_entry(*x, 0)) != NULL)) { |
| 3300 | if((wep->container & WEAK_COUNTER_MAX) == 0) ++wep->container; |
| 3301 | } |
| 3302 | |
3283 | 3303 | if((C_uword)val >= (C_uword)tospace_start && (C_uword)val < (C_uword)tospace_top) { |
3284 | 3304 | *x = val; |
3285 | 3305 | return; |