From e8e7692f169ae00434f3e0959f104d95284d2891 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 3 Nov 2020 11:29:10 +0100 Subject: syntax: implement ES6-like rest parameters for variadic functions Signed-off-by: Jo-Philipp Wich --- parser.y | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'parser.y') 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); } -- cgit v1.2.3