@@ -3972,7 +3972,7 @@ void zend_compile_static_call(znode *result, zend_ast *ast, uint32_t type) /* {{
3972
3972
}
3973
3973
/* }}} */
3974
3974
3975
- void zend_compile_class_decl (zend_ast * ast , zend_bool toplevel );
3975
+ zend_op * zend_compile_class_decl (zend_ast * ast , zend_bool toplevel );
3976
3976
3977
3977
void zend_compile_new (znode * result , zend_ast * ast ) /* {{{ */
3978
3978
{
@@ -3983,13 +3983,8 @@ void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */
3983
3983
zend_op * opline ;
3984
3984
3985
3985
if (class_ast -> kind == ZEND_AST_CLASS ) {
3986
- uint32_t dcl_opnum = get_next_op_number ();
3987
- zend_compile_class_decl (class_ast , 0 );
3988
3986
/* jump over anon class declaration */
3989
- opline = & CG (active_op_array )-> opcodes [dcl_opnum ];
3990
- if (opline -> opcode == ZEND_FETCH_CLASS ) {
3991
- opline ++ ;
3992
- }
3987
+ opline = zend_compile_class_decl (class_ast , 0 );
3993
3988
class_node .op_type = opline -> result_type ;
3994
3989
class_node .u .op .var = opline -> result .var ;
3995
3990
opline -> extended_value = get_next_op_number ();
@@ -6181,7 +6176,7 @@ static zend_string *zend_generate_anon_class_name(unsigned char *lex_pos) /* {{{
6181
6176
}
6182
6177
/* }}} */
6183
6178
6184
- void zend_compile_class_decl (zend_ast * ast , zend_bool toplevel ) /* {{{ */
6179
+ zend_op * zend_compile_class_decl (zend_ast * ast , zend_bool toplevel ) /* {{{ */
6185
6180
{
6186
6181
zend_ast_decl * decl = (zend_ast_decl * ) ast ;
6187
6182
zend_ast * extends_ast = decl -> child [0 ];
@@ -6341,15 +6336,15 @@ void zend_compile_class_decl(zend_ast *ast, zend_bool toplevel) /* {{{ */
6341
6336
}
6342
6337
CG (zend_lineno ) = ast -> lineno ;
6343
6338
zend_string_release (lcname );
6344
- return ;
6339
+ return NULL ;
6345
6340
}
6346
6341
}
6347
6342
} else {
6348
6343
if (EXPECTED (zend_hash_add_ptr (CG (class_table ), lcname , ce ) != NULL )) {
6349
6344
zend_string_release (lcname );
6350
6345
zend_build_properties_info_table (ce );
6351
6346
ce -> ce_flags |= ZEND_ACC_LINKED ;
6352
- return ;
6347
+ return NULL ;
6353
6348
}
6354
6349
}
6355
6350
}
@@ -6375,7 +6370,7 @@ void zend_compile_class_decl(zend_ast *ast, zend_bool toplevel) /* {{{ */
6375
6370
zval zv ;
6376
6371
ZVAL_PTR (& zv , ce );
6377
6372
destroy_zend_class (& zv );
6378
- return ;
6373
+ return opline ;
6379
6374
}
6380
6375
} else {
6381
6376
zend_string * key = zend_build_runtime_definition_key (lcname , decl -> lex_pos );
@@ -6402,6 +6397,7 @@ void zend_compile_class_decl(zend_ast *ast, zend_bool toplevel) /* {{{ */
6402
6397
opline -> opcode = ZEND_DECLARE_CLASS ;
6403
6398
}
6404
6399
}
6400
+ return opline ;
6405
6401
}
6406
6402
/* }}} */
6407
6403
0 commit comments