diff options
Diffstat (limited to 'perly.y')
-rw-r--r-- | perly.y | 21 |
1 files changed, 20 insertions, 1 deletions
@@ -91,7 +91,7 @@ %type <opval> listexpr nexpr texpr iexpr mexpr mnexpr %type <opval> optlistexpr optexpr optrepl indirob listop method %type <opval> formname subname proto cont my_scalar my_var -%type <opval> refgen_topic formblock +%type <opval> list_of_scalars my_list_of_scalars refgen_topic formblock %type <opval> subattrlist myattrlist myattrterm myterm %type <opval> termbinop termunop anonymous termdo %type <opval> termrelop relopchain termeqop eqopchain @@ -426,6 +426,11 @@ barestmt: PLUGSTMT $$ = block_end($remember, newFOROP(0, $my_scalar, $mexpr, $mblock, $cont)); parser->copline = (line_t)$FOR; } + | FOR MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont + { + $$ = block_end($remember, newFOROP(0, $my_list_of_scalars, $mexpr, $mblock, $cont)); + parser->copline = (line_t)$FOR; + } | FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont { $$ = block_end($remember, newFOROP(0, @@ -1377,6 +1382,20 @@ my_scalar: scalar { parser->in_my = 0; $$ = my($scalar); } ; +/* A list of scalars for "for my ($foo, $bar) (@baz)" */ +list_of_scalars: list_of_scalars[list] PERLY_COMMA + { parser->in_my = 0; $$ = $list; } + | list_of_scalars[list] PERLY_COMMA scalar + { + $$ = op_append_elem(OP_LIST, $list, $scalar); + } + | scalar %prec PREC_LOW + ; + +my_list_of_scalars: list_of_scalars + { parser->in_my = 0; $$ = $list_of_scalars; } + ; + my_var : scalar | ary | hsh |