diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | parser.y | 16 |
2 files changed, 26 insertions, 0 deletions
@@ -1,3 +1,13 @@ +2015-04-18 Kaz Kylheku <kaz@kylheku.com> + + Fix quasistring regression introduced in TXR 81. + + * parser.y (expand_meta): This function must recognize + quasistrings, inside (sys:quasi ...) forms, (sys:var ...) forms + do not denote TXR Lisp variables. These must not be expanded. + Doing so is not only wrong, but the way it was done broke + brace variables by stripping their arguments. + 2015-04-16 Kaz Kylheku <kaz@kylheku.com> Adding exit* function which calls _exit. @@ -1206,6 +1206,22 @@ static val expand_meta(val form, val menv) menv = default_arg(menv, make_env(nil, nil, nil)); + if ((sym = car(form)) == quasi_s) { + list_collect_decl (out, ptail); + + for (; consp(form); form = cdr(form)) { + val subform = car(form); + if (consp(subform) && car(subform) == expr_s) + ptail = list_collect(ptail, expand_meta(subform, menv)); + else + ptail = list_collect(ptail, subform); + } + + ptail = list_collect_nconc(ptail, form); + + return rlcp(out, form); + } + if ((sym = car(form)) == expr_s) { val exp_x = expand(rest(form), menv); if (!bindable(exp_x)) |