Skip to content

Commit cef0d67

Browse files
committed
Support for class aliasses
1 parent 08ffc9a commit cef0d67

File tree

3 files changed

+25
-6
lines changed

3 files changed

+25
-6
lines changed

ext/opcache/Optimizer/zend_call_graph.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ static int zend_op_array_collect(zend_call_graph *call_graph, zend_op_array *op_
5353
static int zend_foreach_op_array(zend_call_graph *call_graph, zend_script *script, zend_op_array_func_t func)
5454
{
5555
zend_class_entry *ce;
56+
zend_string *key;
5657
zend_op_array *op_array;
5758

5859
if (func(call_graph, &script->main_op_array) != SUCCESS) {
@@ -65,7 +66,10 @@ static int zend_foreach_op_array(zend_call_graph *call_graph, zend_script *scrip
6566
}
6667
} ZEND_HASH_FOREACH_END();
6768

68-
ZEND_HASH_FOREACH_PTR(&script->class_table, ce) {
69+
ZEND_HASH_FOREACH_STR_KEY_PTR(&script->class_table, key, ce) {
70+
if (ce->refcount > 1 && !zend_string_equals_ci(key, ce->name)) {
71+
continue;
72+
}
6973
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
7074
if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
7175
if (func(call_graph, op_array) != SUCCESS) {

ext/opcache/Optimizer/zend_optimizer.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,6 +1421,7 @@ static void zend_adjust_fcall_stack_size_graph(zend_op_array *op_array)
14211421
int zend_optimize_script(zend_script *script, zend_long optimization_level, zend_long debug_level)
14221422
{
14231423
zend_class_entry *ce;
1424+
zend_string *key;
14241425
zend_op_array *op_array;
14251426
zend_string *name;
14261427
zend_optimizer_ctx ctx;
@@ -1440,7 +1441,10 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
14401441
zend_optimize_op_array(op_array, &ctx);
14411442
} ZEND_HASH_FOREACH_END();
14421443

1443-
ZEND_HASH_FOREACH_PTR(&script->class_table, ce) {
1444+
ZEND_HASH_FOREACH_STR_KEY_PTR(&script->class_table, key, ce) {
1445+
if (ce->refcount > 1 && !zend_string_equals_ci(key, ce->name)) {
1446+
continue;
1447+
}
14441448
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
14451449
if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
14461450
zend_optimize_op_array(op_array, &ctx);
@@ -1544,7 +1548,10 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
15441548
zend_adjust_fcall_stack_size(op_array, &ctx);
15451549
} ZEND_HASH_FOREACH_END();
15461550

1547-
ZEND_HASH_FOREACH_PTR(&script->class_table, ce) {
1551+
ZEND_HASH_FOREACH_STR_KEY_PTR(&script->class_table, key, ce) {
1552+
if (ce->refcount > 1 && !zend_string_equals_ci(key, ce->name)) {
1553+
continue;
1554+
}
15481555
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
15491556
if (op_array->scope == ce && !(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
15501557
zend_adjust_fcall_stack_size(op_array, &ctx);
@@ -1553,7 +1560,10 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
15531560
} ZEND_HASH_FOREACH_END();
15541561
}
15551562

1556-
ZEND_HASH_FOREACH_PTR(&script->class_table, ce) {
1563+
ZEND_HASH_FOREACH_STR_KEY_PTR(&script->class_table, key, ce) {
1564+
if (ce->refcount > 1 && !zend_string_equals_ci(key, ce->name)) {
1565+
continue;
1566+
}
15571567
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
15581568
if (op_array->scope != ce && op_array->type == ZEND_USER_FUNCTION) {
15591569
zend_op_array *orig_op_array =

ext/opcache/zend_accelerator_module.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -679,10 +679,15 @@ static ZEND_FUNCTION(opcache_get_status)
679679

680680
if (zend_hash_num_elements(&ZCSG(preload_script)->script.class_table)) {
681681
zend_class_entry *ce;
682+
zend_string *key;
682683

683684
array_init(&scripts);
684-
ZEND_HASH_FOREACH_PTR(&ZCSG(preload_script)->script.class_table, ce) {
685-
add_next_index_str(&scripts, ce->name);
685+
ZEND_HASH_FOREACH_STR_KEY_PTR(&ZCSG(preload_script)->script.class_table, key, ce) {
686+
if (ce->refcount > 1 && !zend_string_equals_ci(key, ce->name)) {
687+
add_next_index_str(&scripts, key);
688+
} else {
689+
add_next_index_str(&scripts, ce->name);
690+
}
686691
} ZEND_HASH_FOREACH_END();
687692
add_assoc_zval(&statistics, "classes", &scripts);
688693
}

0 commit comments

Comments
 (0)