summaryrefslogtreecommitdiffstats
path: root/parser.y
diff options
context:
space:
mode:
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y7
1 files changed, 5 insertions, 2 deletions
diff --git a/parser.y b/parser.y
index b8ee0659..e80c7756 100644
--- a/parser.y
+++ b/parser.y
@@ -71,7 +71,7 @@ static val parsed_spec;
%token <num> NUMBER
%token <chr> REGCHAR LITCHAR
-%token <chr> METAPAR
+%token <chr> METAPAR SPLICE
%type <val> spec clauses clauses_opt clause
%type <val> all_clause some_clause none_clause maybe_clause
@@ -96,7 +96,7 @@ static val parsed_spec;
%right OUTPUT REPEAT REP FIRST LAST EMPTY DEFINE
%right SPACE TEXT NUMBER
%nonassoc '[' ']' '(' ')'
-%left '-'
+%left '-' ',' '\'' SPLICE
%left '|' '/'
%left '&'
%right '~' '*' '?' '+' '%'
@@ -587,6 +587,9 @@ var_op : '*' { $$ = list(t, nao); }
list : '(' exprs ')' { $$ = rl($2, num($1)); }
| '(' ')' { $$ = nil; }
+ | ',' expr { $$ = rlcp(list(unquote_s, $2, nao), $2); }
+ | '\'' expr { $$ = rlcp(list(qquote_s, $2, nao), $2); }
+ | SPLICE expr { $$ = rlcp(list(splice_s, $2, nao), $2); }
| '(' error { $$ = nil;
yybadtoken(yychar, lit("list expression")); }
;