diff options
author | Dmitry Stogov <dmitry@zend.com> | 2017-12-07 15:01:04 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2017-12-07 15:01:04 +0300 |
commit | 7bc76c408face42894c5ce53a1521ee07dc0475e (patch) | |
tree | bf3a161ea964f25b4e2eadbcf3e876ab1ff490c6 | |
parent | 2d8f238318dc6a92c414d6b73c062d519fd4aad8 (diff) | |
download | php-git-7bc76c408face42894c5ce53a1521ee07dc0475e.tar.gz |
SEPARATE_STRING() micro optimization
-rw-r--r-- | Zend/zend_types.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/Zend/zend_types.h b/Zend/zend_types.h index fcd5da2817..6e7a1f3eee 100644 --- a/Zend/zend_types.h +++ b/Zend/zend_types.h @@ -1070,10 +1070,12 @@ static zend_always_inline uint32_t zval_delref_p(zval* pz) { #define SEPARATE_STRING(zv) do { \ zval *_zv = (zv); \ if (Z_REFCOUNT_P(_zv) > 1) { \ - if (Z_REFCOUNTED_P(_zv)) { \ - Z_DELREF_P(_zv); \ - } \ - zval_copy_ctor_func(_zv); \ + zend_string *_str = Z_STR_P(_zv); \ + ZEND_ASSERT(Z_REFCOUNTED_P(_zv)); \ + ZEND_ASSERT(!ZSTR_IS_INTERNED(_str)); \ + Z_DELREF_P(_zv); \ + ZVAL_NEW_STR(_zv, zend_string_init( \ + ZSTR_VAL(_str), ZSTR_LEN(_str), 0)); \ } \ } while (0) |