Skip to content

Commit e687dae

Browse files
committed
Revert "defer compiling inner classes"
This reverts commit 26b7eb7.
1 parent 5f7a874 commit e687dae

File tree

1 file changed

+20
-22
lines changed

1 file changed

+20
-22
lines changed

Zend/zend_compile.c

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9296,22 +9296,6 @@ 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-
93159299
if (toplevel) {
93169300
ce->ce_flags |= ZEND_ACC_TOP_LEVEL;
93179301
}
@@ -9332,7 +9316,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
93329316
&& !zend_compile_ignore_class(parent_ce, ce->info.user.filename)) {
93339317
if (zend_try_early_bind(ce, parent_ce, lcname, NULL)) {
93349318
zend_string_release(lcname);
9335-
return;
9319+
goto compile_inner_classes;
93369320
}
93379321
}
93389322
} else if (EXPECTED(zend_hash_add_ptr(CG(class_table), lcname, ce) != NULL)) {
@@ -9341,7 +9325,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
93419325
zend_inheritance_check_override(ce);
93429326
ce->ce_flags |= ZEND_ACC_LINKED;
93439327
zend_observer_class_linked_notify(ce, lcname);
9344-
return;
9328+
goto compile_inner_classes;
93459329
} else {
93469330
goto link_unbound;
93479331
}
@@ -9411,6 +9395,24 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
94119395
opline->result.opline_num = -1;
94129396
}
94139397
}
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);
94149416
}
94159417
/* }}} */
94169418

@@ -11681,10 +11683,6 @@ static void zend_compile_stmt(zend_ast *ast) /* {{{ */
1168111683
zend_compile_use_trait(ast);
1168211684
break;
1168311685
case ZEND_AST_CLASS:
11684-
if (CG(active_class_entry)) {
11685-
zend_defer_class_decl(ast);
11686-
break;
11687-
}
1168811686
zend_compile_class_decl(NULL, ast, 0);
1168911687
break;
1169011688
case ZEND_AST_GROUP_USE:

0 commit comments

Comments
 (0)