]> granicus.if.org Git - php/commitdiff
SEPARATE_STRING() micro optimization
authorDmitry Stogov <dmitry@zend.com>
Thu, 7 Dec 2017 12:01:04 +0000 (15:01 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 7 Dec 2017 12:01:04 +0000 (15:01 +0300)
Zend/zend_types.h

index fcd5da281726174b8e6dd1e578b43424187b393d..6e7a1f3eee1306116e87c6a8c361d7757283364f 100644 (file)
@@ -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)