mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 15:40:19 +02:00
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.
This commit is contained in:
parent
887ce75ae8
commit
2bd859c81a
4 changed files with 31 additions and 6 deletions
|
@ -356,6 +356,19 @@ do { \
|
|||
PUSH (l); \
|
||||
} while (0)
|
||||
|
||||
#define POP_CONS_MARK() \
|
||||
do { \
|
||||
SCM o, l; \
|
||||
POP (l); \
|
||||
POP (o); \
|
||||
while (!SCM_UNBNDP (o)) \
|
||||
{ \
|
||||
CONS (l, o, l); \
|
||||
POP (o); \
|
||||
} \
|
||||
PUSH (l); \
|
||||
} while (0)
|
||||
|
||||
|
||||
/*
|
||||
* Instruction operation
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue