Skip to content

Commit 908f553

Browse files
committed
opcache optimizer: optimize some more functions on compile time
- dirname(string[, int]) - md5(string) - crc32(string) - sha1(string) - array_unique(array) - array_filter(array) - filter_var(string, int) - basename(string[, string])
1 parent 272b887 commit 908f553

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

ext/opcache/Optimizer/sccp.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -844,13 +844,20 @@ static inline int ct_eval_func_call(
844844
|| zend_string_equals_literal(name, "urldecode")
845845
|| zend_string_equals_literal(name, "rawurlencode")
846846
|| zend_string_equals_literal(name, "rawurldecode")
847-
|| zend_string_equals_literal(name, "php_uname")) {
847+
|| zend_string_equals_literal(name, "php_uname")
848+
|| zend_string_equals_literal(name, "dirname")
849+
|| zend_string_equals_literal(name, "basename")
850+
|| zend_string_equals_literal(name, "md5")
851+
|| zend_string_equals_literal(name, "crc32")
852+
|| zend_string_equals_literal(name, "sha1")) {
848853
if (Z_TYPE_P(args[0]) != IS_STRING) {
849854
return FAILURE;
850855
}
851856
/* pass */
852857
} else if (zend_string_equals_literal(name, "array_keys")
853-
|| zend_string_equals_literal(name, "array_values")) {
858+
|| zend_string_equals_literal(name, "array_values")
859+
|| zend_string_equals_literal(name, "array_unique")
860+
|| zend_string_equals_literal(name, "array_filter")) {
854861
if (Z_TYPE_P(args[0]) != IS_ARRAY) {
855862
return FAILURE;
856863
}
@@ -906,6 +913,13 @@ static inline int ct_eval_func_call(
906913
return FAILURE;
907914
}
908915
/* pass */
916+
} else if (zend_string_equals_literal(name, "filter_var")
917+
|| zend_string_equals_literal(name, "dirname")) {
918+
if (Z_TYPE_P(args[0]) != IS_STRING
919+
|| (Z_TYPE_P(args[1]) != IS_LONG)) {
920+
return FAILURE;
921+
}
922+
/* pass */
909923
} else if (zend_string_equals_literal(name, "trim")
910924
|| zend_string_equals_literal(name, "rtrim")
911925
|| zend_string_equals_literal(name, "ltrim")
@@ -962,7 +976,8 @@ static inline int ct_eval_func_call(
962976
|| zend_string_equals_literal(name, "str_contains")
963977
|| zend_string_equals_literal(name, "str_starts_with")
964978
|| zend_string_equals_literal(name, "str_ends_with")
965-
|| zend_string_equals_literal(name, "version_compare")) {
979+
|| zend_string_equals_literal(name, "version_compare")
980+
|| zend_string_equals_literal(name, "basename")) {
966981
if (Z_TYPE_P(args[0]) != IS_STRING
967982
|| Z_TYPE_P(args[1]) != IS_STRING) {
968983
return FAILURE;
@@ -1004,7 +1019,8 @@ static inline int ct_eval_func_call(
10041019
}
10051020
}
10061021
/* pass */
1007-
} else if (zend_string_equals_literal(name, "version_compare")) {
1022+
} else if (zend_string_equals_literal(name, "version_compare")
1023+
|| zend_string_equals_literal(name, "str_replace")) {
10081024
if (Z_TYPE_P(args[0]) != IS_STRING
10091025
|| Z_TYPE_P(args[1]) != IS_STRING
10101026
|| Z_TYPE_P(args[2]) != IS_STRING) {

0 commit comments

Comments
 (0)