Skip to content

Commit 4a2646c

Browse files
committed
Preloading: Also handle trait methods outside main script
1 parent e3d35b6 commit 4a2646c

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

ext/opcache/ZendAccelerator.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3893,6 +3893,15 @@ static void preload_remove_empty_includes(void)
38933893
} ZEND_HASH_FOREACH_END();
38943894
}
38953895

3896+
static void preload_register_trait_methods(zend_class_entry *ce) {
3897+
zend_op_array *op_array;
3898+
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
3899+
if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
3900+
zend_shared_alloc_register_xlat_entry(op_array->opcodes, op_array);
3901+
}
3902+
} ZEND_HASH_FOREACH_END();
3903+
}
3904+
38963905
static void preload_fix_trait_methods(zend_class_entry *ce)
38973906
{
38983907
zend_op_array *op_array;
@@ -3918,20 +3927,23 @@ static void preload_fix_trait_methods(zend_class_entry *ce)
39183927
static int preload_optimize(zend_persistent_script *script)
39193928
{
39203929
zend_class_entry *ce;
3921-
zend_op_array *op_array;
39223930

39233931
zend_shared_alloc_init_xlat_table();
39243932

39253933
ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) {
39263934
if (ce->ce_flags & ZEND_ACC_TRAIT) {
3927-
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
3928-
if (!(op_array->fn_flags & ZEND_ACC_TRAIT_CLONE)) {
3929-
zend_shared_alloc_register_xlat_entry(op_array->opcodes, op_array);
3930-
}
3931-
} ZEND_HASH_FOREACH_END();
3935+
preload_register_trait_methods(ce);
39323936
}
39333937
} ZEND_HASH_FOREACH_END();
39343938

3939+
ZEND_HASH_FOREACH_PTR(preload_scripts, script) {
3940+
ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) {
3941+
if (ce->ce_flags & ZEND_ACC_TRAIT) {
3942+
preload_register_trait_methods(ce);
3943+
}
3944+
} ZEND_HASH_FOREACH_END();
3945+
} ZEND_HASH_FOREACH_END();
3946+
39353947
if (!zend_optimize_script(&script->script, ZCG(accel_directives).optimization_level, ZCG(accel_directives).opt_debug_level)) {
39363948
return FAILURE;
39373949
}

0 commit comments

Comments
 (0)