diff options
author | Andy Wingo <wingo@pobox.com> | 2008-08-06 00:13:31 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2008-08-06 00:13:31 +0200 |
commit | 1865ad56804be4da82a6247a868a81648ebe87b3 (patch) | |
tree | 7706d30765423a7d38d945b2fd3f9a5e7aa43301 /src/vm_system.c | |
parent | 6287726adc8cb0f667657e2af757c95c072023e4 (diff) | |
download | guile-1865ad56804be4da82a6247a868a81648ebe87b3.tar.gz |
sync registers before calling c functions, really
* src/vm_loader.c:
* src/vm_scheme.c: Use SYNC_REGISTER, although it's the same as
SYNC_BEFORE_GC. A style issue?
* src/vm_system.c (call, tail-call): Explicitly do a SYNC_REGISTER, not
relying on POP_LIST to do it for us, because POP_LIST won't do it if
there are 0 arguments. The way that this manifested itself to me was
badness after the second (read) call in a repl session. I wish I
understood more about this problem.
Diffstat (limited to 'src/vm_system.c')
-rw-r--r-- | src/vm_system.c | 2 |
1 files changed, 2 insertions, 0 deletions
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; } |