summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-11-29 20:05:07 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-11-29 20:05:07 -0800
commit5627d7bacb2ee381ed9b97ac669cb7269802d8bc (patch)
tree601a193a886f33598f414cdf2c78a8451fd794f3
parent6f8a6cf7c99810aa6c7f2254bce22c0fd1eedebe (diff)
downloadtxr-5627d7bacb2ee381ed9b97ac669cb7269802d8bc.tar.gz
txr-5627d7bacb2ee381ed9b97ac669cb7269802d8bc.tar.bz2
txr-5627d7bacb2ee381ed9b97ac669cb7269802d8bc.zip
* eval.c (expand_vars): Bugfix: was not handling vars
of the form var, only (var initform).
-rw-r--r--ChangeLog5
-rw-r--r--eval.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 22860e28..88b31abe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-11-29 Kaz Kylheku <kaz@kylheku.com>
+ * eval.c (expand_vars): Bugfix: was not handling vars
+ of the form var, only (var initform).
+
+2011-11-29 Kaz Kylheku <kaz@kylheku.com>
+
Support assignment to (car ...) and (cdr ...).
* eval.c (car_s, cdr_s): New symbol variables.
diff --git a/eval.c b/eval.c
index 1993481e..5ae61d71 100644
--- a/eval.c
+++ b/eval.c
@@ -693,6 +693,12 @@ static val expand_vars(val vars)
{
if (atom(vars)) {
return vars;
+ } else if (symbolp(car(vars))) {
+ val rest_vars = rest(vars);
+ val rest_vars_ex = expand_vars(rest_vars);
+ if (rest_vars == rest_vars_ex)
+ return vars;
+ return cons(car(vars), rest_vars_ex);
} else {
cons_bind (var, init, car(vars));
val rest_vars = rest(vars);