From 28047789a922432c49176c661e9347baef9871d1 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 14 Sep 2015 10:19:59 -0600 Subject: [PATCH] remove "array of tagged" GC support The GC supported allocation for an array of objects where the first one provides a tag, but at this point it was used only in some corners. Change those corner and simplify the GC by removing support for arrays of tagged objects. The main corner to clean up is in the handling of a macro-expansion observer and inferred names. Move those into the compile-time environment. It's possible that name inference has been broken by the changes, but in addition to passing the tests, the generated bytecode for the base collections is exactly the same as before the change. --- pkgs/racket-test-core/tests/racket/name.rktl | 3 + racket/src/racket/gc2/README | 8 - racket/src/racket/gc2/gc2.h | 8 +- racket/src/racket/gc2/newgc.c | 65 +- racket/src/racket/include/mzwin3m.def | 1 - racket/src/racket/include/racket3m.exp | 1 - racket/src/racket/include/scheme.h | 3 - racket/src/racket/src/compenv.c | 18 +- racket/src/racket/src/compile.c | 520 +++--- racket/src/racket/src/eval.c | 26 +- racket/src/racket/src/fun.c | 4 +- racket/src/racket/src/mkmark.rkt | 34 +- racket/src/racket/src/module.c | 65 +- racket/src/racket/src/mzmark_compenv.inc | 21 +- racket/src/racket/src/mzmark_eval.inc | 46 +- racket/src/racket/src/mzmark_fun.inc | 85 +- racket/src/racket/src/mzmark_future.inc | 68 +- racket/src/racket/src/mzmark_hash.inc | 17 +- racket/src/racket/src/mzmark_jit.inc | 68 +- racket/src/racket/src/mzmark_letrec_check.inc | 34 +- racket/src/racket/src/mzmark_network.inc | 68 +- racket/src/racket/src/mzmark_optimize.inc | 34 +- racket/src/racket/src/mzmark_place.inc | 102 +- racket/src/racket/src/mzmark_port.inc | 136 +- racket/src/racket/src/mzmark_portfun.inc | 68 +- racket/src/racket/src/mzmark_print.inc | 34 +- racket/src/racket/src/mzmark_read.inc | 102 +- racket/src/racket/src/mzmark_regexp.inc | 51 +- racket/src/racket/src/mzmark_resolve.inc | 34 +- racket/src/racket/src/mzmark_salloc.inc | 34 +- racket/src/racket/src/mzmark_sema.inc | 34 +- racket/src/racket/src/mzmark_sfs.inc | 17 +- racket/src/racket/src/mzmark_string.inc | 17 +- racket/src/racket/src/mzmark_struct.inc | 136 +- racket/src/racket/src/mzmark_syntax.inc | 68 +- racket/src/racket/src/mzmark_thread.inc | 238 ++- racket/src/racket/src/mzmark_type.inc | 1480 +++++++++++++++-- racket/src/racket/src/mzmark_validate.inc | 17 +- racket/src/racket/src/mzmarksrc.c | 31 +- racket/src/racket/src/read.c | 47 - racket/src/racket/src/schemef.h | 1 - racket/src/racket/src/schemex.h | 1 - racket/src/racket/src/schemex.inc | 1 - racket/src/racket/src/schemexm.h | 1 - racket/src/racket/src/schpriv.h | 13 +- racket/src/racket/src/stypes.h | 133 +- racket/src/racket/src/thread.c | 15 - 47 files changed, 3222 insertions(+), 786 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/name.rktl b/pkgs/racket-test-core/tests/racket/name.rktl index d114c5ba0e..03a634be38 100644 --- a/pkgs/racket-test-core/tests/racket/name.rktl +++ b/pkgs/racket-test-core/tests/racket/name.rktl @@ -65,6 +65,9 @@ (test 'w object-name (let ([w (let ([x 5]) (lambda () x))]) w)) (test 'z object-name (let ([z (let ([x 5]) (cons 1 2) (lambda () x))]) z)) +(test 'w object-name (let ([w (let () (lambda () 'x))]) w)) +(test 'z object-name (let ([z (let () (cons 1 2) (lambda () 'x))]) z)) + (set! f (lambda () 10)) (test 'f object-name f) diff --git a/racket/src/racket/gc2/README b/racket/src/racket/gc2/README index 26e29964d6..8db9a74ea2 100644 --- a/racket/src/racket/gc2/README +++ b/racket/src/racket/gc2/README @@ -95,14 +95,6 @@ Racket allocates the following kinds of memory objects: * Array - The allocated object is an array of pointers to other allocated objects. - * Tagged Array - The allocated object is an array of tagged - objects. Every tagged object in the array is the same size and has - the same effective tag. After allocating the memory, Racket sets - the tag on the initial array element, but might not set the tag of - other elements until later. (Even if tags are not set for all - objects, the mark and fixup operations might be applied to all of - them.) - * Pair - specialization of Tagged to pairs. * Interior Array - Like array objects, but pointers to the object can diff --git a/racket/src/racket/gc2/gc2.h b/racket/src/racket/gc2/gc2.h index 307ab2c48c..9af444821a 100644 --- a/racket/src/racket/gc2/gc2.h +++ b/racket/src/racket/gc2/gc2.h @@ -204,12 +204,6 @@ GC2_EXTERN void *GC_malloc_pair(void *car, void *cdr); The main potential advantage is that `car' and `cdr' don't have to be retained by the callee in the case of a GC. */ -GC2_EXTERN void *GC_malloc_array_tagged(size_t); -/* - Alloc an array of tagged items. Racket sets the tag in the first - item before a collection, by maybe not all items. When traversing, - use the first one for size. */ - GC2_EXTERN void *GC_malloc_atomic(size_t size_in_bytes); /* Alloc pointerless memory (not necessarily zeroed). */ @@ -605,6 +599,8 @@ GC2_EXTERN void GC_set_backpointer_object(void *p); #define gcBYTES_TO_WORDS(x) ((x + (1 << gcLOG_WORD_SIZE) - 1) >> gcLOG_WORD_SIZE) #define gcWORDS_TO_BYTES(x) (x << gcLOG_WORD_SIZE) +#define GC_NO_SIZE_NEEDED_FROM_PROCS 1 + #define GC_INTERIORABLES_NEVER_MOVE 1 #endif /* __mzscheme_gc_2__ */ diff --git a/racket/src/racket/gc2/newgc.c b/racket/src/racket/gc2/newgc.c index e362f3187b..eef4a2b84a 100644 --- a/racket/src/racket/gc2/newgc.c +++ b/racket/src/racket/gc2/newgc.c @@ -80,11 +80,10 @@ enum { PAGE_TAGGED = 0, PAGE_ATOMIC = 1, PAGE_ARRAY = 2, - PAGE_TARRAY = 3, - PAGE_PAIR = 4, - PAGE_BIG = 5, + PAGE_PAIR = 3, + PAGE_BIG = 4, /* the number of page types: */ - PAGE_TYPES = 6 + PAGE_TYPES = 5 }; enum { @@ -128,7 +127,6 @@ static const char *type_name[PAGE_TYPES] = { "tagged", "atomic", "array", - "tagged array", "pair", "big" }; @@ -699,9 +697,6 @@ static void dump_page_map(NewGC *gc, const char *when) case PAGE_ARRAY: kind = 'r'; break; - case PAGE_TARRAY: - kind = 'y'; - break; case PAGE_PAIR: kind = 'p'; break; @@ -1590,7 +1585,6 @@ void *GC_malloc_pair(void *car, void *cdr) /* the allocation mechanism we present to the outside world */ void *GC_malloc(size_t s) { return allocate(s, PAGE_ARRAY); } void *GC_malloc_one_tagged(size_t s) { return allocate(s, PAGE_TAGGED); } -void *GC_malloc_array_tagged(size_t s) { return allocate(s, PAGE_TARRAY); } void *GC_malloc_atomic(size_t s) { return allocate(s, PAGE_ATOMIC); } void *GC_malloc_atomic_uncollectable(size_t s) { return ofm_malloc_zero(s); } void *GC_malloc_allow_interior(size_t s) { return allocate_medium(s, PAGE_ARRAY); } @@ -3748,17 +3742,6 @@ static inline void propagate_marks_worker(NewGC *gc, void *pp) { while(start < end) gcMARK2(*start++, gc); break; } - case PAGE_TARRAY: - { - const unsigned short tag = *(unsigned short *)start; - ASSERT_TAG(tag); - end -= INSET_WORDS; - while(start < end) { - GC_ASSERT(gc->mark_table[tag]); - start += gc->mark_table[tag](start, gc); - } - break; - } case PAGE_PAIR: { Scheme_Object *p = (Scheme_Object *)start; @@ -3897,7 +3880,6 @@ static void *trace_pointer_start(mpage *page, void *p) { } # define TRACE_PAGE_TAGGED PAGE_TAGGED # define TRACE_PAGE_ARRAY PAGE_ARRAY -# define TRACE_PAGE_TAGGED_ARRAY PAGE_TARRAY # define TRACE_PAGE_ATOMIC PAGE_ATOMIC # define TRACE_PAGE_PAIR PAGE_PAIR # define TRACE_PAGE_MALLOCFREE PAGE_TYPES @@ -3910,7 +3892,6 @@ const char *trace_source_kind(int kind) case PAGE_TAGGED: return "_TAGGED"; case PAGE_ATOMIC: return "_ATOMIC"; case PAGE_ARRAY: return "_ARRAY"; - case PAGE_TARRAY: return "_TARRAY"; case PAGE_PAIR: return "_PAIR"; case PAGE_BIG: return "_BIG"; case BT_STACK: return "STACK"; @@ -4460,18 +4441,6 @@ static int repair_mixed_page(NewGC *gc, mpage *page, void **end) case PAGE_ATOMIC: start += info->size; break; - case PAGE_TARRAY: - { - void **tempstart, **tempend = PPTR(info) + (info->size - INSET_WORDS); - unsigned short tag; - tempstart = OBJHEAD_TO_OBJPTR(start); - tag = *(unsigned short*)tempstart; - ASSERT_TAG(tag); - while (tempstart < tempend) - tempstart += fixup_table[tag](tempstart, gc); - start += info->size; - } - break; case PAGE_PAIR: { Scheme_Object *p = (Scheme_Object *)OBJHEAD_TO_OBJPTR(start); @@ -4625,14 +4594,6 @@ static void repair_heap(NewGC *gc) gcFIXUP2(SCHEME_CDR(p), gc); } break; - case PAGE_TARRAY: - { - unsigned short tag = *(unsigned short *)start; - ASSERT_TAG(tag); - end -= INSET_WORDS; - while(start < end) start += fixup_table[tag](start, gc); - break; - } } memory_in_use += page->size; @@ -4683,26 +4644,6 @@ static void repair_heap(NewGC *gc) } } break; - case PAGE_TARRAY: - while(start < end) { - objhead *info = (objhead *)start; - size_t size = info->size; - if(info->mark) { - void **tempend = PPTR(info) + (info->size - INSET_WORDS); - unsigned short tag; - start = OBJHEAD_TO_OBJPTR(start); - tag = *(unsigned short*)start; - ASSERT_TAG(tag); - while(start < tempend) - start += fixup_table[tag](start, gc); - info->mark = 0; - start = PPTR(info) + size; - } else { - info->dead = 1; - start += size; - } - } - break; case PAGE_PAIR: while(start < end) { objhead *info = (objhead *)start; diff --git a/racket/src/racket/include/mzwin3m.def b/racket/src/racket/include/mzwin3m.def index eff2ac2b08..844b694200 100644 --- a/racket/src/racket/include/mzwin3m.def +++ b/racket/src/racket/include/mzwin3m.def @@ -204,7 +204,6 @@ EXPORTS GC_malloc_one_tagged GC_malloc_atomic_uncollectable scheme_malloc_uncollectable - GC_malloc_array_tagged GC_malloc_allow_interior GC_malloc_atomic_allow_interior GC_malloc_tagged_allow_interior diff --git a/racket/src/racket/include/racket3m.exp b/racket/src/racket/include/racket3m.exp index 6a2642d1d8..84d9b9c58f 100644 --- a/racket/src/racket/include/racket3m.exp +++ b/racket/src/racket/include/racket3m.exp @@ -211,7 +211,6 @@ GC_malloc_atomic GC_malloc_one_tagged GC_malloc_atomic_uncollectable scheme_malloc_uncollectable -GC_malloc_array_tagged GC_malloc_allow_interior GC_malloc_atomic_allow_interior GC_malloc_tagged_allow_interior diff --git a/racket/src/racket/include/scheme.h b/racket/src/racket/include/scheme.h index 7170a8eb3e..35d6cf7111 100644 --- a/racket/src/racket/include/scheme.h +++ b/racket/src/racket/include/scheme.h @@ -1221,9 +1221,6 @@ typedef struct Scheme_Thread { short suspend_break; short external_break; - Scheme_Simple_Object *list_stack; - int list_stack_pos; - /* Racket client can use: */ void (*on_kill)(struct Scheme_Thread *p); void *kill_data; diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index c718f3ad9e..841ef961b3 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -98,15 +98,9 @@ void scheme_init_compile_recs(Scheme_Compile_Info *src, int drec, int i; for (i = 0; i < n; i++) { -#ifdef MZTAG_REQUIRED - dest[i].type = scheme_rt_compile_info; -#endif dest[i].comp = 1; dest[i].dont_mark_local_use = src[drec].dont_mark_local_use; dest[i].resolve_module_ids = src[drec].resolve_module_ids; - dest[i].value_name = scheme_false; - /* should be always NULL */ - dest[i].observer = src[drec].observer; dest[i].pre_unwrapped = 0; dest[i].testing_constantness = 0; dest[i].env_already = 0; @@ -120,13 +114,8 @@ void scheme_init_expand_recs(Scheme_Expand_Info *src, int drec, int i; for (i = 0; i < n; i++) { -#ifdef MZTAG_REQUIRED - dest[i].type = scheme_rt_compile_info; -#endif dest[i].comp = 0; dest[i].depth = src[drec].depth; - dest[i].value_name = scheme_false; - dest[i].observer = src[drec].observer; dest[i].pre_unwrapped = 0; dest[i].substitute_bindings = src[drec].substitute_bindings; dest[i].testing_constantness = 0; @@ -144,15 +133,10 @@ void scheme_merge_compile_recs(Scheme_Compile_Info *src, int drec, void scheme_init_lambda_rec(Scheme_Compile_Info *src, int drec, Scheme_Compile_Info *lam, int dlrec) { -#ifdef MZTAG_REQUIRED - lam[dlrec].type = scheme_rt_compile_info; -#endif lam[dlrec].comp = 1; lam[dlrec].dont_mark_local_use = src[drec].dont_mark_local_use; lam[dlrec].resolve_module_ids = src[drec].resolve_module_ids; lam[dlrec].substitute_bindings = src[dlrec].substitute_bindings; - lam[dlrec].value_name = scheme_false; - lam[dlrec].observer = src[drec].observer; lam[dlrec].pre_unwrapped = 0; lam[dlrec].testing_constantness = 0; lam[dlrec].env_already = 0; @@ -166,7 +150,6 @@ void scheme_merge_lambda_rec(Scheme_Compile_Info *src, int drec, void scheme_compile_rec_done_local(Scheme_Compile_Info *rec, int drec) { - rec[drec].value_name = scheme_false; } /**********************************************************************/ @@ -285,6 +268,7 @@ Scheme_Comp_Env *scheme_new_compilation_frame(int num_bindings, int flags, Schem frame->insp = base->insp; frame->prefix = base->prefix; frame->in_modidx = base->in_modidx; + frame->observer = base->observer; if (base->next) frame->skip_depth = base->skip_depth + 1; diff --git a/racket/src/racket/src/compile.c b/racket/src/racket/src/compile.c index c2bff0ce34..49426e71a0 100644 --- a/racket/src/racket/src/compile.c +++ b/racket/src/racket/src/compile.c @@ -546,7 +546,7 @@ Scheme_Object *combine_name_with_srcloc(Scheme_Object *name, Scheme_Object *code return name; } -Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Compile_Info *rec, int drec) +Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Comp_Env *env) { Scheme_Object *name; @@ -558,7 +558,7 @@ Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Compile_Inf if (name) name = combine_name_with_srcloc(name, code, 1); } else { - name = rec[drec].value_name; + name = env->value_name; if (!name || SCHEME_FALSEP(name)) { name = scheme_source_to_name(code); if (name) @@ -627,7 +627,7 @@ make_closure_compilation(Scheme_Comp_Env *env, Scheme_Object *code, forms = scheme_datum_to_syntax(forms, code, code, 0, 0); forms = scheme_stx_add_scope(forms, scope, scheme_env_phase(env->genv)); - name = scheme_build_closure_name(code, rec, drec); + name = scheme_build_closure_name(code, env); data->name = name; scheme_compile_rec_done_local(rec, drec); @@ -678,7 +678,7 @@ lambda_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info Scheme_Comp_Env *newenv; Scheme_Expand_Info erec1; - SCHEME_EXPAND_OBSERVE_PRIM_LAMBDA(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_LAMBDA(env->observer); form = lambda_check(orig_form); @@ -698,12 +698,11 @@ lambda_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info body = scheme_stx_add_scope(body, scope, scheme_env_phase(env->genv)); args = scheme_stx_add_scope(args, scope, scheme_env_phase(env->genv)); /* for re-expansion */ - SCHEME_EXPAND_OBSERVE_LAMBDA_RENAMES(erec[drec].observer, args, body); + SCHEME_EXPAND_OBSERVE_LAMBDA_RENAMES(env->observer, args, body); fn = SCHEME_STX_CAR(form); scheme_init_expand_recs(erec, drec, &erec1, 1); - erec1.value_name = scheme_false; return scheme_datum_to_syntax(cons(fn, cons(args, @@ -880,7 +879,7 @@ defn_targets_syntax (Scheme_Object *var, Scheme_Comp_Env *env, Scheme_Compile_In static Scheme_Object * define_values_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) { - Scheme_Object *var, *val, *targets, *variables, *vec; + Scheme_Object *var, *val, *targets, *variables, *vec, *value_name; scheme_define_parse(form, &var, &val, 0, env, 0); variables = var; @@ -890,8 +889,9 @@ define_values_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_ scheme_compile_rec_done_local(rec, drec); if (SCHEME_STX_PAIRP(targets) && SCHEME_STX_NULLP(SCHEME_STX_CDR(targets))) { var = SCHEME_STX_CAR(variables); - rec[drec].value_name = SCHEME_STX_SYM(var); - } + value_name = SCHEME_STX_SYM(var); + } else + value_name = NULL; #if 0 if (env->scopes) @@ -902,9 +902,12 @@ define_values_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_ #endif env = scheme_no_defines(env); + env->value_name = value_name; val = scheme_compile_expr(val, env, rec, drec); + env->value_name = NULL; + vec = scheme_make_vector(2, NULL); SCHEME_VEC_ELS(vec)[0] = targets; SCHEME_VEC_ELS(vec)[1] = val; @@ -923,7 +926,7 @@ define_values_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_In { Scheme_Object *var, *val, *fn, *boundname; - SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_VALUES(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_VALUES(env->observer); scheme_define_parse(form, &var, &val, 0, env, 0); @@ -933,16 +936,20 @@ define_values_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_In boundname = SCHEME_STX_CAR(var); else boundname = scheme_false; - erec[drec].value_name = boundname; + env->value_name = boundname; fn = SCHEME_STX_CAR(form); - return scheme_datum_to_syntax(cons(fn, - cons(var, - cons(scheme_expand_expr(val, env, erec, drec), - scheme_null))), + form = scheme_datum_to_syntax(cons(fn, + cons(var, + cons(scheme_expand_expr(val, env, erec, drec), + scheme_null))), form, form, 0, 2); + + env->value_name = NULL; + + return form; } /**********************************************************************/ @@ -974,7 +981,7 @@ quote_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec { Scheme_Object *rest; - SCHEME_EXPAND_OBSERVE_PRIM_QUOTE(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_QUOTE(env->observer); rest = SCHEME_STX_CDR(form); @@ -1035,7 +1042,8 @@ if_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, len = check_form(form, form); check_if_len(form, len); - name = rec[drec].value_name; + name = env->value_name; + env->value_name = NULL; scheme_compile_rec_done_local(rec, drec); name = scheme_check_name_property(form, name); @@ -1051,8 +1059,6 @@ if_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, elsep = scheme_compiled_void(); scheme_init_compile_recs(rec, drec, recs, 3); - recs[1].value_name = name; - recs[2].value_name = name; env = scheme_no_defines(env); @@ -1064,26 +1070,33 @@ if_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, if (SCHEME_FALSEP(test)) { /* compile other branch only to get syntax checking: */ recs[2].dont_mark_local_use = 1; + env->value_name = name; scheme_compile_expr(thenp, env, recs, 2); - - if (len == 4) + + if (len == 4) { + env->value_name = name; test = scheme_compile_expr(elsep, env, recs, 1); - else + } else test = elsep; } else { if (len == 4) { /* compile other branch only to get syntax checking: */ recs[2].dont_mark_local_use = 1; + env->value_name = name; scheme_compile_expr(elsep, env, recs, 2); } - + + env->value_name = name; test = scheme_compile_expr(thenp, env, recs, 1); } } else { opt = 0; + env->value_name = name; thenp = scheme_compile_expr(thenp, env, recs, 1); - if (len == 4) + if (len == 4) { + env->value_name = name; elsep = scheme_compile_expr(elsep, env, recs, 2); + } } scheme_merge_compile_recs(rec, drec, recs, (opt || (len == 3)) ? 2 : 3); @@ -1101,7 +1114,7 @@ if_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *er int len; Scheme_Expand_Info recs[3]; - SCHEME_EXPAND_OBSERVE_PRIM_IF(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_IF(env->observer); form = scheme_stx_taint_disarm(orig_form, NULL); @@ -1110,31 +1123,31 @@ if_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *er check_if_len(form, len); if (len == 3) { - SCHEME_EXPAND_OBSERVE_NEXT_GROUP(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT_GROUP(env->observer); } - env = scheme_no_defines(env); + boundname = scheme_check_name_property(form, env->value_name); - boundname = scheme_check_name_property(form, erec[drec].value_name); + env = scheme_no_defines(env); + env->value_name = NULL; scheme_init_expand_recs(erec, drec, recs, 3); - recs[0].value_name = scheme_false; - recs[1].value_name = boundname; - recs[2].value_name = boundname; rest = SCHEME_STX_CDR(form); test = SCHEME_STX_CAR(rest); test = scheme_expand_expr(test, env, recs, 0); - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); rest = SCHEME_STX_CDR(rest); thenp = SCHEME_STX_CAR(rest); + env->value_name = boundname; thenp = scheme_expand_expr(thenp, env, recs, 1); rest = SCHEME_STX_CDR(rest); if (!SCHEME_STX_NULLP(rest)) { - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); elsep = SCHEME_STX_CAR(rest); + env->value_name = boundname; elsep = scheme_expand_expr(elsep, env, recs, 2); rest = cons(elsep, scheme_null); } else { @@ -1156,7 +1169,7 @@ if_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *er static Scheme_Object * with_cont_mark_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec) { - Scheme_Object *key, *val, *expr, *name, *orig_form = form; + Scheme_Object *key, *val, *expr, *name, *orig_form = form, *value_name; Scheme_Compile_Info recs[3]; Scheme_With_Continuation_Mark *wcm; int len; @@ -1168,7 +1181,9 @@ with_cont_mark_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_ if (len != 4) bad_form(form, len); + value_name = env->value_name; env = scheme_no_defines(env); + env->value_name = NULL; form = SCHEME_STX_CDR(form); key = SCHEME_STX_CAR(form); @@ -1177,16 +1192,16 @@ with_cont_mark_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_ form = SCHEME_STX_CDR(form); expr = SCHEME_STX_CAR(form); - name = rec[drec].value_name; scheme_compile_rec_done_local(rec, drec); - name = scheme_check_name_property(orig_form, name); + name = scheme_check_name_property(orig_form, value_name); scheme_init_compile_recs(rec, drec, recs, 3); - recs[2].value_name = name; key = scheme_compile_expr(key, env, recs, 0); val = scheme_compile_expr(val, env, recs, 1); + + env->value_name = value_name; expr = scheme_compile_expr(expr, env, recs, 2); scheme_merge_compile_recs(rec, drec, recs, 3); @@ -1207,7 +1222,7 @@ with_cont_mark_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Exp int len; Scheme_Expand_Info recs[3]; - SCHEME_EXPAND_OBSERVE_PRIM_WCM(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_WCM(env->observer); form = scheme_stx_taint_disarm(orig_form, NULL); @@ -1217,14 +1232,12 @@ with_cont_mark_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Exp fn = SCHEME_STX_CAR(form); - env = scheme_no_defines(env); + boundname = scheme_check_name_property(form, env->value_name); - boundname = scheme_check_name_property(form, erec[drec].value_name); + env = scheme_no_defines(env); + env->value_name = NULL; scheme_init_expand_recs(erec, drec, recs, 3); - recs[0].value_name = scheme_false; - recs[1].value_name = scheme_false; - recs[2].value_name = boundname; form = SCHEME_STX_CDR(form); key = SCHEME_STX_CAR(form); @@ -1234,9 +1247,10 @@ with_cont_mark_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Exp expr = SCHEME_STX_CAR(form); key = scheme_expand_expr(key, env, recs, 0); - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); val = scheme_expand_expr(val, env, recs, 1); - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); + env->value_name = boundname; expr = scheme_expand_expr(expr, env, recs, 2); return scheme_datum_to_syntax(cons(fn, @@ -1321,9 +1335,13 @@ set_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, } scheme_compile_rec_done_local(rec, drec); - rec[drec].value_name = SCHEME_STX_SYM(name); - val = scheme_compile_expr(body, scheme_no_defines(env), rec, drec); + env = scheme_no_defines(env); + env->value_name = SCHEME_STX_SYM(name); + + val = scheme_compile_expr(body, env, rec, drec); + + env->value_name = NULL; set_undef = (rec[drec].comp_flags & COMP_ALLOW_SET_UNDEFINED); @@ -1343,7 +1361,7 @@ set_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *e Scheme_Object *name, *var, *fn, *rhs, *find_name, *form, *binding_id; int l; - SCHEME_EXPAND_OBSERVE_PRIM_SET(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_SET(env->observer); form = scheme_stx_taint_disarm(orig_form, NULL); @@ -1369,22 +1387,22 @@ set_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *e &binding_id, NULL, NULL); - SCHEME_EXPAND_OBSERVE_RESOLVE(erec[drec].observer, find_name); + SCHEME_EXPAND_OBSERVE_RESOLVE(env->observer, find_name); if ((erec[drec].depth != 0) && SAME_TYPE(SCHEME_TYPE(var), scheme_macro_type)) { /* Redirect to a macro? */ if (scheme_is_set_transformer(SCHEME_PTR_VAL(var))) { - SCHEME_EXPAND_OBSERVE_ENTER_MACRO(erec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_MACRO(env->observer, form); form = scheme_apply_macro(name, menv, SCHEME_PTR_VAL(var), form, env, scheme_false, erec, drec, 1, 0); - SCHEME_EXPAND_OBSERVE_EXIT_MACRO(erec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_MACRO(env->observer, form); if (erec[drec].depth > 0) erec[drec].depth--; - erec[drec].value_name = name; + env->value_name = name; return scheme_expand_expr(form, env, erec, drec); } else if (scheme_is_rename_transformer(SCHEME_PTR_VAL(var))) { @@ -1407,7 +1425,7 @@ set_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *e scheme_wrong_syntax(NULL, name, form, "cannot mutate syntax identifier"); } - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); fn = SCHEME_STX_CAR(form); @@ -1415,16 +1433,20 @@ set_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *e rhs = SCHEME_STX_CDR(rhs); rhs = SCHEME_STX_CAR(rhs); - erec[drec].value_name = name; + env->value_name = name; rhs = scheme_expand_expr(rhs, env, erec, drec); - return scheme_datum_to_syntax(cons(fn, - cons(find_name, - cons(rhs, scheme_null))), + form = scheme_datum_to_syntax(cons(fn, + cons(find_name, + cons(rhs, scheme_null))), orig_form, orig_form, 0, 2); + + env->value_name = NULL; + + return form; } /**********************************************************************/ @@ -1486,6 +1508,7 @@ ref_syntax (Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, if (SCHEME_STX_PAIRP(name)) { /* FIXME: when using #%top, need to set mutated flag */ + env->value_name = NULL; if (rec[drec].comp) var = scheme_compile_expr(name, env, rec, drec); else @@ -1550,7 +1573,7 @@ ref_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, { Scheme_Object *naya; - SCHEME_EXPAND_OBSERVE_PRIM_VARREF(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_VARREF(env->observer); /* Error checking, and lexical variable update: */ naya = ref_syntax(form, env, erec, drec); @@ -1640,7 +1663,7 @@ case_lambda_syntax (Scheme_Object *form, Scheme_Comp_Env *env, form = SCHEME_STX_CDR(form); - name = scheme_build_closure_name(orig_form, rec, drec); + name = scheme_build_closure_name(orig_form, env); if (SCHEME_STX_NULLP(form)) { /* Case where there are no cases... */ @@ -1715,9 +1738,11 @@ case_lambda_syntax (Scheme_Object *form, Scheme_Comp_Env *env, cl->name = SCHEME_TRUEP(name) ? name : NULL; scheme_compile_rec_done_local(rec, drec); - recs = MALLOC_N_RT(Scheme_Compile_Info, count); + recs = MALLOC_N_ATOMIC(Scheme_Compile_Info, count); scheme_init_compile_recs(rec, drec, recs, count); + env->value_name = NULL; + for (i = 0; i < count; i++) { Scheme_Object *ce; ce = SCHEME_CAR(list); @@ -1750,7 +1775,7 @@ case_lambda_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand { Scheme_Object *first, *last, *args, *body, *c, *new_line, *form; - SCHEME_EXPAND_OBSERVE_PRIM_CASE_LAMBDA(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_CASE_LAMBDA(env->observer); form = scheme_stx_taint_disarm(orig_form, NULL); @@ -1763,7 +1788,7 @@ case_lambda_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand Scheme_Object *line_form, *scope; Scheme_Comp_Env *newenv; - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); line_form = SCHEME_STX_CAR(form); @@ -1781,12 +1806,11 @@ case_lambda_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand body = scheme_stx_add_scope(body, scope, scheme_env_phase(env->genv)); args = scheme_stx_add_scope(args, scope, scheme_env_phase(env->genv)); - SCHEME_EXPAND_OBSERVE_CASE_LAMBDA_RENAMES(erec[drec].observer, args, body); + SCHEME_EXPAND_OBSERVE_CASE_LAMBDA_RENAMES(env->observer, args, body); { Scheme_Expand_Info erec1; scheme_init_expand_recs(erec, drec, &erec1, 1); - erec1.value_name = scheme_false; new_line = cons(args, expand_block(body, newenv, &erec1, 0)); } new_line = scheme_datum_to_syntax(new_line, line_form, line_form, 0, 1); @@ -2251,8 +2275,8 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname, env = scheme_new_compilation_frame(0, 0, scope, origenv); forms = scheme_stx_add_scope(forms, scope, scheme_env_phase(env->genv)); - name = scheme_check_name_property(form, rec[drec].value_name); - rec[drec].value_name = name; + name = scheme_check_name_property(form, origenv->value_name); + env->value_name = name; return compile_sequence(forms, env, rec, drec, body_block); } @@ -2316,9 +2340,9 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname, else rhs_env = env; - recs = MALLOC_N_RT(Scheme_Compile_Info, (num_clauses + 1)); + recs = MALLOC_N_ATOMIC(Scheme_Compile_Info, (num_clauses + 1)); - defname = rec[drec].value_name; + defname = origenv->value_name; scheme_compile_rec_done_local(rec, drec); scheme_init_compile_recs(rec, drec, recs, num_clauses + 1); @@ -2418,7 +2442,7 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname, } if (lv->count == 1) - recs[i].value_name = SCHEME_STX_SYM(names[pre_k]); + rhs_env->value_name = SCHEME_STX_SYM(names[pre_k]); if (!recursive) { Scheme_Object *ce, *rhs; @@ -2432,6 +2456,8 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname, rhs = SCHEME_STX_CAR(rhs); lv->value = rhs; } + + rhs_env->value_name = NULL; if (recursive) { for (m = pre_k; m < k; m++) { @@ -2465,7 +2491,12 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname, rhs = lv->value; if (scope) rhs = scheme_stx_add_scope(rhs, scope, scheme_env_phase(env->genv)); + if (lv->count == 1) + env->value_name = lv->names[0]; + else + env->value_name = NULL; ce = scheme_compile_expr(rhs, env, recs, i); + env->value_name = NULL; lv->value = ce; /* Record the fact that this binding doesn't use any or later @@ -2528,13 +2559,15 @@ gen_let_syntax (Scheme_Object *form, Scheme_Comp_Env *origenv, char *formname, else already_compiled_body = 0; - recs[num_clauses].value_name = defname ? SCHEME_STX_SYM(defname) : NULL; + + env->value_name = defname ? SCHEME_STX_SYM(defname) : NULL; { Scheme_Object *cs; if (scope) forms = scheme_stx_add_scope(forms, scope, scheme_env_phase(env->genv)); cs = compile_sequence(forms, env, recs, num_clauses, body_block); last->body = cs; } + env->value_name = NULL; /* Save flags: */ lv = (Scheme_Compiled_Let_Value *)first; @@ -2649,8 +2682,7 @@ do_let_expand(Scheme_Object *orig_form, Scheme_Comp_Env *origenv, Scheme_Expand_ ? "empty body not allowed" : NULL)); - boundname = scheme_check_name_property(form, erec[drec].value_name); - erec[drec].value_name = boundname; + boundname = scheme_check_name_property(form, origenv->value_name); if (!env_already && !rec_env_already) scheme_begin_dup_symbol_check(&r, origenv); @@ -2755,7 +2787,7 @@ do_let_expand(Scheme_Object *orig_form, Scheme_Comp_Env *origenv, Scheme_Expand_ body = scheme_datum_to_syntax(body, form, form, 0, 0); if (scope) body = scheme_stx_add_scope(body, scope, scheme_env_phase(env->genv)); - SCHEME_EXPAND_OBSERVE_LET_RENAMES(erec[drec].observer, vars, body); + SCHEME_EXPAND_OBSERVE_LET_RENAMES(env->observer, vars, body); /* Pass 2: Expand */ @@ -2764,7 +2796,7 @@ do_let_expand(Scheme_Object *orig_form, Scheme_Comp_Env *origenv, Scheme_Expand_ while (SCHEME_STX_PAIRP(vars)) { Scheme_Object *rhs, *rhs_name; - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); v = SCHEME_STX_CAR(vars); @@ -2779,8 +2811,9 @@ do_let_expand(Scheme_Object *orig_form, Scheme_Comp_Env *origenv, Scheme_Expand_ } scheme_init_expand_recs(erec, drec, &erec1, 1); - erec1.value_name = rhs_name; + use_env->value_name = rhs_name; rhs = scheme_expand_expr(rhs, use_env, &erec1, 0); + use_env->value_name = NULL; v = scheme_datum_to_syntax(cons(name, cons(rhs, scheme_null)), v, v, 0, 1); v = cons(v, scheme_null); @@ -2827,14 +2860,15 @@ do_let_expand(Scheme_Object *orig_form, Scheme_Comp_Env *origenv, Scheme_Expand_ first = scheme_datum_to_syntax(first, vs, vs, 0, 1); } - SCHEME_EXPAND_OBSERVE_NEXT_GROUP(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT_GROUP(env->observer); scheme_init_expand_recs(erec, drec, &erec1, 1); - erec1.value_name = erec[drec].value_name; + env->value_name = boundname; if (!body_block) body = expand_list(body, env, &erec1, 0); else body = expand_block(body, env, &erec1, 0); - + env->value_name = NULL; + if (SCHEME_PAIRP(pre_set)) { if (first) pre_set = cons(cons(letrec_values_symbol, first), pre_set); @@ -2860,14 +2894,14 @@ do_let_expand(Scheme_Object *orig_form, Scheme_Comp_Env *origenv, Scheme_Expand_ static Scheme_Object * let_values_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_LET_VALUES(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_LET_VALUES(env->observer); return do_let_expand(form, env, erec, drec, "let-values", 0, 1, NULL); } static Scheme_Object * letrec_values_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_LETREC_VALUES(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_LETREC_VALUES(env->observer); return do_let_expand(form, env, erec, drec, "letrec-values", 1, 1, NULL); } @@ -2919,7 +2953,7 @@ do_begin_syntax(char *name, Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, int drec, int zero) { - Scheme_Object *forms, *body; + Scheme_Object *forms, *body, *vname; form = scheme_stx_taint_disarm(form, NULL); @@ -2934,8 +2968,11 @@ do_begin_syntax(char *name, check_form(form, form); - if (zero) + if (zero) { + vname = env->value_name; env = scheme_no_defines(env); + env->value_name = vname; + } /* if the begin has only one expression inside, drop the begin TODO: is this right */ @@ -2951,16 +2988,17 @@ do_begin_syntax(char *name, Scheme_Compile_Info recs[2]; Scheme_Object *first, *rest, *vname; - vname = rec[drec].value_name; + vname = env->value_name; scheme_compile_rec_done_local(rec, drec); vname = scheme_check_name_property(form, vname); scheme_init_compile_recs(rec, drec, recs, 2); - recs[0].value_name = vname; first = SCHEME_STX_CAR(forms); + env->value_name = vname; first = scheme_compile_expr(first, env, recs, 0); + env->value_name = NULL; rest = SCHEME_STX_CDR(forms); rest = compile_list(rest, env, recs, 1); @@ -2969,10 +3007,12 @@ do_begin_syntax(char *name, body = cons(first, rest); } else { Scheme_Object *v; - v = scheme_check_name_property(form, rec[drec].value_name); - rec[drec].value_name = v; + v = scheme_check_name_property(form, env->value_name); + env->value_name = v; body = compile_list(forms, env, rec, drec); + + env->value_name = NULL; } } else { /* Top level */ @@ -3140,8 +3180,8 @@ do_begin_expand(char *name, if (SCHEME_STX_NULLP(rest)) { if (!zero && scheme_is_toplevel(env)) { - SCHEME_EXPAND_OBSERVE_ENTER_LIST(erec[drec].observer, form); - SCHEME_EXPAND_OBSERVE_EXIT_LIST(erec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_LIST(env->observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_LIST(env->observer, form); return orig_form; } scheme_wrong_syntax(NULL, NULL, form, "empty form not allowed"); @@ -3157,23 +3197,23 @@ do_begin_expand(char *name, Scheme_Object *fst, *boundname; Scheme_Expand_Info erec1; scheme_init_expand_recs(erec, drec, &erec1, 1); - boundname = scheme_check_name_property(form, erec[drec].value_name); - erec1.value_name = boundname; - erec[drec].value_name = scheme_false; + boundname = scheme_check_name_property(form, env->value_name); fst = SCHEME_STX_CAR(rest); rest = SCHEME_STX_CDR(rest); - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); + env->value_name = boundname; fst = scheme_expand_expr(fst, env, &erec1, 0); + env->value_name = NULL; rest = scheme_datum_to_syntax(rest, form, form, 0, 0); - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); rest = expand_list(rest, env, erec, drec); form = cons(fst, rest); } else { Scheme_Object *boundname; - boundname = scheme_check_name_property(form, erec[drec].value_name); - erec[drec].value_name = boundname; + boundname = scheme_check_name_property(form, env->value_name); + env->value_name = boundname; form = expand_list(scheme_datum_to_syntax(rest, form, form, 0, 0), env, erec, drec); @@ -3196,14 +3236,14 @@ do_begin_expand(char *name, static Scheme_Object * begin_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_BEGIN(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_BEGIN(env->observer); return do_begin_expand("begin", form, env, erec, drec, 0); } static Scheme_Object * begin0_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_BEGIN0(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_BEGIN0(env->observer); return do_begin_expand("begin0", form, env, erec, drec, 1); } @@ -3212,7 +3252,7 @@ stratified_body_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Ex { Scheme_Object *body, *form; - SCHEME_EXPAND_OBSERVE_PRIM_STRATIFIED(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_STRATIFIED(env->observer); form = scheme_stx_taint_disarm(orig_form, NULL); @@ -3276,7 +3316,7 @@ single_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info if (simplify && (erec[drec].depth == -1)) { expr = scheme_stx_track(expr, form, form_name); - SCHEME_EXPAND_OBSERVE_TAG(erec[drec].observer,expr); + SCHEME_EXPAND_OBSERVE_TAG(env->observer,expr); return expr; } @@ -3292,7 +3332,7 @@ static Scheme_Object *expression_syntax(Scheme_Object *form, Scheme_Comp_Env *en static Scheme_Object *expression_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_EXPRESSION(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_EXPRESSION(env->observer); return single_expand(form, scheme_no_defines(env), erec, drec, 0, !(env->flags & SCHEME_TOPLEVEL_FRAME)); } @@ -3404,7 +3444,7 @@ quote_syntax_syntax(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Compi static Scheme_Object * quote_syntax_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_QUOTE_SYNTAX(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_QUOTE_SYNTAX(env->observer); return quote_syntax_syntax(form, env, erec, drec); } @@ -3419,8 +3459,6 @@ static void prep_exp_env_compile_rec(Scheme_Compile_Info *rec, int drec) rec[0].dont_mark_local_use = 0; rec[0].resolve_module_ids = 0; rec[0].substitute_bindings = 1; - rec[0].value_name = NULL; - rec[0].observer = NULL; rec[0].pre_unwrapped = 0; rec[0].testing_constantness = 0; rec[0].env_already = 0; @@ -3454,11 +3492,15 @@ do_define_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, names = scheme_named_map_1(NULL, stx_val, names, (Scheme_Object *)env); exp_env = scheme_new_comp_env(env->genv->exp_env, env->insp, NULL, 0); + exp_env->observer = env->observer; dummy = scheme_make_environment_dummy(env); prep_exp_env_compile_rec(&rec1, 0); + if (SCHEME_PAIRP(names) && SCHEME_NULLP(SCHEME_CDR(names))) + exp_env->value_name = SCHEME_STX_VAL(SCHEME_CAR(names)); + val = scheme_compile_expr_lift_to_let(code, exp_env, &rec1, 0); vec = scheme_make_vector(4, NULL); @@ -3484,9 +3526,9 @@ define_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, static Scheme_Object * define_syntaxes_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - Scheme_Object *names, *code, *fpart, *fn, *form; + Scheme_Object *names, *code, *fpart, *fn, *form, *observer; - SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_SYNTAXES(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_SYNTAXES(env->observer); form = orig_form; @@ -3494,14 +3536,16 @@ define_syntaxes_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Ex code = scheme_revert_use_site_scopes(code, env); - SCHEME_EXPAND_OBSERVE_PREPARE_ENV(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PREPARE_ENV(env->observer); scheme_prepare_exp_env(env->genv); scheme_prepare_compile_env(env->genv->exp_env); + observer = env->observer; env = scheme_new_expand_env(env->genv->exp_env, env->insp, NULL, 0); + env->observer = observer; - erec[drec].value_name = names; + env->value_name = names; fpart = scheme_expand_expr_lift_to_let(code, env, erec, drec); code = cons(fpart, scheme_null); @@ -3520,7 +3564,7 @@ begin_for_syntax_expand(Scheme_Object *orig_form, Scheme_Comp_Env *in_env, Schem Scheme_Object *form, *l, *fn, *vec, *dummy; Scheme_Comp_Env *env; - SCHEME_EXPAND_OBSERVE_PRIM_BEGIN_FOR_SYNTAX(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_BEGIN_FOR_SYNTAX(in_env->observer); form = orig_form; @@ -3529,7 +3573,7 @@ begin_for_syntax_expand(Scheme_Object *orig_form, Scheme_Comp_Env *in_env, Schem (void)check_form(form, form); - SCHEME_EXPAND_OBSERVE_PREPARE_ENV(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PREPARE_ENV(in_env->observer); scheme_prepare_exp_env(in_env->genv); scheme_prepare_compile_env(in_env->genv->exp_env); @@ -3541,6 +3585,8 @@ begin_for_syntax_expand(Scheme_Object *orig_form, Scheme_Comp_Env *in_env, Schem } else env = scheme_new_expand_env(in_env->genv->exp_env, in_env->insp, NULL, 0); + env->observer = in_env->observer; + if (rec[drec].comp) dummy = scheme_make_environment_dummy(in_env); else @@ -3576,7 +3622,7 @@ begin_for_syntax_expand(Scheme_Object *orig_form, Scheme_Comp_Env *in_env, Schem break; } else { /* We have lifts: */ - SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(rec[drec].observer, l); + SCHEME_EXPAND_OBSERVE_MODULE_LIFT_LOOP(env->observer, l); } } @@ -3699,7 +3745,7 @@ static void *eval_letmacro_rhs_k(void) void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object *a, Scheme_Env *exp_env, Scheme_Object *insp, - Scheme_Compile_Expand_Info *rec, int drec, + Scheme_Compile_Expand_Info *rec, int drec, Scheme_Object *observer, Scheme_Comp_Env *stx_env, Scheme_Comp_Env *rhs_env, int *_pos, Scheme_Object *rename_rib, int replace_value) @@ -3713,11 +3759,12 @@ void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object Scheme_Compile_Expand_Info mrec; eenv = scheme_new_comp_env(exp_env, insp, NULL, 0); + eenv->observer = observer; /* First expand for expansion-observation */ if (!rec[drec].comp) { scheme_init_expand_recs(rec, drec, &mrec, 1); - SCHEME_EXPAND_OBSERVE_ENTER_BIND(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_ENTER_BIND(eenv->observer); a = scheme_expand_expr_lift_to_let(a, eenv, &mrec, 0); } @@ -3726,13 +3773,19 @@ void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object mrec.dont_mark_local_use = 0; mrec.resolve_module_ids = 1; mrec.substitute_bindings = 1; - mrec.value_name = NULL; - mrec.observer = NULL; mrec.pre_unwrapped = 0; mrec.testing_constantness = 0; mrec.env_already = 0; mrec.comp_flags = rec[drec].comp_flags; + if (SCHEME_STX_PAIRP(names)) { + l = SCHEME_STX_CDR(names); + if (SCHEME_STX_NULLP(l)) { + l = SCHEME_STX_CAR(names); + eenv->value_name = SCHEME_STX_VAL(l); + } + } + a = scheme_compile_expr_lift_to_let(a, eenv, &mrec, 0); a = scheme_letrec_check_expr(a); @@ -3758,7 +3811,7 @@ void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object but it's not likely that a let-syntax-bound macro is going to run lots of times, so JITting is probably not worth it. */ - SCHEME_EXPAND_OBSERVE_NEXT(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(eenv->observer); a_expr = a; a = eval_letmacro_rhs(a_expr, rhs_env, @@ -3825,7 +3878,7 @@ void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object scheme_merge_undefineds(eenv, rhs_env); - SCHEME_EXPAND_OBSERVE_EXIT_BIND(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_EXIT_BIND(observer); } static Scheme_Object * @@ -3834,7 +3887,7 @@ do_letrec_syntaxes(const char *where, Scheme_Compile_Info *rec, int drec) { Scheme_Object *forms, *form, *bindings, *var_bindings, *body, *v, *scope; - Scheme_Object *names_to_disappear; + Scheme_Object *names_to_disappear, *orig_vname; Scheme_Comp_Env *stx_env, *var_env, *rhs_env; int cnt, stx_cnt, var_cnt, i, j, depth, saw_var, env_already, restore; DupCheckRecord r; @@ -3856,6 +3909,8 @@ do_letrec_syntaxes(const char *where, scheme_wrong_syntax(NULL, NULL, forms, NULL); body = scheme_datum_to_syntax(form, forms, forms, 0, 0); + orig_vname = origenv->value_name; + if (env_already) { stx_env = origenv; scope = NULL; @@ -4006,9 +4061,9 @@ do_letrec_syntaxes(const char *where, } } - SCHEME_EXPAND_OBSERVE_LETREC_SYNTAXES_RENAMES(rec[drec].observer, bindings, var_bindings, body); + SCHEME_EXPAND_OBSERVE_LETREC_SYNTAXES_RENAMES(stx_env->observer, bindings, var_bindings, body); - SCHEME_EXPAND_OBSERVE_PREPARE_ENV(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PREPARE_ENV(stx_env->observer); scheme_prepare_exp_env(stx_env->genv); scheme_prepare_compile_env(stx_env->genv->exp_env); @@ -4018,7 +4073,7 @@ do_letrec_syntaxes(const char *where, for (v = bindings; SCHEME_STX_PAIRP(v); v = SCHEME_STX_CDR(v)) { Scheme_Object *a, *names; - SCHEME_EXPAND_OBSERVE_NEXT(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(stx_env->observer); a = SCHEME_STX_CAR(v); names = SCHEME_STX_CAR(a); @@ -4028,13 +4083,13 @@ do_letrec_syntaxes(const char *where, scheme_bind_syntaxes(where, names, a, stx_env->genv->exp_env, stx_env->insp, - rec, drec, + rec, drec, stx_env->observer, stx_env, rhs_env, &i, NULL, 1); } } - SCHEME_EXPAND_OBSERVE_NEXT_GROUP(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT_GROUP(stx_env->observer); if (!env_already && names_to_disappear) { /* Need to add renaming for disappeared bindings. If they @@ -4069,9 +4124,9 @@ do_letrec_syntaxes(const char *where, if (!var_env) { var_env = stx_env; + v = scheme_check_name_property(forms, orig_vname); + var_env->value_name = v; if (rec[drec].comp) { - v = scheme_check_name_property(forms, rec[drec].value_name); - rec[drec].value_name = v; if (env_already) v = compile_list(body, var_env, rec, drec); else @@ -4097,9 +4152,10 @@ do_letrec_syntaxes(const char *where, v = scheme_stx_taint_rearm(v, orig_forms); if (!restore) { - SCHEME_EXPAND_OBSERVE_TAG(rec[drec].observer,v); + SCHEME_EXPAND_OBSERVE_TAG(stx_env->observer,v); } } + var_env->value_name = NULL; } else { /* Construct letrec-values expression: */ v = cons(letrec_values_symbol, cons(var_bindings, body)); @@ -4120,7 +4176,7 @@ do_letrec_syntaxes(const char *where, rec[drec].env_already = 1; } - SCHEME_EXPAND_OBSERVE_PRIM_LETREC_VALUES(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_LETREC_VALUES(stx_env->observer); v = do_let_expand(v, stx_env, rec, drec, "letrec-values", 1, 1, var_env); if (restore) { @@ -4132,7 +4188,7 @@ do_letrec_syntaxes(const char *where, v = cons(formname, cons(bindings, v)); v = scheme_datum_to_syntax(v, orig_forms, scheme_sys_wraps(origenv), 0, 2); } else { - SCHEME_EXPAND_OBSERVE_TAG(rec[drec].observer,v); + SCHEME_EXPAND_OBSERVE_TAG(stx_env->observer,v); } } } @@ -4154,7 +4210,7 @@ letrec_syntaxes_syntax(Scheme_Object *form, Scheme_Comp_Env *env, static Scheme_Object * letrec_syntaxes_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_LETREC_SYNTAXES_VALUES(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_LETREC_SYNTAXES_VALUES(env->observer); return do_letrec_syntaxes("letrec-syntaxes+values", form, env, erec, drec); } @@ -4378,15 +4434,14 @@ inner_compile_list(Scheme_Object *form, Scheme_Comp_Env *env, int i; Scheme_Object *c, *p, *comp_first, *comp_last, *name, *first, *rest; - name = rec[drec].value_name; + name = env->value_name; scheme_compile_rec_done_local(rec, drec); if (len <= 5) recs = quick; else - recs = MALLOC_N_RT(Scheme_Compile_Info, len); + recs = MALLOC_N_ATOMIC(Scheme_Compile_Info, len); scheme_init_compile_recs(rec, drec, recs, len); - recs[len - 1].value_name = name; comp_first = comp_last = NULL; @@ -4394,8 +4449,12 @@ inner_compile_list(Scheme_Object *form, Scheme_Comp_Env *env, first = SCHEME_STX_CAR(rest); rest = SCHEME_STX_CDR(rest); + if (SCHEME_STX_NULLP(rest)) + env->value_name = name; + c = compile_expand_expr(first, env, recs, i, !i && start_app_position); + env->value_name = NULL; p = scheme_make_pair(c, scheme_null); if (comp_last) @@ -4431,7 +4490,9 @@ static Scheme_Object *compile_application(Scheme_Object *form, Scheme_Comp_Env * if (len < 0) scheme_wrong_syntax(scheme_application_stx_string, NULL, form, NULL); - + + env->value_name = NULL; + scheme_compile_rec_done_local(rec, drec); form = inner_compile_list(form, scheme_no_defines(env), rec, drec, 1); @@ -4500,7 +4561,7 @@ Scheme_Object *scheme_check_immediate_macro(Scheme_Object *first, Scheme_Expand_Info erec1; Scheme_Env *menv = NULL; - SCHEME_EXPAND_OBSERVE_ENTER_CHECK(rec[drec].observer, first); + SCHEME_EXPAND_OBSERVE_ENTER_CHECK(env->observer, first); while (1) { *current_val = NULL; @@ -4513,7 +4574,7 @@ Scheme_Object *scheme_check_immediate_macro(Scheme_Object *first, } if (!SCHEME_STX_SYMBOLP(name)) { - SCHEME_EXPAND_OBSERVE_EXIT_CHECK(rec[drec].observer, first); + SCHEME_EXPAND_OBSERVE_EXIT_CHECK(env->observer, first); return first; } @@ -4541,7 +4602,7 @@ Scheme_Object *scheme_check_immediate_macro(Scheme_Object *first, if (!val) { first = install_alt_from_rename(first, alt_first); - SCHEME_EXPAND_OBSERVE_EXIT_CHECK(rec[drec].observer, first); + SCHEME_EXPAND_OBSERVE_EXIT_CHECK(env->observer, first); return first; } else if (SAME_TYPE(SCHEME_TYPE(val), scheme_macro_type)) { if (scheme_expansion_contexts_include(SCHEME_PTR_VAL(val), @@ -4560,8 +4621,11 @@ Scheme_Object *scheme_check_immediate_macro(Scheme_Object *first, alt_first = NULL; scheme_init_expand_recs(rec, drec, &erec1, 1); erec1.depth = 1; - erec1.value_name = (keep_name ? rec[drec].value_name : scheme_false); + name = env->value_name; + if (!keep_name) + env->value_name = name; first = scheme_expand_expr(first, env, &erec1, 0); + env->value_name = name; break; /* break to outer loop */ } } else { @@ -4572,7 +4636,7 @@ Scheme_Object *scheme_check_immediate_macro(Scheme_Object *first, } } else { first = install_alt_from_rename(first, alt_first); - SCHEME_EXPAND_OBSERVE_EXIT_CHECK(rec[drec].observer, first); + SCHEME_EXPAND_OBSERVE_EXIT_CHECK(env->observer, first); return first; } } @@ -4598,7 +4662,7 @@ compile_expand_macro_app(Scheme_Object *name, Scheme_Env *menv, Scheme_Object *m } } - boundname = rec[drec].value_name; + boundname = env->value_name; if (!boundname) boundname = scheme_false; @@ -4659,11 +4723,8 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Thread *p = scheme_current_thread; Scheme_Compile_Expand_Info *recx; - recx = MALLOC_ONE_RT(Scheme_Compile_Expand_Info); + recx = MALLOC_ONE_ATOMIC(Scheme_Compile_Expand_Info); memcpy(recx, rec + drec, sizeof(Scheme_Compile_Expand_Info)); -#ifdef MZTAG_REQUIRED - recx->type = scheme_rt_compile_info; -#endif p->ku.k.p1 = (void *)form; p->ku.k.p2 = (void *)env; @@ -4689,7 +4750,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, if (rec[drec].comp) { scheme_default_compile_rec(rec, drec); } else { - SCHEME_EXPAND_OBSERVE_VISIT(rec[drec].observer,form); + SCHEME_EXPAND_OBSERVE_VISIT(env->observer,form); } if (SAME_TYPE(SCHEME_TYPE(SCHEME_STX_VAL(form)), scheme_expanded_syntax_type)) { @@ -4746,7 +4807,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, &bind_id, &need_macro_scope, &inline_variant); - SCHEME_EXPAND_OBSERVE_RESOLVE(rec[drec].observer,find_name); + SCHEME_EXPAND_OBSERVE_RESOLVE(env->observer,find_name); if (var && SAME_TYPE(SCHEME_TYPE(var), scheme_macro_type) && scheme_is_rename_transformer(SCHEME_PTR_VAL(var))) { @@ -4781,10 +4842,10 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, } else { if (SAME_TYPE(SCHEME_TYPE(var), scheme_syntax_compiler_type)) { if (var == stop_expander) { - SCHEME_EXPAND_OBSERVE_ENTER_PRIM(rec[drec].observer,form); - SCHEME_EXPAND_OBSERVE_PRIM_STOP(rec[drec].observer); - SCHEME_EXPAND_OBSERVE_EXIT_PRIM(rec[drec].observer,form); - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer,form); + SCHEME_EXPAND_OBSERVE_ENTER_PRIM(env->observer,form); + SCHEME_EXPAND_OBSERVE_PRIM_STOP(env->observer); + SCHEME_EXPAND_OBSERVE_EXIT_PRIM(env->observer,form); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer,form); return form; } else { scheme_wrong_syntax(NULL, NULL, form, "bad syntax"); @@ -4818,14 +4879,14 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, else return var; } else { - SCHEME_EXPAND_OBSERVE_VARIABLE(rec[drec].observer, form, find_name); + SCHEME_EXPAND_OBSERVE_VARIABLE(env->observer, form, find_name); if (bind_id && rec[drec].substitute_bindings) find_name = bind_id; if (protected) { /* Add a property to indicate that the name is protected */ find_name = scheme_stx_property(find_name, protected_symbol, scheme_true); } - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer, find_name); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer, find_name); return find_name; /* which is usually == form */ } } @@ -4874,7 +4935,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, NULL, &need_macro_scope, NULL); - SCHEME_EXPAND_OBSERVE_RESOLVE(rec[drec].observer, find_name); + SCHEME_EXPAND_OBSERVE_RESOLVE(env->observer, find_name); if (var && SAME_TYPE(SCHEME_TYPE(var), scheme_macro_type) && scheme_is_rename_transformer(SCHEME_PTR_VAL(var))) { if (scheme_expansion_contexts_include(SCHEME_PTR_VAL(var), @@ -4912,10 +4973,10 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, } else { Scheme_Syntax_Expander *f; f = (Scheme_Syntax_Expander *)SCHEME_SYNTAX_EXP(var); - SCHEME_EXPAND_OBSERVE_ENTER_PRIM(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_PRIM(env->observer, form); form = f(form, env, rec, drec); - SCHEME_EXPAND_OBSERVE_EXIT_PRIM(rec[drec].observer, form); - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_PRIM(env->observer, form); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer, form); return form; } } @@ -4971,7 +5032,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, NULL, &need_macro_scope, NULL); - SCHEME_EXPAND_OBSERVE_RESOLVE(rec[drec].observer, find_name); + SCHEME_EXPAND_OBSERVE_RESOLVE(env->observer, find_name); if (var && SAME_TYPE(SCHEME_TYPE(var), scheme_macro_type) && scheme_is_rename_transformer(SCHEME_PTR_VAL(var))) { @@ -5002,12 +5063,12 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, || SAME_TYPE(SCHEME_TYPE(var), scheme_syntax_compiler_type))) { if (SAME_OBJ(var, stop_expander)) { /* Return original: */ - SCHEME_EXPAND_OBSERVE_ENTER_PRIM(rec[drec].observer, form); - SCHEME_EXPAND_OBSERVE_PRIM_STOP(rec[drec].observer); - SCHEME_EXPAND_OBSERVE_EXIT_PRIM(rec[drec].observer, form); - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_PRIM(env->observer, form); + SCHEME_EXPAND_OBSERVE_PRIM_STOP(env->observer); + SCHEME_EXPAND_OBSERVE_EXIT_PRIM(env->observer, form); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer, form); return form; - } else if (rec[drec].comp && SAME_OBJ(var, normal) && !rec[drec].observer) { + } else if (rec[drec].comp && SAME_OBJ(var, normal) && !env->observer) { /* Skip creation of intermediate form */ Scheme_Syntax *f; rec[drec].pre_unwrapped = 1; @@ -5026,7 +5087,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, } else { name = scheme_stx_taint_disarm(form, NULL); form = scheme_datum_to_syntax(scheme_make_pair(stx, name), form, form, 0, 2); - SCHEME_EXPAND_OBSERVE_TAG(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_TAG(env->observer, form); } if (SAME_TYPE(SCHEME_TYPE(var), scheme_syntax_compiler_type)) { @@ -5037,10 +5098,10 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, } else { Scheme_Syntax_Expander *f; f = (Scheme_Syntax_Expander *)SCHEME_SYNTAX_EXP(var); - SCHEME_EXPAND_OBSERVE_ENTER_PRIM(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_PRIM(env->observer, form); form = f(form, env, rec, drec); - SCHEME_EXPAND_OBSERVE_EXIT_PRIM(rec[drec].observer, form); - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_PRIM(env->observer, form); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer, form); return form; } } else { @@ -5085,11 +5146,11 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, macro: if (!rec[drec].comp && !rec[drec].depth) { - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer, form); return form; /* We've gone as deep as requested */ } - SCHEME_EXPAND_OBSERVE_ENTER_MACRO(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_MACRO(env->observer, form); if (scheme_expansion_contexts_include(SCHEME_PTR_VAL(var), scheme_frame_to_expansion_context_symbol(env->flags))) { form = compile_expand_macro_app(name, menv, var, form, env, rec, drec, need_macro_scope); @@ -5101,7 +5162,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, } } else form = adjust_for_other_context(form, var, env); - SCHEME_EXPAND_OBSERVE_EXIT_MACRO(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_MACRO(env->observer, form); if (rec[drec].comp) goto top; @@ -5111,7 +5172,7 @@ compile_expand_expr(Scheme_Object *form, Scheme_Comp_Env *env, if (rec[drec].depth) goto top; else { - SCHEME_EXPAND_OBSERVE_RETURN(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_RETURN(env->observer, form); return form; } } @@ -5155,7 +5216,7 @@ static Scheme_Object * compile_expand_app(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Compile_Expand_Info *rec, int drec) { - Scheme_Object *form, *naya, *forms; + Scheme_Object *form, *naya, *forms, *orig_vname = env->value_name; int tsc; forms = scheme_stx_taint_disarm(orig_form, NULL); @@ -5185,7 +5246,7 @@ compile_expand_app(Scheme_Object *orig_form, Scheme_Comp_Env *env, if (rec[drec].comp) return compile_application(form, env, rec, drec); else { - rec[drec].value_name = scheme_false; + env->value_name = NULL; naya = expand_list(form, scheme_no_defines(env), rec, drec); /* naya will be prefixed and returned... */ } @@ -5193,9 +5254,14 @@ compile_expand_app(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Object *name, *origname, *gval, *orig_rest_form, *rest_form; name = SCHEME_STX_CAR(form); origname = name; + + gval = env->value_name; + env->value_name = NULL; name = scheme_check_immediate_macro(name, env, rec, drec, &gval, 0); + env->value_name = gval; + /* look for ((lambda (x ...) ....) ....) or ((lambda x ....) ....) */ if (SAME_OBJ(gval, scheme_lambda_syntax)) { Scheme_Object *argsnbody, *d_name; @@ -5271,6 +5337,8 @@ compile_expand_app(Scheme_Object *orig_form, Scheme_Comp_Env *env, body = scheme_syntax_taint_rearm(body, orig_form); + env->value_name = orig_vname; + return compile_expand_expr(body, env, rec, drec, 0); } else { #if 0 @@ -5336,6 +5404,7 @@ compile_expand_app(Scheme_Object *orig_form, Scheme_Comp_Env *env, scheme_null), icons(second, scheme_null))); form = scheme_datum_to_syntax(name, forms, scheme_sys_wraps(env), 0, 2); + env->value_name = orig_vname; return compile_expand_expr(form, env, rec, drec, 0); } if (!SAME_OBJ(second, orig_second)) { @@ -5359,10 +5428,10 @@ compile_expand_app(Scheme_Object *orig_form, Scheme_Comp_Env *env, || NOT_SAME_OBJ(rest_form, orig_rest_form)) { form = scheme_datum_to_syntax(scheme_make_pair(name, rest_form), forms, forms, 0, 2); } - + return compile_application(form, env, rec, drec); } else { - rec[drec].value_name = scheme_false; + env->value_name = NULL; naya = expand_list(form, scheme_no_defines(env), rec, drec); /* naya will be prefixed returned... */ } @@ -5388,7 +5457,7 @@ app_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *rec, static Scheme_Object * app_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_APP(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_APP(env->observer); return compile_expand_app(form, env, erec, drec); } @@ -5420,7 +5489,7 @@ datum_expand(Scheme_Object *orig_form, Scheme_Comp_Env *env, Scheme_Expand_Info { Scheme_Object *rest, *v, *form; - SCHEME_EXPAND_OBSERVE_PRIM_DATUM(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_DATUM(env->observer); form = scheme_stx_taint_disarm(orig_form, NULL); @@ -5563,7 +5632,7 @@ top_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, Scheme_Object *c; int need_bound_check = 0; - SCHEME_EXPAND_OBSERVE_PRIM_TOP(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_TOP(env->observer); c = check_top(form, env, erec, drec, &need_bound_check); if (env->genv->module) @@ -5682,11 +5751,8 @@ compile_expand_expr_lift_to_let(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Thread *p = scheme_current_thread; Scheme_Compile_Expand_Info *recx; - recx = MALLOC_ONE_RT(Scheme_Compile_Expand_Info); + recx = MALLOC_ONE_ATOMIC(Scheme_Compile_Expand_Info); memcpy(recx, rec + drec, sizeof(Scheme_Compile_Expand_Info)); -#ifdef MZTAG_REQUIRED - recx->type = scheme_rt_compile_info; -#endif p->ku.k.p1 = (void *)form; p->ku.k.p2 = (void *)env; @@ -5735,7 +5801,7 @@ compile_expand_expr_lift_to_let(Scheme_Object *form, Scheme_Comp_Env *env, } else o = form; form = scheme_add_lifts_as_let(o, l, env, orig_form, rec[drec].comp); - SCHEME_EXPAND_OBSERVE_LETLIFT_LOOP(rec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_LETLIFT_LOOP(env->observer, form); form = compile_expand_expr_lift_to_let(form, env, recs, 1); if (rec[drec].comp) scheme_merge_compile_recs(rec, drec, recs, 2); @@ -5793,7 +5859,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, It is espcailly ugly because we have to expand macros before deciding what we have. */ { - Scheme_Object *first, *orig = forms, *pre_exprs = scheme_null, *old; + Scheme_Object *first, *orig = forms, *pre_exprs = scheme_null, *old, *orig_vname = env->value_name; Scheme_Object *rib, *ectx, *frame_scopes; Scheme_Compile_Info recs[2]; DupCheckRecord r; @@ -5801,7 +5867,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, if (rec[drec].comp) { scheme_default_compile_rec(rec, drec); } else { - SCHEME_EXPAND_OBSERVE_ENTER_BLOCK(rec[drec].observer, forms); + SCHEME_EXPAND_OBSERVE_ENTER_BLOCK(env->observer, forms); } if (SCHEME_STX_NULLP(forms)) { @@ -5809,9 +5875,9 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, scheme_compile_rec_done_local(rec, drec); return scheme_null; } else { - SCHEME_EXPAND_OBSERVE_BLOCK_TO_LIST(rec[drec].observer, forms); - SCHEME_EXPAND_OBSERVE_ENTER_LIST(rec[drec].observer, forms); - SCHEME_EXPAND_OBSERVE_EXIT_LIST(rec[drec].observer, forms); + SCHEME_EXPAND_OBSERVE_BLOCK_TO_LIST(env->observer, forms); + SCHEME_EXPAND_OBSERVE_ENTER_LIST(env->observer, forms); + SCHEME_EXPAND_OBSERVE_EXIT_LIST(env->observer, forms); return forms; } } @@ -5836,11 +5902,11 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, old = forms; forms = add_scope_at_arbitrary_phase(forms, rib); - SCHEME_EXPAND_OBSERVE_BLOCK_RENAMES(rec[drec].observer, forms, old); + SCHEME_EXPAND_OBSERVE_BLOCK_RENAMES(env->observer, forms, old); try_again: - SCHEME_EXPAND_OBSERVE_NEXT(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); if (!SCHEME_STX_PAIRP(forms)) { scheme_wrong_syntax(scheme_begin_stx_string, NULL, beginify(env, forms), "bad syntax"); @@ -5865,7 +5931,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, /* Inline content */ Scheme_Object *orig_forms = forms; - SCHEME_EXPAND_OBSERVE_PRIM_BEGIN(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_BEGIN(env->observer); /* FIXME: Redundant with check done by scheme_flatten_begin below? */ if (scheme_stx_proper_list_length(first) < 0) @@ -5879,13 +5945,13 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, attached to this begin should apply to the ultimate last thing in the block. */ Scheme_Object *v; - v = scheme_check_name_property(first, rec[drec].value_name); - rec[drec].value_name = v; + v = scheme_check_name_property(first, env->value_name); + env->value_name = v; } forms = scheme_flatten_begin(first, forms); - SCHEME_EXPAND_OBSERVE_SPLICE(rec[drec].observer, forms); + SCHEME_EXPAND_OBSERVE_SPLICE(env->observer, forms); if (SCHEME_STX_NULLP(forms)) { if (!SCHEME_PAIRP(pre_exprs)) { @@ -5952,9 +6018,9 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, v = SCHEME_STX_CDR(first); if (is_val) { - SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_VALUES(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_VALUES(env->observer); } else { - SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_SYNTAXES(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_DEFINE_SYNTAXES(env->observer); } if (!SCHEME_STX_PAIRP(v)) @@ -5984,7 +6050,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, var = SCHEME_STX_CAR(first); v = scheme_stx_track(v, first, var); - SCHEME_EXPAND_OBSERVE_RENAME_ONE(rec[drec].observer,v); + SCHEME_EXPAND_OBSERVE_RENAME_ONE(env->observer,v); link = scheme_make_pair(v, scheme_null); if (is_val) { @@ -6052,13 +6118,14 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, if (!is_val) { /* Evaluate and bind syntaxes */ - SCHEME_EXPAND_OBSERVE_PREPARE_ENV(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PREPARE_ENV(env->observer); scheme_prepare_exp_env(new_env->genv); scheme_prepare_compile_env(new_env->genv->exp_env); pos = 0; scheme_bind_syntaxes("local syntax definition", names, expr, - new_env->genv->exp_env, new_env->insp, rec, drec, + new_env->genv->exp_env, new_env->insp, + rec, drec, new_env->observer, new_env, new_env, &pos, rib, 1); } @@ -6074,7 +6141,7 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, if (!SCHEME_STX_NULLP(result)) { first = SCHEME_STX_CAR(result); first = scheme_datum_to_syntax(first, forms, forms, 0, 0); - SCHEME_EXPAND_OBSERVE_NEXT(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); is_last = SCHEME_STX_NULLP(SCHEME_STX_CDR(result)); first = scheme_check_immediate_macro(first, env, rec, drec, &gval, is_last); more = 1; @@ -6083,9 +6150,9 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, if (SAME_OBJ(gval, scheme_begin_syntax)) { /* Inline content */ result = SCHEME_STX_CDR(result); - SCHEME_EXPAND_OBSERVE_PRIM_BEGIN(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_BEGIN(env->observer); result = scheme_flatten_begin(first, result); - SCHEME_EXPAND_OBSERVE_SPLICE(rec[drec].observer,result); + SCHEME_EXPAND_OBSERVE_SPLICE(env->observer,result); goto define_try_again; } else if (mixed) { /* accumulate expr for either sequence after definitions @@ -6152,7 +6219,9 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, rec[drec].env_already = (mixed ? 2 : 1); if (rec[drec].comp) { - result = scheme_compile_expr(result, scheme_no_defines(env), rec, drec); + env = scheme_no_defines(env); + env->value_name = orig_vname; + result = scheme_compile_expr(result, env, rec, drec); return scheme_make_pair(result, scheme_null); } else { if (!mixed && ((rec[drec].depth == -2) || (rec[drec].depth > 0))) { @@ -6162,9 +6231,11 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, if (rec[drec].depth > 0) --rec[drec].depth; if (rec[drec].depth) { - SCHEME_EXPAND_OBSERVE_BLOCK_TO_LETREC(rec[drec].observer, + SCHEME_EXPAND_OBSERVE_BLOCK_TO_LETREC(env->observer, scheme_make_pair(result, scheme_null)); - result = scheme_expand_expr(result, scheme_no_defines(env), rec, drec); + env = scheme_no_defines(env); + env->value_name = orig_vname; + result = scheme_expand_expr(result, env, rec, drec); } result = scheme_make_pair(result, scheme_null); return scheme_datum_to_syntax(result, forms, forms, 0, 0); @@ -6178,9 +6249,8 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, env = scheme_no_defines(env); if (rec[drec].comp) { - Scheme_Object *vname, *rest; + Scheme_Object *rest; - vname = rec[drec].value_name; scheme_compile_rec_done_local(rec, drec); scheme_init_compile_recs(rec, drec, recs, 2); @@ -6191,28 +6261,29 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, rest = SCHEME_CDR(pre_exprs); } - if (SCHEME_STX_NULLP(rest)) - recs[0].value_name = vname; - else - recs[1].value_name = vname; - rest = scheme_datum_to_syntax(rest, orig, orig, 0, 0); + if (SCHEME_STX_NULLP(rest)) + env->value_name = orig_vname; + else + env->value_name = NULL; + first = scheme_compile_expr(first, env, recs, 0); + if (!SCHEME_STX_NULLP(rest)) + env->value_name = orig_vname; + else + env->value_name = NULL; + forms = compile_list(rest, env, recs, 1); scheme_merge_compile_recs(rec, drec, recs, 2); return scheme_make_pair(first, forms); } else { - Scheme_Object *newforms, *vname; + Scheme_Object *newforms; - vname = rec[drec].value_name; - rec[drec].value_name = scheme_false; scheme_init_expand_recs(rec, drec, recs, 2); - recs[0].value_name = vname; - if (SCHEME_PAIRP(pre_exprs)) newforms = pre_exprs; else { @@ -6225,7 +6296,9 @@ compile_expand_block(Scheme_Object *forms, Scheme_Comp_Env *env, if (scheme_stx_proper_list_length(forms) < 0) scheme_wrong_syntax(scheme_begin_stx_string, NULL, beginify(env, forms), "bad syntax"); - SCHEME_EXPAND_OBSERVE_BLOCK_TO_LIST(rec[drec].observer, forms); + env->value_name = orig_vname; + + SCHEME_EXPAND_OBSERVE_BLOCK_TO_LIST(env->observer, forms); forms = expand_list(forms, env, recs, 0); return forms; } @@ -6260,12 +6333,12 @@ expand_stratified_block(Scheme_Object *forms, Scheme_Comp_Env *env, Scheme_Expan static Scheme_Object *expand_list(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - Scheme_Object *first = NULL, *last = NULL, *fm; + Scheme_Object *first = NULL, *last = NULL, *fm, *vname; - SCHEME_EXPAND_OBSERVE_ENTER_LIST(erec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_ENTER_LIST(env->observer, form); if (SCHEME_STX_NULLP(form)) { - SCHEME_EXPAND_OBSERVE_EXIT_LIST(erec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_LIST(env->observer, form); return scheme_null; } @@ -6276,16 +6349,17 @@ static Scheme_Object *expand_list(Scheme_Object *form, Scheme_Comp_Env *env, } fm = form; + vname = env->value_name; while (SCHEME_STX_PAIRP(fm)) { Scheme_Object *r, *p; Scheme_Expand_Info erec1; - SCHEME_EXPAND_OBSERVE_NEXT(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_NEXT(env->observer); p = SCHEME_STX_CDR(fm); scheme_init_expand_recs(erec, drec, &erec1, 1); - erec1.value_name = (SCHEME_STX_NULLP(p) ? erec[drec].value_name : scheme_false); + env->value_name = (SCHEME_STX_NULLP(p) ? vname : NULL); r = SCHEME_STX_CAR(fm); r = scheme_expand_expr(r, env, &erec1, 0); @@ -6296,11 +6370,13 @@ static Scheme_Object *expand_list(Scheme_Object *form, Scheme_Comp_Env *env, first = p; last = p; + env->value_name = NULL; + fm = SCHEME_STX_CDR(fm); } form = scheme_datum_to_syntax(first, form, form, 0, 0); - SCHEME_EXPAND_OBSERVE_EXIT_LIST(erec[drec].observer, form); + SCHEME_EXPAND_OBSERVE_EXIT_LIST(env->observer, form); return form; } @@ -6340,7 +6416,7 @@ static Scheme_Object *stop_syntax(Scheme_Object *form, Scheme_Comp_Env *env, static Scheme_Object *stop_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_STOP(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_STOP(env->observer); return form; } diff --git a/racket/src/racket/src/eval.c b/racket/src/racket/src/eval.c index 518331074b..72f5080e52 100644 --- a/racket/src/racket/src/eval.c +++ b/racket/src/racket/src/eval.c @@ -4150,8 +4150,6 @@ static void *compile_k(void) rec.dont_mark_local_use = 0; rec.resolve_module_ids = !writeable && !genv->module; rec.substitute_bindings = 1; - rec.value_name = scheme_false; - rec.observer = NULL; rec.pre_unwrapped = 0; rec.env_already = 0; rec.comp_flags = comp_flags; @@ -4652,6 +4650,8 @@ static void *expand_k(void) observer = scheme_get_expand_observe(); SCHEME_EXPAND_OBSERVE_START_EXPAND(observer); + env->observer = observer; + comp_flags = get_comp_flags(NULL); if (as_local < 0) { @@ -4668,8 +4668,6 @@ static void *expand_k(void) while (1) { erec1.comp = 0; erec1.depth = ((depth == -3) ? -2 : depth); - erec1.value_name = scheme_false; - erec1.observer = observer; erec1.pre_unwrapped = 0; erec1.env_already = 0; erec1.comp_flags = comp_flags; @@ -4709,13 +4707,13 @@ static void *expand_k(void) obj = scheme_add_lifts_as_let(obj, l, env, scheme_false, 0); else obj = add_lifts_as_begin(obj, l, env); - SCHEME_EXPAND_OBSERVE_LIFT_LOOP(erec1.observer,obj); + SCHEME_EXPAND_OBSERVE_LIFT_LOOP(env->observer, obj); if ((depth >= 0) || as_local) break; } else { if (as_local > 0) { obj = add_lifts_as_begin(obj, scheme_null, env); - SCHEME_EXPAND_OBSERVE_LIFT_LOOP(erec1.observer,obj); + SCHEME_EXPAND_OBSERVE_LIFT_LOOP(env->observer,obj); } break; } @@ -5301,6 +5299,8 @@ do_local_expand(const char *name, int for_stx, int catch_lifts, int for_expr, in } } + env->observer = observer; + if (local_scope) { /* Since we have an expression from local context, we need to remove the temporary scope... */ @@ -5336,15 +5336,16 @@ do_local_expand(const char *name, int for_stx, int catch_lifts, int for_expr, in } memset(drec, 0, sizeof(drec)); - drec[0].value_name = scheme_false; /* or scheme_current_thread->current_local_name ? */ drec[0].depth = -2; - drec[0].observer = observer; { int comp_flags; comp_flags = get_comp_flags(NULL); drec[0].comp_flags = comp_flags; } + if (!(env->flags & (SCHEME_TOPLEVEL_FRAME | SCHEME_MODULE_FRAME | SCHEME_MODULE_BEGIN_FRAME))) + env->value_name = scheme_current_thread->current_local_name; + xl = scheme_check_immediate_macro(l, env, drec, 0, &gval, 1); if (SAME_OBJ(xl, l) && !for_expr) { @@ -5830,6 +5831,7 @@ local_eval(int argc, Scheme_Object **argv) stx_env = scheme_new_compilation_frame(0, SCHEME_FOR_INTDEF | SCHEME_USE_SCOPES_TO_NEXT, rib, stx_env); scheme_add_local_syntax(cnt, stx_env); + env->observer = observer; /* Scope names */ if (scheme_current_thread->current_local_scope) @@ -5852,8 +5854,6 @@ local_eval(int argc, Scheme_Object **argv) Scheme_Compile_Expand_Info rec; rec.comp = 0; rec.depth = -1; - rec.value_name = scheme_false; - rec.observer = observer; rec.pre_unwrapped = 0; rec.env_already = 0; rec.substitute_bindings = 1; @@ -5872,7 +5872,8 @@ local_eval(int argc, Scheme_Object **argv) scheme_make_pair(rib, scheme_env_phase(stx_env->genv))); rn_names = scheme_named_map_1(NULL, revert_expr_scopes, rn_names, (Scheme_Object *)init_env); scheme_bind_syntaxes("local syntax definition", rn_names, expr, - stx_env->genv->exp_env, stx_env->insp, &rec, 0, + stx_env->genv->exp_env, stx_env->insp, + &rec, 0, stx_env->observer, stx_env, stx_env, &pos, rib, 1); } @@ -6097,7 +6098,7 @@ static void mark_pruned_prefixes(struct NewGC *gc) XFORM_SKIP_PROC GC_set_backpointer_object(pf->backpointer); #endif GC_mark_no_recur(gc, 1); - gcMARK(pf); + gcMARK2(pf, gc); pf = (Scheme_Prefix *)GC_resolve2(pf, gc); GC_retract_only_mark_stack_entry(pf, gc); GC_mark_no_recur(gc, 0); @@ -6132,7 +6133,6 @@ START_XFORM_SKIP; static void register_traversers(void) { - GC_REG_TRAV(scheme_rt_compile_info, mark_comp_info); GC_REG_TRAV(scheme_rt_saved_stack, mark_saved_stack); } diff --git a/racket/src/racket/src/fun.c b/racket/src/racket/src/fun.c index 644e8da8af..f75649c190 100644 --- a/racket/src/racket/src/fun.c +++ b/racket/src/racket/src/fun.c @@ -1953,7 +1953,7 @@ scheme_apply_macro(Scheme_Object *name, Scheme_Env *menv, code = scheme_stx_taint_disarm(code, NULL); pre_code = code; - SCHEME_EXPAND_OBSERVE_MACRO_PRE_X(rec[drec].observer, code); + SCHEME_EXPAND_OBSERVE_MACRO_PRE_X(env->observer, code); { Scheme_Dynamic_State dyn_state; @@ -1976,7 +1976,7 @@ scheme_apply_macro(Scheme_Object *name, Scheme_Env *menv, scheme_pop_continuation_frame(&cframe); } - SCHEME_EXPAND_OBSERVE_MACRO_POST_X(rec[drec].observer, code, pre_code); + SCHEME_EXPAND_OBSERVE_MACRO_POST_X(env->observer, code, pre_code); if (!SCHEME_STXP(code)) { scheme_raise_exn(MZEXN_FAIL_CONTRACT, diff --git a/racket/src/racket/src/mkmark.rkt b/racket/src/racket/src/mkmark.rkt index 84b9164ab1..97ce186d5c 100644 --- a/racket/src/racket/src/mkmark.rkt +++ b/racket/src/racket/src/mkmark.rkt @@ -31,19 +31,23 @@ [(regexp-match re:close l) (error 'mkmark.rkt "unexpected close")] [else (cons l (loop))])))))] - [print-lines (lambda (l [skip-rx #f]) + [print-lines (lambda (l [skip-rx #f] [skip-alt-bracket #f]) (let loop ([l l] [skip? #f]) (cond [(null? l) (void)] [(and skip-rx (regexp-match? skip-rx (car l))) + (when skip-alt-bracket + (if skip? + (printf "#endif\n") + (printf "#ifdef ~a\n" skip-alt-bracket))) (loop (cdr l) (not skip?))] - [skip? + [(and skip? (not skip-alt-bracket)) (loop (cdr l) #t)] [(regexp-match? #rx"(START|END)_[A-Z_]+_ONLY;" (car l)) (loop (cdr l) skip?)] [else (printf "~a\n" (car l)) - (loop (cdr l) #f)])))]) + (loop (cdr l) skip?)])))]) (let ([prefix (read-lines re:mark)] [mark (read-lines re:size-or-more)] [fixup (if (regexp-match-peek re:fixup-start (current-input-port)) @@ -52,13 +56,26 @@ (read-lines re:size)) null)] [size (read-lines re:close)]) + + (define (print-size size) + (printf "# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS\n") + (printf " return 0;\n") + (printf "# else\n") + (printf " return\n") + (print-lines size) + (printf "# endif\n")) + (printf "static int ~a_SIZE(void *p, struct NewGC *gc) {\n" name) + (printf "#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS\n") (print-lines prefix) - (printf " return\n") (print-lines size) + (printf "#else\n") + (printf " return 0;\n") + (printf "#endif\n") (printf "}\n\n") (printf "static int ~a_MARK(void *p, struct NewGC *gc) {\n" name) + (printf "#ifndef GC_NO_MARK_PROCEDURE_NEEDED\n") (print-lines prefix) (print-lines (map (lambda (s) (regexp-replace* @@ -70,11 +87,12 @@ "")) mark) #rx"FIXUP_ONLY") - (printf " return\n") - (print-lines size) + (print-size size) + (printf "#endif\n") (printf "}\n\n") (printf "static int ~a_FIXUP(void *p, struct NewGC *gc) {\n" name) + (printf "#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED\n") (print-lines prefix) (print-lines (map (lambda (s) (regexp-replace* @@ -88,8 +106,8 @@ mark fixup)) #rx"MARK_ONLY") - (printf " return\n") - (print-lines size) + (print-size size) + (printf "#endif\n") (printf "}\n\n") (printf "#define ~a_IS_ATOMIC ~a\n" diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index b1081f425c..41c8e0177d 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -7041,7 +7041,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, LOG_EXPAND_DECLS; if (!rec[drec].comp) { - SCHEME_EXPAND_OBSERVE_PRIM_MODULE(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_MODULE(env->observer); if (rec[drec].depth > 0) rec[drec].depth++; } @@ -7205,7 +7205,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, m->super_bxs_info = super_bxs_info; } - SCHEME_EXPAND_OBSERVE_PREPARE_ENV(rec[drec].observer); + SCHEME_EXPAND_OBSERVE_PREPARE_ENV(env->observer); /* load the module for the initial require */ if (iidx) { @@ -7291,6 +7291,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, else benv = scheme_new_expand_env(menv, env->insp, frame_scopes, SCHEME_MODULE_BEGIN_FRAME | SCHEME_KEEP_SCOPES_FRAME); + benv->observer = env->observer; } /* If fm isn't a single expression, it certainly needs a @@ -7308,7 +7309,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, fm = scheme_datum_to_syntax(fm, form, mb_ctx, 0, 2); if (check_mb) { - SCHEME_EXPAND_OBSERVE_TAG(rec[drec].observer, fm); + SCHEME_EXPAND_OBSERVE_TAG(env->observer, fm); } fm = scheme_stx_property(fm, module_name_symbol, scheme_resolved_module_path_value(rmp)); @@ -7321,7 +7322,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, fm = scheme_stx_add_module_frame_context(fm, rn_set); - SCHEME_EXPAND_OBSERVE_RENAME_ONE(rec[drec].observer, fm); + SCHEME_EXPAND_OBSERVE_RENAME_ONE(env->observer, fm); if (!check_mb) { fm = scheme_check_immediate_macro(fm, benv, rec, drec, &mbval, 1); @@ -7334,7 +7335,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, fm = scheme_datum_to_syntax(fm, form, mb_ctx, 0, 2); fm = scheme_stx_property(fm, module_name_symbol, scheme_resolved_module_path_value(rmp)); - SCHEME_EXPAND_OBSERVE_TAG(rec[drec].observer, fm); + SCHEME_EXPAND_OBSERVE_TAG(env->observer, fm); check_mb = 1; } @@ -7451,7 +7452,7 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, LOG_END_EXPAND(m); - SCHEME_EXPAND_OBSERVE_RENAME_ONE(rec[drec].observer, fm); + SCHEME_EXPAND_OBSERVE_RENAME_ONE(env->observer, fm); return fm; } @@ -8178,7 +8179,7 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env scoped identifiers for definitions. */ form = introduce_to_module_context(form, rn_set); - observer = rec[drec].observer; + observer = env->observer; SCHEME_EXPAND_OBSERVE_RENAME_ONE(observer, form); _num_phases = MALLOC_ONE_ATOMIC(int); @@ -8226,8 +8227,6 @@ static Scheme_Object *do_module_begin(Scheme_Object *orig_form, Scheme_Comp_Env crec.dont_mark_local_use = 0; crec.resolve_module_ids = 0; crec.substitute_bindings = 1; - crec.value_name = scheme_false; - crec.observer = NULL; crec.pre_unwrapped = 0; crec.env_already = 0; crec.comp_flags = rec[drec].comp_flags; @@ -8692,20 +8691,14 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ void **args; if (rec) { - recx = MALLOC_ONE_RT(Scheme_Compile_Expand_Info); + recx = MALLOC_ONE_ATOMIC(Scheme_Compile_Expand_Info); memcpy(recx, rec + drec, sizeof(Scheme_Compile_Expand_Info)); -#ifdef MZTAG_REQUIRED - recx->type = scheme_rt_compile_info; -#endif } else recx = NULL; if (erec) { - erecx = MALLOC_ONE_RT(Scheme_Compile_Expand_Info); + erecx = MALLOC_ONE_ATOMIC(Scheme_Compile_Expand_Info); memcpy(erecx, erec + derec, sizeof(Scheme_Compile_Expand_Info)); -#ifdef MZTAG_REQUIRED - erecx->type = scheme_rt_compile_info; -#endif } else erecx = NULL; @@ -8813,11 +8806,8 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ /* For syntax-local-context, etc., in a d-s RHS: */ rhs_env = scheme_new_comp_env(env->genv, env->insp, NULL, SCHEME_TOPLEVEL_FRAME); - if (erec) { - observer = erec[derec].observer; - } else { - observer = NULL; - } + observer = env->observer; + rhs_env->observer = observer; maybe_has_lifts = 0; lift_ctx = scheme_generate_lifts_key(); @@ -8864,8 +8854,6 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ Scheme_Expand_Info erec1; erec1.comp = 0; erec1.depth = -1; - erec1.value_name = scheme_false; - erec1.observer = observer; erec1.pre_unwrapped = 0; erec1.substitute_bindings = 1; erec1.env_already = 0; @@ -9107,8 +9095,6 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ mrec.dont_mark_local_use = 0; mrec.resolve_module_ids = 0; mrec.substitute_bindings = 1; - mrec.value_name = NULL; - mrec.observer = NULL; mrec.pre_unwrapped = 0; mrec.env_already = 0; mrec.comp_flags = rec[drec].comp_flags; @@ -9116,8 +9102,6 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ if (erec) { erec1.comp = 0; erec1.depth = -1; - erec1.value_name = boundname; - erec1.observer = observer; erec1.pre_unwrapped = 0; erec1.substitute_bindings = 1; erec1.env_already = 0; @@ -9151,9 +9135,14 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ } else { if (erec) { SCHEME_EXPAND_OBSERVE_PHASE_UP(observer); + eenv->value_name = boundname; + eenv->observer = xenv->observer; code = scheme_expand_expr_lift_to_let(code, eenv, &erec1, 0); } + eenv->value_name = boundname; + eenv->observer = NULL; m = scheme_compile_expr_lift_to_let(code, eenv, &mrec, 0); + eenv->value_name = NULL; } if (!for_stx) { @@ -9370,6 +9359,7 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ frame_scopes = scheme_module_context_frame_scopes(rn_set, xenv->scopes); cenv = scheme_new_comp_env(env->genv, env->insp, frame_scopes, SCHEME_TOPLEVEL_FRAME | SCHEME_KEEP_SCOPES_FRAME); + cenv->observer = env->observer; } lift_data = scheme_make_vector(3, NULL); @@ -9435,7 +9425,6 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ if (erec) { Scheme_Expand_Info erec1; scheme_init_expand_recs(erec, derec, &erec1, 1); - erec1.value_name = scheme_false; e = scheme_expand_expr(e, nenv, &erec1, 0); expanded_l = scheme_make_pair(e, expanded_l); } @@ -9444,7 +9433,9 @@ static Scheme_Object *do_module_begin_at_phase(Scheme_Object *form, Scheme_Comp_ Scheme_Compile_Info crec1; scheme_init_compile_recs(rec, drec, &crec1, 1); crec1.resolve_module_ids = 0; + nenv->observer = NULL; e = scheme_compile_expr(e, nenv, &crec1, 0); + nenv->observer = env->observer; } lifted_reqs = scheme_frame_get_require_lifts(cenv); @@ -9657,7 +9648,7 @@ static Scheme_Object *expand_all_provides(Scheme_Object *form, Scheme_Object *e, *ex, *fst; Scheme_Comp_Env *pcenv; - observer = rec[drec].observer; + observer = cenv->observer; saved_provides = scheme_reverse(bxs->saved_provides); while (!SCHEME_NULLP(saved_provides)) { @@ -9684,6 +9675,7 @@ static Scheme_Object *expand_all_provides(Scheme_Object *form, pcenv = scheme_new_comp_env(penv, penv->access_insp, NULL, SCHEME_TOPLEVEL_FRAME); else pcenv = scheme_new_expand_env(penv, penv->access_insp, NULL, SCHEME_TOPLEVEL_FRAME); + pcenv->observer = cenv->observer; } else { pcenv = cenv; } @@ -9728,10 +9720,10 @@ static Scheme_Object *expand_submodules(Scheme_Compile_Expand_Info *rec, int dre while (!SCHEME_NULLP(l)) { mod = SCHEME_CAR(l); - SCHEME_EXPAND_OBSERVE_ENTER_PRIM(rec[drec].observer,SCHEME_CAR(mod)); + SCHEME_EXPAND_OBSERVE_ENTER_PRIM(env->observer, SCHEME_CAR(mod)); mod = do_module(SCHEME_CAR(mod), env, rec, drec, ancestry, env->genv->module->submodule_path, post, bxs, SCHEME_CDR(mod)); - SCHEME_EXPAND_OBSERVE_EXIT_PRIM(rec[drec].observer,mod); + SCHEME_EXPAND_OBSERVE_EXIT_PRIM(env->observer,mod); mods = scheme_make_pair(mod, mods); @@ -9951,7 +9943,7 @@ module_begin_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_In static Scheme_Object * module_begin_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_MODULE_BEGIN(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_MODULE_BEGIN(env->observer); return do_module_begin(form, env, erec, drec); } @@ -10846,7 +10838,6 @@ static Scheme_Object *expand_provide(Scheme_Object *e, int at_phase, stop, xenv, 0); scheme_init_expand_recs(rec, drec, &erec1, 1); - erec1.value_name = scheme_false; erec1.depth = -1; p = scheme_current_thread; @@ -12597,7 +12588,7 @@ require_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *r static Scheme_Object * require_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_REQUIRE(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_REQUIRE(env->observer); return do_require(form, env, erec, drec); } @@ -12631,7 +12622,7 @@ provide_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *r static Scheme_Object * provide_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_PROVIDE(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_PROVIDE(env->observer); scheme_wrong_syntax(NULL, NULL, form, "not in module body"); return NULL; } @@ -12646,7 +12637,7 @@ declare_syntax(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Compile_Info *r static Scheme_Object * declare_expand(Scheme_Object *form, Scheme_Comp_Env *env, Scheme_Expand_Info *erec, int drec) { - SCHEME_EXPAND_OBSERVE_PRIM_PROVIDE(erec[drec].observer); + SCHEME_EXPAND_OBSERVE_PRIM_PROVIDE(env->observer); scheme_wrong_syntax(NULL, NULL, form, "not in module body"); return NULL; } diff --git a/racket/src/racket/src/mzmark_compenv.inc b/racket/src/racket/src/mzmark_compenv.inc index b62c6324bf..ddcbeff3ba 100644 --- a/racket/src/racket/src/mzmark_compenv.inc +++ b/racket/src/racket/src/mzmark_compenv.inc @@ -1,11 +1,15 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_comp_env_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Comp_Env)); +#else + return 0; +#endif } static int mark_comp_env_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Comp_Env *e = (Scheme_Comp_Env *)p; gcMARK2(e->genv, gc); @@ -13,6 +17,8 @@ static int mark_comp_env_MARK(void *p, struct NewGC *gc) { gcMARK2(e->prefix, gc); gcMARK2(e->next, gc); gcMARK2(e->scopes, gc); + gcMARK2(e->value_name, gc); + gcMARK2(e->observer, gc); gcMARK2(e->binders, gc); gcMARK2(e->bindings, gc); gcMARK2(e->vals, gc); @@ -30,11 +36,17 @@ static int mark_comp_env_MARK(void *p, struct NewGC *gc) { gcMARK2(e->expand_result_adjust_arg, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Comp_Env)); +# endif +#endif } static int mark_comp_env_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Comp_Env *e = (Scheme_Comp_Env *)p; gcFIXUP2(e->genv, gc); @@ -42,6 +54,8 @@ static int mark_comp_env_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(e->prefix, gc); gcFIXUP2(e->next, gc); gcFIXUP2(e->scopes, gc); + gcFIXUP2(e->value_name, gc); + gcFIXUP2(e->observer, gc); gcFIXUP2(e->binders, gc); gcFIXUP2(e->bindings, gc); gcFIXUP2(e->vals, gc); @@ -59,8 +73,13 @@ static int mark_comp_env_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(e->expand_result_adjust_arg, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Comp_Env)); +# endif +#endif } #define mark_comp_env_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_eval.inc b/racket/src/racket/src/mzmark_eval.inc index c8f5fd6877..a8b65ad3ee 100644 --- a/racket/src/racket/src/mzmark_eval.inc +++ b/racket/src/racket/src/mzmark_eval.inc @@ -1,57 +1,43 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ -static int mark_comp_info_SIZE(void *p, struct NewGC *gc) { - return - gcBYTES_TO_WORDS(sizeof(Scheme_Compile_Info)); -} - -static int mark_comp_info_MARK(void *p, struct NewGC *gc) { - Scheme_Compile_Info *i = (Scheme_Compile_Info *)p; - - gcMARK2(i->value_name, gc); - gcMARK2(i->observer, gc); - - return - gcBYTES_TO_WORDS(sizeof(Scheme_Compile_Info)); -} - -static int mark_comp_info_FIXUP(void *p, struct NewGC *gc) { - Scheme_Compile_Info *i = (Scheme_Compile_Info *)p; - - gcFIXUP2(i->value_name, gc); - gcFIXUP2(i->observer, gc); - - return - gcBYTES_TO_WORDS(sizeof(Scheme_Compile_Info)); -} - -#define mark_comp_info_IS_ATOMIC 0 -#define mark_comp_info_IS_CONST_SIZE 1 - - static int mark_saved_stack_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); +#else + return 0; +#endif } static int mark_saved_stack_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *)p; gcMARK2(saved->prev, gc); gcMARK2(saved->runstack_start, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); +# endif +#endif } static int mark_saved_stack_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *)p; gcFIXUP2(saved->prev, gc); gcFIXUP2(saved->runstack_start, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Saved_Stack)); +# endif +#endif } #define mark_saved_stack_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_fun.inc b/racket/src/racket/src/mzmark_fun.inc index 8a14ce24f7..85356880c5 100644 --- a/racket/src/racket/src/mzmark_fun.inc +++ b/racket/src/racket/src/mzmark_fun.inc @@ -1,30 +1,45 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_closure_info_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Closure_Info)); +#else + return 0; +#endif } static int mark_closure_info_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Closure_Info *i = (Closure_Info *)p; gcMARK2(i->local_flags, gc); gcMARK2(i->base_closure_map, gc); gcMARK2(i->local_type_map, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Closure_Info)); +# endif +#endif } static int mark_closure_info_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Closure_Info *i = (Closure_Info *)p; gcFIXUP2(i->local_flags, gc); gcFIXUP2(i->base_closure_map, gc); gcFIXUP2(i->local_type_map, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Closure_Info)); +# endif +#endif } #define mark_closure_info_IS_ATOMIC 0 @@ -32,28 +47,43 @@ static int mark_closure_info_FIXUP(void *p, struct NewGC *gc) { static int mark_dyn_wind_cell_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind_List)); +#else + return 0; +#endif } static int mark_dyn_wind_cell_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Dynamic_Wind_List *l = (Scheme_Dynamic_Wind_List *)p; gcMARK2(l->dw, gc); gcMARK2(l->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind_List)); +# endif +#endif } static int mark_dyn_wind_cell_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Dynamic_Wind_List *l = (Scheme_Dynamic_Wind_List *)p; gcFIXUP2(l->dw, gc); gcFIXUP2(l->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind_List)); +# endif +#endif } #define mark_dyn_wind_cell_IS_ATOMIC 0 @@ -61,30 +91,45 @@ static int mark_dyn_wind_cell_FIXUP(void *p, struct NewGC *gc) { static int mark_dyn_wind_info_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Dyn_Wind)); +#else + return 0; +#endif } static int mark_dyn_wind_info_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Dyn_Wind *d = (Dyn_Wind *)p; gcMARK2(d->pre, gc); gcMARK2(d->act, gc); gcMARK2(d->post, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Dyn_Wind)); +# endif +#endif } static int mark_dyn_wind_info_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Dyn_Wind *d = (Dyn_Wind *)p; gcFIXUP2(d->pre, gc); gcFIXUP2(d->act, gc); gcFIXUP2(d->post, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Dyn_Wind)); +# endif +#endif } #define mark_dyn_wind_info_IS_ATOMIC 0 @@ -92,30 +137,45 @@ static int mark_dyn_wind_info_FIXUP(void *p, struct NewGC *gc) { static int mark_cont_mark_chain_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Chain)); +#else + return 0; +#endif } static int mark_cont_mark_chain_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Cont_Mark_Chain *c = (Scheme_Cont_Mark_Chain *)p; gcMARK2(c->key, gc); gcMARK2(c->val, gc); gcMARK2(c->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Chain)); +# endif +#endif } static int mark_cont_mark_chain_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Cont_Mark_Chain *c = (Scheme_Cont_Mark_Chain *)p; gcFIXUP2(c->key, gc); gcFIXUP2(c->val, gc); gcFIXUP2(c->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Chain)); +# endif +#endif } #define mark_cont_mark_chain_IS_ATOMIC 0 @@ -125,11 +185,15 @@ static int mark_cont_mark_chain_FIXUP(void *p, struct NewGC *gc) { #ifdef MZ_USE_JIT static int mark_lightweight_cont_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Lightweight_Continuation)); +#else + return 0; +#endif } static int mark_lightweight_cont_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Lightweight_Continuation *lw = (Scheme_Lightweight_Continuation *)p; gcMARK2(lw->saved_lwc, gc); @@ -137,11 +201,17 @@ static int mark_lightweight_cont_MARK(void *p, struct NewGC *gc) { gcMARK2(lw->runstack_slice, gc); gcMARK2(lw->cont_mark_stack_slice, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Lightweight_Continuation)); +# endif +#endif } static int mark_lightweight_cont_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Lightweight_Continuation *lw = (Scheme_Lightweight_Continuation *)p; gcFIXUP2(lw->saved_lwc, gc); @@ -149,8 +219,13 @@ static int mark_lightweight_cont_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(lw->runstack_slice, gc); gcFIXUP2(lw->cont_mark_stack_slice, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Lightweight_Continuation)); +# endif +#endif } #define mark_lightweight_cont_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_future.inc b/racket/src/racket/src/mzmark_future.inc index c09539050e..ca0ce920e0 100644 --- a/racket/src/racket/src/mzmark_future.inc +++ b/racket/src/racket/src/mzmark_future.inc @@ -3,11 +3,15 @@ #ifdef MZ_USE_FUTURES static int future_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(future_t)); +#else + return 0; +#endif } static int future_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED future_t *f = (future_t *)p; gcMARK2(f->orig_lambda, gc); gcMARK2(f->cust, gc); @@ -37,11 +41,17 @@ static int future_MARK(void *p, struct NewGC *gc) { gcMARK2(f->prev_in_fsema_queue, gc); gcMARK2(f->next_in_fsema_queue, gc); gcMARK2(f->touching, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(future_t)); +# endif +#endif } static int future_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED future_t *f = (future_t *)p; gcFIXUP2(f->orig_lambda, gc); gcFIXUP2(f->cust, gc); @@ -71,8 +81,13 @@ static int future_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(f->prev_in_fsema_queue, gc); gcFIXUP2(f->next_in_fsema_queue, gc); gcFIXUP2(f->touching, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(future_t)); +# endif +#endif } #define future_IS_ATOMIC 0 @@ -80,24 +95,39 @@ static int future_FIXUP(void *p, struct NewGC *gc) { static int fsemaphore_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(fsemaphore_t)); +#else + return 0; +#endif } static int fsemaphore_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED fsemaphore_t *s = (fsemaphore_t*)p; gcMARK2(s->queue_front, gc); gcMARK2(s->queue_end, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(fsemaphore_t)); +# endif +#endif } static int fsemaphore_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED fsemaphore_t *s = (fsemaphore_t*)p; gcFIXUP2(s->queue_front, gc); gcFIXUP2(s->queue_end, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(fsemaphore_t)); +# endif +#endif } #define fsemaphore_IS_ATOMIC 0 @@ -107,28 +137,43 @@ static int fsemaphore_FIXUP(void *p, struct NewGC *gc) { #else static int sequential_future_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(future_t)); +#else + return 0; +#endif } static int sequential_future_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED future_t *f = (future_t *)p; gcMARK2(f->orig_lambda, gc); gcMARK2(f->running_sema, gc); gcMARK2(f->retval, gc); gcMARK2(f->multiple_array, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(future_t)); +# endif +#endif } static int sequential_future_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED future_t *f = (future_t *)p; gcFIXUP2(f->orig_lambda, gc); gcFIXUP2(f->running_sema, gc); gcFIXUP2(f->retval, gc); gcFIXUP2(f->multiple_array, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(future_t)); +# endif +#endif } #define sequential_future_IS_ATOMIC 0 @@ -136,22 +181,37 @@ static int sequential_future_FIXUP(void *p, struct NewGC *gc) { static int sequential_fsemaphore_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(fsemaphore_t)); +#else + return 0; +#endif } static int sequential_fsemaphore_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED fsemaphore_t *s = (fsemaphore_t*)p; gcMARK2(s->sema, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(fsemaphore_t)); +# endif +#endif } static int sequential_fsemaphore_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED fsemaphore_t *s = (fsemaphore_t*)p; gcFIXUP2(s->sema, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(fsemaphore_t)); +# endif +#endif } #define sequential_fsemaphore_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_hash.inc b/racket/src/racket/src/mzmark_hash.inc index e28f995745..b54369148a 100644 --- a/racket/src/racket/src/mzmark_hash.inc +++ b/racket/src/racket/src/mzmark_hash.inc @@ -1,13 +1,17 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int hash_tree_val_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Hash_Tree *ht = (Scheme_Hash_Tree *)p; int popcount = hamt_popcount(ht->bitmap); - return gcBYTES_TO_WORDS(HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(ht), popcount)); +#else + return 0; +#endif } static int hash_tree_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Hash_Tree *ht = (Scheme_Hash_Tree *)p; int popcount = hamt_popcount(ht->bitmap); int i; @@ -15,11 +19,17 @@ static int hash_tree_val_MARK(void *p, struct NewGC *gc) { gcMARK2(ht->els[i], gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(ht), popcount)); +# endif +#endif } static int hash_tree_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Hash_Tree *ht = (Scheme_Hash_Tree *)p; int popcount = hamt_popcount(ht->bitmap); int i; @@ -27,8 +37,13 @@ static int hash_tree_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(ht->els[i], gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(HASH_TREE_RECORD_SIZE(SCHEME_HASHTR_KIND(ht), popcount)); +# endif +#endif } #define hash_tree_val_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_jit.inc b/racket/src/racket/src/mzmark_jit.inc index a284f524ae..a6cbabd86d 100644 --- a/racket/src/racket/src/mzmark_jit.inc +++ b/racket/src/racket/src/mzmark_jit.inc @@ -1,6 +1,7 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int native_closure_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Native_Closure *c = (Scheme_Native_Closure *)p; int closure_size = ((Scheme_Native_Closure_Data *)GC_resolve2(c->code, gc))->closure_size; @@ -8,12 +9,15 @@ static int native_closure_SIZE(void *p, struct NewGC *gc) { closure_size = -(closure_size + 1); } - return gcBYTES_TO_WORDS((sizeof(Scheme_Native_Closure) + (closure_size - mzFLEX_DELTA) * sizeof(Scheme_Object *))); +#else + return 0; +#endif } static int native_closure_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Native_Closure *c = (Scheme_Native_Closure *)p; int closure_size = ((Scheme_Native_Closure_Data *)GC_resolve2(c->code, gc))->closure_size; @@ -37,12 +41,18 @@ static int native_closure_MARK(void *p, struct NewGC *gc) { # undef CLOSURE_DATA_TYPE } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Native_Closure) + (closure_size - mzFLEX_DELTA) * sizeof(Scheme_Object *))); +# endif +#endif } static int native_closure_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Native_Closure *c = (Scheme_Native_Closure *)p; int closure_size = ((Scheme_Native_Closure_Data *)GC_resolve2(c->code, gc))->closure_size; @@ -61,9 +71,14 @@ static int native_closure_FIXUP(void *p, struct NewGC *gc) { } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Native_Closure) + (closure_size - mzFLEX_DELTA) * sizeof(Scheme_Object *))); +# endif +#endif } #define native_closure_IS_ATOMIC 0 @@ -71,11 +86,15 @@ static int native_closure_FIXUP(void *p, struct NewGC *gc) { static int mark_jit_state_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(mz_jit_state)); +#else + return 0; +#endif } static int mark_jit_state_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED mz_jit_state *j = (mz_jit_state *)p; gcMARK2(j->mappings, gc); gcMARK2(j->self_data, gc); @@ -84,11 +103,17 @@ static int mark_jit_state_MARK(void *p, struct NewGC *gc) { gcMARK2(j->retaining_data, gc); gcMARK2(j->patch_depth, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(mz_jit_state)); +# endif +#endif } static int mark_jit_state_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED mz_jit_state *j = (mz_jit_state *)p; gcFIXUP2(j->mappings, gc); gcFIXUP2(j->self_data, gc); @@ -97,8 +122,13 @@ static int mark_jit_state_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(j->retaining_data, gc); gcFIXUP2(j->patch_depth, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(mz_jit_state)); +# endif +#endif } #define mark_jit_state_IS_ATOMIC 0 @@ -106,11 +136,15 @@ static int mark_jit_state_FIXUP(void *p, struct NewGC *gc) { static int native_unclosed_proc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Native_Closure_Data)); +#else + return 0; +#endif } static int native_unclosed_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Native_Closure_Data *d = (Scheme_Native_Closure_Data *)p; int i; @@ -125,11 +159,17 @@ static int native_unclosed_proc_MARK(void *p, struct NewGC *gc) { } gcMARK2(d->tl_map, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Native_Closure_Data)); +# endif +#endif } static int native_unclosed_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Native_Closure_Data *d = (Scheme_Native_Closure_Data *)p; int i; @@ -144,8 +184,13 @@ static int native_unclosed_proc_FIXUP(void *p, struct NewGC *gc) { } gcFIXUP2(d->tl_map, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Native_Closure_Data)); +# endif +#endif } #define native_unclosed_proc_IS_ATOMIC 0 @@ -153,28 +198,43 @@ static int native_unclosed_proc_FIXUP(void *p, struct NewGC *gc) { static int native_unclosed_proc_plus_case_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Native_Closure_Data_Plus_Case)); +#else + return 0; +#endif } static int native_unclosed_proc_plus_case_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Native_Closure_Data_Plus_Case *d = (Scheme_Native_Closure_Data_Plus_Case *)p; native_unclosed_proc_MARK(p, gc); gcMARK2(d->case_lam, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Native_Closure_Data_Plus_Case)); +# endif +#endif } static int native_unclosed_proc_plus_case_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Native_Closure_Data_Plus_Case *d = (Scheme_Native_Closure_Data_Plus_Case *)p; native_unclosed_proc_FIXUP(p, gc); gcFIXUP2(d->case_lam, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Native_Closure_Data_Plus_Case)); +# endif +#endif } #define native_unclosed_proc_plus_case_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_letrec_check.inc b/racket/src/racket/src/mzmark_letrec_check.inc index aaa0035b59..4182a6c9ee 100644 --- a/racket/src/racket/src/mzmark_letrec_check.inc +++ b/racket/src/racket/src/mzmark_letrec_check.inc @@ -1,11 +1,15 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_letrec_check_frame_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Letrec_Check_Frame)); +#else + return 0; +#endif } static int mark_letrec_check_frame_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Letrec_Check_Frame *frame = (Letrec_Check_Frame *)p; gcMARK2(frame->def, gc); @@ -14,11 +18,17 @@ static int mark_letrec_check_frame_MARK(void *p, struct NewGC *gc) { gcMARK2(frame->head, gc); gcMARK2(frame->deferred_chain, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Letrec_Check_Frame)); +# endif +#endif } static int mark_letrec_check_frame_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Letrec_Check_Frame *frame = (Letrec_Check_Frame *)p; gcFIXUP2(frame->def, gc); @@ -27,8 +37,13 @@ static int mark_letrec_check_frame_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(frame->head, gc); gcFIXUP2(frame->deferred_chain, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Letrec_Check_Frame)); +# endif +#endif } #define mark_letrec_check_frame_IS_ATOMIC 0 @@ -36,30 +51,45 @@ static int mark_letrec_check_frame_FIXUP(void *p, struct NewGC *gc) { static int mark_scheme_deferred_expr_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Deferred_Expr)); +#else + return 0; +#endif } static int mark_scheme_deferred_expr_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Deferred_Expr *clos = (Scheme_Deferred_Expr *)p; gcMARK2(clos->expr, gc); gcMARK2(clos->frame, gc); gcMARK2(clos->chain_next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Deferred_Expr)); +# endif +#endif } static int mark_scheme_deferred_expr_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Deferred_Expr *clos = (Scheme_Deferred_Expr *)p; gcFIXUP2(clos->expr, gc); gcFIXUP2(clos->frame, gc); gcFIXUP2(clos->chain_next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Deferred_Expr)); +# endif +#endif } #define mark_scheme_deferred_expr_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_network.inc b/racket/src/racket/src/mzmark_network.inc index 389b9bfd79..493fb9fd6e 100644 --- a/racket/src/racket/src/mzmark_network.inc +++ b/racket/src/racket/src/mzmark_network.inc @@ -2,13 +2,17 @@ #ifdef USE_TCP static int mark_listener_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS listener_t *l = (listener_t *)p; - return gcBYTES_TO_WORDS(sizeof(listener_t) + ((l->count - mzFLEX_DELTA) * sizeof(tcp_t))); +#else + return 0; +#endif } static int mark_listener_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED listener_t *l = (listener_t *)p; @@ -17,11 +21,17 @@ static int mark_listener_MARK(void *p, struct NewGC *gc) { gcMARK2(l->pfd, gc); # endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(listener_t) + ((l->count - mzFLEX_DELTA) * sizeof(tcp_t))); +# endif +#endif } static int mark_listener_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED listener_t *l = (listener_t *)p; @@ -30,8 +40,13 @@ static int mark_listener_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(l->pfd, gc); # endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(listener_t) + ((l->count - mzFLEX_DELTA) * sizeof(tcp_t))); +# endif +#endif } #define mark_listener_IS_ATOMIC 0 @@ -39,28 +54,43 @@ static int mark_listener_FIXUP(void *p, struct NewGC *gc) { static int mark_tcp_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Tcp)); +#else + return 0; +#endif } static int mark_tcp_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Tcp *tcp = (Scheme_Tcp *)p; gcMARK2(tcp->b.buffer, gc); gcMARK2(tcp->b.out_buffer, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Tcp)); +# endif +#endif } static int mark_tcp_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Tcp *tcp = (Scheme_Tcp *)p; gcFIXUP2(tcp->b.buffer, gc); gcFIXUP2(tcp->b.out_buffer, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Tcp)); +# endif +#endif } #define mark_tcp_IS_ATOMIC 0 @@ -69,28 +99,43 @@ static int mark_tcp_FIXUP(void *p, struct NewGC *gc) { # ifdef UDP_IS_SUPPORTED static int mark_udp_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_UDP)); +#else + return 0; +#endif } static int mark_udp_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_UDP *udp = (Scheme_UDP *)p; gcMARK2(udp->previous_from_addr, gc); gcMARK2(udp->mref, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_UDP)); +# endif +#endif } static int mark_udp_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_UDP *udp = (Scheme_UDP *)p; gcFIXUP2(udp->previous_from_addr, gc); gcFIXUP2(udp->mref, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_UDP)); +# endif +#endif } #define mark_udp_IS_ATOMIC 0 @@ -98,11 +143,15 @@ static int mark_udp_FIXUP(void *p, struct NewGC *gc) { static int mark_udp_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_UDP_Evt)); +#else + return 0; +#endif } static int mark_udp_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_UDP_Evt *uw = (Scheme_UDP_Evt *)p; gcMARK2(uw->udp, gc); @@ -110,11 +159,17 @@ static int mark_udp_evt_MARK(void *p, struct NewGC *gc) { gcMARK2(uw->dest_addrs, gc); gcMARK2(uw->dest_addr_lens, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_UDP_Evt)); +# endif +#endif } static int mark_udp_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_UDP_Evt *uw = (Scheme_UDP_Evt *)p; gcFIXUP2(uw->udp, gc); @@ -122,8 +177,13 @@ static int mark_udp_evt_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(uw->dest_addrs, gc); gcFIXUP2(uw->dest_addr_lens, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_UDP_Evt)); +# endif +#endif } #define mark_udp_evt_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_optimize.inc b/racket/src/racket/src/mzmark_optimize.inc index 20ecbdfd53..81e923f94b 100644 --- a/racket/src/racket/src/mzmark_optimize.inc +++ b/racket/src/racket/src/mzmark_optimize.inc @@ -1,11 +1,15 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_optimize_info_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Optimize_Info)); +#else + return 0; +#endif } static int mark_optimize_info_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Optimize_Info *i = (Optimize_Info *)p; gcMARK2(i->stat_dists, gc); @@ -21,11 +25,17 @@ static int mark_optimize_info_MARK(void *p, struct NewGC *gc) { gcMARK2(i->logger, gc); gcMARK2(i->types, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Optimize_Info)); +# endif +#endif } static int mark_optimize_info_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Optimize_Info *i = (Optimize_Info *)p; gcFIXUP2(i->stat_dists, gc); @@ -41,8 +51,13 @@ static int mark_optimize_info_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(i->logger, gc); gcFIXUP2(i->types, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Optimize_Info)); +# endif +#endif } #define mark_optimize_info_IS_ATOMIC 0 @@ -50,26 +65,41 @@ static int mark_optimize_info_FIXUP(void *p, struct NewGC *gc) { static int mark_once_used_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Once_Used)); +#else + return 0; +#endif } static int mark_once_used_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Once_Used *o = (Scheme_Once_Used *)p; gcMARK2(o->expr, gc); gcMARK2(o->info, gc); gcMARK2(o->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Once_Used)); +# endif +#endif } static int mark_once_used_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Once_Used *o = (Scheme_Once_Used *)p; gcFIXUP2(o->expr, gc); gcFIXUP2(o->info, gc); gcFIXUP2(o->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Once_Used)); +# endif +#endif } #define mark_once_used_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_place.inc b/racket/src/racket/src/mzmark_place.inc index e76c463670..4be6e2a27e 100644 --- a/racket/src/racket/src/mzmark_place.inc +++ b/racket/src/racket/src/mzmark_place.inc @@ -1,24 +1,39 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int place_bi_channel_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Place_Bi_Channel)); +#else + return 0; +#endif } static int place_bi_channel_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Place_Bi_Channel *pbc = (Scheme_Place_Bi_Channel *)p; gcMARK2(pbc->link, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place_Bi_Channel)); +# endif +#endif } static int place_bi_channel_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Place_Bi_Channel *pbc = (Scheme_Place_Bi_Channel *)p; gcFIXUP2(pbc->link, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place_Bi_Channel)); +# endif +#endif } #define place_bi_channel_val_IS_ATOMIC 0 @@ -26,18 +41,33 @@ static int place_bi_channel_val_FIXUP(void *p, struct NewGC *gc) { static int place_object_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Place_Object)); +#else + return 0; +#endif } static int place_object_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place_Object)); +# endif +#endif } static int place_object_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place_Object)); +# endif +#endif } #define place_object_val_IS_ATOMIC 1 @@ -45,11 +75,15 @@ static int place_object_val_FIXUP(void *p, struct NewGC *gc) { static int place_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Place)); +#else + return 0; +#endif } static int place_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Place *pr = (Scheme_Place *)p; gcMARK2(pr->channel, gc); gcMARK2(pr->mref, gc); @@ -58,11 +92,17 @@ static int place_val_MARK(void *p, struct NewGC *gc) { gcMARK2(pr->prev, gc); gcMARK2(pr->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place)); +# endif +#endif } static int place_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Place *pr = (Scheme_Place *)p; gcFIXUP2(pr->channel, gc); gcFIXUP2(pr->mref, gc); @@ -71,8 +111,13 @@ static int place_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(pr->prev, gc); gcFIXUP2(pr->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place)); +# endif +#endif } #define place_val_IS_ATOMIC 0 @@ -80,11 +125,15 @@ static int place_val_FIXUP(void *p, struct NewGC *gc) { static int place_async_channel_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Place_Async_Channel)); +#else + return 0; +#endif } static int place_async_channel_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p; Scheme_Object *pr; int i, j, sz; @@ -106,11 +155,17 @@ static int place_async_channel_val_MARK(void *p, struct NewGC *gc) { j = ((j + 1) % sz); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place_Async_Channel)); +# endif +#endif } static int place_async_channel_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Place_Async_Channel *pac = (Scheme_Place_Async_Channel *)p; Scheme_Object *pr; int i, j, sz; @@ -132,8 +187,13 @@ static int place_async_channel_val_FIXUP(void *p, struct NewGC *gc) { j = ((j + 1) % sz); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Place_Async_Channel)); +# endif +#endif } #define place_async_channel_val_IS_ATOMIC 0 @@ -141,24 +201,39 @@ static int place_async_channel_val_FIXUP(void *p, struct NewGC *gc) { static int serialized_file_fd_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Serialized_File_FD)); +#else + return 0; +#endif } static int serialized_file_fd_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Serialized_File_FD *ffd = (Scheme_Serialized_File_FD *) p; gcMARK2(ffd->name, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Serialized_File_FD)); +# endif +#endif } static int serialized_file_fd_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Serialized_File_FD *ffd = (Scheme_Serialized_File_FD *) p; gcFIXUP2(ffd->name, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Serialized_File_FD)); +# endif +#endif } #define serialized_file_fd_val_IS_ATOMIC 0 @@ -166,24 +241,39 @@ static int serialized_file_fd_val_FIXUP(void *p, struct NewGC *gc) { static int serialized_socket_fd_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Serialized_Socket_FD)); +#else + return 0; +#endif } static int serialized_socket_fd_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Serialized_Socket_FD *sfd = (Scheme_Serialized_Socket_FD *) p; gcMARK2(sfd->name, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Serialized_Socket_FD)); +# endif +#endif } static int serialized_socket_fd_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Serialized_Socket_FD *sfd = (Scheme_Serialized_Socket_FD *) p; gcFIXUP2(sfd->name, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Serialized_Socket_FD)); +# endif +#endif } #define serialized_socket_fd_val_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_port.inc b/racket/src/racket/src/mzmark_port.inc index 207b0c4f7f..845feea427 100644 --- a/racket/src/racket/src/mzmark_port.inc +++ b/racket/src/racket/src/mzmark_port.inc @@ -1,26 +1,41 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_input_file_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Input_File)); +#else + return 0; +#endif } static int mark_input_file_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Input_File *i = (Scheme_Input_File *)p; gcMARK2(i->f, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Input_File)); +# endif +#endif } static int mark_input_file_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Input_File *i = (Scheme_Input_File *)p; gcFIXUP2(i->f, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Input_File)); +# endif +#endif } #define mark_input_file_IS_ATOMIC 0 @@ -28,26 +43,41 @@ static int mark_input_file_FIXUP(void *p, struct NewGC *gc) { static int mark_output_file_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Output_File)); +#else + return 0; +#endif } static int mark_output_file_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Output_File *o = (Scheme_Output_File *)p; gcMARK2(o->f, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Output_File)); +# endif +#endif } static int mark_output_file_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Output_File *o = (Scheme_Output_File *)p; gcFIXUP2(o->f, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Output_File)); +# endif +#endif } #define mark_output_file_IS_ATOMIC 0 @@ -56,30 +86,45 @@ static int mark_output_file_FIXUP(void *p, struct NewGC *gc) { #ifdef MZ_FDS static int mark_input_fd_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_FD)); +#else + return 0; +#endif } static int mark_input_fd_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_FD *fd = (Scheme_FD *)p; gcMARK2(fd->buffer, gc); gcMARK2(fd->refcount, gc); gcMARK2(fd->flush_handle, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_FD)); +# endif +#endif } static int mark_input_fd_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_FD *fd = (Scheme_FD *)p; gcFIXUP2(fd->buffer, gc); gcFIXUP2(fd->refcount, gc); gcFIXUP2(fd->flush_handle, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_FD)); +# endif +#endif } #define mark_input_fd_IS_ATOMIC 0 @@ -89,26 +134,41 @@ static int mark_input_fd_FIXUP(void *p, struct NewGC *gc) { #if defined(UNIX_PROCESSES) && !(defined(MZ_USE_PLACES) && defined(MZ_PRECISE_GC)) static int mark_system_child_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(System_Child)); +#else + return 0; +#endif } static int mark_system_child_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED System_Child *sc = (System_Child *)p; gcMARK2(sc->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(System_Child)); +# endif +#endif } static int mark_system_child_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED System_Child *sc = (System_Child *)p; gcFIXUP2(sc->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(System_Child)); +# endif +#endif } #define mark_system_child_IS_ATOMIC 0 @@ -118,28 +178,43 @@ static int mark_system_child_FIXUP(void *p, struct NewGC *gc) { #ifdef USE_OSKIT_CONSOLE static int mark_oskit_console_input_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(osk_console_input)); +#else + return 0; +#endif } static int mark_oskit_console_input_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED osk_console_input *c = (osk_console_input *)p; gcMARK2(c->buffer, gc); gcMARK2(c->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(osk_console_input)); +# endif +#endif } static int mark_oskit_console_input_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED osk_console_input *c = (osk_console_input *)p; gcFIXUP2(c->buffer, gc); gcFIXUP2(c->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(osk_console_input)); +# endif +#endif } #define mark_oskit_console_input_IS_ATOMIC 0 @@ -148,28 +223,43 @@ static int mark_oskit_console_input_FIXUP(void *p, struct NewGC *gc) { #endif static int mark_subprocess_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Subprocess)); +#else + return 0; +#endif } static int mark_subprocess_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED #ifndef WINDOWS_PROCESSES Scheme_Subprocess *sp = (Scheme_Subprocess *)p; gcMARK2(sp->handle, gc); gcMARK2(sp->mref, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Subprocess)); +# endif +#endif } static int mark_subprocess_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED #ifndef WINDOWS_PROCESSES Scheme_Subprocess *sp = (Scheme_Subprocess *)p; gcFIXUP2(sp->handle, gc); gcFIXUP2(sp->mref, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Subprocess)); +# endif +#endif } #define mark_subprocess_IS_ATOMIC 0 @@ -177,26 +267,41 @@ static int mark_subprocess_FIXUP(void *p, struct NewGC *gc) { static int mark_read_write_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Read_Write_Evt)); +#else + return 0; +#endif } static int mark_read_write_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Read_Write_Evt *rww = (Scheme_Read_Write_Evt *)p; gcMARK2(rww->port, gc); gcMARK2(rww->v, gc); gcMARK2(rww->str, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Read_Write_Evt)); +# endif +#endif } static int mark_read_write_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Read_Write_Evt *rww = (Scheme_Read_Write_Evt *)p; gcFIXUP2(rww->port, gc); gcFIXUP2(rww->v, gc); gcFIXUP2(rww->str, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Read_Write_Evt)); +# endif +#endif } #define mark_read_write_evt_IS_ATOMIC 0 @@ -204,24 +309,39 @@ static int mark_read_write_evt_FIXUP(void *p, struct NewGC *gc) { static int mark_filesystem_change_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +#else + return 0; +#endif } static int mark_filesystem_change_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)p; gcMARK2(fc->sema, gc); gcMARK2(fc->mref, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +# endif +#endif } static int mark_filesystem_change_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Filesystem_Change_Evt *fc = (Scheme_Filesystem_Change_Evt *)p; gcFIXUP2(fc->sema, gc); gcFIXUP2(fc->mref, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Filesystem_Change_Evt)); +# endif +#endif } #define mark_filesystem_change_evt_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_portfun.inc b/racket/src/racket/src/mzmark_portfun.inc index a6b415ea86..df14dafc34 100644 --- a/racket/src/racket/src/mzmark_portfun.inc +++ b/racket/src/racket/src/mzmark_portfun.inc @@ -1,11 +1,15 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_load_handler_data_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(LoadHandlerData)); +#else + return 0; +#endif } static int mark_load_handler_data_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED LoadHandlerData *d = (LoadHandlerData *)p; gcMARK2(d->config, gc); @@ -14,11 +18,17 @@ static int mark_load_handler_data_MARK(void *p, struct NewGC *gc) { gcMARK2(d->stxsrc, gc); gcMARK2(d->expected_module, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(LoadHandlerData)); +# endif +#endif } static int mark_load_handler_data_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED LoadHandlerData *d = (LoadHandlerData *)p; gcFIXUP2(d->config, gc); @@ -27,8 +37,13 @@ static int mark_load_handler_data_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(d->stxsrc, gc); gcFIXUP2(d->expected_module, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(LoadHandlerData)); +# endif +#endif } #define mark_load_handler_data_IS_ATOMIC 0 @@ -36,26 +51,41 @@ static int mark_load_handler_data_FIXUP(void *p, struct NewGC *gc) { static int mark_indexed_string_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Indexed_String)); +#else + return 0; +#endif } static int mark_indexed_string_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Indexed_String *is = (Scheme_Indexed_String *)p; gcMARK2(is->string, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Indexed_String)); +# endif +#endif } static int mark_indexed_string_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Indexed_String *is = (Scheme_Indexed_String *)p; gcFIXUP2(is->string, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Indexed_String)); +# endif +#endif } #define mark_indexed_string_IS_ATOMIC 0 @@ -63,11 +93,15 @@ static int mark_indexed_string_FIXUP(void *p, struct NewGC *gc) { static int mark_user_input_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(User_Input_Port)); +#else + return 0; +#endif } static int mark_user_input_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED User_Input_Port *uip = (User_Input_Port *)p; gcMARK2(uip->read_proc, gc); @@ -81,11 +115,17 @@ static int mark_user_input_MARK(void *p, struct NewGC *gc) { gcMARK2(uip->reuse_str, gc); gcMARK2(uip->peeked, gc); gcMARK2(uip->prefix_pipe, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(User_Input_Port)); +# endif +#endif } static int mark_user_input_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED User_Input_Port *uip = (User_Input_Port *)p; gcFIXUP2(uip->read_proc, gc); @@ -99,8 +139,13 @@ static int mark_user_input_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(uip->reuse_str, gc); gcFIXUP2(uip->peeked, gc); gcFIXUP2(uip->prefix_pipe, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(User_Input_Port)); +# endif +#endif } #define mark_user_input_IS_ATOMIC 0 @@ -108,11 +153,15 @@ static int mark_user_input_FIXUP(void *p, struct NewGC *gc) { static int mark_user_output_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(User_Output_Port)); +#else + return 0; +#endif } static int mark_user_output_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED User_Output_Port *uop = (User_Output_Port *)p; gcMARK2(uop->evt, gc); @@ -125,11 +174,17 @@ static int mark_user_output_MARK(void *p, struct NewGC *gc) { gcMARK2(uop->buffer_mode_proc, gc); gcMARK2(uop->close_proc, gc); gcMARK2(uop->buffer_pipe, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(User_Output_Port)); +# endif +#endif } static int mark_user_output_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED User_Output_Port *uop = (User_Output_Port *)p; gcFIXUP2(uop->evt, gc); @@ -142,8 +197,13 @@ static int mark_user_output_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(uop->buffer_mode_proc, gc); gcFIXUP2(uop->close_proc, gc); gcFIXUP2(uop->buffer_pipe, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(User_Output_Port)); +# endif +#endif } #define mark_user_output_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_print.inc b/racket/src/racket/src/mzmark_print.inc index 027545ae6b..f96d4d27bd 100644 --- a/racket/src/racket/src/mzmark_print.inc +++ b/racket/src/racket/src/mzmark_print.inc @@ -1,30 +1,45 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_print_params_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(PrintParams)); +#else + return 0; +#endif } static int mark_print_params_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED PrintParams *pp = (PrintParams *)p; gcMARK2(pp->inspector, gc); gcMARK2(pp->print_port, gc); gcMARK2(pp->print_buffer, gc); gcMARK2(pp->depth_delta, gc); gcMARK2(pp->uq_ht, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(PrintParams)); +# endif +#endif } static int mark_print_params_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED PrintParams *pp = (PrintParams *)p; gcFIXUP2(pp->inspector, gc); gcFIXUP2(pp->print_port, gc); gcFIXUP2(pp->print_buffer, gc); gcFIXUP2(pp->depth_delta, gc); gcFIXUP2(pp->uq_ht, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(PrintParams)); +# endif +#endif } #define mark_print_params_IS_ATOMIC 0 @@ -32,11 +47,15 @@ static int mark_print_params_FIXUP(void *p, struct NewGC *gc) { static int mark_marshal_tables_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Marshal_Tables)); +#else + return 0; +#endif } static int mark_marshal_tables_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Marshal_Tables *mt = (Scheme_Marshal_Tables *)p; gcMARK2(mt->symtab, gc); gcMARK2(mt->st_refs, gc); @@ -55,11 +74,17 @@ static int mark_marshal_tables_MARK(void *p, struct NewGC *gc) { gcMARK2(mt->shared_offsets, gc); gcMARK2(mt->path_cache, gc); gcMARK2(mt->sorted_keys, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Marshal_Tables)); +# endif +#endif } static int mark_marshal_tables_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Marshal_Tables *mt = (Scheme_Marshal_Tables *)p; gcFIXUP2(mt->symtab, gc); gcFIXUP2(mt->st_refs, gc); @@ -78,8 +103,13 @@ static int mark_marshal_tables_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(mt->shared_offsets, gc); gcFIXUP2(mt->path_cache, gc); gcFIXUP2(mt->sorted_keys, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Marshal_Tables)); +# endif +#endif } #define mark_marshal_tables_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_read.inc b/racket/src/racket/src/mzmark_read.inc index 174103aba0..64cdf82a79 100644 --- a/racket/src/racket/src/mzmark_read.inc +++ b/racket/src/racket/src/mzmark_read.inc @@ -1,18 +1,33 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_indent_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Indent)); +#else + return 0; +#endif } static int mark_indent_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Indent)); +# endif +#endif } static int mark_indent_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Indent)); +# endif +#endif } #define mark_indent_IS_ATOMIC 1 @@ -20,11 +35,15 @@ static int mark_indent_FIXUP(void *p, struct NewGC *gc) { static int mark_cport_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(CPort)); +#else + return 0; +#endif } static int mark_cport_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED CPort *cp = (CPort *)p; gcMARK2(cp->start, gc); gcMARK2(cp->orig_port, gc); @@ -37,11 +56,17 @@ static int mark_cport_MARK(void *p, struct NewGC *gc) { gcMARK2(cp->shared_offsets, gc); gcMARK2(cp->delay_info, gc); gcMARK2(cp->symtab_refs, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(CPort)); +# endif +#endif } static int mark_cport_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED CPort *cp = (CPort *)p; gcFIXUP2(cp->start, gc); gcFIXUP2(cp->orig_port, gc); @@ -54,8 +79,13 @@ static int mark_cport_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(cp->shared_offsets, gc); gcFIXUP2(cp->delay_info, gc); gcFIXUP2(cp->symtab_refs, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(CPort)); +# endif +#endif } #define mark_cport_IS_ATOMIC 0 @@ -63,28 +93,43 @@ static int mark_cport_FIXUP(void *p, struct NewGC *gc) { static int mark_readtable_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Readtable)); +#else + return 0; +#endif } static int mark_readtable_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Readtable *t = (Readtable *)p; gcMARK2(t->mapping, gc); gcMARK2(t->fast_mapping, gc); gcMARK2(t->symbol_parser, gc); gcMARK2(t->names, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Readtable)); +# endif +#endif } static int mark_readtable_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Readtable *t = (Readtable *)p; gcFIXUP2(t->mapping, gc); gcFIXUP2(t->fast_mapping, gc); gcFIXUP2(t->symbol_parser, gc); gcFIXUP2(t->names, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Readtable)); +# endif +#endif } #define mark_readtable_IS_ATOMIC 0 @@ -92,30 +137,45 @@ static int mark_readtable_FIXUP(void *p, struct NewGC *gc) { static int mark_read_params_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(ReadParams)); +#else + return 0; +#endif } static int mark_read_params_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED ReadParams *rp = (ReadParams *)p; gcMARK2(rp->table, gc); gcMARK2(rp->magic_sym, gc); gcMARK2(rp->magic_val, gc); gcMARK2(rp->delay_load_info, gc); gcMARK2(rp->read_relative_path, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(ReadParams)); +# endif +#endif } static int mark_read_params_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED ReadParams *rp = (ReadParams *)p; gcFIXUP2(rp->table, gc); gcFIXUP2(rp->magic_sym, gc); gcFIXUP2(rp->magic_val, gc); gcFIXUP2(rp->delay_load_info, gc); gcFIXUP2(rp->read_relative_path, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(ReadParams)); +# endif +#endif } #define mark_read_params_IS_ATOMIC 0 @@ -123,11 +183,15 @@ static int mark_read_params_FIXUP(void *p, struct NewGC *gc) { static int mark_delay_load_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Load_Delay)); +#else + return 0; +#endif } static int mark_delay_load_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Load_Delay *ld = (Scheme_Load_Delay *)p; gcMARK2(ld->path, gc); gcMARK2(ld->symtab, gc); @@ -137,11 +201,17 @@ static int mark_delay_load_MARK(void *p, struct NewGC *gc) { gcMARK2(ld->current_rp, gc); gcMARK2(ld->cached, gc); gcMARK2(ld->cached_port, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Load_Delay)); +# endif +#endif } static int mark_delay_load_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Load_Delay *ld = (Scheme_Load_Delay *)p; gcFIXUP2(ld->path, gc); gcFIXUP2(ld->symtab, gc); @@ -151,8 +221,13 @@ static int mark_delay_load_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(ld->current_rp, gc); gcFIXUP2(ld->cached, gc); gcFIXUP2(ld->cached_port, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Load_Delay)); +# endif +#endif } #define mark_delay_load_IS_ATOMIC 0 @@ -160,28 +235,43 @@ static int mark_delay_load_FIXUP(void *p, struct NewGC *gc) { static int mark_unmarshal_tables_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Unmarshal_Tables)); +#else + return 0; +#endif } static int mark_unmarshal_tables_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Unmarshal_Tables *ut = (Scheme_Unmarshal_Tables *)p; gcMARK2(ut->rns, gc); gcMARK2(ut->multi_scope_pairs, gc); gcMARK2(ut->rp, gc); gcMARK2(ut->decoded, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Unmarshal_Tables)); +# endif +#endif } static int mark_unmarshal_tables_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Unmarshal_Tables *ut = (Scheme_Unmarshal_Tables *)p; gcFIXUP2(ut->rns, gc); gcFIXUP2(ut->multi_scope_pairs, gc); gcFIXUP2(ut->rp, gc); gcFIXUP2(ut->decoded, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Unmarshal_Tables)); +# endif +#endif } #define mark_unmarshal_tables_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_regexp.inc b/racket/src/racket/src/mzmark_regexp.inc index c718864ee6..52215cc9f2 100644 --- a/racket/src/racket/src/mzmark_regexp.inc +++ b/racket/src/racket/src/mzmark_regexp.inc @@ -1,25 +1,40 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_regexp_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS regexp *r = (regexp *)p; - return gcBYTES_TO_WORDS((sizeof(regexp) + r->regsize)); +#else + return 0; +#endif } static int mark_regexp_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED regexp *r = (regexp *)p; gcMARK2(r->source, gc); gcMARK2(r->regstart, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(regexp) + r->regsize)); +# endif +#endif } static int mark_regexp_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED regexp *r = (regexp *)p; gcFIXUP2(r->source, gc); gcFIXUP2(r->regstart, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(regexp) + r->regsize)); +# endif +#endif } #define mark_regexp_IS_ATOMIC 0 @@ -27,11 +42,15 @@ static int mark_regexp_FIXUP(void *p, struct NewGC *gc) { static int mark_regwork_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Regwork)); +#else + return 0; +#endif } static int mark_regwork_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Regwork *r = (Regwork *)p; gcMARK2(r->str, gc); gcMARK2(r->instr, gc); @@ -45,11 +64,17 @@ static int mark_regwork_MARK(void *p, struct NewGC *gc) { gcMARK2(r->prefix, gc); gcMARK2(r->lazy_string, gc); gcMARK2(r->rewind_stack, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Regwork)); +# endif +#endif } static int mark_regwork_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Regwork *r = (Regwork *)p; gcFIXUP2(r->str, gc); gcFIXUP2(r->instr, gc); @@ -63,8 +88,13 @@ static int mark_regwork_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(r->prefix, gc); gcFIXUP2(r->lazy_string, gc); gcFIXUP2(r->rewind_stack, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Regwork)); +# endif +#endif } #define mark_regwork_IS_ATOMIC 0 @@ -72,24 +102,39 @@ static int mark_regwork_FIXUP(void *p, struct NewGC *gc) { static int mark_lazy_string_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(rx_lazy_str_t)); +#else + return 0; +#endif } static int mark_lazy_string_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED rx_lazy_str_t *ls = (rx_lazy_str_t *)p; gcMARK2(ls->s, gc); gcMARK2(ls->chars, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(rx_lazy_str_t)); +# endif +#endif } static int mark_lazy_string_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED rx_lazy_str_t *ls = (rx_lazy_str_t *)p; gcFIXUP2(ls->s, gc); gcFIXUP2(ls->chars, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(rx_lazy_str_t)); +# endif +#endif } #define mark_lazy_string_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_resolve.inc b/racket/src/racket/src/mzmark_resolve.inc index d9c7b662bd..0b99119966 100644 --- a/racket/src/racket/src/mzmark_resolve.inc +++ b/racket/src/racket/src/mzmark_resolve.inc @@ -1,11 +1,15 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_resolve_info_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Resolve_Info)); +#else + return 0; +#endif } static int mark_resolve_info_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Resolve_Info *i = (Resolve_Info *)p; gcMARK2(i->prefix, gc); @@ -19,11 +23,17 @@ static int mark_resolve_info_MARK(void *p, struct NewGC *gc) { gcMARK2(i->lifted, gc); gcMARK2(i->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Resolve_Info)); +# endif +#endif } static int mark_resolve_info_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Resolve_Info *i = (Resolve_Info *)p; gcFIXUP2(i->prefix, gc); @@ -37,8 +47,13 @@ static int mark_resolve_info_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(i->lifted, gc); gcFIXUP2(i->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Resolve_Info)); +# endif +#endif } #define mark_resolve_info_IS_ATOMIC 0 @@ -46,11 +61,15 @@ static int mark_resolve_info_FIXUP(void *p, struct NewGC *gc) { static int mark_unresolve_info_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Unresolve_Info)); +#else + return 0; +#endif } static int mark_unresolve_info_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Unresolve_Info *i = (Unresolve_Info *)p; gcMARK2(i->flags, gc); @@ -65,11 +84,17 @@ static int mark_unresolve_info_MARK(void *p, struct NewGC *gc) { gcMARK2(i->ref_args, gc); gcMARK2(i->ref_lifts, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Unresolve_Info)); +# endif +#endif } static int mark_unresolve_info_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Unresolve_Info *i = (Unresolve_Info *)p; gcFIXUP2(i->flags, gc); @@ -84,8 +109,13 @@ static int mark_unresolve_info_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(i->ref_args, gc); gcFIXUP2(i->ref_lifts, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Unresolve_Info)); +# endif +#endif } #define mark_unresolve_info_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_salloc.inc b/racket/src/racket/src/mzmark_salloc.inc index b3d309e026..2491c1ecb7 100644 --- a/racket/src/racket/src/mzmark_salloc.inc +++ b/racket/src/racket/src/mzmark_salloc.inc @@ -1,30 +1,45 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_finalization_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Finalization)); +#else + return 0; +#endif } static int mark_finalization_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Finalization *f = (Finalization *)p; gcMARK2(f->data, gc); gcMARK2(f->next, gc); gcMARK2(f->prev, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Finalization)); +# endif +#endif } static int mark_finalization_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Finalization *f = (Finalization *)p; gcFIXUP2(f->data, gc); gcFIXUP2(f->next, gc); gcFIXUP2(f->prev, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Finalization)); +# endif +#endif } #define mark_finalization_IS_ATOMIC 0 @@ -32,11 +47,15 @@ static int mark_finalization_FIXUP(void *p, struct NewGC *gc) { static int mark_finalizations_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Finalizations)); +#else + return 0; +#endif } static int mark_finalizations_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Finalizations *f = (Finalizations *)p; gcMARK2(f->scheme_first, gc); @@ -45,11 +64,17 @@ static int mark_finalizations_MARK(void *p, struct NewGC *gc) { gcMARK2(f->prim_last, gc); gcMARK2(f->ext_data, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Finalizations)); +# endif +#endif } static int mark_finalizations_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Finalizations *f = (Finalizations *)p; gcFIXUP2(f->scheme_first, gc); @@ -58,8 +83,13 @@ static int mark_finalizations_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(f->prim_last, gc); gcFIXUP2(f->ext_data, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Finalizations)); +# endif +#endif } #define mark_finalizations_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_sema.inc b/racket/src/racket/src/mzmark_sema.inc index b06bd137a4..8316e203df 100644 --- a/racket/src/racket/src/mzmark_sema.inc +++ b/racket/src/racket/src/mzmark_sema.inc @@ -1,11 +1,15 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_channel_syncer_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Channel_Syncer)); +#else + return 0; +#endif } static int mark_channel_syncer_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Channel_Syncer *w = (Scheme_Channel_Syncer *)p; gcMARK2(w->p, gc); @@ -14,11 +18,17 @@ static int mark_channel_syncer_MARK(void *p, struct NewGC *gc) { gcMARK2(w->syncing, gc); gcMARK2(w->obj, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Channel_Syncer)); +# endif +#endif } static int mark_channel_syncer_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Channel_Syncer *w = (Scheme_Channel_Syncer *)p; gcFIXUP2(w->p, gc); @@ -27,8 +37,13 @@ static int mark_channel_syncer_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(w->syncing, gc); gcFIXUP2(w->obj, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Channel_Syncer)); +# endif +#endif } #define mark_channel_syncer_IS_ATOMIC 0 @@ -36,18 +51,33 @@ static int mark_channel_syncer_FIXUP(void *p, struct NewGC *gc) { static int mark_alarm_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Alarm)); +#else + return 0; +#endif } static int mark_alarm_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Alarm)); +# endif +#endif } static int mark_alarm_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Alarm)); +# endif +#endif } #define mark_alarm_IS_ATOMIC 1 diff --git a/racket/src/racket/src/mzmark_sfs.inc b/racket/src/racket/src/mzmark_sfs.inc index 5db7e64664..dc67823805 100644 --- a/racket/src/racket/src/mzmark_sfs.inc +++ b/racket/src/racket/src/mzmark_sfs.inc @@ -1,30 +1,45 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_sfs_info_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(SFS_Info)); +#else + return 0; +#endif } static int mark_sfs_info_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED SFS_Info *i = (SFS_Info *)p; gcMARK2(i->max_used, gc); gcMARK2(i->max_calls, gc); gcMARK2(i->saved, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(SFS_Info)); +# endif +#endif } static int mark_sfs_info_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED SFS_Info *i = (SFS_Info *)p; gcFIXUP2(i->max_used, gc); gcFIXUP2(i->max_calls, gc); gcFIXUP2(i->saved, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(SFS_Info)); +# endif +#endif } #define mark_sfs_info_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_string.inc b/racket/src/racket/src/mzmark_string.inc index 74b8c4d23e..a4191f0d41 100644 --- a/racket/src/racket/src/mzmark_string.inc +++ b/racket/src/racket/src/mzmark_string.inc @@ -1,22 +1,37 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_string_convert_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Converter)); +#else + return 0; +#endif } static int mark_string_convert_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Converter *c = (Scheme_Converter *)p; gcMARK2(c->mref, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Converter)); +# endif +#endif } static int mark_string_convert_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Converter *c = (Scheme_Converter *)p; gcFIXUP2(c->mref, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Converter)); +# endif +#endif } #define mark_string_convert_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_struct.inc b/racket/src/racket/src/mzmark_struct.inc index a50e74d1c6..87bb81ee64 100644 --- a/racket/src/racket/src/mzmark_struct.inc +++ b/racket/src/racket/src/mzmark_struct.inc @@ -2,15 +2,19 @@ #ifdef MZ_USE_PLACES static int mark_serialized_struct_val_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Serialized_Structure *s = (Scheme_Serialized_Structure *)p; int num_slots = s->num_slots; - return gcBYTES_TO_WORDS((sizeof(Scheme_Serialized_Structure) + ((num_slots - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +#else + return 0; +#endif } static int mark_serialized_struct_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Serialized_Structure *s = (Scheme_Serialized_Structure *)p; int num_slots = s->num_slots; @@ -21,12 +25,18 @@ static int mark_serialized_struct_val_MARK(void *p, struct NewGC *gc) { for(i = num_slots; i--; ) gcMARK2(s->slots[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Serialized_Structure) + ((num_slots - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } static int mark_serialized_struct_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Serialized_Structure *s = (Scheme_Serialized_Structure *)p; int num_slots = s->num_slots; @@ -37,9 +47,14 @@ static int mark_serialized_struct_val_FIXUP(void *p, struct NewGC *gc) { for(i = num_slots; i--; ) gcFIXUP2(s->slots[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Serialized_Structure) + ((num_slots - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } #define mark_serialized_struct_val_IS_ATOMIC 0 @@ -48,15 +63,19 @@ static int mark_serialized_struct_val_FIXUP(void *p, struct NewGC *gc) { #endif static int mark_struct_val_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Structure *s = (Scheme_Structure *)p; int num_slots = ((Scheme_Struct_Type *)GC_resolve2(s->stype, gc))->num_slots; - return gcBYTES_TO_WORDS((sizeof(Scheme_Structure) + ((num_slots - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +#else + return 0; +#endif } static int mark_struct_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Structure *s = (Scheme_Structure *)p; int num_slots = ((Scheme_Struct_Type *)GC_resolve2(s->stype, gc))->num_slots; @@ -67,12 +86,18 @@ static int mark_struct_val_MARK(void *p, struct NewGC *gc) { for(i = num_slots; i--; ) gcMARK2(s->slots[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Structure) + ((num_slots - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } static int mark_struct_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Structure *s = (Scheme_Structure *)p; int num_slots = ((Scheme_Struct_Type *)GC_resolve2(s->stype, gc))->num_slots; @@ -83,9 +108,14 @@ static int mark_struct_val_FIXUP(void *p, struct NewGC *gc) { for(i = num_slots; i--; ) gcFIXUP2(s->slots[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Structure) + ((num_slots - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } #define mark_struct_val_IS_ATOMIC 0 @@ -93,15 +123,19 @@ static int mark_struct_val_FIXUP(void *p, struct NewGC *gc) { static int mark_struct_type_val_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Struct_Type *t = (Scheme_Struct_Type *)p; - return gcBYTES_TO_WORDS((sizeof(Scheme_Struct_Type) + ((t->name_pos + 1 - mzFLEX_DELTA) * sizeof(Scheme_Struct_Type *)))); +#else + return 0; +#endif } static int mark_struct_type_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Struct_Type *t = (Scheme_Struct_Type *)p; int i; @@ -119,13 +153,19 @@ static int mark_struct_type_val_MARK(void *p, struct NewGC *gc) { gcMARK2(t->guard, gc); gcMARK2(t->immutables, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Struct_Type) + ((t->name_pos + 1 - mzFLEX_DELTA) * sizeof(Scheme_Struct_Type *)))); +# endif +#endif } static int mark_struct_type_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Struct_Type *t = (Scheme_Struct_Type *)p; int i; @@ -143,10 +183,15 @@ static int mark_struct_type_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(t->guard, gc); gcFIXUP2(t->immutables, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Struct_Type) + ((t->name_pos + 1 - mzFLEX_DELTA) * sizeof(Scheme_Struct_Type *)))); +# endif +#endif } #define mark_struct_type_val_IS_ATOMIC 0 @@ -154,26 +199,41 @@ static int mark_struct_type_val_FIXUP(void *p, struct NewGC *gc) { static int mark_struct_property_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Struct_Property)); +#else + return 0; +#endif } static int mark_struct_property_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Struct_Property *i = (Scheme_Struct_Property *)p; gcMARK2(i->name, gc); gcMARK2(i->guard, gc); gcMARK2(i->supers, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Struct_Property)); +# endif +#endif } static int mark_struct_property_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Struct_Property *i = (Scheme_Struct_Property *)p; gcFIXUP2(i->name, gc); gcFIXUP2(i->guard, gc); gcFIXUP2(i->supers, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Struct_Property)); +# endif +#endif } #define mark_struct_property_IS_ATOMIC 0 @@ -181,28 +241,43 @@ static int mark_struct_property_FIXUP(void *p, struct NewGC *gc) { static int mark_wrapped_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Wrapped_Evt)); +#else + return 0; +#endif } static int mark_wrapped_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Wrapped_Evt *ww = (Wrapped_Evt *)p; gcMARK2(ww->evt, gc); gcMARK2(ww->wrapper, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Wrapped_Evt)); +# endif +#endif } static int mark_wrapped_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Wrapped_Evt *ww = (Wrapped_Evt *)p; gcFIXUP2(ww->evt, gc); gcFIXUP2(ww->wrapper, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Wrapped_Evt)); +# endif +#endif } #define mark_wrapped_evt_IS_ATOMIC 0 @@ -210,26 +285,41 @@ static int mark_wrapped_evt_FIXUP(void *p, struct NewGC *gc) { static int mark_nack_guard_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Nack_Guard_Evt)); +#else + return 0; +#endif } static int mark_nack_guard_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Nack_Guard_Evt *nw = (Nack_Guard_Evt *)p; gcMARK2(nw->maker, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Nack_Guard_Evt)); +# endif +#endif } static int mark_nack_guard_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Nack_Guard_Evt *nw = (Nack_Guard_Evt *)p; gcFIXUP2(nw->maker, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Nack_Guard_Evt)); +# endif +#endif } #define mark_nack_guard_evt_IS_ATOMIC 0 @@ -237,30 +327,45 @@ static int mark_nack_guard_evt_FIXUP(void *p, struct NewGC *gc) { static int mark_active_replace_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +#else + return 0; +#endif } static int mark_active_replace_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Active_Replace_Evt *a = (Active_Replace_Evt *)p; gcMARK2(a->syncing, gc); gcMARK2(a->wrapper, gc); gcMARK2(a->orig, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +# endif +#endif } static int mark_active_replace_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Active_Replace_Evt *a = (Active_Replace_Evt *)p; gcFIXUP2(a->syncing, gc); gcFIXUP2(a->wrapper, gc); gcFIXUP2(a->orig, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Active_Replace_Evt)); +# endif +#endif } #define mark_active_replace_evt_IS_ATOMIC 0 @@ -268,11 +373,15 @@ static int mark_active_replace_evt_FIXUP(void *p, struct NewGC *gc) { static int mark_chaperone_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Chaperone)); +#else + return 0; +#endif } static int mark_chaperone_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Chaperone *px = (Scheme_Chaperone *)p; gcMARK2(px->val, gc); @@ -280,11 +389,17 @@ static int mark_chaperone_MARK(void *p, struct NewGC *gc) { gcMARK2(px->props, gc); gcMARK2(px->redirects, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Chaperone)); +# endif +#endif } static int mark_chaperone_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Chaperone *px = (Scheme_Chaperone *)p; gcFIXUP2(px->val, gc); @@ -292,8 +407,13 @@ static int mark_chaperone_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(px->props, gc); gcFIXUP2(px->redirects, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Chaperone)); +# endif +#endif } #define mark_chaperone_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_syntax.inc b/racket/src/racket/src/mzmark_syntax.inc index a9dbae7105..a0d593f777 100644 --- a/racket/src/racket/src/mzmark_syntax.inc +++ b/racket/src/racket/src/mzmark_syntax.inc @@ -1,22 +1,37 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_srcloc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Srcloc)); +#else + return 0; +#endif } static int mark_srcloc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Stx_Srcloc *s = (Scheme_Stx_Srcloc *)p; gcMARK2(s->src, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Srcloc)); +# endif +#endif } static int mark_srcloc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Stx_Srcloc *s = (Scheme_Stx_Srcloc *)p; gcFIXUP2(s->src, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Srcloc)); +# endif +#endif } #define mark_srcloc_IS_ATOMIC 0 @@ -24,15 +39,19 @@ static int mark_srcloc_FIXUP(void *p, struct NewGC *gc) { static int mark_scope_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Scope *m = (Scheme_Scope *)p; int for_multi = SCHEME_SCOPE_HAS_OWNER(m); - return (for_multi ? gcBYTES_TO_WORDS(sizeof(Scheme_Scope_With_Owner)) : gcBYTES_TO_WORDS(sizeof(Scheme_Scope))); +#else + return 0; +#endif } static int mark_scope_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Scope *m = (Scheme_Scope *)p; int for_multi = SCHEME_SCOPE_HAS_OWNER(m); gcMARK2(m->bindings, gc); @@ -40,13 +59,19 @@ static int mark_scope_MARK(void *p, struct NewGC *gc) { gcMARK2(((Scheme_Scope_With_Owner *)m)->owner_multi_scope, gc); gcMARK2(((Scheme_Scope_With_Owner *)m)->phase, gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return (for_multi ? gcBYTES_TO_WORDS(sizeof(Scheme_Scope_With_Owner)) : gcBYTES_TO_WORDS(sizeof(Scheme_Scope))); +# endif +#endif } static int mark_scope_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Scope *m = (Scheme_Scope *)p; int for_multi = SCHEME_SCOPE_HAS_OWNER(m); gcFIXUP2(m->bindings, gc); @@ -54,10 +79,15 @@ static int mark_scope_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(((Scheme_Scope_With_Owner *)m)->owner_multi_scope, gc); gcFIXUP2(((Scheme_Scope_With_Owner *)m)->phase, gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return (for_multi ? gcBYTES_TO_WORDS(sizeof(Scheme_Scope_With_Owner)) : gcBYTES_TO_WORDS(sizeof(Scheme_Scope))); +# endif +#endif } #define mark_scope_IS_ATOMIC 0 @@ -65,24 +95,39 @@ static int mark_scope_FIXUP(void *p, struct NewGC *gc) { static int mark_scope_table_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Scope_Table)); +#else + return 0; +#endif } static int mark_scope_table_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Scope_Table *m = (Scheme_Scope_Table *)p; gcMARK2(m->simple_scopes, gc); gcMARK2(m->multi_scopes, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Scope_Table)); +# endif +#endif } static int mark_scope_table_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Scope_Table *m = (Scheme_Scope_Table *)p; gcFIXUP2(m->simple_scopes, gc); gcFIXUP2(m->multi_scopes, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Scope_Table)); +# endif +#endif } #define mark_scope_table_IS_ATOMIC 0 @@ -90,26 +135,41 @@ static int mark_scope_table_FIXUP(void *p, struct NewGC *gc) { static int mark_propagate_table_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Propagate_Table)); +#else + return 0; +#endif } static int mark_propagate_table_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Propagate_Table *m = (Scheme_Propagate_Table *)p; mark_scope_table_MARK(&m->st, gc); gcMARK2(m->prev, gc); gcMARK2(m->phase_shift, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Propagate_Table)); +# endif +#endif } static int mark_propagate_table_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Propagate_Table *m = (Scheme_Propagate_Table *)p; mark_scope_table_FIXUP(&m->st, gc); gcFIXUP2(m->prev, gc); gcFIXUP2(m->phase_shift, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Propagate_Table)); +# endif +#endif } #define mark_propagate_table_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_thread.inc b/racket/src/racket/src/mzmark_thread.inc index b71777d3ed..4947d48025 100644 --- a/racket/src/racket/src/mzmark_thread.inc +++ b/racket/src/racket/src/mzmark_thread.inc @@ -1,12 +1,16 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_parameterization_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS((sizeof(Scheme_Parameterization) + ((max_configs - mzFLEX_DELTA) * sizeof(Scheme_Object*)))); +#else + return 0; +#endif } static int mark_parameterization_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Parameterization *c = (Scheme_Parameterization *)p; int i; @@ -15,12 +19,18 @@ static int mark_parameterization_MARK(void *p, struct NewGC *gc) { } gcMARK2(c->extensions, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Parameterization) + ((max_configs - mzFLEX_DELTA) * sizeof(Scheme_Object*)))); +# endif +#endif } static int mark_parameterization_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Parameterization *c = (Scheme_Parameterization *)p; int i; @@ -29,9 +39,14 @@ static int mark_parameterization_FIXUP(void *p, struct NewGC *gc) { } gcFIXUP2(c->extensions, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Parameterization) + ((max_configs - mzFLEX_DELTA) * sizeof(Scheme_Object*)))); +# endif +#endif } #define mark_parameterization_IS_ATOMIC 0 @@ -39,24 +54,39 @@ static int mark_parameterization_FIXUP(void *p, struct NewGC *gc) { static int mark_config_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Config)); +#else + return 0; +#endif } static int mark_config_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Config *config = (Scheme_Config *)p; gcMARK2(config->ht, gc); gcMARK2(config->root, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Config)); +# endif +#endif } static int mark_config_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Config *config = (Scheme_Config *)p; gcFIXUP2(config->ht, gc); gcFIXUP2(config->root, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Config)); +# endif +#endif } #define mark_config_IS_ATOMIC 0 @@ -64,30 +94,45 @@ static int mark_config_FIXUP(void *p, struct NewGC *gc) { static int mark_will_executor_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(WillExecutor)); +#else + return 0; +#endif } static int mark_will_executor_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED WillExecutor *e = (WillExecutor *)p; gcMARK2(e->sema, gc); gcMARK2(e->first, gc); gcMARK2(e->last, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(WillExecutor)); +# endif +#endif } static int mark_will_executor_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED WillExecutor *e = (WillExecutor *)p; gcFIXUP2(e->sema, gc); gcFIXUP2(e->first, gc); gcFIXUP2(e->last, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(WillExecutor)); +# endif +#endif } #define mark_will_executor_val_IS_ATOMIC 0 @@ -95,11 +140,15 @@ static int mark_will_executor_val_FIXUP(void *p, struct NewGC *gc) { static int mark_custodian_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Custodian)); +#else + return 0; +#endif } static int mark_custodian_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Custodian *m = (Scheme_Custodian *)p; gcMARK2(m->boxes, gc); @@ -117,11 +166,17 @@ static int mark_custodian_val_MARK(void *p, struct NewGC *gc) { gcMARK2(m->cust_boxes, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Custodian)); +# endif +#endif } static int mark_custodian_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Custodian *m = (Scheme_Custodian *)p; gcFIXUP2(m->boxes, gc); @@ -139,8 +194,13 @@ static int mark_custodian_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(m->cust_boxes, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Custodian)); +# endif +#endif } #define mark_custodian_val_IS_ATOMIC 0 @@ -148,11 +208,15 @@ static int mark_custodian_val_FIXUP(void *p, struct NewGC *gc) { static int mark_custodian_box_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Custodian_Box)); +#else + return 0; +#endif } static int mark_custodian_box_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Custodian_Box *b = (Scheme_Custodian_Box *)p; int sd = ((Scheme_Custodian *)GC_resolve2(b->cust, gc))->shut_down; @@ -161,11 +225,17 @@ static int mark_custodian_box_val_MARK(void *p, struct NewGC *gc) { gcMARK2(b->v, gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Custodian_Box)); +# endif +#endif } static int mark_custodian_box_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Custodian_Box *b = (Scheme_Custodian_Box *)p; int sd = ((Scheme_Custodian *)GC_resolve2(b->cust, gc))->shut_down; @@ -174,8 +244,13 @@ static int mark_custodian_box_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(b->v, gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Custodian_Box)); +# endif +#endif } #define mark_custodian_box_val_IS_ATOMIC 0 @@ -183,26 +258,41 @@ static int mark_custodian_box_val_FIXUP(void *p, struct NewGC *gc) { static int mark_thread_hop_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Thread_Custodian_Hop)); +#else + return 0; +#endif } static int mark_thread_hop_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Thread_Custodian_Hop *hop = (Scheme_Thread_Custodian_Hop *)p; gcMARK2(hop->p, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Thread_Custodian_Hop)); +# endif +#endif } static int mark_thread_hop_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Thread_Custodian_Hop *hop = (Scheme_Thread_Custodian_Hop *)p; gcFIXUP2(hop->p, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Thread_Custodian_Hop)); +# endif +#endif } #define mark_thread_hop_IS_ATOMIC 0 @@ -210,11 +300,15 @@ static int mark_thread_hop_FIXUP(void *p, struct NewGC *gc) { static int mark_param_data_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(ParamData)); +#else + return 0; +#endif } static int mark_param_data_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED ParamData *d = (ParamData *)p; gcMARK2(d->key, gc); @@ -222,11 +316,17 @@ static int mark_param_data_MARK(void *p, struct NewGC *gc) { gcMARK2(d->extract_guard, gc); gcMARK2(d->defcell, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(ParamData)); +# endif +#endif } static int mark_param_data_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED ParamData *d = (ParamData *)p; gcFIXUP2(d->key, gc); @@ -234,8 +334,13 @@ static int mark_param_data_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(d->extract_guard, gc); gcFIXUP2(d->defcell, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(ParamData)); +# endif +#endif } #define mark_param_data_IS_ATOMIC 0 @@ -243,11 +348,15 @@ static int mark_param_data_FIXUP(void *p, struct NewGC *gc) { static int mark_will_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(ActiveWill)); +#else + return 0; +#endif } static int mark_will_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED ActiveWill *w = (ActiveWill *)p; gcMARK2(w->o, gc); @@ -255,11 +364,17 @@ static int mark_will_MARK(void *p, struct NewGC *gc) { gcMARK2(w->w, gc); gcMARK2(w->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(ActiveWill)); +# endif +#endif } static int mark_will_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED ActiveWill *w = (ActiveWill *)p; gcFIXUP2(w->o, gc); @@ -267,8 +382,13 @@ static int mark_will_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(w->w, gc); gcFIXUP2(w->next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(ActiveWill)); +# endif +#endif } #define mark_will_IS_ATOMIC 0 @@ -276,18 +396,33 @@ static int mark_will_FIXUP(void *p, struct NewGC *gc) { static int mark_evt_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Evt)); +#else + return 0; +#endif } static int mark_evt_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Evt)); +# endif +#endif } static int mark_evt_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Evt)); +# endif +#endif } #define mark_evt_IS_ATOMIC 1 @@ -295,11 +430,15 @@ static int mark_evt_FIXUP(void *p, struct NewGC *gc) { static int mark_syncing_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Syncing)); +#else + return 0; +#endif } static int mark_syncing_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Syncing *w = (Syncing *)p; gcMARK2(w->set, gc); @@ -310,11 +449,17 @@ static int mark_syncing_MARK(void *p, struct NewGC *gc) { gcMARK2(w->disable_break, gc); gcMARK2(w->thread, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Syncing)); +# endif +#endif } static int mark_syncing_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Syncing *w = (Syncing *)p; gcFIXUP2(w->set, gc); @@ -325,8 +470,13 @@ static int mark_syncing_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(w->disable_break, gc); gcFIXUP2(w->thread, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Syncing)); +# endif +#endif } #define mark_syncing_IS_ATOMIC 0 @@ -334,28 +484,43 @@ static int mark_syncing_FIXUP(void *p, struct NewGC *gc) { static int mark_evt_set_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Evt_Set)); +#else + return 0; +#endif } static int mark_evt_set_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Evt_Set *w = (Evt_Set *)p; gcMARK2(w->ws, gc); gcMARK2(w->argv, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Evt_Set)); +# endif +#endif } static int mark_evt_set_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Evt_Set *w = (Evt_Set *)p; gcFIXUP2(w->ws, gc); gcFIXUP2(w->argv, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Evt_Set)); +# endif +#endif } #define mark_evt_set_IS_ATOMIC 0 @@ -363,11 +528,15 @@ static int mark_evt_set_FIXUP(void *p, struct NewGC *gc) { static int mark_thread_set_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Thread_Set)); +#else + return 0; +#endif } static int mark_thread_set_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Thread_Set *ts = (Scheme_Thread_Set *)p; gcMARK2(ts->parent, gc); @@ -377,11 +546,17 @@ static int mark_thread_set_MARK(void *p, struct NewGC *gc) { gcMARK2(ts->search_start, gc); gcMARK2(ts->current, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Thread_Set)); +# endif +#endif } static int mark_thread_set_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Thread_Set *ts = (Scheme_Thread_Set *)p; gcFIXUP2(ts->parent, gc); @@ -391,8 +566,13 @@ static int mark_thread_set_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(ts->search_start, gc); gcFIXUP2(ts->current, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Thread_Set)); +# endif +#endif } #define mark_thread_set_IS_ATOMIC 0 @@ -400,26 +580,41 @@ static int mark_thread_set_FIXUP(void *p, struct NewGC *gc) { static int mark_thread_cell_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Thread_Cell)); +#else + return 0; +#endif } static int mark_thread_cell_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Thread_Cell *c = (Thread_Cell *)p; gcMARK2(c->def_val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Thread_Cell)); +# endif +#endif } static int mark_thread_cell_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Thread_Cell *c = (Thread_Cell *)p; gcFIXUP2(c->def_val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Thread_Cell)); +# endif +#endif } #define mark_thread_cell_IS_ATOMIC 0 @@ -427,28 +622,43 @@ static int mark_thread_cell_FIXUP(void *p, struct NewGC *gc) { static int mark_plumber_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Plumber)); +#else + return 0; +#endif } static int mark_plumber_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Plumber *pl = (Scheme_Plumber *)p; gcMARK2(pl->handles, gc); gcMARK2(pl->weak_handles, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Plumber)); +# endif +#endif } static int mark_plumber_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Plumber *pl = (Scheme_Plumber *)p; gcFIXUP2(pl->handles, gc); gcFIXUP2(pl->weak_handles, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Plumber)); +# endif +#endif } #define mark_plumber_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_type.inc b/racket/src/racket/src/mzmark_type.inc index a91c8c8d03..c8301ef6cf 100644 --- a/racket/src/racket/src/mzmark_type.inc +++ b/racket/src/racket/src/mzmark_type.inc @@ -1,30 +1,45 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int variable_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Bucket_With_Home)); +#else + return 0; +#endif } static int variable_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Bucket *b = (Scheme_Bucket *)p; gcMARK2(b->key, gc); gcMARK2(b->val, gc); gcMARK2(((Scheme_Bucket_With_Home *)b)->home_link, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Bucket_With_Home)); +# endif +#endif } static int variable_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Bucket *b = (Scheme_Bucket *)p; gcFIXUP2(b->key, gc); gcFIXUP2(b->val, gc); gcFIXUP2(((Scheme_Bucket_With_Home *)b)->home_link, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Bucket_With_Home)); +# endif +#endif } #define variable_obj_IS_ATOMIC 0 @@ -32,11 +47,15 @@ static int variable_obj_FIXUP(void *p, struct NewGC *gc) { static int module_var_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Module_Variable)); +#else + return 0; +#endif } static int module_var_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Module_Variable *mv = (Module_Variable *)p; gcMARK2(mv->modidx, gc); @@ -44,11 +63,17 @@ static int module_var_MARK(void *p, struct NewGC *gc) { gcMARK2(mv->insp, gc); gcMARK2(mv->shape, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Module_Variable)); +# endif +#endif } static int module_var_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Module_Variable *mv = (Module_Variable *)p; gcFIXUP2(mv->modidx, gc); @@ -56,8 +81,13 @@ static int module_var_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(mv->insp, gc); gcFIXUP2(mv->shape, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Module_Variable)); +# endif +#endif } #define module_var_IS_ATOMIC 0 @@ -65,28 +95,43 @@ static int module_var_FIXUP(void *p, struct NewGC *gc) { static int bucket_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Bucket)); +#else + return 0; +#endif } static int bucket_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Bucket *b = (Scheme_Bucket *)p; gcMARK2(b->key, gc); gcMARK2(b->val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Bucket)); +# endif +#endif } static int bucket_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Bucket *b = (Scheme_Bucket *)p; gcFIXUP2(b->key, gc); gcFIXUP2(b->val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Bucket)); +# endif +#endif } #define bucket_obj_IS_ATOMIC 0 @@ -94,18 +139,33 @@ static int bucket_obj_FIXUP(void *p, struct NewGC *gc) { static int local_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Local)); +#else + return 0; +#endif } static int local_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Local)); +# endif +#endif } static int local_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Local)); +# endif +#endif } #define local_obj_IS_ATOMIC 1 @@ -113,18 +173,33 @@ static int local_obj_FIXUP(void *p, struct NewGC *gc) { static int toplevel_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Toplevel)); +#else + return 0; +#endif } static int toplevel_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Toplevel)); +# endif +#endif } static int toplevel_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Toplevel)); +# endif +#endif } #define toplevel_obj_IS_ATOMIC 1 @@ -132,18 +207,33 @@ static int toplevel_obj_FIXUP(void *p, struct NewGC *gc) { static int quotesyntax_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Quote_Syntax)); +#else + return 0; +#endif } static int quotesyntax_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Quote_Syntax)); +# endif +#endif } static int quotesyntax_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Quote_Syntax)); +# endif +#endif } #define quotesyntax_obj_IS_ATOMIC 1 @@ -151,32 +241,47 @@ static int quotesyntax_obj_FIXUP(void *p, struct NewGC *gc) { static int cpointer_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS (SCHEME_CPTR_HAS_OFFSET(p) ? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr)) : gcBYTES_TO_WORDS(sizeof(Scheme_Cptr))); +#else + return 0; +#endif } static int cpointer_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED if (!(SCHEME_CPTR_FLAGS(p) & 0x1)) { gcMARK2(SCHEME_CPTR_VAL(p), gc); } gcMARK2(SCHEME_CPTR_TYPE(p), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return (SCHEME_CPTR_HAS_OFFSET(p) ? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr)) : gcBYTES_TO_WORDS(sizeof(Scheme_Cptr))); +# endif +#endif } static int cpointer_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED if (!(SCHEME_CPTR_FLAGS(p) & 0x1)) { gcFIXUP2(SCHEME_CPTR_VAL(p), gc); } gcFIXUP2(SCHEME_CPTR_TYPE(p), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return (SCHEME_CPTR_HAS_OFFSET(p) ? gcBYTES_TO_WORDS(sizeof(Scheme_Offset_Cptr)) : gcBYTES_TO_WORDS(sizeof(Scheme_Cptr))); +# endif +#endif } #define cpointer_obj_IS_ATOMIC 0 @@ -184,22 +289,37 @@ static int cpointer_obj_FIXUP(void *p, struct NewGC *gc) { static int twoptr_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int twoptr_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED gcMARK2(SCHEME_PTR1_VAL((Scheme_Object *)p), gc); gcMARK2(SCHEME_PTR2_VAL((Scheme_Object *)p), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int twoptr_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED gcFIXUP2(SCHEME_PTR1_VAL((Scheme_Object *)p), gc); gcFIXUP2(SCHEME_PTR2_VAL((Scheme_Object *)p), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define twoptr_obj_IS_ATOMIC 0 @@ -207,20 +327,35 @@ static int twoptr_obj_FIXUP(void *p, struct NewGC *gc) { static int iptr_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int iptr_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED gcMARK2(SCHEME_IPTR_VAL((Scheme_Object *)p), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int iptr_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED gcFIXUP2(SCHEME_IPTR_VAL((Scheme_Object *)p), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define iptr_obj_IS_ATOMIC 0 @@ -228,22 +363,37 @@ static int iptr_obj_FIXUP(void *p, struct NewGC *gc) { static int small_object_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Small_Object)); +#else + return 0; +#endif } static int small_object_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED gcMARK2(((Scheme_Small_Object *)p)->u.ptr_value, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Small_Object)); +# endif +#endif } static int small_object_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED gcFIXUP2(((Scheme_Small_Object *)p)->u.ptr_value, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Small_Object)); +# endif +#endif } #define small_object_IS_ATOMIC 0 @@ -251,18 +401,33 @@ static int small_object_FIXUP(void *p, struct NewGC *gc) { static int small_atomic_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Small_Object)); +#else + return 0; +#endif } static int small_atomic_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Small_Object)); +# endif +#endif } static int small_atomic_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Small_Object)); +# endif +#endif } #define small_atomic_obj_IS_ATOMIC 1 @@ -270,38 +435,53 @@ static int small_atomic_obj_FIXUP(void *p, struct NewGC *gc) { static int app_rec_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_App_Rec *r = (Scheme_App_Rec *)p; - return gcBYTES_TO_WORDS((sizeof(Scheme_App_Rec) + ((r->num_args + 1 - mzFLEX_DELTA) * sizeof(Scheme_Object *)) + ((r->num_args + 1) * sizeof(char)))); +#else + return 0; +#endif } static int app_rec_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_App_Rec *r = (Scheme_App_Rec *)p; int i = r->num_args + 1; while (i--) gcMARK2(r->args[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_App_Rec) + ((r->num_args + 1 - mzFLEX_DELTA) * sizeof(Scheme_Object *)) + ((r->num_args + 1) * sizeof(char)))); +# endif +#endif } static int app_rec_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_App_Rec *r = (Scheme_App_Rec *)p; int i = r->num_args + 1; while (i--) gcFIXUP2(r->args[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_App_Rec) + ((r->num_args + 1 - mzFLEX_DELTA) * sizeof(Scheme_Object *)) + ((r->num_args + 1) * sizeof(char)))); +# endif +#endif } #define app_rec_IS_ATOMIC 0 @@ -309,26 +489,41 @@ static int app_rec_FIXUP(void *p, struct NewGC *gc) { static int app2_rec_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_App2_Rec)); +#else + return 0; +#endif } static int app2_rec_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_App2_Rec *r = (Scheme_App2_Rec *)p; gcMARK2(r->rator, gc); gcMARK2(r->rand, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_App2_Rec)); +# endif +#endif } static int app2_rec_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_App2_Rec *r = (Scheme_App2_Rec *)p; gcFIXUP2(r->rator, gc); gcFIXUP2(r->rand, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_App2_Rec)); +# endif +#endif } #define app2_rec_IS_ATOMIC 0 @@ -336,28 +531,43 @@ static int app2_rec_FIXUP(void *p, struct NewGC *gc) { static int app3_rec_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_App3_Rec)); +#else + return 0; +#endif } static int app3_rec_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_App3_Rec *r = (Scheme_App3_Rec *)p; gcMARK2(r->rator, gc); gcMARK2(r->rand1, gc); gcMARK2(r->rand2, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_App3_Rec)); +# endif +#endif } static int app3_rec_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_App3_Rec *r = (Scheme_App3_Rec *)p; gcFIXUP2(r->rator, gc); gcFIXUP2(r->rand1, gc); gcFIXUP2(r->rand2, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_App3_Rec)); +# endif +#endif } #define app3_rec_IS_ATOMIC 0 @@ -365,35 +575,50 @@ static int app3_rec_FIXUP(void *p, struct NewGC *gc) { static int seq_rec_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Sequence *s = (Scheme_Sequence *)p; - return gcBYTES_TO_WORDS((sizeof(Scheme_Sequence) + ((s->count - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +#else + return 0; +#endif } static int seq_rec_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Sequence *s = (Scheme_Sequence *)p; int i = s->count; while (i--) gcMARK2(s->array[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Sequence) + ((s->count - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } static int seq_rec_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Sequence *s = (Scheme_Sequence *)p; int i = s->count; while (i--) gcFIXUP2(s->array[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Sequence) + ((s->count - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } #define seq_rec_IS_ATOMIC 0 @@ -401,30 +626,45 @@ static int seq_rec_FIXUP(void *p, struct NewGC *gc) { static int branch_rec_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Branch_Rec)); +#else + return 0; +#endif } static int branch_rec_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Branch_Rec *b = (Scheme_Branch_Rec *)p; gcMARK2(b->test, gc); gcMARK2(b->tbranch, gc); gcMARK2(b->fbranch, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Branch_Rec)); +# endif +#endif } static int branch_rec_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Branch_Rec *b = (Scheme_Branch_Rec *)p; gcFIXUP2(b->test, gc); gcFIXUP2(b->tbranch, gc); gcFIXUP2(b->fbranch, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Branch_Rec)); +# endif +#endif } #define branch_rec_IS_ATOMIC 0 @@ -432,11 +672,15 @@ static int branch_rec_FIXUP(void *p, struct NewGC *gc) { static int unclosed_proc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Closure_Data)); +#else + return 0; +#endif } static int unclosed_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Closure_Data *d = (Scheme_Closure_Data *)p; gcMARK2(d->name, gc); @@ -448,11 +692,17 @@ static int unclosed_proc_MARK(void *p, struct NewGC *gc) { gcMARK2(d->context, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Closure_Data)); +# endif +#endif } static int unclosed_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Closure_Data *d = (Scheme_Closure_Data *)p; gcFIXUP2(d->name, gc); @@ -464,8 +714,13 @@ static int unclosed_proc_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(d->context, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Closure_Data)); +# endif +#endif } #define unclosed_proc_IS_ATOMIC 0 @@ -473,28 +728,43 @@ static int unclosed_proc_FIXUP(void *p, struct NewGC *gc) { static int let_value_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Let_Value)); +#else + return 0; +#endif } static int let_value_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Let_Value *l = (Scheme_Let_Value *)p; gcMARK2(l->value, gc); gcMARK2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_Value)); +# endif +#endif } static int let_value_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Let_Value *l = (Scheme_Let_Value *)p; gcFIXUP2(l->value, gc); gcFIXUP2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_Value)); +# endif +#endif } #define let_value_IS_ATOMIC 0 @@ -502,26 +772,41 @@ static int let_value_FIXUP(void *p, struct NewGC *gc) { static int let_void_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Let_Void)); +#else + return 0; +#endif } static int let_void_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Let_Void *l = (Scheme_Let_Void *)p; gcMARK2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_Void)); +# endif +#endif } static int let_void_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Let_Void *l = (Scheme_Let_Void *)p; gcFIXUP2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_Void)); +# endif +#endif } #define let_void_IS_ATOMIC 0 @@ -529,28 +814,43 @@ static int let_void_FIXUP(void *p, struct NewGC *gc) { static int letrec_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Letrec)); +#else + return 0; +#endif } static int letrec_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Letrec *l = (Scheme_Letrec *)p; gcMARK2(l->procs, gc); gcMARK2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Letrec)); +# endif +#endif } static int letrec_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Letrec *l = (Scheme_Letrec *)p; gcFIXUP2(l->procs, gc); gcFIXUP2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Letrec)); +# endif +#endif } #define letrec_IS_ATOMIC 0 @@ -558,28 +858,43 @@ static int letrec_FIXUP(void *p, struct NewGC *gc) { static int let_one_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Let_One)); +#else + return 0; +#endif } static int let_one_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Let_One *l = (Scheme_Let_One *)p; gcMARK2(l->value, gc); gcMARK2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_One)); +# endif +#endif } static int let_one_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Let_One *l = (Scheme_Let_One *)p; gcFIXUP2(l->value, gc); gcFIXUP2(l->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_One)); +# endif +#endif } #define let_one_IS_ATOMIC 0 @@ -587,30 +902,45 @@ static int let_one_FIXUP(void *p, struct NewGC *gc) { static int with_cont_mark_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_With_Continuation_Mark)); +#else + return 0; +#endif } static int with_cont_mark_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_With_Continuation_Mark *w = (Scheme_With_Continuation_Mark *)p; gcMARK2(w->key, gc); gcMARK2(w->val, gc); gcMARK2(w->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_With_Continuation_Mark)); +# endif +#endif } static int with_cont_mark_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_With_Continuation_Mark *w = (Scheme_With_Continuation_Mark *)p; gcFIXUP2(w->key, gc); gcFIXUP2(w->val, gc); gcFIXUP2(w->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_With_Continuation_Mark)); +# endif +#endif } #define with_cont_mark_IS_ATOMIC 0 @@ -618,11 +948,15 @@ static int with_cont_mark_FIXUP(void *p, struct NewGC *gc) { static int comp_let_value_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Compiled_Let_Value)); +#else + return 0; +#endif } static int comp_let_value_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Compiled_Let_Value *c = (Scheme_Compiled_Let_Value *)p; gcMARK2(c->flags, gc); @@ -630,11 +964,17 @@ static int comp_let_value_MARK(void *p, struct NewGC *gc) { gcMARK2(c->body, gc); gcMARK2(c->names, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Compiled_Let_Value)); +# endif +#endif } static int comp_let_value_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Compiled_Let_Value *c = (Scheme_Compiled_Let_Value *)p; gcFIXUP2(c->flags, gc); @@ -642,8 +982,13 @@ static int comp_let_value_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(c->body, gc); gcFIXUP2(c->names, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Compiled_Let_Value)); +# endif +#endif } #define comp_let_value_IS_ATOMIC 0 @@ -651,26 +996,41 @@ static int comp_let_value_FIXUP(void *p, struct NewGC *gc) { static int let_header_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Let_Header)); +#else + return 0; +#endif } static int let_header_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Let_Header *h = (Scheme_Let_Header *)p; gcMARK2(h->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_Header)); +# endif +#endif } static int let_header_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Let_Header *h = (Scheme_Let_Header *)p; gcFIXUP2(h->body, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Let_Header)); +# endif +#endif } #define let_header_IS_ATOMIC 0 @@ -678,28 +1038,43 @@ static int let_header_FIXUP(void *p, struct NewGC *gc) { static int set_bang_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +#else + return 0; +#endif } static int set_bang_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Set_Bang *b = (Scheme_Set_Bang *)p; gcMARK2(b->var, gc); gcMARK2(b->val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +# endif +#endif } static int set_bang_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Set_Bang *b = (Scheme_Set_Bang *)p; gcFIXUP2(b->var, gc); gcFIXUP2(b->val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Set_Bang)); +# endif +#endif } #define set_bang_IS_ATOMIC 0 @@ -707,18 +1082,22 @@ static int set_bang_FIXUP(void *p, struct NewGC *gc) { static int prim_proc_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Primitive_Proc *prim = (Scheme_Primitive_Proc *)p; - return ((prim->pp.flags & SCHEME_PRIM_IS_CLOSURE) ? (gcBYTES_TO_WORDS(sizeof(Scheme_Primitive_Closure)) + ((Scheme_Primitive_Closure *)prim)->count - mzFLEX_DELTA) : ((prim->pp.flags & SCHEME_PRIM_IS_MULTI_RESULT) ? gcBYTES_TO_WORDS(sizeof(Scheme_Prim_W_Result_Arity)) : gcBYTES_TO_WORDS(sizeof(Scheme_Primitive_Proc)))); +#else + return 0; +#endif } static int prim_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Primitive_Proc *prim = (Scheme_Primitive_Proc *)p; gcMARK2(prim->name, gc); @@ -733,6 +1112,9 @@ static int prim_proc_MARK(void *p, struct NewGC *gc) { } } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return ((prim->pp.flags & SCHEME_PRIM_IS_CLOSURE) ? (gcBYTES_TO_WORDS(sizeof(Scheme_Primitive_Closure)) @@ -740,9 +1122,12 @@ static int prim_proc_MARK(void *p, struct NewGC *gc) { : ((prim->pp.flags & SCHEME_PRIM_IS_MULTI_RESULT) ? gcBYTES_TO_WORDS(sizeof(Scheme_Prim_W_Result_Arity)) : gcBYTES_TO_WORDS(sizeof(Scheme_Primitive_Proc)))); +# endif +#endif } static int prim_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Primitive_Proc *prim = (Scheme_Primitive_Proc *)p; gcFIXUP2(prim->name, gc); @@ -757,6 +1142,9 @@ static int prim_proc_FIXUP(void *p, struct NewGC *gc) { } } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return ((prim->pp.flags & SCHEME_PRIM_IS_CLOSURE) ? (gcBYTES_TO_WORDS(sizeof(Scheme_Primitive_Closure)) @@ -764,6 +1152,8 @@ static int prim_proc_FIXUP(void *p, struct NewGC *gc) { : ((prim->pp.flags & SCHEME_PRIM_IS_MULTI_RESULT) ? gcBYTES_TO_WORDS(sizeof(Scheme_Prim_W_Result_Arity)) : gcBYTES_TO_WORDS(sizeof(Scheme_Primitive_Proc)))); +# endif +#endif } #define prim_proc_IS_ATOMIC 0 @@ -771,17 +1161,21 @@ static int prim_proc_FIXUP(void *p, struct NewGC *gc) { static int closed_prim_proc_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Closed_Primitive_Proc *c = (Scheme_Closed_Primitive_Proc *)p; - return ((c->pp.flags & SCHEME_PRIM_IS_MULTI_RESULT) ? gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Prim_W_Result_Arity)) : ((c->mina == -2) ? gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Case_Primitive_Proc)) : gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Primitive_Proc)))); +#else + return 0; +#endif } static int closed_prim_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Closed_Primitive_Proc *c = (Scheme_Closed_Primitive_Proc *)p; gcMARK2(c->name, gc); @@ -790,15 +1184,21 @@ static int closed_prim_proc_MARK(void *p, struct NewGC *gc) { gcMARK2(((Scheme_Closed_Case_Primitive_Proc *)c)->cases, gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return ((c->pp.flags & SCHEME_PRIM_IS_MULTI_RESULT) ? gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Prim_W_Result_Arity)) : ((c->mina == -2) ? gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Case_Primitive_Proc)) : gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Primitive_Proc)))); +# endif +#endif } static int closed_prim_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Closed_Primitive_Proc *c = (Scheme_Closed_Primitive_Proc *)p; gcFIXUP2(c->name, gc); @@ -807,12 +1207,17 @@ static int closed_prim_proc_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(((Scheme_Closed_Case_Primitive_Proc *)c)->cases, gc); } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return ((c->pp.flags & SCHEME_PRIM_IS_MULTI_RESULT) ? gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Prim_W_Result_Arity)) : ((c->mina == -2) ? gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Case_Primitive_Proc)) : gcBYTES_TO_WORDS(sizeof(Scheme_Closed_Primitive_Proc)))); +# endif +#endif } #define closed_prim_proc_IS_ATOMIC 0 @@ -820,17 +1225,21 @@ static int closed_prim_proc_FIXUP(void *p, struct NewGC *gc) { static int scm_closure_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Closure *c = (Scheme_Closure *)p; int closure_size = (c->code ? ((Scheme_Closure_Data *)GC_resolve2(c->code, gc))->closure_size : 0); - return gcBYTES_TO_WORDS((sizeof(Scheme_Closure) + (closure_size - mzFLEX_DELTA) * sizeof(Scheme_Object *))); +#else + return 0; +#endif } static int scm_closure_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Closure *c = (Scheme_Closure *)p; int closure_size = (c->code ? ((Scheme_Closure_Data *)GC_resolve2(c->code, gc))->closure_size @@ -851,12 +1260,18 @@ static int scm_closure_MARK(void *p, struct NewGC *gc) { # include "mzclpf_post.inc" # undef CLOSURE_DATA_TYPE +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Closure) + (closure_size - mzFLEX_DELTA) * sizeof(Scheme_Object *))); +# endif +#endif } static int scm_closure_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Closure *c = (Scheme_Closure *)p; int closure_size = (c->code ? ((Scheme_Closure_Data *)GC_resolve2(c->code, gc))->closure_size @@ -872,9 +1287,14 @@ static int scm_closure_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(c->vals[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Closure) + (closure_size - mzFLEX_DELTA) * sizeof(Scheme_Object *))); +# endif +#endif } #define scm_closure_IS_ATOMIC 0 @@ -882,14 +1302,18 @@ static int scm_closure_FIXUP(void *p, struct NewGC *gc) { static int case_closure_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Case_Lambda *c = (Scheme_Case_Lambda *)p; - return gcBYTES_TO_WORDS((sizeof(Scheme_Case_Lambda) + ((c->count - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +#else + return 0; +#endif } static int case_closure_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Case_Lambda *c = (Scheme_Case_Lambda *)p; int i; @@ -901,12 +1325,18 @@ static int case_closure_MARK(void *p, struct NewGC *gc) { gcMARK2(c->native_code, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Case_Lambda) + ((c->count - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } static int case_closure_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Case_Lambda *c = (Scheme_Case_Lambda *)p; int i; @@ -918,9 +1348,14 @@ static int case_closure_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(c->native_code, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Case_Lambda) + ((c->count - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } #define case_closure_IS_ATOMIC 0 @@ -928,11 +1363,15 @@ static int case_closure_FIXUP(void *p, struct NewGC *gc) { static int cont_proc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); +#else + return 0; +#endif } static int cont_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Cont *c = (Scheme_Cont *)p; gcMARK2(c->dw, gc); @@ -971,11 +1410,17 @@ static int cont_proc_MARK(void *p, struct NewGC *gc) { gcMARK2(c->extra_marks, gc); gcMARK2(c->shortcut_prompt, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); +# endif +#endif } static int cont_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Cont *c = (Scheme_Cont *)p; gcFIXUP2(c->dw, gc); @@ -1014,8 +1459,13 @@ static int cont_proc_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(c->extra_marks, gc); gcFIXUP2(c->shortcut_prompt, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont)); +# endif +#endif } #define cont_proc_IS_ATOMIC 0 @@ -1023,26 +1473,41 @@ static int cont_proc_FIXUP(void *p, struct NewGC *gc) { static int cont_jmp_proc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Jmp)); +#else + return 0; +#endif } static int cont_jmp_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Cont_Jmp *c = (Scheme_Cont_Jmp *)p; MARK_jmpup(&c->buf, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Jmp)); +# endif +#endif } static int cont_jmp_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Cont_Jmp *c = (Scheme_Cont_Jmp *)p; FIXUP_jmpup(&c->buf, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Jmp)); +# endif +#endif } #define cont_jmp_proc_IS_ATOMIC 0 @@ -1050,11 +1515,15 @@ static int cont_jmp_proc_FIXUP(void *p, struct NewGC *gc) { static int meta_cont_proc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +#else + return 0; +#endif } static int meta_cont_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Meta_Continuation *c = (Scheme_Meta_Continuation *)p; gcMARK2(c->prompt_tag, gc); @@ -1063,11 +1532,17 @@ static int meta_cont_proc_MARK(void *p, struct NewGC *gc) { gcMARK2(c->cont_mark_stack_copied, gc); gcMARK2(c->cont, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +# endif +#endif } static int meta_cont_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Meta_Continuation *c = (Scheme_Meta_Continuation *)p; gcFIXUP2(c->prompt_tag, gc); @@ -1076,8 +1551,13 @@ static int meta_cont_proc_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(c->cont_mark_stack_copied, gc); gcFIXUP2(c->cont, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Meta_Continuation)); +# endif +#endif } #define meta_cont_proc_IS_ATOMIC 0 @@ -1085,11 +1565,15 @@ static int meta_cont_proc_FIXUP(void *p, struct NewGC *gc) { static int mark_dyn_wind_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind)); +#else + return 0; +#endif } static int mark_dyn_wind_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Dynamic_Wind *dw = (Scheme_Dynamic_Wind *)p; gcMARK2(dw->id, gc); @@ -1099,11 +1583,17 @@ static int mark_dyn_wind_MARK(void *p, struct NewGC *gc) { MARK_stack_state(&dw->envss, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind)); +# endif +#endif } static int mark_dyn_wind_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Dynamic_Wind *dw = (Scheme_Dynamic_Wind *)p; gcFIXUP2(dw->id, gc); @@ -1113,8 +1603,13 @@ static int mark_dyn_wind_FIXUP(void *p, struct NewGC *gc) { FIXUP_stack_state(&dw->envss, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Dynamic_Wind)); +# endif +#endif } #define mark_dyn_wind_IS_ATOMIC 0 @@ -1122,30 +1617,45 @@ static int mark_dyn_wind_FIXUP(void *p, struct NewGC *gc) { static int mark_overflow_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Overflow)); +#else + return 0; +#endif } static int mark_overflow_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Overflow *o = (Scheme_Overflow *)p; gcMARK2(o->prev, gc); gcMARK2(o->jmp, gc); gcMARK2(o->id, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Overflow)); +# endif +#endif } static int mark_overflow_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Overflow *o = (Scheme_Overflow *)p; gcFIXUP2(o->prev, gc); gcFIXUP2(o->jmp, gc); gcFIXUP2(o->id, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Overflow)); +# endif +#endif } #define mark_overflow_IS_ATOMIC 0 @@ -1153,26 +1663,41 @@ static int mark_overflow_FIXUP(void *p, struct NewGC *gc) { static int mark_overflow_jmp_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +#else + return 0; +#endif } static int mark_overflow_jmp_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Overflow_Jmp *o = (Scheme_Overflow_Jmp *)p; MARK_jmpup(&o->cont, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +# endif +#endif } static int mark_overflow_jmp_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Overflow_Jmp *o = (Scheme_Overflow_Jmp *)p; FIXUP_jmpup(&o->cont, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Overflow_Jmp)); +# endif +#endif } #define mark_overflow_jmp_IS_ATOMIC 0 @@ -1180,11 +1705,15 @@ static int mark_overflow_jmp_FIXUP(void *p, struct NewGC *gc) { static int escaping_cont_proc_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Escaping_Cont)); +#else + return 0; +#endif } static int escaping_cont_proc_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Escaping_Cont *c = (Scheme_Escaping_Cont *)p; #ifdef MZ_USE_JIT @@ -1194,11 +1723,17 @@ static int escaping_cont_proc_MARK(void *p, struct NewGC *gc) { gcMARK2(c->barrier_prompt, gc); MARK_stack_state(&c->envss, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Escaping_Cont)); +# endif +#endif } static int escaping_cont_proc_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Escaping_Cont *c = (Scheme_Escaping_Cont *)p; #ifdef MZ_USE_JIT @@ -1208,8 +1743,13 @@ static int escaping_cont_proc_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(c->barrier_prompt, gc); FIXUP_stack_state(&c->envss, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Escaping_Cont)); +# endif +#endif } #define escaping_cont_proc_IS_ATOMIC 0 @@ -1217,15 +1757,19 @@ static int escaping_cont_proc_FIXUP(void *p, struct NewGC *gc) { static int bignum_obj_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Bignum *b = (Scheme_Bignum *)p; - return ((!SCHEME_BIGINLINE(b)) ? gcBYTES_TO_WORDS(sizeof(Scheme_Bignum)) : gcBYTES_TO_WORDS(sizeof(Small_Bignum))); +#else + return 0; +#endif } static int bignum_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Bignum *b = (Scheme_Bignum *)p; if (!SCHEME_BIGINLINE(b)) { @@ -1234,13 +1778,19 @@ static int bignum_obj_MARK(void *p, struct NewGC *gc) { } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return ((!SCHEME_BIGINLINE(b)) ? gcBYTES_TO_WORDS(sizeof(Scheme_Bignum)) : gcBYTES_TO_WORDS(sizeof(Small_Bignum))); +# endif +#endif } static int bignum_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Bignum *b = (Scheme_Bignum *)p; if (!SCHEME_BIGINLINE(b)) { @@ -1249,10 +1799,15 @@ static int bignum_obj_FIXUP(void *p, struct NewGC *gc) { b->digits = ((Small_Bignum *)GC_fixup_self(b))->v; } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return ((!SCHEME_BIGINLINE(b)) ? gcBYTES_TO_WORDS(sizeof(Scheme_Bignum)) : gcBYTES_TO_WORDS(sizeof(Small_Bignum))); +# endif +#endif } #define bignum_obj_IS_ATOMIC 0 @@ -1260,28 +1815,43 @@ static int bignum_obj_FIXUP(void *p, struct NewGC *gc) { static int rational_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Rational)); +#else + return 0; +#endif } static int rational_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Rational *r = (Scheme_Rational *)p; gcMARK2(r->num, gc); gcMARK2(r->denom, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Rational)); +# endif +#endif } static int rational_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Rational *r = (Scheme_Rational *)p; gcFIXUP2(r->num, gc); gcFIXUP2(r->denom, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Rational)); +# endif +#endif } #define rational_obj_IS_ATOMIC 0 @@ -1289,30 +1859,45 @@ static int rational_obj_FIXUP(void *p, struct NewGC *gc) { static int float_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS #ifdef MZ_USE_SINGLE_FLOATS gcBYTES_TO_WORDS(sizeof(Scheme_Float)); #else 0; #endif +#else + return 0; +#endif } static int float_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return #ifdef MZ_USE_SINGLE_FLOATS gcBYTES_TO_WORDS(sizeof(Scheme_Float)); #else 0; #endif +# endif +#endif } static int float_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return #ifdef MZ_USE_SINGLE_FLOATS gcBYTES_TO_WORDS(sizeof(Scheme_Float)); #else 0; #endif +# endif +#endif } #define float_obj_IS_ATOMIC 1 @@ -1320,18 +1905,33 @@ static int float_obj_FIXUP(void *p, struct NewGC *gc) { static int double_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Double)); +#else + return 0; +#endif } static int double_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Double)); +# endif +#endif } static int double_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Double)); +# endif +#endif } #define double_obj_IS_ATOMIC 1 @@ -1340,18 +1940,33 @@ static int double_obj_FIXUP(void *p, struct NewGC *gc) { #ifdef MZ_LONG_DOUBLE static int long_double_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Long_Double)); +#else + return 0; +#endif } static int long_double_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Long_Double)); +# endif +#endif } static int long_double_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Long_Double)); +# endif +#endif } #define long_double_obj_IS_ATOMIC 1 @@ -1359,22 +1974,37 @@ static int long_double_obj_FIXUP(void *p, struct NewGC *gc) { #else static int long_double_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Long_Double)); +#else + return 0; +#endif } static int long_double_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Long_Double *ld = (Scheme_Long_Double *)p; gcMARK2(ld->printed_form, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Long_Double)); +# endif +#endif } static int long_double_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Long_Double *ld = (Scheme_Long_Double *)p; gcFIXUP2(ld->printed_form, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Long_Double)); +# endif +#endif } #define long_double_obj_IS_ATOMIC 0 @@ -1383,28 +2013,43 @@ static int long_double_obj_FIXUP(void *p, struct NewGC *gc) { #endif static int complex_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Complex)); +#else + return 0; +#endif } static int complex_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Complex *c = (Scheme_Complex *)p; gcMARK2(c->r, gc); gcMARK2(c->i, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Complex)); +# endif +#endif } static int complex_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Complex *c = (Scheme_Complex *)p; gcFIXUP2(c->r, gc); gcFIXUP2(c->i, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Complex)); +# endif +#endif } #define complex_obj_IS_ATOMIC 0 @@ -1412,24 +2057,39 @@ static int complex_obj_FIXUP(void *p, struct NewGC *gc) { static int string_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int string_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcMARK2(SCHEME_CHAR_STR_VAL(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int string_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcFIXUP2(SCHEME_CHAR_STR_VAL(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define string_obj_IS_ATOMIC 0 @@ -1437,24 +2097,39 @@ static int string_obj_FIXUP(void *p, struct NewGC *gc) { static int bstring_obj_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int bstring_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcMARK2(SCHEME_BYTE_STR_VAL(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int bstring_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcFIXUP2(SCHEME_BYTE_STR_VAL(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define bstring_obj_IS_ATOMIC 0 @@ -1462,24 +2137,33 @@ static int bstring_obj_FIXUP(void *p, struct NewGC *gc) { static int symbol_obj_SIZE(void *p, struct NewGC *gc) { - Scheme_Symbol *s = (Scheme_Symbol *)p; - - return - gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + s->len + 1 - mzFLEX4_DELTA); +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS + gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + ((Scheme_Symbol *)p)->len + 1 - mzFLEX4_DELTA); +#else + return 0; +#endif } static int symbol_obj_MARK(void *p, struct NewGC *gc) { - Scheme_Symbol *s = (Scheme_Symbol *)p; - +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return - gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + s->len + 1 - mzFLEX4_DELTA); + gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + ((Scheme_Symbol *)p)->len + 1 - mzFLEX4_DELTA); +# endif +#endif } static int symbol_obj_FIXUP(void *p, struct NewGC *gc) { - Scheme_Symbol *s = (Scheme_Symbol *)p; - +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return - gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + s->len + 1 - mzFLEX4_DELTA); + gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + ((Scheme_Symbol *)p)->len + 1 - mzFLEX4_DELTA); +# endif +#endif } #define symbol_obj_IS_ATOMIC 1 @@ -1487,28 +2171,43 @@ static int symbol_obj_FIXUP(void *p, struct NewGC *gc) { static int cons_cell_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int cons_cell_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcMARK2(SCHEME_CAR(o), gc); gcMARK2(SCHEME_CDR(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int cons_cell_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcFIXUP2(SCHEME_CAR(o), gc); gcFIXUP2(SCHEME_CDR(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define cons_cell_IS_ATOMIC 0 @@ -1516,35 +2215,50 @@ static int cons_cell_FIXUP(void *p, struct NewGC *gc) { static int vector_obj_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Vector *vec = (Scheme_Vector *)p; - return gcBYTES_TO_WORDS((sizeof(Scheme_Vector) + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +#else + return 0; +#endif } static int vector_obj_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Vector *vec = (Scheme_Vector *)p; int i; for (i = vec->size; i--; ) gcMARK2(vec->els[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Vector) + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } static int vector_obj_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Vector *vec = (Scheme_Vector *)p; int i; for (i = vec->size; i--; ) gcFIXUP2(vec->els[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Vector) + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } #define vector_obj_IS_ATOMIC 0 @@ -1552,27 +2266,36 @@ static int vector_obj_FIXUP(void *p, struct NewGC *gc) { static int fxvector_obj_SIZE(void *p, struct NewGC *gc) { - Scheme_Vector *vec = (Scheme_Vector *)p; - - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS((sizeof(Scheme_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); + + ((((Scheme_Vector *)p)->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +#else + return 0; +#endif } static int fxvector_obj_MARK(void *p, struct NewGC *gc) { - Scheme_Vector *vec = (Scheme_Vector *)p; - +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); + + ((((Scheme_Vector *)p)->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } static int fxvector_obj_FIXUP(void *p, struct NewGC *gc) { - Scheme_Vector *vec = (Scheme_Vector *)p; - +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); + + ((((Scheme_Vector *)p)->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); +# endif +#endif } #define fxvector_obj_IS_ATOMIC 1 @@ -1580,27 +2303,36 @@ static int fxvector_obj_FIXUP(void *p, struct NewGC *gc) { static int flvector_obj_SIZE(void *p, struct NewGC *gc) { - Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p; - - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(double)))); + + ((((Scheme_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(double)))); +#else + return 0; +#endif } static int flvector_obj_MARK(void *p, struct NewGC *gc) { - Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p; - +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(double)))); + + ((((Scheme_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(double)))); +# endif +#endif } static int flvector_obj_FIXUP(void *p, struct NewGC *gc) { - Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p; - +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(double)))); + + ((((Scheme_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(double)))); +# endif +#endif } #define flvector_obj_IS_ATOMIC 1 @@ -1609,27 +2341,36 @@ static int flvector_obj_FIXUP(void *p, struct NewGC *gc) { #ifdef MZ_LONG_DOUBLE static int extflvector_obj_SIZE(void *p, struct NewGC *gc) { - Scheme_Long_Double_Vector *vec = (Scheme_Long_Double_Vector *)p; - - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS((sizeof(Scheme_Long_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(long double)))); + + ((((Scheme_Long_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(long double)))); +#else + return 0; +#endif } static int extflvector_obj_MARK(void *p, struct NewGC *gc) { - Scheme_Long_Double_Vector *vec = (Scheme_Long_Double_Vector *)p; - +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Long_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(long double)))); + + ((((Scheme_Long_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(long double)))); +# endif +#endif } static int extflvector_obj_FIXUP(void *p, struct NewGC *gc) { - Scheme_Long_Double_Vector *vec = (Scheme_Long_Double_Vector *)p; - +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Long_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(long double)))); + + ((((Scheme_Long_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(long double)))); +# endif +#endif } #define extflvector_obj_IS_ATOMIC 1 @@ -1638,11 +2379,15 @@ static int extflvector_obj_FIXUP(void *p, struct NewGC *gc) { #endif static int input_port_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Input_Port)); +#else + return 0; +#endif } static int input_port_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Input_Port *ip = (Scheme_Input_Port *)p; gcMARK2(ip->p.position_redirect, gc); @@ -1668,11 +2413,17 @@ static int input_port_MARK(void *p, struct NewGC *gc) { gcMARK2(ip->bufwidths, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Input_Port)); +# endif +#endif } static int input_port_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Input_Port *ip = (Scheme_Input_Port *)p; gcFIXUP2(ip->p.position_redirect, gc); @@ -1698,8 +2449,13 @@ static int input_port_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(ip->bufwidths, gc); #endif +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Input_Port)); +# endif +#endif } #define input_port_IS_ATOMIC 0 @@ -1707,11 +2463,15 @@ static int input_port_FIXUP(void *p, struct NewGC *gc) { static int output_port_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Output_Port)); +#else + return 0; +#endif } static int output_port_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Output_Port *op = (Scheme_Output_Port *)p; gcMARK2(op->p.position_redirect, gc); @@ -1725,11 +2485,17 @@ static int output_port_MARK(void *p, struct NewGC *gc) { gcMARK2(op->mref, gc); gcMARK2(op->input_half, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Output_Port)); +# endif +#endif } static int output_port_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Output_Port *op = (Scheme_Output_Port *)p; gcFIXUP2(op->p.position_redirect, gc); @@ -1743,8 +2509,13 @@ static int output_port_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(op->mref, gc); gcFIXUP2(op->input_half, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Output_Port)); +# endif +#endif } #define output_port_IS_ATOMIC 0 @@ -1753,18 +2524,33 @@ static int output_port_FIXUP(void *p, struct NewGC *gc) { static int syntax_compiler_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int syntax_compiler_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int syntax_compiler_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define syntax_compiler_IS_ATOMIC 1 @@ -1772,11 +2558,15 @@ static int syntax_compiler_FIXUP(void *p, struct NewGC *gc) { static int thread_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); +#else + return 0; +#endif } static int thread_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Thread *pr = (Scheme_Thread *)p; gcMARK2(pr->next, gc); @@ -1864,8 +2654,6 @@ static int thread_val_MARK(void *p, struct NewGC *gc) { gcMARK2(pr->self_for_proc_chaperone, gc); - gcMARK2(pr->list_stack, gc); - gcMARK2(pr->kill_data, gc); gcMARK2(pr->private_kill_data, gc); gcMARK2(pr->private_kill_next, gc); @@ -1900,11 +2688,17 @@ static int thread_val_MARK(void *p, struct NewGC *gc) { } } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); +# endif +#endif } static int thread_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Thread *pr = (Scheme_Thread *)p; gcFIXUP2(pr->next, gc); @@ -1992,8 +2786,6 @@ static int thread_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(pr->self_for_proc_chaperone, gc); - gcFIXUP2(pr->list_stack, gc); - gcFIXUP2(pr->kill_data, gc); gcFIXUP2(pr->private_kill_data, gc); gcFIXUP2(pr->private_kill_next, gc); @@ -2028,8 +2820,13 @@ static int thread_val_FIXUP(void *p, struct NewGC *gc) { } } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Thread)); +# endif +#endif } #define thread_val_IS_ATOMIC 0 @@ -2037,12 +2834,16 @@ static int thread_val_FIXUP(void *p, struct NewGC *gc) { static int runstack_val_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS intptr_t *s = (intptr_t *)p; - return s[1]; +#else + return 0; +#endif } static int runstack_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED intptr_t *s = (intptr_t *)p; void **a, **b; a = (void **)s + 5 + s[2]; @@ -2051,11 +2852,17 @@ static int runstack_val_MARK(void *p, struct NewGC *gc) { gcMARK2(*a, gc); a++; } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return s[1]; +# endif +#endif } static int runstack_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED intptr_t *s = (intptr_t *)p; void **a, **b; a = (void **)s + 5 + s[2]; @@ -2079,8 +2886,13 @@ static int runstack_val_FIXUP(void *p, struct NewGC *gc) { *a = RUNSTACK_ZERO_VAL; a++; } +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return s[1]; +# endif +#endif } #define runstack_val_IS_ATOMIC 0 @@ -2088,30 +2900,45 @@ static int runstack_val_FIXUP(void *p, struct NewGC *gc) { static int prompt_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +#else + return 0; +#endif } static int prompt_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Prompt *pr = (Scheme_Prompt *)p; gcMARK2(pr->boundary_overflow_id, gc); if (!GC_merely_accounting()) gcMARK2(pr->runstack_boundary_start, gc); gcMARK2(pr->tag, gc); gcMARK2(pr->id, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +# endif +#endif } static int prompt_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Prompt *pr = (Scheme_Prompt *)p; gcFIXUP2(pr->boundary_overflow_id, gc); if (!GC_merely_accounting()) gcFIXUP2(pr->runstack_boundary_start, gc); gcFIXUP2(pr->tag, gc); gcFIXUP2(pr->id, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Prompt)); +# endif +#endif } #define prompt_val_IS_ATOMIC 0 @@ -2119,26 +2946,41 @@ static int prompt_val_FIXUP(void *p, struct NewGC *gc) { static int cont_mark_set_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Set)); +#else + return 0; +#endif } static int cont_mark_set_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Cont_Mark_Set *s = (Scheme_Cont_Mark_Set *)p; gcMARK2(s->chain, gc); gcMARK2(s->native_stack_trace, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Set)); +# endif +#endif } static int cont_mark_set_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Cont_Mark_Set *s = (Scheme_Cont_Mark_Set *)p; gcFIXUP2(s->chain, gc); gcFIXUP2(s->native_stack_trace, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Cont_Mark_Set)); +# endif +#endif } #define cont_mark_set_val_IS_ATOMIC 0 @@ -2146,28 +2988,43 @@ static int cont_mark_set_val_FIXUP(void *p, struct NewGC *gc) { static int sema_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Sema)); +#else + return 0; +#endif } static int sema_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Sema *s = (Scheme_Sema *)p; gcMARK2(s->first, gc); gcMARK2(s->last, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Sema)); +# endif +#endif } static int sema_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Sema *s = (Scheme_Sema *)p; gcFIXUP2(s->first, gc); gcFIXUP2(s->last, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Sema)); +# endif +#endif } #define sema_val_IS_ATOMIC 0 @@ -2175,11 +3032,15 @@ static int sema_val_FIXUP(void *p, struct NewGC *gc) { static int channel_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Channel)); +#else + return 0; +#endif } static int channel_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Channel *s = (Scheme_Channel *)p; gcMARK2(s->get_first, gc); @@ -2187,11 +3048,17 @@ static int channel_val_MARK(void *p, struct NewGC *gc) { gcMARK2(s->put_first, gc); gcMARK2(s->put_last, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Channel)); +# endif +#endif } static int channel_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Channel *s = (Scheme_Channel *)p; gcFIXUP2(s->get_first, gc); @@ -2199,8 +3066,13 @@ static int channel_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(s->put_first, gc); gcFIXUP2(s->put_last, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Channel)); +# endif +#endif } #define channel_val_IS_ATOMIC 0 @@ -2208,28 +3080,43 @@ static int channel_val_FIXUP(void *p, struct NewGC *gc) { static int channel_put_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Channel_Put)); +#else + return 0; +#endif } static int channel_put_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Channel_Put *s = (Scheme_Channel_Put *)p; gcMARK2(s->ch, gc); gcMARK2(s->val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Channel_Put)); +# endif +#endif } static int channel_put_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Channel_Put *s = (Scheme_Channel_Put *)p; gcFIXUP2(s->ch, gc); gcFIXUP2(s->val, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Channel_Put)); +# endif +#endif } #define channel_put_val_IS_ATOMIC 0 @@ -2237,30 +3124,45 @@ static int channel_put_val_FIXUP(void *p, struct NewGC *gc) { static int hash_table_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Hash_Table)); +#else + return 0; +#endif } static int hash_table_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Hash_Table *ht = (Scheme_Hash_Table *)p; gcMARK2(ht->keys, gc); gcMARK2(ht->vals, gc); gcMARK2(ht->mutex, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Hash_Table)); +# endif +#endif } static int hash_table_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Hash_Table *ht = (Scheme_Hash_Table *)p; gcFIXUP2(ht->keys, gc); gcFIXUP2(ht->vals, gc); gcFIXUP2(ht->mutex, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Hash_Table)); +# endif +#endif } #define hash_table_val_IS_ATOMIC 0 @@ -2268,28 +3170,43 @@ static int hash_table_val_FIXUP(void *p, struct NewGC *gc) { static int bucket_table_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Bucket_Table)); +#else + return 0; +#endif } static int bucket_table_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Bucket_Table *ht = (Scheme_Bucket_Table *)p; gcMARK2(ht->buckets, gc); gcMARK2(ht->mutex, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Bucket_Table)); +# endif +#endif } static int bucket_table_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Bucket_Table *ht = (Scheme_Bucket_Table *)p; gcFIXUP2(ht->buckets, gc); gcFIXUP2(ht->mutex, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Bucket_Table)); +# endif +#endif } #define bucket_table_val_IS_ATOMIC 0 @@ -2297,11 +3214,15 @@ static int bucket_table_val_FIXUP(void *p, struct NewGC *gc) { static int namespace_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Env)); +#else + return 0; +#endif } static int namespace_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Env *e = (Scheme_Env *)p; gcMARK2(e->module, gc); @@ -2344,11 +3265,17 @@ static int namespace_val_MARK(void *p, struct NewGC *gc) { gcMARK2(e->binding_names, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Env)); +# endif +#endif } static int namespace_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Env *e = (Scheme_Env *)p; gcFIXUP2(e->module, gc); @@ -2391,8 +3318,13 @@ static int namespace_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(e->binding_names, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Env)); +# endif +#endif } #define namespace_val_IS_ATOMIC 0 @@ -2400,24 +3332,39 @@ static int namespace_val_FIXUP(void *p, struct NewGC *gc) { static int module_reg_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Module_Registry)); +#else + return 0; +#endif } static int module_reg_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Module_Registry *r = (Scheme_Module_Registry *)p; gcMARK2(r->loaded, gc); gcMARK2(r->exports, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Registry)); +# endif +#endif } static int module_reg_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Module_Registry *r = (Scheme_Module_Registry *)p; gcFIXUP2(r->loaded, gc); gcFIXUP2(r->exports, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Registry)); +# endif +#endif } #define module_reg_val_IS_ATOMIC 0 @@ -2425,18 +3372,33 @@ static int module_reg_val_FIXUP(void *p, struct NewGC *gc) { static int random_state_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Random_State)); +#else + return 0; +#endif } static int random_state_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Random_State)); +# endif +#endif } static int random_state_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Random_State)); +# endif +#endif } #define random_state_val_IS_ATOMIC 1 @@ -2444,28 +3406,43 @@ static int random_state_val_FIXUP(void *p, struct NewGC *gc) { static int compilation_top_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Compilation_Top)); +#else + return 0; +#endif } static int compilation_top_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Compilation_Top *t = (Scheme_Compilation_Top *)p; gcMARK2(t->code, gc); gcMARK2(t->prefix, gc); gcMARK2(t->binding_namess, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Compilation_Top)); +# endif +#endif } static int compilation_top_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Compilation_Top *t = (Scheme_Compilation_Top *)p; gcFIXUP2(t->code, gc); gcFIXUP2(t->prefix, gc); gcFIXUP2(t->binding_namess, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Compilation_Top)); +# endif +#endif } #define compilation_top_val_IS_ATOMIC 0 @@ -2473,36 +3450,51 @@ static int compilation_top_val_FIXUP(void *p, struct NewGC *gc) { static int prefix_val_SIZE(void *p, struct NewGC *gc) { +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS Scheme_Prefix *pf = (Scheme_Prefix *)p; - return gcBYTES_TO_WORDS((sizeof(Scheme_Prefix) + ((pf->num_slots-mzFLEX_DELTA) * sizeof(Scheme_Object *)) + ((((pf->num_slots - pf->num_stxes) + 31) / 32) * sizeof(int)))); +#else + return 0; +#endif } static int prefix_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Prefix *pf = (Scheme_Prefix *)p; int i; for (i = pf->num_slots; i--; ) gcMARK2(pf->a[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Prefix) + ((pf->num_slots-mzFLEX_DELTA) * sizeof(Scheme_Object *)) + ((((pf->num_slots - pf->num_stxes) + 31) / 32) * sizeof(int)))); +# endif +#endif } static int prefix_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Prefix *pf = (Scheme_Prefix *)p; int i; for (i = pf->num_slots; i--; ) gcFIXUP2(pf->a[i], gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS((sizeof(Scheme_Prefix) + ((pf->num_slots-mzFLEX_DELTA) * sizeof(Scheme_Object *)) + ((((pf->num_slots - pf->num_stxes) + 31) / 32) * sizeof(int)))); +# endif +#endif } #define prefix_val_IS_ATOMIC 0 @@ -2510,30 +3502,45 @@ static int prefix_val_FIXUP(void *p, struct NewGC *gc) { static int resolve_prefix_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Resolve_Prefix)); +#else + return 0; +#endif } static int resolve_prefix_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Resolve_Prefix *rp = (Resolve_Prefix *)p; gcMARK2(rp->toplevels, gc); gcMARK2(rp->stxes, gc); gcMARK2(rp->delay_info_rpair, gc); gcMARK2(rp->src_insp_desc, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Resolve_Prefix)); +# endif +#endif } static int resolve_prefix_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Resolve_Prefix *rp = (Resolve_Prefix *)p; gcFIXUP2(rp->toplevels, gc); gcFIXUP2(rp->stxes, gc); gcFIXUP2(rp->delay_info_rpair, gc); gcFIXUP2(rp->src_insp_desc, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Resolve_Prefix)); +# endif +#endif } #define resolve_prefix_val_IS_ATOMIC 0 @@ -2541,30 +3548,45 @@ static int resolve_prefix_val_FIXUP(void *p, struct NewGC *gc) { static int comp_prefix_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Comp_Prefix)); +#else + return 0; +#endif } static int comp_prefix_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Comp_Prefix *cp = (Comp_Prefix *)p; gcMARK2(cp->toplevels, gc); gcMARK2(cp->inline_variants, gc); gcMARK2(cp->unbound, gc); gcMARK2(cp->stxes, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Comp_Prefix)); +# endif +#endif } static int comp_prefix_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Comp_Prefix *cp = (Comp_Prefix *)p; gcFIXUP2(cp->toplevels, gc); gcFIXUP2(cp->inline_variants, gc); gcFIXUP2(cp->unbound, gc); gcFIXUP2(cp->stxes, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Comp_Prefix)); +# endif +#endif } #define comp_prefix_val_IS_ATOMIC 0 @@ -2572,26 +3594,41 @@ static int comp_prefix_val_FIXUP(void *p, struct NewGC *gc) { static int svector_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +#else + return 0; +#endif } static int svector_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcMARK2(SCHEME_SVEC_VEC(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } static int svector_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Object *o = (Scheme_Object *)p; gcFIXUP2(SCHEME_SVEC_VEC(o), gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Simple_Object)); +# endif +#endif } #define svector_val_IS_ATOMIC 0 @@ -2599,11 +3636,15 @@ static int svector_val_FIXUP(void *p, struct NewGC *gc) { static int stx_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Stx)); +#else + return 0; +#endif } static int stx_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Stx *stx = (Scheme_Stx *)p; gcMARK2(stx->val, gc); gcMARK2(stx->srcloc, gc); @@ -2612,11 +3653,17 @@ static int stx_val_MARK(void *p, struct NewGC *gc) { gcMARK2(stx->shifts, gc); gcMARK2(stx->taints, gc); gcMARK2(stx->props, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Stx)); +# endif +#endif } static int stx_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Stx *stx = (Scheme_Stx *)p; gcFIXUP2(stx->val, gc); gcFIXUP2(stx->srcloc, gc); @@ -2625,8 +3672,13 @@ static int stx_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(stx->shifts, gc); gcFIXUP2(stx->taints, gc); gcFIXUP2(stx->props, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Stx)); +# endif +#endif } #define stx_val_IS_ATOMIC 0 @@ -2634,22 +3686,37 @@ static int stx_val_FIXUP(void *p, struct NewGC *gc) { static int stx_off_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Offset)); +#else + return 0; +#endif } static int stx_off_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Stx_Offset *o = (Scheme_Stx_Offset *)p; gcMARK2(o->src, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Offset)); +# endif +#endif } static int stx_off_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Stx_Offset *o = (Scheme_Stx_Offset *)p; gcFIXUP2(o->src, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Stx_Offset)); +# endif +#endif } #define stx_off_val_IS_ATOMIC 0 @@ -2657,11 +3724,15 @@ static int stx_off_val_FIXUP(void *p, struct NewGC *gc) { static int module_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Module)); +#else + return 0; +#endif } static int module_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Module *m = (Scheme_Module *)p; gcMARK2(m->phaseless, gc); @@ -2711,11 +3782,17 @@ static int module_val_MARK(void *p, struct NewGC *gc) { gcMARK2(m->submodule_ancestry, gc); gcMARK2(m->primitive, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module)); +# endif +#endif } static int module_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Module *m = (Scheme_Module *)p; gcFIXUP2(m->phaseless, gc); @@ -2765,8 +3842,13 @@ static int module_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(m->submodule_ancestry, gc); gcFIXUP2(m->primitive, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module)); +# endif +#endif } #define module_val_IS_ATOMIC 0 @@ -2774,11 +3856,15 @@ static int module_val_FIXUP(void *p, struct NewGC *gc) { static int exp_info_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Module_Export_Info)); +#else + return 0; +#endif } static int exp_info_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Module_Export_Info *m = (Scheme_Module_Export_Info *)p; gcMARK2(m->provide_protects, gc); @@ -2787,11 +3873,17 @@ static int exp_info_val_MARK(void *p, struct NewGC *gc) { gcMARK2(m->indirect_syntax_provides, gc); gcMARK2(m->accessible, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Export_Info)); +# endif +#endif } static int exp_info_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Module_Export_Info *m = (Scheme_Module_Export_Info *)p; gcFIXUP2(m->provide_protects, gc); @@ -2800,8 +3892,13 @@ static int exp_info_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(m->indirect_syntax_provides, gc); gcFIXUP2(m->accessible, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Export_Info)); +# endif +#endif } #define exp_info_val_IS_ATOMIC 0 @@ -2809,11 +3906,15 @@ static int exp_info_val_FIXUP(void *p, struct NewGC *gc) { static int module_phase_exports_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Module_Phase_Exports)); +#else + return 0; +#endif } static int module_phase_exports_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p; gcMARK2(m->phase_index, gc); @@ -2828,11 +3929,17 @@ static int module_phase_exports_val_MARK(void *p, struct NewGC *gc) { gcMARK2(m->ht, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Phase_Exports)); +# endif +#endif } static int module_phase_exports_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Module_Phase_Exports *m = (Scheme_Module_Phase_Exports *)p; gcFIXUP2(m->phase_index, gc); @@ -2847,8 +3954,13 @@ static int module_phase_exports_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(m->ht, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Phase_Exports)); +# endif +#endif } #define module_phase_exports_val_IS_ATOMIC 0 @@ -2856,11 +3968,15 @@ static int module_phase_exports_val_FIXUP(void *p, struct NewGC *gc) { static int module_exports_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +#else + return 0; +#endif } static int module_exports_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Module_Exports *m = (Scheme_Module_Exports *)p; gcMARK2(m->rt, gc); @@ -2870,11 +3986,17 @@ static int module_exports_val_MARK(void *p, struct NewGC *gc) { gcMARK2(m->src_modidx, gc); gcMARK2(m->modsrc, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +# endif +#endif } static int module_exports_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Module_Exports *m = (Scheme_Module_Exports *)p; gcFIXUP2(m->rt, gc); @@ -2884,8 +4006,13 @@ static int module_exports_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(m->src_modidx, gc); gcFIXUP2(m->modsrc, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Module_Exports)); +# endif +#endif } #define module_exports_val_IS_ATOMIC 0 @@ -2893,11 +4020,15 @@ static int module_exports_val_FIXUP(void *p, struct NewGC *gc) { static int modidx_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Modidx)); +#else + return 0; +#endif } static int modidx_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Modidx *modidx = (Scheme_Modidx *)p; gcMARK2(modidx->path, gc); @@ -2905,11 +4036,17 @@ static int modidx_val_MARK(void *p, struct NewGC *gc) { gcMARK2(modidx->resolved, gc); gcMARK2(modidx->shift_cache, gc); gcMARK2(modidx->cache_next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Modidx)); +# endif +#endif } static int modidx_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Modidx *modidx = (Scheme_Modidx *)p; gcFIXUP2(modidx->path, gc); @@ -2917,8 +4054,13 @@ static int modidx_val_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(modidx->resolved, gc); gcFIXUP2(modidx->shift_cache, gc); gcFIXUP2(modidx->cache_next, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Modidx)); +# endif +#endif } #define modidx_val_IS_ATOMIC 0 @@ -2926,30 +4068,45 @@ static int modidx_val_FIXUP(void *p, struct NewGC *gc) { static int guard_val_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Security_Guard)); +#else + return 0; +#endif } static int guard_val_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Security_Guard *g = (Scheme_Security_Guard *)p; gcMARK2(g->parent, gc); gcMARK2(g->file_proc, gc); gcMARK2(g->network_proc, gc); gcMARK2(g->link_proc, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Security_Guard)); +# endif +#endif } static int guard_val_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Security_Guard *g = (Scheme_Security_Guard *)p; gcFIXUP2(g->parent, gc); gcFIXUP2(g->file_proc, gc); gcFIXUP2(g->network_proc, gc); gcFIXUP2(g->link_proc, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Security_Guard)); +# endif +#endif } #define guard_val_IS_ATOMIC 0 @@ -2957,26 +4114,41 @@ static int guard_val_FIXUP(void *p, struct NewGC *gc) { static int buf_holder_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Jumpup_Buf_Holder)); +#else + return 0; +#endif } static int buf_holder_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Jumpup_Buf_Holder *h = (Scheme_Jumpup_Buf_Holder *)p; MARK_jmpup(&h->buf, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Jumpup_Buf_Holder)); +# endif +#endif } static int buf_holder_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Jumpup_Buf_Holder *h = (Scheme_Jumpup_Buf_Holder *)p; FIXUP_jmpup(&h->buf, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Jumpup_Buf_Holder)); +# endif +#endif } #define buf_holder_IS_ATOMIC 0 @@ -2984,22 +4156,37 @@ static int buf_holder_FIXUP(void *p, struct NewGC *gc) { static int mark_inspector_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Inspector)); +#else + return 0; +#endif } static int mark_inspector_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Inspector *i = (Scheme_Inspector *)p; gcMARK2(i->superior, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Inspector)); +# endif +#endif } static int mark_inspector_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Inspector *i = (Scheme_Inspector *)p; gcFIXUP2(i->superior, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Inspector)); +# endif +#endif } #define mark_inspector_IS_ATOMIC 0 @@ -3007,30 +4194,45 @@ static int mark_inspector_FIXUP(void *p, struct NewGC *gc) { static int mark_pipe_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Pipe)); +#else + return 0; +#endif } static int mark_pipe_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Pipe *pp = (Scheme_Pipe *)p; gcMARK2(pp->buf, gc); gcMARK2(pp->wakeup_on_read, gc); gcMARK2(pp->wakeup_on_write, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Pipe)); +# endif +#endif } static int mark_pipe_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Pipe *pp = (Scheme_Pipe *)p; gcFIXUP2(pp->buf, gc); gcFIXUP2(pp->wakeup_on_read, gc); gcFIXUP2(pp->wakeup_on_write, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Pipe)); +# endif +#endif } #define mark_pipe_IS_ATOMIC 0 @@ -3038,11 +4240,15 @@ static int mark_pipe_FIXUP(void *p, struct NewGC *gc) { static int mark_logger_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Logger)); +#else + return 0; +#endif } static int mark_logger_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Logger *l = (Scheme_Logger *)p; gcMARK2(l->name, gc); gcMARK2(l->parent, gc); @@ -3052,11 +4258,17 @@ static int mark_logger_MARK(void *p, struct NewGC *gc) { gcMARK2(l->stderr_level, gc); gcMARK2(l->propagate_level, gc); gcMARK2(l->readers, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Logger)); +# endif +#endif } static int mark_logger_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Logger *l = (Scheme_Logger *)p; gcFIXUP2(l->name, gc); gcFIXUP2(l->parent, gc); @@ -3066,8 +4278,13 @@ static int mark_logger_FIXUP(void *p, struct NewGC *gc) { gcFIXUP2(l->stderr_level, gc); gcFIXUP2(l->propagate_level, gc); gcFIXUP2(l->readers, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Logger)); +# endif +#endif } #define mark_logger_IS_ATOMIC 0 @@ -3075,28 +4292,43 @@ static int mark_logger_FIXUP(void *p, struct NewGC *gc) { static int mark_log_reader_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Scheme_Log_Reader)); +#else + return 0; +#endif } static int mark_log_reader_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Scheme_Log_Reader *lr = (Scheme_Log_Reader *)p; gcMARK2(lr->level, gc); gcMARK2(lr->sema, gc); gcMARK2(lr->head, gc); gcMARK2(lr->tail, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Log_Reader)); +# endif +#endif } static int mark_log_reader_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Scheme_Log_Reader *lr = (Scheme_Log_Reader *)p; gcFIXUP2(lr->level, gc); gcFIXUP2(lr->sema, gc); gcFIXUP2(lr->head, gc); gcFIXUP2(lr->tail, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Scheme_Log_Reader)); +# endif +#endif } #define mark_log_reader_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmark_validate.inc b/racket/src/racket/src/mzmark_validate.inc index 76844350f7..f85aedb5d2 100644 --- a/racket/src/racket/src/mzmark_validate.inc +++ b/racket/src/racket/src/mzmark_validate.inc @@ -1,28 +1,43 @@ /* >>>> Generated by mkmark.rkt from mzmarksrc.c <<<< */ static int mark_validate_clearing_SIZE(void *p, struct NewGC *gc) { - return +#ifndef GC_NO_SIZE_NEEDED_FROM_PROCS gcBYTES_TO_WORDS(sizeof(Validate_Clearing)); +#else + return 0; +#endif } static int mark_validate_clearing_MARK(void *p, struct NewGC *gc) { +#ifndef GC_NO_MARK_PROCEDURE_NEEDED Validate_Clearing *vc = (Validate_Clearing *)p; gcMARK2(vc->stack, gc); gcMARK2(vc->ncstack, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Validate_Clearing)); +# endif +#endif } static int mark_validate_clearing_FIXUP(void *p, struct NewGC *gc) { +#ifndef GC_NO_FIXUP_PROCEDURE_NEEDED Validate_Clearing *vc = (Validate_Clearing *)p; gcFIXUP2(vc->stack, gc); gcFIXUP2(vc->ncstack, gc); +# ifdef GC_NO_SIZE_NEEDED_FROM_PROCS + return 0; +# else return gcBYTES_TO_WORDS(sizeof(Validate_Clearing)); +# endif +#endif } #define mark_validate_clearing_IS_ATOMIC 0 diff --git a/racket/src/racket/src/mzmarksrc.c b/racket/src/racket/src/mzmarksrc.c index 61a22b3cc0..35316c367b 100644 --- a/racket/src/racket/src/mzmarksrc.c +++ b/racket/src/racket/src/mzmarksrc.c @@ -565,11 +565,9 @@ bstring_obj { } symbol_obj { - Scheme_Symbol *s = (Scheme_Symbol *)p; - mark: size: - gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + s->len + 1 - mzFLEX4_DELTA); + gcBYTES_TO_WORDS(sizeof(Scheme_Symbol) + ((Scheme_Symbol *)p)->len + 1 - mzFLEX4_DELTA); } cons_cell { @@ -597,31 +595,25 @@ vector_obj { } fxvector_obj { - Scheme_Vector *vec = (Scheme_Vector *)p; - mark: size: gcBYTES_TO_WORDS((sizeof(Scheme_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); + + ((((Scheme_Vector *)p)->size - mzFLEX_DELTA) * sizeof(Scheme_Object *)))); } flvector_obj { - Scheme_Double_Vector *vec = (Scheme_Double_Vector *)p; - mark: size: gcBYTES_TO_WORDS((sizeof(Scheme_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(double)))); + + ((((Scheme_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(double)))); } #ifdef MZ_LONG_DOUBLE extflvector_obj { - Scheme_Long_Double_Vector *vec = (Scheme_Long_Double_Vector *)p; - mark: size: gcBYTES_TO_WORDS((sizeof(Scheme_Long_Double_Vector) - + ((vec->size - mzFLEX_DELTA) * sizeof(long double)))); + + ((((Scheme_Long_Double_Vector *)p)->size - mzFLEX_DELTA) * sizeof(long double)))); } #endif @@ -771,8 +763,6 @@ thread_val { gcMARK2(pr->self_for_proc_chaperone, gc); - gcMARK2(pr->list_stack, gc); - gcMARK2(pr->kill_data, gc); gcMARK2(pr->private_kill_data, gc); gcMARK2(pr->private_kill_next, gc); @@ -1270,6 +1260,8 @@ mark_comp_env { gcMARK2(e->prefix, gc); gcMARK2(e->next, gc); gcMARK2(e->scopes, gc); + gcMARK2(e->value_name, gc); + gcMARK2(e->observer, gc); gcMARK2(e->binders, gc); gcMARK2(e->bindings, gc); gcMARK2(e->vals, gc); @@ -1429,17 +1421,6 @@ END optimize; START eval; -mark_comp_info { - mark: - Scheme_Compile_Info *i = (Scheme_Compile_Info *)p; - - gcMARK2(i->value_name, gc); - gcMARK2(i->observer, gc); - - size: - gcBYTES_TO_WORDS(sizeof(Scheme_Compile_Info)); -} - mark_saved_stack { mark: Scheme_Saved_Stack *saved = (Scheme_Saved_Stack *)p; diff --git a/racket/src/racket/src/read.c b/racket/src/racket/src/read.c index 156e711f12..d358c322fc 100644 --- a/racket/src/racket/src/read.c +++ b/racket/src/racket/src/read.c @@ -183,8 +183,6 @@ typedef struct ReadParams { } ReadParams; #define THREAD_FOR_LOCALS scheme_current_thread -#define local_list_stack (THREAD_FOR_LOCALS->list_stack) -#define local_list_stack_pos (THREAD_FOR_LOCALS->list_stack_pos) static Scheme_Object *read_list(Scheme_Object *port, Scheme_Object *stxsrc, intptr_t line, intptr_t col, intptr_t pos, @@ -560,51 +558,6 @@ void scheme_init_variable_references_constants() } -static Scheme_Simple_Object *malloc_list_stack() -{ -#ifdef MZ_PRECISE_GC - intptr_t sz = sizeof(Scheme_Simple_Object) * NUM_CELLS_PER_STACK; - Scheme_Simple_Object *r; - - if (sz < GC_malloc_stays_put_threshold()) { - sz = GC_malloc_stays_put_threshold(); - while (sz % sizeof(Scheme_Simple_Object)) { - sz++; - } - } - - r = (Scheme_Simple_Object *)GC_malloc_array_tagged(sz); - - /* Must set the tag on the first element: */ - r[0].iso.so.type = scheme_pair_type; - return r; -#else - return MALLOC_N_RT(Scheme_Simple_Object, NUM_CELLS_PER_STACK); -#endif -} - -void scheme_alloc_list_stack(Scheme_Thread *p) -{ - Scheme_Simple_Object *sa; - p->list_stack_pos = 0; - sa = malloc_list_stack(); - p->list_stack = sa; -} - -void scheme_clean_list_stack(Scheme_Thread *p) -{ - if (p->list_stack) { - memset(p->list_stack + p->list_stack_pos, 0, - (NUM_CELLS_PER_STACK - p->list_stack_pos) * sizeof(Scheme_Simple_Object)); -#ifdef MZ_PRECISE_GC - if (!p->list_stack_pos) { - /* Must set the tag on the first element: */ - p->list_stack[0].iso.so.type = scheme_pair_type; - } -#endif - } -} - static void track_indentation(Scheme_Object *indentation, int line, int col) { if (!SCHEME_NULLP(indentation)) { diff --git a/racket/src/racket/src/schemef.h b/racket/src/racket/src/schemef.h index 704f18ba8b..c5e8933b2b 100644 --- a/racket/src/racket/src/schemef.h +++ b/racket/src/racket/src/schemef.h @@ -412,7 +412,6 @@ MZ_EXTERN void *GC_malloc_atomic(size_t size_in_bytes); MZ_EXTERN void *GC_malloc_one_tagged(size_t size_in_bytes); MZ_EXTERN void *GC_malloc_atomic_uncollectable(size_t size_in_bytes); MZ_EXTERN void *scheme_malloc_uncollectable(size_t size_in_bytes); -MZ_EXTERN void *GC_malloc_array_tagged(size_t size_in_bytes); MZ_EXTERN void *GC_malloc_allow_interior(size_t size_in_bytes); MZ_EXTERN void *GC_malloc_atomic_allow_interior(size_t size_in_bytes); MZ_EXTERN void *GC_malloc_tagged_allow_interior(size_t size_in_bytes); diff --git a/racket/src/racket/src/schemex.h b/racket/src/racket/src/schemex.h index 2c2384f1e7..242906670e 100644 --- a/racket/src/racket/src/schemex.h +++ b/racket/src/racket/src/schemex.h @@ -320,7 +320,6 @@ void *(*GC_malloc_atomic)(size_t size_in_bytes); void *(*GC_malloc_one_tagged)(size_t size_in_bytes); void *(*GC_malloc_atomic_uncollectable)(size_t size_in_bytes); void *(*scheme_malloc_uncollectable)(size_t size_in_bytes); -void *(*GC_malloc_array_tagged)(size_t size_in_bytes); void *(*GC_malloc_allow_interior)(size_t size_in_bytes); void *(*GC_malloc_atomic_allow_interior)(size_t size_in_bytes); void *(*GC_malloc_tagged_allow_interior)(size_t size_in_bytes); diff --git a/racket/src/racket/src/schemex.inc b/racket/src/racket/src/schemex.inc index 1eb59eaa8f..741ff989cc 100644 --- a/racket/src/racket/src/schemex.inc +++ b/racket/src/racket/src/schemex.inc @@ -223,7 +223,6 @@ scheme_extension_table->GC_malloc_one_tagged = GC_malloc_one_tagged; scheme_extension_table->GC_malloc_atomic_uncollectable = GC_malloc_atomic_uncollectable; scheme_extension_table->scheme_malloc_uncollectable = scheme_malloc_uncollectable; - scheme_extension_table->GC_malloc_array_tagged = GC_malloc_array_tagged; scheme_extension_table->GC_malloc_allow_interior = GC_malloc_allow_interior; scheme_extension_table->GC_malloc_atomic_allow_interior = GC_malloc_atomic_allow_interior; scheme_extension_table->GC_malloc_tagged_allow_interior = GC_malloc_tagged_allow_interior; diff --git a/racket/src/racket/src/schemexm.h b/racket/src/racket/src/schemexm.h index cfd1bfdcf0..318cad8505 100644 --- a/racket/src/racket/src/schemexm.h +++ b/racket/src/racket/src/schemexm.h @@ -223,7 +223,6 @@ #define GC_malloc_one_tagged (scheme_extension_table->GC_malloc_one_tagged) #define GC_malloc_atomic_uncollectable (scheme_extension_table->GC_malloc_atomic_uncollectable) #define scheme_malloc_uncollectable (scheme_extension_table->scheme_malloc_uncollectable) -#define GC_malloc_array_tagged (scheme_extension_table->GC_malloc_array_tagged) #define GC_malloc_allow_interior (scheme_extension_table->GC_malloc_allow_interior) #define GC_malloc_atomic_allow_interior (scheme_extension_table->GC_malloc_atomic_allow_interior) #define GC_malloc_tagged_allow_interior (scheme_extension_table->GC_malloc_tagged_allow_interior) diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 6bda377bfa..ac938cf7bb 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -112,7 +112,6 @@ extern XFORM_NONGCING int scheme_intern_prim_opt_flags(int); #ifdef MZTAG_REQUIRED # define scheme_malloc_rt(x) scheme_malloc_tagged(x) # define MALLOC_ONE_RT(x) MALLOC_ONE_TAGGED(x) -# define MALLOC_N_RT(x,c) MALLOC_N_TAGGED(x,c) # define MALLOC_ONE_WEAK(x) _MALLOC_N(x, 1, scheme_malloc) # define MALLOC_N_WEAK(x,c) _MALLOC_N(x, c, scheme_malloc) # define MALLOC_ONE_TAGGED_WEAK(x) _MALLOC_N(x, 1, scheme_malloc_tagged) @@ -120,7 +119,6 @@ extern XFORM_NONGCING int scheme_intern_prim_opt_flags(int); #else # define scheme_malloc_rt(x) scheme_malloc(x) # define MALLOC_ONE_RT(x) MALLOC_ONE(x) -# define MALLOC_N_RT(x,c) MALLOC_N(x,c) # define MALLOC_ONE_WEAK(x) MALLOC_ONE_ATOMIC(x) # define MALLOC_N_WEAK(x,c) MALLOC_N_ATOMIC(x,c) # define MALLOC_ONE_WEAK_RT(x) MALLOC_ONE_WEAK(x) @@ -2574,6 +2572,9 @@ typedef struct Scheme_Comp_Env Scheme_Object *scopes; /* can be NULL, a scope, a scope set, or (cons scope-set nobind-scope) */ + Scheme_Object *value_name; /* propagated down */ + Scheme_Object *observer; /* parameter's value (to avoid looking up every time) */ + /* local bindings; */ mzshort num_bindings; /* number of `values' slots */ Scheme_Object **binders; /* identifiers */ @@ -2618,11 +2619,9 @@ typedef struct Scheme_Comp_Env typedef struct Scheme_Compile_Expand_Info { - MZTAG_IF_REQUIRED + /* allocated as atomic */ short comp; short comp_flags; - Scheme_Object *value_name; - Scheme_Object *observer; char dont_mark_local_use; char resolve_module_ids; char pre_unwrapped; @@ -2970,7 +2969,7 @@ void scheme_merge_undefineds(Scheme_Comp_Env *exp_env, Scheme_Comp_Env *env); void scheme_bind_syntaxes(const char *where, Scheme_Object *names, Scheme_Object *a, Scheme_Env *exp_env, Scheme_Object *insp, - Scheme_Compile_Expand_Info *rec, int drec, + Scheme_Compile_Expand_Info *rec, int drec, Scheme_Object *observer, Scheme_Comp_Env *stx_env, Scheme_Comp_Env *rhs_env, int *_pos, Scheme_Object *rename_rib, int replace_value); int scheme_is_sub_env(Scheme_Comp_Env *stx_env, Scheme_Comp_Env *env); @@ -3130,7 +3129,7 @@ void *scheme_module_run_finish(Scheme_Env *menv, Scheme_Env *env); void *scheme_module_exprun_finish(Scheme_Env *menv, int set_ns); void *scheme_module_start_finish(struct Start_Module_Args *a); -Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Compile_Info *rec, int drec); +Scheme_Object *scheme_build_closure_name(Scheme_Object *code, Scheme_Comp_Env *env); #define SCHEME_SYNTAX(obj) SCHEME_PTR1_VAL(obj) #define SCHEME_SYNTAX_EXP(obj) SCHEME_PTR2_VAL(obj) diff --git a/racket/src/racket/src/stypes.h b/racket/src/racket/src/stypes.h index 68b9530d19..96784c153c 100644 --- a/racket/src/racket/src/stypes.h +++ b/racket/src/racket/src/stypes.h @@ -233,74 +233,73 @@ enum { scheme_rt_resolve_info, /* 205 */ scheme_rt_unresolve_info, /* 206 */ scheme_rt_optimize_info, /* 207 */ - scheme_rt_compile_info, /* 208 */ - scheme_rt_cont_mark, /* 209 */ - scheme_rt_saved_stack, /* 210 */ - scheme_rt_reply_item, /* 211 */ - scheme_rt_closure_info, /* 212 */ - scheme_rt_overflow, /* 213 */ - scheme_rt_overflow_jmp, /* 214 */ - scheme_rt_meta_cont, /* 215 */ - scheme_rt_dyn_wind_cell, /* 216 */ - scheme_rt_dyn_wind_info, /* 217 */ - scheme_rt_dyn_wind, /* 218 */ - scheme_rt_dup_check, /* 219 */ - scheme_rt_thread_memory, /* 220 */ - scheme_rt_input_file, /* 221 */ - scheme_rt_input_fd, /* 222 */ - scheme_rt_oskit_console_input, /* 223 */ - scheme_rt_tested_input_file, /* 224 */ - scheme_rt_tested_output_file, /* 225 */ - scheme_rt_indexed_string, /* 226 */ - scheme_rt_output_file, /* 227 */ - scheme_rt_load_handler_data, /* 228 */ - scheme_rt_pipe, /* 229 */ - scheme_rt_beos_process, /* 230 */ - scheme_rt_system_child, /* 231 */ - scheme_rt_tcp, /* 232 */ - scheme_rt_write_data, /* 233 */ - scheme_rt_tcp_select_info, /* 234 */ - scheme_rt_param_data, /* 235 */ - scheme_rt_will, /* 236 */ - scheme_rt_linker_name, /* 237 */ - scheme_rt_param_map, /* 238 */ - scheme_rt_finalization, /* 239 */ - scheme_rt_finalizations, /* 240 */ - scheme_rt_cpp_object, /* 241 */ - scheme_rt_cpp_array_object, /* 242 */ - scheme_rt_stack_object, /* 243 */ - scheme_rt_preallocated_object, /* 244 */ - scheme_thread_hop_type, /* 245 */ - scheme_rt_srcloc, /* 246 */ - scheme_rt_evt, /* 247 */ - scheme_rt_syncing, /* 248 */ - scheme_rt_comp_prefix, /* 249 */ - scheme_rt_user_input, /* 250 */ - scheme_rt_user_output, /* 251 */ - scheme_rt_compact_port, /* 252 */ - scheme_rt_read_special_dw, /* 253 */ - scheme_rt_regwork, /* 254 */ - scheme_rt_rx_lazy_string, /* 255 */ - scheme_rt_buf_holder, /* 256 */ - scheme_rt_parameterization, /* 257 */ - scheme_rt_print_params, /* 258 */ - scheme_rt_read_params, /* 259 */ - scheme_rt_native_code, /* 260 */ - scheme_rt_native_code_plus_case, /* 261 */ - scheme_rt_jitter_data, /* 262 */ - scheme_rt_module_exports, /* 263 */ - scheme_rt_delay_load_info, /* 264 */ - scheme_rt_marshal_info, /* 265 */ - scheme_rt_unmarshal_info, /* 266 */ - scheme_rt_runstack, /* 267 */ - scheme_rt_sfs_info, /* 268 */ - scheme_rt_validate_clearing, /* 269 */ - scheme_rt_lightweight_cont, /* 270 */ - scheme_rt_export_info, /* 271 */ - scheme_rt_cont_jmp, /* 272 */ - scheme_rt_letrec_check_frame, /* 273 */ + scheme_rt_cont_mark, /* 208 */ + scheme_rt_saved_stack, /* 209 */ + scheme_rt_reply_item, /* 210 */ + scheme_rt_closure_info, /* 211 */ + scheme_rt_overflow, /* 212 */ + scheme_rt_overflow_jmp, /* 213 */ + scheme_rt_meta_cont, /* 214 */ + scheme_rt_dyn_wind_cell, /* 215 */ + scheme_rt_dyn_wind_info, /* 216 */ + scheme_rt_dyn_wind, /* 217 */ + scheme_rt_dup_check, /* 218 */ + scheme_rt_thread_memory, /* 219 */ + scheme_rt_input_file, /* 220 */ + scheme_rt_input_fd, /* 221 */ + scheme_rt_oskit_console_input, /* 222 */ + scheme_rt_tested_input_file, /* 223 */ + scheme_rt_tested_output_file, /* 224 */ + scheme_rt_indexed_string, /* 225 */ + scheme_rt_output_file, /* 226 */ + scheme_rt_load_handler_data, /* 227 */ + scheme_rt_pipe, /* 228 */ + scheme_rt_beos_process, /* 229 */ + scheme_rt_system_child, /* 230 */ + scheme_rt_tcp, /* 231 */ + scheme_rt_write_data, /* 232 */ + scheme_rt_tcp_select_info, /* 233 */ + scheme_rt_param_data, /* 234 */ + scheme_rt_will, /* 235 */ + scheme_rt_linker_name, /* 236 */ + scheme_rt_param_map, /* 237 */ + scheme_rt_finalization, /* 238 */ + scheme_rt_finalizations, /* 239 */ + scheme_rt_cpp_object, /* 240 */ + scheme_rt_cpp_array_object, /* 241 */ + scheme_rt_stack_object, /* 242 */ + scheme_rt_preallocated_object, /* 243 */ + scheme_thread_hop_type, /* 244 */ + scheme_rt_srcloc, /* 245 */ + scheme_rt_evt, /* 246 */ + scheme_rt_syncing, /* 247 */ + scheme_rt_comp_prefix, /* 248 */ + scheme_rt_user_input, /* 249 */ + scheme_rt_user_output, /* 250 */ + scheme_rt_compact_port, /* 251 */ + scheme_rt_read_special_dw, /* 252 */ + scheme_rt_regwork, /* 253 */ + scheme_rt_rx_lazy_string, /* 254 */ + scheme_rt_buf_holder, /* 255 */ + scheme_rt_parameterization, /* 256 */ + scheme_rt_print_params, /* 257 */ + scheme_rt_read_params, /* 258 */ + scheme_rt_native_code, /* 259 */ + scheme_rt_native_code_plus_case, /* 260 */ + scheme_rt_jitter_data, /* 261 */ + scheme_rt_module_exports, /* 262 */ + scheme_rt_delay_load_info, /* 263 */ + scheme_rt_marshal_info, /* 264 */ + scheme_rt_unmarshal_info, /* 265 */ + scheme_rt_runstack, /* 266 */ + scheme_rt_sfs_info, /* 267 */ + scheme_rt_validate_clearing, /* 268 */ + scheme_rt_lightweight_cont, /* 269 */ + scheme_rt_export_info, /* 270 */ + scheme_rt_cont_jmp, /* 271 */ + scheme_rt_letrec_check_frame, /* 272 */ #endif - scheme_deferred_expr_type, /* 274 */ + scheme_deferred_expr_type, /* 273 */ _scheme_last_type_ }; diff --git a/racket/src/racket/src/thread.c b/racket/src/racket/src/thread.c index 0ff1b3da06..b31d01f414 100644 --- a/racket/src/racket/src/thread.c +++ b/racket/src/racket/src/thread.c @@ -2413,8 +2413,6 @@ static Scheme_Thread *make_thread(Scheme_Config *config, process->ran_some = 1; - process->list_stack = NULL; - scheme_gmp_tls_init(process->gmp_tls); if (prefix) { @@ -2946,8 +2944,6 @@ static void thread_is_dead(Scheme_Thread *r) r->suspended_box = NULL; r->resumed_box = NULL; - r->list_stack = NULL; - r->t_set_parent = NULL; r->dw = NULL; r->init_config = NULL; @@ -3049,11 +3045,6 @@ static void remove_thread(Scheme_Thread *r) r->ku.multiple.array = NULL; r->values_buffer = NULL; -#ifndef SENORA_GC_NO_FREE - if (r->list_stack) - GC_free(r->list_stack); -#endif - thread_is_dead(r); /* In case we kill a thread while in a bignum operation: */ @@ -3530,9 +3521,6 @@ Scheme_Object *scheme_call_as_nested_thread(int argc, Scheme_Object *argv[], voi } np->tail_buffer_size = p->tail_buffer_size; - np->list_stack = p->list_stack; - np->list_stack_pos = p->list_stack_pos; - scheme_gmp_tls_init(np->gmp_tls); /* np->prev = NULL; - 0ed by allocation */ @@ -9018,9 +9006,6 @@ static void prepare_thread_for_GC(Scheme_Object *t) } p->spare_runstack = NULL; - - /* zero ununsed part of list stack */ - scheme_clean_list_stack(p); } void scheme_prepare_this_thread_for_GC(Scheme_Thread *p)