summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/build.tl11
1 files changed, 7 insertions, 4 deletions
diff --git a/share/txr/stdlib/build.tl b/share/txr/stdlib/build.tl
index 32df083d..a5960578 100644
--- a/share/txr/stdlib/build.tl
+++ b/share/txr/stdlib/build.tl
@@ -51,22 +51,25 @@
(while lists
(usr:rplacd tl (copy (cdr tl)))
(set tl (last tl))
- (usr:rplacd tl (car lists))
+ (let ((nx (car lists)))
+ (usr:rplacd tl (if (tailp tl nx)
+ (copy nx)
+ nx)))
(set lists (cdr lists)))
(set self.tail tl))
nil)
(:method pend* (self . lists)
- (let* ((h self.head)
+ (let* ((h (cdr self.head))
(nh (cons nil nil))
(tl nh))
(while lists
- (usr:rplacd tl (copy tl))
+ (usr:rplacd tl (copy (cdr tl)))
(set tl (last tl))
(usr:rplacd tl (car lists))
(set lists (cdr lists)))
(set tl (last tl))
- (usr:rplacd tl (cdr h))
+ (usr:rplacd tl (if (tailp tl h) (copy h) h))
(set self.head nh))
nil)