@@ -9296,6 +9296,22 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
92969296 zend_verify_abstract_class (ce );
92979297 }
92989298
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+
92999315 if (toplevel ) {
93009316 ce -> ce_flags |= ZEND_ACC_TOP_LEVEL ;
93019317 }
@@ -9316,7 +9332,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
93169332 && !zend_compile_ignore_class (parent_ce , ce -> info .user .filename )) {
93179333 if (zend_try_early_bind (ce , parent_ce , lcname , NULL )) {
93189334 zend_string_release (lcname );
9319- goto compile_inner_classes ;
9335+ return ;
93209336 }
93219337 }
93229338 } 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)
93259341 zend_inheritance_check_override (ce );
93269342 ce -> ce_flags |= ZEND_ACC_LINKED ;
93279343 zend_observer_class_linked_notify (ce , lcname );
9328- goto compile_inner_classes ;
9344+ return ;
93299345 } else {
93309346 goto link_unbound ;
93319347 }
@@ -9395,24 +9411,6 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
93959411 opline -> result .opline_num = -1 ;
93969412 }
93979413 }
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 );
94169414}
94179415/* }}} */
94189416
@@ -11683,6 +11681,10 @@ static void zend_compile_stmt(zend_ast *ast) /* {{{ */
1168311681 zend_compile_use_trait (ast );
1168411682 break ;
1168511683 case ZEND_AST_CLASS :
11684+ if (CG (active_class_entry )) {
11685+ zend_defer_class_decl (ast );
11686+ break ;
11687+ }
1168611688 zend_compile_class_decl (NULL , ast , 0 );
1168711689 break ;
1168811690 case ZEND_AST_GROUP_USE :
0 commit comments