@@ -785,6 +785,22 @@ argument_list:
785
785
| ' (' variadic_placeholder ' )' { init ($2 ); }
786
786
;
787
787
788
+ clone_argument_list:
789
+ ' (' ' )' { $$ = array (); }
790
+ | ' (' non_empty_clone_argument_list optional_comma ' )' { $$ = $2 ; }
791
+ | ' (' expr ' ,' ' )' { init (Node\Arg[$2 , false , false ]); }
792
+ | ' (' variadic_placeholder ' )' { init ($2 ); }
793
+ ;
794
+
795
+ non_empty_clone_argument_list:
796
+ expr ' ,' argument
797
+ { init (new Node\Arg ($1 , false , false , stackAttributes (#1 )), $3 ); }
798
+ | argument_no_expr
799
+ { init ($1 ); }
800
+ | non_empty_clone_argument_list ' ,' argument
801
+ {/* asd */ push ($1 , $3 ); }
802
+ ;
803
+
788
804
variadic_placeholder:
789
805
T_ELLIPSIS { $$ = Node\VariadicPlaceholder[]; }
790
806
;
@@ -794,14 +810,18 @@ non_empty_argument_list:
794
810
| non_empty_argument_list ' ,' argument { push ($1 , $3 ); }
795
811
;
796
812
797
- argument:
798
- expr { $$ = Node\Arg[$1 , false , false ]; }
799
- | ampersand variable { $$ = Node\Arg[$2 , true , false ]; }
813
+ argument_no_expr:
814
+ ampersand variable { $$ = Node\Arg[$2 , true , false ]; }
800
815
| T_ELLIPSIS expr { $$ = Node\Arg[$2 , false , true ]; }
801
816
| identifier_maybe_reserved ' :' expr
802
817
{ $$ = new Node\Arg ($3 , false , false , attributes (), $1 ); }
803
818
;
804
819
820
+ argument:
821
+ expr { $$ = Node\Arg[$1 , false , false ]; }
822
+ | argument_no_expr { $$ = $1 ; }
823
+ ;
824
+
805
825
global_var_list:
806
826
non_empty_global_var_list no_comma
807
827
;
@@ -1015,6 +1035,7 @@ expr:
1015
1035
}
1016
1036
| new_expr
1017
1037
| match
1038
+ | T_CLONE clone_argument_list { $$ = Expr\FuncCall[new Node\Name ($1 , stackAttributes (#1 )), $2 ]; }
1018
1039
| T_CLONE expr { $$ = Expr\Clone_[$2 ]; }
1019
1040
| variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1 , $3 ]; }
1020
1041
| variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1 , $3 ]; }
0 commit comments