diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2025-05-19 08:44:13 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2025-05-19 08:44:13 -0700 |
commit | 0cd23a6e9b1b30238bd9abc657e375ad6755c749 (patch) | |
tree | 9e25ac8acff44ce13b1c61c561b514c828274918 | |
parent | 198fefbc1e74f2c9a046c40d69172876a3e10d46 (diff) | |
download | txr-0cd23a6e9b1b30238bd9abc657e375ad6755c749.tar.gz txr-0cd23a6e9b1b30238bd9abc657e375ad6755c749.tar.bz2 txr-0cd23a6e9b1b30238bd9abc657e375ad6755c749.zip |
expander: handle format string in quasi.
* eval.c (expand_quasi): Quasiliteral sys:var items
now have a format string, which we have to propagate
to the expansion.
* tests/012/quasi.tl: New tests.
-rw-r--r-- | eval.c | 6 | ||||
-rw-r--r-- | tests/012/quasi.tl | 6 |
2 files changed, 11 insertions, 1 deletions
@@ -4129,9 +4129,13 @@ val expand_quasi(val quasi_forms, val menv) val mods = third(form); val param_ex = expand(param, menv); val mods_ex = expand_var_mods(mods, menv); + val fmt = fourth(form); if (param_ex != param || mods_ex != mods) - form_ex = rlcp(list(sym, param_ex, mods_ex, nao), form); + form_ex = rlcp(if3(fmt, + list(sym, param_ex, mods_ex, fmt, nao), + list(sym, param_ex, mods_ex, nao)), + form); } else { if (comp_184) form_ex = expand(form, menv); diff --git a/tests/012/quasi.tl b/tests/012/quasi.tl index 7dfce10c..f61debdf 100644 --- a/tests/012/quasi.tl +++ b/tests/012/quasi.tl @@ -58,6 +58,12 @@ `<<@~8,3a:s>>` "<< abc>>" `<<@~8,3a:{s ":"}>>` "<< : : : : :a:b:c>>")) +(symacrolet ((n (sqrt 2))) + (mtest + `@~8,4f:(sqrt 2)` " 1.4142" + `@~8,4f:n` " 1.4142")) + + (compile-only (eval-only (compile-file (base-name *load-path*) "temp.tlo") |