summaryrefslogtreecommitdiffhomepage
path: root/parser.y
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-11-03 11:29:10 +0100
committerJo-Philipp Wich <jo@mein.io>2020-11-03 11:29:10 +0100
commite8e7692f169ae00434f3e0959f104d95284d2891 (patch)
tree8e4507bd6abe5a31c3538e45f0f6729028856826 /parser.y
parent3cf36bbefa1c659861ef3376f3c4d97f1c9db844 (diff)
syntax: implement ES6-like rest parameters for variadic functions
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'parser.y')
-rw-r--r--parser.y8
1 files changed, 6 insertions, 2 deletions
diff --git a/parser.y b/parser.y
index 25edf2f..289fdfa 100644
--- a/parser.y
+++ b/parser.y
@@ -209,8 +209,12 @@ switch_case(A) ::= T_CASE(B) exp(C) T_COLON stmts(D). { A = wrap_op(B, C, D); }
switch_case(A) ::= T_CASE(B) exp(C) T_COLON. { A = wrap_op(B, C); }
switch_case(A) ::= T_DEFAULT(B) T_COLON stmts(C). { A = wrap_op(B, C); }
-args(A) ::= args(B) T_COMMA T_LABEL(C). { A = append_op(B, C); }
-args(A) ::= T_LABEL(B). { A = B; }
+args(A) ::= sargs(B) T_COMMA T_ELLIP T_LABEL(C). { A = append_op(B, C); ut_get_op(s, C)->is_ellip = 1; }
+args(A) ::= T_ELLIP T_LABEL(B). { A = B; ut_get_op(s, B)->is_ellip = 1; }
+args(A) ::= sargs(B). { A = B; }
+
+sargs(A) ::= sargs(B) T_COMMA T_LABEL(C). { A = append_op(B, C); }
+sargs(A) ::= T_LABEL(B). { A = B; }
for_in_exp(A) ::= rel_exp(B). { A = B; }
for_in_exp(A) ::= T_LOCAL(B) rel_exp(C). { A = wrap_op(B, C); }