From 36a61da3883e8baca45a80c703211ae71be4c6ff Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 19 Aug 2015 07:01:36 -0700 Subject: Fix broken @@@/@@@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. --- parser.y | 4 ++-- tests/012/quasi.tl | 4 ++++ 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") -- cgit v1.2.3