summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2012-05-17 11:39:35 +0200
committerAndy Wingo <wingo@pobox.com>2013-05-23 14:27:17 +0200
commit52182d5280cefe18e605b6c40f690badb174ec27 (patch)
tree895f4eb134062fcd6d9fe099d3fda0b347557b0e /libguile/vm-i-system.c
parenteac12024830736409112634d3b16ddaaa2bff05b (diff)
downloadguile-52182d5280cefe18e605b6c40f690badb174ec27.tar.gz
remove CONS macro in VM; use scm_cons instead
* libguile/vm-engine.c (CONS): Remove. Callers should use scm_cons instead, syncing registers beforehand. (POP_LIST): Adapt, only synchronizing once. (POP_LIST_MARK, POP_CONS_MARK): Remove unused macros. * libguile/vm-i-scheme.c (cons): * libguile/vm-i-system.c (push-rest, bind-rest): Adapt.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r--libguile/vm-i-system.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index ac1d4a61a..4445d0c30 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -715,9 +715,10 @@ VM_DEFINE_INSTRUCTION (51, push_rest, "push-rest", 2, -1, -1)
SCM rest = SCM_EOL;
n = FETCH () << 8;
n += FETCH ();
+ SYNC_BEFORE_GC ();
while (sp - (fp - 1) > n)
/* No need to check for underflow. */
- CONS (rest, *sp--, rest);
+ rest = scm_cons (*sp--, rest);
PUSH (rest);
NEXT;
}
@@ -731,9 +732,10 @@ VM_DEFINE_INSTRUCTION (52, bind_rest, "bind-rest", 4, -1, -1)
n += FETCH ();
i = FETCH () << 8;
i += FETCH ();
+ SYNC_BEFORE_GC ();
while (sp - (fp - 1) > n)
/* No need to check for underflow. */
- CONS (rest, *sp--, rest);
+ rest = scm_cons (*sp--, rest);
LOCAL_SET (i, rest);
NEXT;
}