@@ -3893,6 +3893,15 @@ static void preload_remove_empty_includes(void)
3893
3893
} ZEND_HASH_FOREACH_END ();
3894
3894
}
3895
3895
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
+
3896
3905
static void preload_fix_trait_methods (zend_class_entry * ce )
3897
3906
{
3898
3907
zend_op_array * op_array ;
@@ -3918,20 +3927,23 @@ static void preload_fix_trait_methods(zend_class_entry *ce)
3918
3927
static int preload_optimize (zend_persistent_script * script )
3919
3928
{
3920
3929
zend_class_entry * ce ;
3921
- zend_op_array * op_array ;
3922
3930
3923
3931
zend_shared_alloc_init_xlat_table ();
3924
3932
3925
3933
ZEND_HASH_FOREACH_PTR (& script -> script .class_table , ce ) {
3926
3934
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 );
3932
3936
}
3933
3937
} ZEND_HASH_FOREACH_END ();
3934
3938
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
+
3935
3947
if (!zend_optimize_script (& script -> script , ZCG (accel_directives ).optimization_level , ZCG (accel_directives ).opt_debug_level )) {
3936
3948
return FAILURE ;
3937
3949
}
0 commit comments