@@ -792,6 +792,26 @@ void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline, uint32_
792
792
}
793
793
}
794
794
795
+ static bool zend_optimizer_ignore_class (zend_class_entry * ce , zend_string * filename )
796
+ {
797
+ return ce -> type == ZEND_USER_CLASS
798
+ && !(ce -> ce_flags & ZEND_ACC_PRELOADED )
799
+ && (!ce -> info .user .filename || ce -> info .user .filename != filename );
800
+ }
801
+
802
+ static bool zend_optimizer_ignore_function (zend_function * fbc , zend_string * filename )
803
+ {
804
+ if (fbc -> type == ZEND_INTERNAL_FUNCTION ) {
805
+ return false;
806
+ } else if (fbc -> type == ZEND_USER_FUNCTION ) {
807
+ return !(fbc -> op_array .fn_flags & ZEND_ACC_PRELOADED )
808
+ && (!fbc -> op_array .filename && fbc -> op_array .filename != filename );
809
+ } else {
810
+ ZEND_ASSERT (fbc -> type == ZEND_EVAL_CODE );
811
+ return true;
812
+ }
813
+ }
814
+
795
815
zend_class_entry * zend_optimizer_get_class_entry (
796
816
const zend_script * script , const zend_op_array * op_array , zend_string * lcname ) {
797
817
zend_class_entry * ce = script ? zend_hash_find_ptr (& script -> class_table , lcname ) : NULL ;
@@ -800,10 +820,7 @@ zend_class_entry *zend_optimizer_get_class_entry(
800
820
}
801
821
802
822
ce = zend_hash_find_ptr (CG (class_table ), lcname );
803
- if (ce
804
- && (ce -> type == ZEND_INTERNAL_CLASS
805
- || (ce -> ce_flags & ZEND_ACC_PRELOADED )
806
- || (op_array && ce -> info .user .filename == op_array -> filename ))) {
823
+ if (ce && !zend_optimizer_ignore_class (ce , op_array ? op_array -> filename : NULL )) {
807
824
return ce ;
808
825
}
809
826
@@ -846,12 +863,8 @@ const zend_class_constant *zend_fetch_class_const_info(
846
863
ce = zend_optimizer_get_class_entry (script , op_array , Z_STR_P (op1 + 1 ));
847
864
} else {
848
865
zend_class_entry * tmp = zend_hash_find_ptr (EG (class_table ), Z_STR_P (op1 + 1 ));
849
- if (tmp != NULL ) {
850
- if (tmp -> type == ZEND_INTERNAL_CLASS
851
- || (tmp -> ce_flags & ZEND_ACC_PRELOADED )
852
- || (tmp -> info .user .filename && tmp -> info .user .filename == op_array -> filename )) {
853
- ce = tmp ;
854
- }
866
+ if (tmp != NULL && !zend_optimizer_ignore_class (tmp , op_array -> filename )) {
867
+ ce = tmp ;
855
868
}
856
869
}
857
870
}
@@ -899,11 +912,7 @@ zend_function *zend_optimizer_get_called_func(
899
912
if (script && (func = zend_hash_find_ptr (& script -> function_table , function_name )) != NULL ) {
900
913
return func ;
901
914
} else if ((func = zend_hash_find_ptr (EG (function_table ), function_name )) != NULL ) {
902
- if (func -> type == ZEND_INTERNAL_FUNCTION ) {
903
- return func ;
904
- } else if (func -> type == ZEND_USER_FUNCTION
905
- && ((func -> op_array .fn_flags & ZEND_ACC_PRELOADED )
906
- || (func -> op_array .filename && func -> op_array .filename == op_array -> filename ))) {
915
+ if (!zend_optimizer_ignore_function (func , op_array -> filename )) {
907
916
return func ;
908
917
}
909
918
}
@@ -917,11 +926,7 @@ zend_function *zend_optimizer_get_called_func(
917
926
if (script && (func = zend_hash_find_ptr (& script -> function_table , Z_STR_P (function_name )))) {
918
927
return func ;
919
928
} else if ((func = zend_hash_find_ptr (EG (function_table ), Z_STR_P (function_name ))) != NULL ) {
920
- if (func -> type == ZEND_INTERNAL_FUNCTION ) {
921
- return func ;
922
- } else if (func -> type == ZEND_USER_FUNCTION
923
- && ((func -> op_array .fn_flags & ZEND_ACC_PRELOADED )
924
- || (func -> op_array .filename && func -> op_array .filename == op_array -> filename ))) {
929
+ if (!zend_optimizer_ignore_function (func , op_array -> filename )) {
925
930
return func ;
926
931
}
927
932
}
0 commit comments