Skip to content

Commit a935c23

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) - basename(string[, string])
1 parent 272b887 commit a935c23

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

ext/opcache/Optimizer/sccp.c

Lines changed: 19 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,12 @@ static inline int ct_eval_func_call(
906913
return FAILURE;
907914
}
908915
/* pass */
916+
} else if (zend_string_equals_literal(name, "dirname")) {
917+
if (Z_TYPE_P(args[0]) != IS_STRING
918+
|| (Z_TYPE_P(args[1]) != IS_LONG)) {
919+
return FAILURE;
920+
}
921+
/* pass */
909922
} else if (zend_string_equals_literal(name, "trim")
910923
|| zend_string_equals_literal(name, "rtrim")
911924
|| zend_string_equals_literal(name, "ltrim")
@@ -962,7 +975,8 @@ static inline int ct_eval_func_call(
962975
|| zend_string_equals_literal(name, "str_contains")
963976
|| zend_string_equals_literal(name, "str_starts_with")
964977
|| zend_string_equals_literal(name, "str_ends_with")
965-
|| zend_string_equals_literal(name, "version_compare")) {
978+
|| zend_string_equals_literal(name, "version_compare")
979+
|| zend_string_equals_literal(name, "basename")) {
966980
if (Z_TYPE_P(args[0]) != IS_STRING
967981
|| Z_TYPE_P(args[1]) != IS_STRING) {
968982
return FAILURE;
@@ -1004,7 +1018,8 @@ static inline int ct_eval_func_call(
10041018
}
10051019
}
10061020
/* pass */
1007-
} else if (zend_string_equals_literal(name, "version_compare")) {
1021+
} else if (zend_string_equals_literal(name, "version_compare")
1022+
|| zend_string_equals_literal(name, "str_replace")) {
10081023
if (Z_TYPE_P(args[0]) != IS_STRING
10091024
|| Z_TYPE_P(args[1]) != IS_STRING
10101025
|| Z_TYPE_P(args[2]) != IS_STRING) {

0 commit comments

Comments
 (0)