diff --git a/src/vm_loader.c b/src/vm_loader.c index 0fd8b6b33..d0046f345 100644 --- a/src/vm_loader.c +++ b/src/vm_loader.c @@ -51,7 +51,7 @@ VM_DEFINE_LOADER (load_integer, "load-integer") long val = 0; while (len-- > 0) val = (val << 8) + FETCH (); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_from_ulong (val)); NEXT; } @@ -64,7 +64,7 @@ VM_DEFINE_LOADER (load_number, "load-number") size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_string_to_number (scm_from_locale_stringn ((char *)ip, len), SCM_UNDEFINED /* radix = 10 */)); /* Was: scm_istring2number (ip, len, 10)); */ @@ -76,7 +76,7 @@ VM_DEFINE_LOADER (load_string, "load-string") { size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_from_locale_stringn ((char *)ip, len)); /* Was: scm_makfromstr (ip, len, 0) */ ip += len; @@ -87,7 +87,7 @@ VM_DEFINE_LOADER (load_symbol, "load-symbol") { size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_from_locale_symboln ((char *)ip, len)); ip += len; NEXT; @@ -97,7 +97,7 @@ VM_DEFINE_LOADER (load_keyword, "load-keyword") { size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_from_locale_keywordn ((char *)ip, len)); ip += len; NEXT; @@ -107,7 +107,7 @@ VM_DEFINE_LOADER (load_module, "load-module") { size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_c_lookup_env (scm_from_locale_symboln ((char *)ip, len))); ip += len; NEXT; @@ -120,7 +120,7 @@ VM_DEFINE_LOADER (load_program, "load-program") struct scm_program *p; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); prog = scm_c_make_program (ip, len, program); p = SCM_PROGRAM_DATA (prog); ip += len; @@ -188,7 +188,7 @@ VM_DEFINE_INSTRUCTION (link_now, "link-now", 0, 1, 1) { SCM sym; POP (sym); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_lookup (sym)); /* might longjmp */ NEXT; } @@ -198,7 +198,7 @@ VM_DEFINE_INSTRUCTION (link_later, "link-later", 0, 2, 1) SCM modname, sym; POP (sym); POP (modname); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_cons (modname, sym)); NEXT; } @@ -209,11 +209,11 @@ VM_DEFINE_LOADER (define, "define") size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); sym = scm_from_locale_symboln ((char *)ip, len); ip += len; - SYNC_BEFORE_GC (); + SYNC_REGISTER (); PUSH (scm_sym2var (sym, scm_current_module_lookup_closure (), SCM_BOOL_T)); NEXT; } @@ -224,7 +224,7 @@ VM_DEFINE_LOADER (late_bind, "late-bind") size_t len; FETCH_LENGTH (len); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); sym = scm_from_locale_symboln ((char *)ip, len); ip += len; diff --git a/src/vm_scheme.c b/src/vm_scheme.c index 2408f6415..d074abd87 100644 --- a/src/vm_scheme.c +++ b/src/vm_scheme.c @@ -89,7 +89,7 @@ VM_DEFINE_FUNCTION (eqv, "eqv?", 2) RETURN (SCM_BOOL_T); if (SCM_IMP (x) || SCM_IMP (y)) RETURN (SCM_BOOL_F); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_eqv_p (x, y)); } @@ -100,7 +100,7 @@ VM_DEFINE_FUNCTION (equal, "equal?", 2) RETURN (SCM_BOOL_T); if (SCM_IMP (x) || SCM_IMP (y)) RETURN (SCM_BOOL_F); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_equal_p (x, y)); } @@ -212,7 +212,7 @@ VM_DEFINE_FUNCTION (ge, "ge?", 2) if (SCM_FIXABLE (n)) \ RETURN (SCM_I_MAKINUM (n)); \ } \ - SYNC_BEFORE_GC (); \ + SYNC_REGISTER (); \ RETURN (SEXP); \ } @@ -226,7 +226,7 @@ VM_DEFINE_FUNCTION (ge, "ge?", 2) if (SCM_FIXABLE (n)) \ RETURN (SCM_I_MAKINUM (n)); \ } \ - SYNC_BEFORE_GC (); \ + SYNC_REGISTER (); \ RETURN (SFUNC (x, y)); \ } @@ -243,35 +243,35 @@ VM_DEFINE_FUNCTION (sub, "sub", 2) VM_DEFINE_FUNCTION (mul, "mul", 2) { ARGS2 (x, y); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_product (x, y)); } VM_DEFINE_FUNCTION (div, "div", 2) { ARGS2 (x, y); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_divide (x, y)); } VM_DEFINE_FUNCTION (quo, "quo", 2) { ARGS2 (x, y); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_quotient (x, y)); } VM_DEFINE_FUNCTION (rem, "rem", 2) { ARGS2 (x, y); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_remainder (x, y)); } VM_DEFINE_FUNCTION (mod, "mod", 2) { ARGS2 (x, y); - SYNC_BEFORE_GC (); + SYNC_REGISTER (); RETURN (scm_modulo (x, y)); } diff --git a/src/vm_system.c b/src/vm_system.c index d1b9f61aa..4125a456c 100644 --- a/src/vm_system.c +++ b/src/vm_system.c @@ -480,6 +480,7 @@ VM_DEFINE_INSTRUCTION (call, "call", 1, -1, 1) SCM args; POP_LIST (nargs); POP (args); + SYNC_REGISTER (); *sp = scm_apply (x, args, SCM_EOL); NEXT; } @@ -601,6 +602,7 @@ VM_DEFINE_INSTRUCTION (tail_call, "tail-call", 1, -1, 1) SCM args; POP_LIST (nargs); POP (args); + SYNC_REGISTER (); *sp = scm_apply (x, args, SCM_EOL); goto vm_return; }