summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2025-05-19 08:44:13 -0700
committerKaz Kylheku <kaz@kylheku.com>2025-05-19 08:44:13 -0700
commit0cd23a6e9b1b30238bd9abc657e375ad6755c749 (patch)
tree9e25ac8acff44ce13b1c61c561b514c828274918
parent198fefbc1e74f2c9a046c40d69172876a3e10d46 (diff)
downloadtxr-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.c6
-rw-r--r--tests/012/quasi.tl6
2 files changed, 11 insertions, 1 deletions
diff --git a/eval.c b/eval.c
index a94657d9..8c6bf710 100644
--- a/eval.c
+++ b/eval.c
@@ -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")