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