static int fixup_ephemeron(void *p, struct NewGC *gc) { GC_Ephemeron *eph = (GC_Ephemeron *)p; gcFIXUP2(eph->key, gc); gcFIXUP2(eph->val, gc); return gcBYTES_TO_WORDS(sizeof(GC_Ephemeron)); }
static int fixup_weak_box(void *p, struct NewGC *gc) { GC_Weak_Box *wb = (GC_Weak_Box *)p; gcFIXUP2(wb->secondary_erase, gc); gcFIXUP2(wb->val, gc); return gcBYTES_TO_WORDS(sizeof(GC_Weak_Box)); }
static void FIXUP_jmpup(Scheme_Jumpup_Buf *buf, struct NewGC *gc) { void *new_stack; new_stack = GC_resolve(buf->stack_copy); gcFIXUP2_TYPED_NOW(void *, buf->stack_copy, gc); gcFIXUP2(buf->cont, gc); gcFIXUP2(buf->external_stack, gc); if (buf->stack_copy) GC_fixup2_variable_stack(buf->gc_var_stack, (intptr_t)new_stack - (intptr_t)buf->stack_from, /* FIXME: stack direction */ (char *)new_stack + buf->stack_size, new_stack, gc); }
static int fixup_weak_array(void *p, struct NewGC *gc) { GC_Weak_Array *a = (GC_Weak_Array *)p; int i; void **data; gcFIXUP2(a->replace_val, gc); data = a->data; for (i = a->count; i--; ) { if (data[i]) gcFIXUP2(data[i], gc); } return gcBYTES_TO_WORDS(sizeof(GC_Weak_Array) + ((a->count - 1) * sizeof(void *))); }
static int shape_fixup(void *p, struct NewGC *gc) { #ifndef GC_NO_FIXUP_PROCEDURE_NEEDED intptr_t *shape_str = shape_strs[*(Scheme_Type *)p]; while (*shape_str != SCHEME_GC_SHAPE_TERM) { if (shape_str[0] == SCHEME_GC_SHAPE_PTR_OFFSET) { gcFIXUP2(*(void **)((char *)p + shape_str[1]), gc); } shape_str += 2; } # ifdef GC_NO_SIZE_NEEDED_FROM_PROCS return 0; # else return shape_size(p, gc); # endif #endif }
static void FIXUP_cjs(Scheme_Continuation_Jump_State *cjs, struct NewGC *gc) { gcFIXUP2(cjs->jumping_to_continuation, gc); gcFIXUP2(cjs->alt_full_continuation, gc); gcFIXUP2(cjs->val, gc); }