From f3abd7a68e10042fc4e4c0745c7b72f29105bce4 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sun, 30 Mar 2025 14:24:37 +0200 Subject: [PATCH] Micro-optimizations to str_increment() and str_decrement() Since it's a new string we're returning we can use RETURN_NEW_STR() and we can also use zend_string_efree() for the strings that we replace because they have RC1. --- ext/standard/string.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ext/standard/string.c b/ext/standard/string.c index b15a24a098faa..1e20791eb61ce 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1273,10 +1273,10 @@ PHP_FUNCTION(str_increment) ZSTR_VAL(tmp)[0] = ZSTR_VAL(incremented)[0]; break; } - zend_string_release_ex(incremented, /* persistent */ false); - RETURN_STR(tmp); + zend_string_efree(incremented); + RETURN_NEW_STR(tmp); } - RETURN_STR(incremented); + RETURN_NEW_STR(incremented); } @@ -1323,17 +1323,17 @@ PHP_FUNCTION(str_decrement) if (UNEXPECTED(carry || (ZSTR_VAL(decremented)[0] == '0' && ZSTR_LEN(decremented) > 1))) { if (ZSTR_LEN(decremented) == 1) { - zend_string_release_ex(decremented, /* persistent */ false); + zend_string_efree(decremented); zend_argument_value_error(1, "\"%s\" is out of decrement range", ZSTR_VAL(str)); RETURN_THROWS(); } zend_string *tmp = zend_string_alloc(ZSTR_LEN(decremented) - 1, 0); memcpy(ZSTR_VAL(tmp), ZSTR_VAL(decremented) + 1, ZSTR_LEN(decremented) - 1); ZSTR_VAL(tmp)[ZSTR_LEN(decremented) - 1] = '\0'; - zend_string_release_ex(decremented, /* persistent */ false); - RETURN_STR(tmp); + zend_string_efree(decremented); + RETURN_NEW_STR(tmp); } - RETURN_STR(decremented); + RETURN_NEW_STR(decremented); } #if defined(PHP_WIN32)