@@ -269,7 +269,7 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
269269%type <ast> non_empty_parameter_list argument_list non_empty_argument_list property_list
270270%type <ast> class_const_list first_class_const_decl class_const_decl class_name_list trait_adaptations method_body non_empty_for_exprs
271271%type <ast> ctor_arguments alt_if_stmt_without_else trait_adaptation_list lexical_vars
272- %type <ast> lexical_var_list encaps_list
272+ %type <ast> lexical_var_list encaps_list closure_self_reference
273273%type <ast> array_pair non_empty_array_pair_list array_pair_list possible_array_pair
274274%type <ast> isset_variable type return_type type_expr type_without_static
275275%type <ast> identifier type_expr_without_static union_type_without_static_element union_type_without_static intersection_type_without_static
@@ -573,7 +573,7 @@ function_declaration_statement:
573573 function returns_ref function_name backup_doc_comment ' (' parameter_list ' )' return_type
574574 backup_fn_flags ' {' inner_statement_list ' }' backup_fn_flags
575575 { $$ = zend_ast_create_decl(ZEND_AST_FUNC_DECL, $2 | $13 , $1 , $4 ,
576- zend_ast_get_str ($3 ), $6, NULL, $11, $8, NULL); CG(extra_fn_flags) = $9 ; }
576+ zend_ast_get_str ($3 ), $6, NULL, $11, $8, NULL, NULL ); CG(extra_fn_flags) = $9 ; }
577577;
578578
579579is_reference :
@@ -589,10 +589,10 @@ is_variadic:
589589class_declaration_statement :
590590 class_modifiers T_CLASS { $<num>$ = CG(zend_lineno); }
591591 T_STRING extends_from implements_list backup_doc_comment ' {' class_statement_list ' }'
592- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, $1 , $<num>3 , $7 , zend_ast_get_str($4 ), $5 , $6 , $9 , NULL , NULL ); }
592+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, $1 , $<num>3 , $7 , zend_ast_get_str($4 ), $5 , $6 , $9 , NULL , NULL , NULL ); }
593593 | T_CLASS { $<num>$ = CG(zend_lineno); }
594594 T_STRING extends_from implements_list backup_doc_comment ' {' class_statement_list ' }'
595- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, 0 , $<num>2 , $6 , zend_ast_get_str($3 ), $4 , $5 , $8 , NULL , NULL ); }
595+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, 0 , $<num>2 , $6 , zend_ast_get_str($3 ), $4 , $5 , $8 , NULL , NULL , NULL ); }
596596;
597597
598598class_modifiers :
@@ -622,19 +622,19 @@ class_modifier:
622622trait_declaration_statement :
623623 T_TRAIT { $<num>$ = CG(zend_lineno); }
624624 T_STRING backup_doc_comment ' {' class_statement_list ' }'
625- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_TRAIT, $<num>2 , $4 , zend_ast_get_str($3 ), NULL , NULL , $6 , NULL , NULL ); }
625+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_TRAIT, $<num>2 , $4 , zend_ast_get_str($3 ), NULL , NULL , $6 , NULL , NULL , NULL ); }
626626;
627627
628628interface_declaration_statement :
629629 T_INTERFACE { $<num>$ = CG(zend_lineno); }
630630 T_STRING interface_extends_list backup_doc_comment ' {' class_statement_list ' }'
631- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2 , $5 , zend_ast_get_str($3 ), NULL , $4 , $7 , NULL , NULL ); }
631+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_INTERFACE, $<num>2 , $5 , zend_ast_get_str($3 ), NULL , $4 , $7 , NULL , NULL , NULL ); }
632632;
633633
634634enum_declaration_statement :
635635 T_ENUM { $<num>$ = CG(zend_lineno); }
636636 T_STRING enum_backing_type implements_list backup_doc_comment ' {' class_statement_list ' }'
637- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_ENUM|ZEND_ACC_FINAL, $<num>2 , $6 , zend_ast_get_str($3 ), NULL , $5 , $8 , NULL , $4 ); }
637+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_ENUM|ZEND_ACC_FINAL, $<num>2 , $6 , zend_ast_get_str($3 ), NULL , $5 , $8 , NULL , $4 , NULL ); }
638638;
639639
640640enum_backing_type :
@@ -945,7 +945,7 @@ attributed_class_statement:
945945 | method_modifiers function returns_ref identifier backup_doc_comment ' (' parameter_list ' )'
946946 return_type backup_fn_flags method_body backup_fn_flags
947947 { $$ = zend_ast_create_decl(ZEND_AST_METHOD, $3 | $1 | $12 , $2 , $5 ,
948- zend_ast_get_str ($4 ), $7, NULL, $11, $9, NULL); CG(extra_fn_flags) = $10 ; }
948+ zend_ast_get_str ($4 ), $7, NULL, $11, $9, NULL, NULL ); CG(extra_fn_flags) = $10 ; }
949949 | enum_case { $$ = $1 ; }
950950;
951951
@@ -1116,7 +1116,7 @@ anonymous_class:
11161116 extends_from implements_list backup_doc_comment ' {' class_statement_list ' }' {
11171117 zend_ast *decl = zend_ast_create_decl(
11181118 ZEND_AST_CLASS, ZEND_ACC_ANON_CLASS | $1 , $<num>3 , $7 , NULL ,
1119- $5 , $6 , $9 , NULL , NULL );
1119+ $5 , $6 , $9 , NULL , NULL , NULL );
11201120 $$ = zend_ast_create(ZEND_AST_NEW, decl, $4 );
11211121 }
11221122;
@@ -1258,15 +1258,15 @@ expr:
12581258
12591259
12601260inline_function :
1261- function returns_ref backup_doc_comment ' (' parameter_list ' )' lexical_vars return_type
1261+ function returns_ref backup_doc_comment ' (' parameter_list ' )' closure_self_reference lexical_vars return_type
12621262 backup_fn_flags ' {' inner_statement_list ' }' backup_fn_flags
1263- { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $2 | $13 , $1 , $3 ,
1263+ { $$ = zend_ast_create_decl(ZEND_AST_CLOSURE, $2 | $14 , $1 , $3 ,
12641264 ZSTR_INIT_LITERAL (" {closure}" , 0 ),
1265- $5, $7 , $11 , $8 , NULL); CG(extra_fn_flags) = $9 ; }
1265+ $5, $8 , $12 , $9 , NULL, $7 ); CG(extra_fn_flags) = $10 ; }
12661266 | fn returns_ref backup_doc_comment ' (' parameter_list ' )' return_type
12671267 T_DOUBLE_ARROW backup_fn_flags backup_lex_pos expr backup_fn_flags
12681268 { $$ = zend_ast_create_decl(ZEND_AST_ARROW_FUNC, $2 | $12 , $1 , $3 ,
1269- ZSTR_INIT_LITERAL (" {closure}" , 0 ), $5, NULL, $11, $7, NULL);
1269+ ZSTR_INIT_LITERAL (" {closure}" , 0 ), $5, NULL, $11, $7, NULL, NULL );
12701270 CG (extra_fn_flags) = $9; }
12711271;
12721272
@@ -1295,6 +1295,11 @@ returns_ref:
12951295 | ampersand { $$ = ZEND_ACC_RETURN_REFERENCE; }
12961296;
12971297
1298+ closure_self_reference :
1299+ %empty { $$ = NULL ; }
1300+ | T_AS T_VARIABLE { $$ = $2 ; }
1301+ ;
1302+
12981303lexical_vars :
12991304 %empty { $$ = NULL ; }
13001305 | T_USE ' (' lexical_var_list possible_comma ' )' { $$ = $3 ; }
0 commit comments