@@ -8210,15 +8210,17 @@ static zend_string *zend_begin_func_decl(znode *result, zend_op_array *op_array,
82108210 zend_register_seen_symbol (lcname , ZEND_SYMBOL_FUNCTION );
82118211 if (!toplevel ) {
82128212 uint32_t func_ref = zend_add_dynamic_func_def (op_array );
8213- if (op_array -> fn_flags & ZEND_ACC_CLOSURE ) {
8214- opline = zend_emit_op_tmp (result , ZEND_DECLARE_LAMBDA_FUNCTION , NULL , NULL );
8215- opline -> op2 .num = func_ref ;
8216- } else {
8217- opline = get_next_op ();
8218- opline -> opcode = ZEND_DECLARE_FUNCTION ;
8219- opline -> op1_type = IS_CONST ;
8220- LITERAL_STR (opline -> op1 , zend_string_copy (lcname ));
8221- opline -> op2 .num = func_ref ;
8213+ if (decl -> kind != ZEND_AST_OP_ARRAY ) {
8214+ if (op_array -> fn_flags & ZEND_ACC_CLOSURE ) {
8215+ opline = zend_emit_op_tmp (result , ZEND_DECLARE_LAMBDA_FUNCTION , NULL , NULL );
8216+ opline -> op2 .num = func_ref ;
8217+ } else {
8218+ opline = get_next_op ();
8219+ opline -> opcode = ZEND_DECLARE_FUNCTION ;
8220+ opline -> op1_type = IS_CONST ;
8221+ LITERAL_STR (opline -> op1 , zend_string_copy (lcname ));
8222+ opline -> op2 .num = func_ref ;
8223+ }
82228224 }
82238225 }
82248226 return lcname ;
@@ -8260,7 +8262,7 @@ static zend_op_array *zend_compile_func_decl_ex(
82608262 op_array -> doc_comment = zend_string_copy (decl -> doc_comment );
82618263 }
82628264
8263- if (decl -> kind == ZEND_AST_CLOSURE || decl -> kind == ZEND_AST_ARROW_FUNC ) {
8265+ if (decl -> kind == ZEND_AST_CLOSURE || decl -> kind == ZEND_AST_ARROW_FUNC || decl -> kind == ZEND_AST_OP_ARRAY ) {
82648266 op_array -> fn_flags |= ZEND_ACC_CLOSURE ;
82658267 }
82668268
@@ -11198,7 +11200,11 @@ static void zend_compile_const_expr_closure(zend_ast **ast_ptr)
1119811200 }
1119911201
1120011202 znode node ;
11201- zend_op_array * op = zend_compile_func_decl (& node , * ast_ptr , 1 );
11203+ zend_ast * ast = * ast_ptr ;
11204+ zend_ast_kind old_kind = ast -> kind ;
11205+ ast -> kind = ZEND_AST_OP_ARRAY ;
11206+ zend_op_array * op = zend_compile_func_decl (& node , ast , /* toplevel */ false);
11207+ ast -> kind = old_kind ;
1120211208
1120311209 zend_ast_destroy (* ast_ptr );
1120411210 zval z ;
0 commit comments