diff options
author | Andy Wingo <wingo@pobox.com> | 2008-09-30 23:41:16 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2008-09-30 23:41:16 +0200 |
commit | 2bd859c81ac55b8f229778b0fff23a35b0d6e904 (patch) | |
tree | 74f7bd1ba7b7470b6e56fc5e20e1d49bc3c7e093 /libguile/vm-i-system.c | |
parent | 887ce75ae828fabd9a76d8e719bd3070c334eb44 (diff) | |
download | guile-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.c | 6 |
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 (); |