diff options
author | Keisuke Nishida <kxn30@po.cwru.edu> | 2001-04-06 05:00:10 +0000 |
---|---|---|
committer | Keisuke Nishida <kxn30@po.cwru.edu> | 2001-04-06 05:00:10 +0000 |
commit | 499a4c07c79efe4474650fb9e49da9069c1acdd1 (patch) | |
tree | 2a8fd6a1bb964b7a94fc35890d2672f34b3682d6 /src/vm_system.c | |
parent | 3d5ee0cdcc593ce556166638cbc1ef076d2b7c49 (diff) | |
download | guile-499a4c07c79efe4474650fb9e49da9069c1acdd1.tar.gz |
*** empty log message ***
Diffstat (limited to 'src/vm_system.c')
-rw-r--r-- | src/vm_system.c | 9 |
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; } |