]> granicus.if.org Git - php/commitdiff
More effecient array duplication
authorDmitry Stogov <dmitry@zend.com>
Wed, 17 Jan 2018 14:56:04 +0000 (17:56 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 17 Jan 2018 14:56:04 +0000 (17:56 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 7079e64920c5a43cbe44d57636b1efa063dd773e..407194ec87dd51063747ba4b86fdd06a3129d125 100644 (file)
@@ -5739,7 +5739,7 @@ ZEND_VM_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR)
                        array_ptr = Z_REFVAL_P(array_ref);
                }
                if (OP1_TYPE == IS_CONST) {
-                       zval_copy_ctor_func(array_ptr);
+                       ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
                } else {
                        SEPARATE_ARRAY(array_ptr);
                }
index 5e6b8d7c47cf035c0be4adc97dd3825718676955..dfa5306514cdeab84f30edf7360c4d9645387cf4 100644 (file)
@@ -3668,7 +3668,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER
                        array_ptr = Z_REFVAL_P(array_ref);
                }
                if (IS_CONST == IS_CONST) {
-                       zval_copy_ctor_func(array_ptr);
+                       ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
                } else {
                        SEPARATE_ARRAY(array_ptr);
                }
@@ -18834,7 +18834,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(Z
                        array_ptr = Z_REFVAL_P(array_ref);
                }
                if (IS_TMP_VAR == IS_CONST) {
-                       zval_copy_ctor_func(array_ptr);
+                       ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
                } else {
                        SEPARATE_ARRAY(array_ptr);
                }
@@ -22142,7 +22142,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(Z
                        array_ptr = Z_REFVAL_P(array_ref);
                }
                if (IS_VAR == IS_CONST) {
-                       zval_copy_ctor_func(array_ptr);
+                       ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
                } else {
                        SEPARATE_ARRAY(array_ptr);
                }
@@ -39020,7 +39020,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZE
                        array_ptr = Z_REFVAL_P(array_ref);
                }
                if (IS_CV == IS_CONST) {
-                       zval_copy_ctor_func(array_ptr);
+                       ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr)));
                } else {
                        SEPARATE_ARRAY(array_ptr);
                }