@@ -8210,15 +8210,17 @@ static zend_string *zend_begin_func_decl(znode *result, zend_op_array *op_array,
8210
8210
zend_register_seen_symbol (lcname , ZEND_SYMBOL_FUNCTION );
8211
8211
if (!toplevel ) {
8212
8212
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
+ }
8222
8224
}
8223
8225
}
8224
8226
return lcname ;
@@ -8260,7 +8262,7 @@ static zend_op_array *zend_compile_func_decl_ex(
8260
8262
op_array -> doc_comment = zend_string_copy (decl -> doc_comment );
8261
8263
}
8262
8264
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 ) {
8264
8266
op_array -> fn_flags |= ZEND_ACC_CLOSURE ;
8265
8267
}
8266
8268
@@ -11198,7 +11200,11 @@ static void zend_compile_const_expr_closure(zend_ast **ast_ptr)
11198
11200
}
11199
11201
11200
11202
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 ;
11202
11208
11203
11209
zend_ast_destroy (* ast_ptr );
11204
11210
zval z ;
0 commit comments