summaryrefslogtreecommitdiff
path: root/src/vm_system.c
diff options
context:
space:
mode:
authorKeisuke Nishida <kxn30@po.cwru.edu>2001-04-06 05:00:10 +0000
committerKeisuke Nishida <kxn30@po.cwru.edu>2001-04-06 05:00:10 +0000
commit499a4c07c79efe4474650fb9e49da9069c1acdd1 (patch)
tree2a8fd6a1bb964b7a94fc35890d2672f34b3682d6 /src/vm_system.c
parent3d5ee0cdcc593ce556166638cbc1ef076d2b7c49 (diff)
downloadguile-499a4c07c79efe4474650fb9e49da9069c1acdd1.tar.gz
*** empty log message ***
Diffstat (limited to 'src/vm_system.c')
-rw-r--r--src/vm_system.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/vm_system.c b/src/vm_system.c
index 1b4ea5b49..bf8d990b5 100644
--- a/src/vm_system.c
+++ b/src/vm_system.c
@@ -62,7 +62,7 @@ VM_DEFINE_INSTRUCTION (halt, "halt", 0, 0, 0)
return ret;
}
-VM_DEFINE_INSTRUCTION (drop, "drop", 0, 1, 0)
+VM_DEFINE_INSTRUCTION (drop, "drop", 0, 0, 0)
{
DROP ();
NEXT;
@@ -216,6 +216,7 @@ VM_DEFINE_INSTRUCTION (external_set, "external-set", 1, 1, 0)
VM_DEFINE_INSTRUCTION (variable_set, "variable-set", 0, 1, 0)
{
VARIABLE_SET (sp[0], sp[1]);
+ scm_set_object_property_x (sp[1], scm_sym_name, SCM_CAR (sp[0]));
sp += 2;
NEXT;
}
@@ -295,7 +296,7 @@ VM_DEFINE_INSTRUCTION (call, "call", 1, -1, 1)
{
int i;
vm_call_program:
- CACHE_PROGRAM (program);
+ CACHE_PROGRAM ();
INIT_ARGS ();
NEW_FRAME ();
@@ -317,6 +318,7 @@ VM_DEFINE_INSTRUCTION (call, "call", 1, -1, 1)
if (!SCM_FALSEP (scm_procedure_p (program)))
{
POP_LIST (nargs);
+ SYNC_BEFORE_GC ();
*sp = scm_apply (program, *sp, SCM_EOL);
program = SCM_VM_FRAME_PROGRAM (fp);
NEXT;
@@ -399,6 +401,7 @@ VM_DEFINE_INSTRUCTION (tail_call, "tail-call", 1, -1, 1)
if (!SCM_FALSEP (scm_procedure_p (program)))
{
POP_LIST (nargs);
+ SYNC_BEFORE_GC ();
*sp = scm_apply (program, *sp, SCM_EOL);
program = SCM_VM_FRAME_PROGRAM (fp);
goto vm_return;
@@ -432,7 +435,7 @@ VM_DEFINE_INSTRUCTION (return, "return", 0, 0, 1)
/* Cache the last program */
program = SCM_VM_FRAME_PROGRAM (fp);
- CACHE_PROGRAM (program);
+ CACHE_PROGRAM ();
PUSH (ret);
NEXT;
}