summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2008-09-30 23:41:16 +0200
committerAndy Wingo <wingo@pobox.com>2008-09-30 23:41:16 +0200
commit2bd859c81ac55b8f229778b0fff23a35b0d6e904 (patch)
tree74f7bd1ba7b7470b6e56fc5e20e1d49bc3c7e093 /libguile/vm-i-system.c
parent887ce75ae828fabd9a76d8e719bd3070c334eb44 (diff)
downloadguile-2bd859c81ac55b8f229778b0fff23a35b0d6e904.tar.gz
fix compilation of quasiquote with splicing and improper lists
* libguile/vm-engine.h (POP_CONS_MARK): New macro, analagous to POP_LIST_MARK; used in quasiquote on improper lists. * libguile/vm-i-system.c (cons-mark): New instruction. You know the drill, remove all your .go files please. * module/system/il/compile.scm (codegen): Compile quasiquoted improper lists with splices correctly. Additionally check that we don't have slices in the CDR of an improper list. * testsuite/t-quasiquote.scm: Add a test for unquote-splicing in improper lists.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r--libguile/vm-i-system.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 46075c017..db6d0a722 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -198,6 +198,12 @@ VM_DEFINE_INSTRUCTION (list_mark, "list-mark", 0, 0, 0)
NEXT;
}
+VM_DEFINE_INSTRUCTION (cons_mark, "cons-mark", 0, 0, 0)
+{
+ POP_CONS_MARK ();
+ NEXT;
+}
+
VM_DEFINE_INSTRUCTION (vector_mark, "vector-mark", 0, 0, 0)
{
POP_LIST_MARK ();