summaryrefslogtreecommitdiffstats
path: root/tests/011
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2023-03-21 19:42:14 -0700
committerKaz Kylheku <kaz@kylheku.com>2023-03-21 19:42:14 -0700
commit705aafca215d6bf7b289f443fdebc4681776cf28 (patch)
tree41590ad1bfeb008bf6803418cd5d2068ef663146 /tests/011
parent2b717de5d7949688c7c639414a5765cbc4169f8c (diff)
downloadtxr-705aafca215d6bf7b289f443fdebc4681776cf28.tar.gz
txr-705aafca215d6bf7b289f443fdebc4681776cf28.tar.bz2
txr-705aafca215d6bf7b289f443fdebc4681776cf28.zip
Allow t symbol in macro parameter lists.
* eval.c (expand_params_rec, bind_macro_params): Handle t specially everywhere a parameter can occur. Expansion allows the syntax through without extending the environment with a t variable; binding walks over the structure without binding a variable. * stdlib/compiler.tl (expand-bind-mac-params): Likewise, handle occurrences of t, suppressing the generation of and assignment to variables, while ensuring that initializing expressions are evaluated. * tests/011/tree-bind.tl: New file. * txr.1: Documented.
Diffstat (limited to 'tests/011')
-rw-r--r--tests/011/tree-bind.tl20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/011/tree-bind.tl b/tests/011/tree-bind.tl
new file mode 100644
index 00000000..83fcaa33
--- /dev/null
+++ b/tests/011/tree-bind.tl
@@ -0,0 +1,20 @@
+(load "../common")
+
+(mtest
+ (tree-bind b '(1 2) b) (1 2)
+ (tree-bind (t b) '(1 2) b) 2
+ (tree-bind (t . b) '(1 2) b) (2)
+ (tree-bind (b t) '(1 2) b) 1
+ (tree-bind (b . t) '(1 2) b) 1
+ (tree-bind t '(1 2) 3) 3
+ (tree-bind (t : b) '(1 2) b) 2
+ (tree-bind (b : t) '(1) b) 1
+ (tree-bind (b : (t 2)) '(1) b) 1
+ (tree-bind (b : (a 2 t)) '(1) a) 2
+ (let ((i 0)) (tree-bind (b : (t (inc i) t)) '(1) (cons i b))) (1 . 1)
+ (let ((i 0)) (tree-bind (b : (t (inc i) t)) '(1 2) (cons i b))) (0 . 1))
+
+(compile-only
+ (eval-only
+ (compile-file (base-name *load-path*) "temp.tlo")
+ (remove-path "temp.tlo")))