diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2012-02-17 23:27:21 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2012-02-17 23:27:21 -0800 |
commit | 0c9e4bf7503de3feca97c602689d73b467b33889 (patch) | |
tree | 7a6c2cee8c041dd22bd3591355529c296d5bcd33 /eval.c | |
parent | 8c299f44b94d4462147b9e3cb782c52c3669a1e5 (diff) | |
download | txr-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.
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 9 |
1 files changed, 3 insertions, 6 deletions
@@ -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); |