summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-08-19 07:01:36 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-08-19 07:01:36 -0700
commit36a61da3883e8baca45a80c703211ae71be4c6ff (patch)
tree7bc01b48e5a04e8b0c126c5d92a6fca70d197e6d
parentfb444e43852b08ff6d1fb74339f7bce780931c4f (diff)
downloadtxr-36a61da3883e8baca45a80c703211ae71be4c6ff.tar.gz
txr-36a61da3883e8baca45a80c703211ae71be4c6ff.tar.bz2
txr-36a61da3883e8baca45a80c703211ae71be4c6ff.zip
Fix broken @@@<n>/@@@rest references in quasiliterals.
* parser.y (quasi_meta_helper): When obj is a sys:var, leave it alone; don't add another layer of var. Also, do the same if it is a sys:expr. * tests/012/quasi.tl: Added test case.
-rw-r--r--parser.y4
-rw-r--r--tests/012/quasi.tl4
2 files changed, 6 insertions, 2 deletions
diff --git a/parser.y b/parser.y
index 04be6aa7..54cc494b 100644
--- a/parser.y
+++ b/parser.y
@@ -1372,8 +1372,8 @@ static val quasi_meta_helper(val obj)
if (atom(obj))
goto expr;
- if (first(obj) == var_s)
- goto var;
+ if (first(obj) == var_s || first(obj) == expr_s)
+ return obj;
expr:
return rlcp(cons(expr_s, obj), obj);
diff --git a/tests/012/quasi.tl b/tests/012/quasi.tl
index 7511d4bd..1c4092e2 100644
--- a/tests/012/quasi.tl
+++ b/tests/012/quasi.tl
@@ -21,3 +21,7 @@
(test
[(ret `@1-@@rest`) 1 2 3 4]
"1-2 3 4")
+
+(test
+ [(ret [(ret `@1 @rest @@1 @@rest @@@rest @@@1`) 1 10]) 2 20]
+ "1 10 1 10 20 2")