summaryrefslogtreecommitdiff
path: root/src/vm_system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-08-06 00:13:31 +0200
committerAndy Wingo <wingo@pobox.com>2008-08-06 00:13:31 +0200
commit1865ad56804be4da82a6247a868a81648ebe87b3 (patch)
tree7706d30765423a7d38d945b2fd3f9a5e7aa43301 /src/vm_system.c
parent6287726adc8cb0f667657e2af757c95c072023e4 (diff)
downloadguile-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.c2
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;
}