@@ -9296,6 +9296,22 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
9296
9296
zend_verify_abstract_class (ce );
9297
9297
}
9298
9298
9299
+ if (inner_class_queue == NULL ) {
9300
+ CG (active_class_entry ) = original_ce ;
9301
+ } else {
9302
+ HashTable * queue = inner_class_queue ;
9303
+ inner_class_queue = NULL ;
9304
+
9305
+ ZEND_HASH_FOREACH_PTR (queue , ast ) {
9306
+ zend_compile_class_decl (NULL , ast , 0 );
9307
+ } ZEND_HASH_FOREACH_END ();
9308
+
9309
+ CG (active_class_entry ) = original_ce ;
9310
+
9311
+ zend_hash_destroy (queue );
9312
+ FREE_HASHTABLE (queue );
9313
+ }
9314
+
9299
9315
if (toplevel ) {
9300
9316
ce -> ce_flags |= ZEND_ACC_TOP_LEVEL ;
9301
9317
}
@@ -9316,7 +9332,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
9316
9332
&& !zend_compile_ignore_class (parent_ce , ce -> info .user .filename )) {
9317
9333
if (zend_try_early_bind (ce , parent_ce , lcname , NULL )) {
9318
9334
zend_string_release (lcname );
9319
- goto compile_inner_classes ;
9335
+ return ;
9320
9336
}
9321
9337
}
9322
9338
} else if (EXPECTED (zend_hash_add_ptr (CG (class_table ), lcname , ce ) != NULL )) {
@@ -9325,7 +9341,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
9325
9341
zend_inheritance_check_override (ce );
9326
9342
ce -> ce_flags |= ZEND_ACC_LINKED ;
9327
9343
zend_observer_class_linked_notify (ce , lcname );
9328
- goto compile_inner_classes ;
9344
+ return ;
9329
9345
} else {
9330
9346
goto link_unbound ;
9331
9347
}
@@ -9395,24 +9411,6 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
9395
9411
opline -> result .opline_num = -1 ;
9396
9412
}
9397
9413
}
9398
- compile_inner_classes :
9399
-
9400
- if (inner_class_queue == NULL ) {
9401
- CG (active_class_entry ) = original_ce ;
9402
- return ;
9403
- }
9404
-
9405
- HashTable * queue = inner_class_queue ;
9406
- inner_class_queue = NULL ;
9407
-
9408
- ZEND_HASH_FOREACH_PTR (queue , ast ) {
9409
- zend_compile_class_decl (NULL , ast , 0 );
9410
- } ZEND_HASH_FOREACH_END ();
9411
-
9412
- CG (active_class_entry ) = original_ce ;
9413
-
9414
- zend_hash_destroy (queue );
9415
- FREE_HASHTABLE (queue );
9416
9414
}
9417
9415
/* }}} */
9418
9416
@@ -11683,6 +11681,10 @@ static void zend_compile_stmt(zend_ast *ast) /* {{{ */
11683
11681
zend_compile_use_trait (ast );
11684
11682
break ;
11685
11683
case ZEND_AST_CLASS :
11684
+ if (CG (active_class_entry )) {
11685
+ zend_defer_class_decl (ast );
11686
+ break ;
11687
+ }
11686
11688
zend_compile_class_decl (NULL , ast , 0 );
11687
11689
break ;
11688
11690
case ZEND_AST_GROUP_USE :
0 commit comments