diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-08-19 07:01:36 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-08-19 07:01:36 -0700 |
commit | 36a61da3883e8baca45a80c703211ae71be4c6ff (patch) | |
tree | 7bc01b48e5a04e8b0c126c5d92a6fca70d197e6d | |
parent | fb444e43852b08ff6d1fb74339f7bce780931c4f (diff) | |
download | txr-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.y | 4 | ||||
-rw-r--r-- | tests/012/quasi.tl | 4 |
2 files changed, 6 insertions, 2 deletions
@@ -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") |