summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-08-28 06:51:30 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-08-28 06:51:30 -0700
commitb4360fddf3f7368d618b3a706397c2b437ba074f (patch)
treee8ee71affa5ed4103125d12ba7a2f3cadfbc6d63 /share
parent565ef4bbe9e5c69cc482b93d484f2c587e76887d (diff)
downloadtxr-b4360fddf3f7368d618b3a706397c2b437ba074f.tar.gz
txr-b4360fddf3f7368d618b3a706397c2b437ba074f.tar.bz2
txr-b4360fddf3f7368d618b3a706397c2b437ba074f.zip
compiler: bugfix: colon keyword bungle in macro params.
When the (set arg :) form is processed by a compiled version of the set operator, it blows up with "set: arguments must be pairs". This is because the compiled destructuring code is wrongly trying to apply special treatment to a colon symbol argument to an optional parameter. It is documented that such such treatment only happens in function calls, and not in the binding of macro parameter lists. Interpreted macro param binding gets it right. * share/txr/stdlib/compiler.tl (expand-bind-mac-params): Do not treat a : element in the structure as a missing optional argument, but as an ordinary value.
Diffstat (limited to 'share')
-rw-r--r--share/txr/stdlib/compiler.tl16
1 files changed, 7 insertions, 9 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl
index 280fe753..a4c985e8 100644
--- a/share/txr/stdlib/compiler.tl
+++ b/share/txr/stdlib/compiler.tl
@@ -1419,10 +1419,9 @@
^((set ,curs (or (car ,obj-var)
(sys:upenv ,init-form)))
(cond
- ((and ,obj-var
- (prog1
- (neq (set ,curs (car ,obj-var)) :)
- (set ,obj-var (cdr ,obj-var))))
+ (,obj-var
+ (set ,curs (car ,obj-var))
+ (set ,obj-var (cdr ,obj-var))
,*(if pres-p
^((set ,pres-p t))))
(t
@@ -1434,11 +1433,10 @@
(when pres-p
(push pres-p vars))
^((cond
- ((and ,obj-var
- (prog1
- (neq (set ,p (car ,obj-var)) :)
- (set ,obj-var (cdr ,obj-var))))
- ,*(if pres-p
+ (,obj-var
+ (set ,p (car ,obj-var))
+ (set ,obj-var (cdr ,obj-var))
+ ,*(if pres-p
^((set ,pres-p t))))
(t
,*(if init-form