summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2012-02-17 23:27:21 -0800
committerKaz Kylheku <kaz@kylheku.com>2012-02-17 23:27:21 -0800
commit0c9e4bf7503de3feca97c602689d73b467b33889 (patch)
tree7a6c2cee8c041dd22bd3591355529c296d5bcd33
parent8c299f44b94d4462147b9e3cb782c52c3669a1e5 (diff)
downloadtxr-0c9e4bf7503de3feca97c602689d73b467b33889.tar.gz
txr-0c9e4bf7503de3feca97c602689d73b467b33889.tar.bz2
txr-0c9e4bf7503de3feca97c602689d73b467b33889.zip
* eval.c (dwim_loc): 2012-02-13 fix didn't do it.
Here is a simpler way. We can let nil be treated as a list with a simple goto. This solves all cases.
-rw-r--r--ChangeLog6
-rw-r--r--eval.c9
2 files changed, 9 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 41926727..eda56c02 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-02-17 Kaz Kylheku <kaz@kylheku.com>
+
+ * eval.c (dwim_loc): 2012-02-13 fix didn't do it.
+ Here is a simpler way. We can let nil be treated as a list with a
+ simple goto. This solves all cases.
+
2012-02-16 Kaz Kylheku <kaz@kylheku.com>
* eval.c (eval_init): Register match-fun.
diff --git a/eval.c b/eval.c
index 3375b15b..3a072c77 100644
--- a/eval.c
+++ b/eval.c
@@ -696,12 +696,8 @@ static val *dwim_loc(val form, val env, val op, val newval, val *retval)
val obj = eval_lisp1(second(form), env, form);
val args = eval_args_lisp1(rest(rest(form)), env, form);
- if (!obj) {
- val tempform = list(op, second(form),
- cons(quote_s, cons(newval, nil)), nao);
- *retval = op_modplace(tempform, env);
- return 0;
- }
+ if (!obj)
+ goto list;
switch (type(obj)) {
case LIT:
@@ -764,6 +760,7 @@ static val *dwim_loc(val form, val env, val op, val newval, val *retval)
}
case CONS:
case LCONS:
+ list:
if (rest(args))
eval_error(form, lit("[~s ...]: list indexing needs one arg"),
obj, nao);