summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Dejneka <adejneka@comail.ru>2005-09-18 07:13:36 +0000
committerAlexey Dejneka <adejneka@comail.ru>2005-09-18 07:13:36 +0000
commit2f6561ed6ca9478d801ebd2413cc9b4538c8e2eb (patch)
treed20400e70d05ecb364d39dc1d2e065a738a6b5df
parenta898718d7224f5cab34c623f5c56685fa60a5324 (diff)
0.9.4.74:
* Don't optimize two-argument BACKQ-LIST* to BACKQ-CONS when the first argument may be expanded later (fixes a bug reported on cll by Alexander <malishev>).
-rw-r--r--NEWS2
-rw-r--r--src/code/backq.lisp1
-rw-r--r--tests/backq.impure.lisp3
-rw-r--r--version.lisp-expr2
4 files changed, 7 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index fa545f29c..024928329 100644
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,8 @@ changes in sbcl-0.9.5 relative to sbcl-0.9.4:
by Vasile Rotaru)
* bug fix: compiler pack phase does not modify a hashtable, which is
iterated. (reported by Bryan O'Connor, fixed by Rob MacLachlan)
+ * bug fix: backquote does not optimize (LIST* x y) to CONS when x
+ may be expanded. (reported by Alexander <malishev> on c.l.l)
* threads
** bug fix: parent thread now can be gc'ed even with a live
child thread
diff --git a/src/code/backq.lisp b/src/code/backq.lisp
index cd418aa40..f194f45bd 100644
--- a/src/code/backq.lisp
+++ b/src/code/backq.lisp
@@ -175,6 +175,7 @@
(list 'quote thing))
((eq flag 'list*)
(cond ((and (null (cddr thing))
+ (not (expandable-backq-expression-p (car thing)))
(not (expandable-backq-expression-p (cadr thing))))
(cons 'backq-cons thing))
((expandable-backq-expression-p (car (last thing)))
diff --git a/tests/backq.impure.lisp b/tests/backq.impure.lisp
index 5fea61f56..6a647039a 100644
--- a/tests/backq.impure.lisp
+++ b/tests/backq.impure.lisp
@@ -61,3 +61,6 @@
(let ((a '`(1 ,@a ,@b ,.c ,.d)))
(let ((*print-circle* t))
(assert (equal (read-from-string (write-to-string a)) a))))
+
+(let ((s '``(,,@(list 1 2 3) 10)))
+ (assert (equal (eval (eval s)) '(1 2 3 10))))
diff --git a/version.lisp-expr b/version.lisp-expr
index b332bc618..34c868e10 100644
--- a/version.lisp-expr
+++ b/version.lisp-expr
@@ -17,4 +17,4 @@
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.4.73"
+"0.9.4.74"