diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2014-02-11 14:21:27 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2014-02-11 14:21:27 -0800 |
commit | 5bc1cc4489663efb96f51b941d3b2313d82f7eef (patch) | |
tree | 01979bc36b62ad6f50eb21dc07d0868387b198b2 /match.c | |
parent | efcc64a8003d79538ffe0e85f91b2d94011c20d0 (diff) | |
download | txr-5bc1cc4489663efb96f51b941d3b2313d82f7eef.tar.gz txr-5bc1cc4489663efb96f51b941d3b2313d82f7eef.tar.bz2 txr-5bc1cc4489663efb96f51b941d3b2313d82f7eef.zip |
* eval.c (subst_vars): Bugfix: results of expressions not
treated in the same way as variables: lists not stringified,
causing expansions with parentheses, and sometimes errors
due to unhandled objects. Also, use tostringp instead of
format for stringifying objects.
stringifying object. Bugfix.k
* match.c (subst_vars): Added comment similar to the one in
the subst_vars of eval.c. Removed superfluous conversion code where the
str variable is already known to be a string.
Diffstat (limited to 'match.c')
-rw-r--r-- | match.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -1359,8 +1359,11 @@ static val subst_vars(val spec, val bindings, val filter) val modifiers = fourth(elem); val str = txeval(spec, expr, bindings); + /* If the object is a list, we let format_field deal with the + conversion to text, because the modifiers influence how + it is done. */ if (!stringp(str) && !listp(str)) - str = format(nil, lit("~a"), str, nao); + str = tostringp(str); if (pat) spec = cons(pat, rest(spec)); @@ -1372,8 +1375,6 @@ static val subst_vars(val spec, val bindings, val filter) } else { if (listp(str)) str = cat_str(mapcar(func_n1(tostringp), str), lit(" ")); - else - str = if3(stringp(str), str, tostringp(str)); spec = cons(filter_string_tree(filter, str), rest(spec)); } |