summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--UPGRADING17
-rw-r--r--Zend/tests/033.phpt21
-rw-r--r--Zend/tests/bug41813.phpt2
-rw-r--r--Zend/tests/bug41919.phpt4
-rw-r--r--Zend/tests/bug47704.phpt2
-rw-r--r--Zend/tests/bug52041.phpt12
-rw-r--r--Zend/tests/bug75921.phpt20
-rw-r--r--Zend/tests/bug78531.phpt4
-rw-r--r--Zend/zend_compile.c8
-rw-r--r--Zend/zend_vm_def.h44
-rw-r--r--Zend/zend_vm_execute.h5967
-rw-r--r--Zend/zend_vm_handlers.h136
-rw-r--r--Zend/zend_vm_opcodes.c14
-rw-r--r--ext/simplexml/tests/bug35785.phpt16
-rw-r--r--ext/simplexml/tests/bug41582.phpt5
15 files changed, 3128 insertions, 3144 deletions
diff --git a/UPGRADING b/UPGRADING
index 1467d311ad..a5984b4ea8 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -44,8 +44,8 @@ PHP 8.0 UPGRADE NOTES
. Removed ability to use array_key_exists() with objects. Use one of isset()
or property_exists() instead.
. Made the behavior of array_key_exists() regarding the type of the key
- parameter consistent with isset() and normal array access. All key types
- now use the usual coercions and array/object keys throw a TypeError.
+ parameter consistent with isset() and normal array access. All key types now use
+ the usual coercions and array/object keys throw a TypeError.
. Any array that has a number n as its first numeric key will use n+1 for
its next implicit key. Even if n is negative.
RFC: https://wiki.php.net/rfc/negative_array_index
@@ -305,19 +305,6 @@ PHP 8.0 UPGRADE NOTES
of the return value is not stable and may change between PHP versions.
. Reflection export() methods have been removed.
-- SimpleXML:
- . It is no longer possible to perform deep initialization of SimpleXMLElement
- objects:
-
- $x = simplexml_load_string("<root></root>");
- $x->a->b->c = 'Test';
- // Error: Attempt to assign property 'c' of non-object
-
- The addChild() and addAttribute() APIs should be used instead. It is still
- possible to modify already existing nodes by direct property assignment,
- only the creation of multiple levels of nodes in one assignment is no longer
- supported.
-
- Socket:
. The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES
flags for socket_addrinfo_lookup() have been removed.
diff --git a/Zend/tests/033.phpt b/Zend/tests/033.phpt
index 31e7af42cd..652db2de20 100644
--- a/Zend/tests/033.phpt
+++ b/Zend/tests/033.phpt
@@ -15,6 +15,14 @@ try {
echo $e->getMessage(), "\n";
}
+$arr[][] = 2;
+
+try {
+ $arr[][]->bar = 2;
+} catch (Error $e) {
+ echo $e->getMessage(), "\n";
+}
+
?>
--EXPECTF--
Warning: Undefined variable: arr in %s on line %d
@@ -54,16 +62,5 @@ Warning: Trying to access array offset on value of type null in %s on line %d
Warning: Trying to access array offset on value of type null in %s on line %d
Warning: Trying to get property 'foo' of non-object in %s on line %d
-
-Warning: Undefined variable: arr in %s on line %d
-
-Warning: Trying to access array offset on value of type null in %s on line %d
-
-Warning: Trying to access array offset on value of type null in %s on line %d
-
-Warning: Trying to access array offset on value of type null in %s on line %d
-
-Warning: Trying to access array offset on value of type null in %s on line %d
-
-Warning: Trying to access array offset on value of type null in %s on line %d
Attempt to assign property 'foo' of non-object
+Attempt to assign property 'bar' of non-object
diff --git a/Zend/tests/bug41813.phpt b/Zend/tests/bug41813.phpt
index b14e400d44..af73344f5d 100644
--- a/Zend/tests/bug41813.phpt
+++ b/Zend/tests/bug41813.phpt
@@ -9,7 +9,7 @@ $foo[0]->bar = "xyz";
echo "Done\n";
?>
--EXPECTF--
-Fatal error: Uncaught Error: Attempt to assign property 'bar' of non-object in %s:%d
+Fatal error: Uncaught Error: Cannot use string offset as an object in %s:%d
Stack trace:
#0 {main}
thrown in %s on line %d
diff --git a/Zend/tests/bug41919.phpt b/Zend/tests/bug41919.phpt
index 15bd399b78..2af13acdc9 100644
--- a/Zend/tests/bug41919.phpt
+++ b/Zend/tests/bug41919.phpt
@@ -8,9 +8,7 @@ $foo[3]->bar[1] = "bang";
echo "ok\n";
?>
--EXPECTF--
-Warning: Uninitialized string offset: 3 in %s on line %d
-
-Fatal error: Uncaught Error: Attempt to modify property 'bar' of non-object in %s:%d
+Fatal error: Uncaught Error: Cannot use string offset as an object in %sbug41919.php:%d
Stack trace:
#0 {main}
thrown in %sbug41919.php on line %d
diff --git a/Zend/tests/bug47704.phpt b/Zend/tests/bug47704.phpt
index 5375dbc339..4fdaba8092 100644
--- a/Zend/tests/bug47704.phpt
+++ b/Zend/tests/bug47704.phpt
@@ -6,7 +6,7 @@ $s = "abd";
$s[0]->a += 1;
?>
--EXPECTF--
-Fatal error: Uncaught Error: Attempt to assign property 'a' of non-object in %s:%d
+Fatal error: Uncaught Error: Cannot use string offset as an object in %sbug47704.php:%d
Stack trace:
#0 {main}
thrown in %sbug47704.php on line %d
diff --git a/Zend/tests/bug52041.phpt b/Zend/tests/bug52041.phpt
index ab37203dcd..e5aca5c82e 100644
--- a/Zend/tests/bug52041.phpt
+++ b/Zend/tests/bug52041.phpt
@@ -51,25 +51,19 @@ Warning: Undefined variable: x in %s on line %d
Attempt to assign property 'a' of non-object
Warning: Undefined variable: x in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-Attempt to assign property 'b' of non-object
+Attempt to modify property 'a' of non-object
Warning: Undefined variable: x in %s on line %d
Attempt to increment/decrement property 'a' of non-object
Warning: Undefined variable: x in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-Attempt to increment/decrement property 'b' of non-object
+Attempt to modify property 'a' of non-object
Warning: Undefined variable: x in %s on line %d
Attempt to assign property 'a' of non-object
Warning: Undefined variable: x in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-Attempt to assign property 'b' of non-object
+Attempt to modify property 'a' of non-object
Warning: Undefined variable: x in %s on line %d
diff --git a/Zend/tests/bug75921.phpt b/Zend/tests/bug75921.phpt
index 11bab4b4ce..a8649262b5 100644
--- a/Zend/tests/bug75921.phpt
+++ b/Zend/tests/bug75921.phpt
@@ -53,29 +53,15 @@ Attempt to modify property 'a' of non-object
Warning: Undefined variable: null in %s on line %d
NULL
-
-Warning: Undefined variable: null in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-Attempt to assign property 'b' of non-object
+Attempt to modify property 'a' of non-object
Warning: Undefined variable: null in %s on line %d
NULL
-
-Warning: Undefined variable: null in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-
-Warning: Trying to access array offset on value of type null in %s on line %d
-Attempt to assign property 'b' of non-object
+Attempt to modify property 'a' of non-object
Warning: Undefined variable: null in %s on line %d
NULL
-
-Warning: Undefined variable: null in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-Attempt to modify property 'b' of non-object
+Attempt to modify property 'a' of non-object
Warning: Undefined variable: null in %s on line %d
NULL
diff --git a/Zend/tests/bug78531.phpt b/Zend/tests/bug78531.phpt
index a8850fb8c2..1e8f0b34d1 100644
--- a/Zend/tests/bug78531.phpt
+++ b/Zend/tests/bug78531.phpt
@@ -34,6 +34,4 @@ Warning: Undefined variable: u3 in %s on line %d
Attempt to increment/decrement property 'a' of non-object
Warning: Undefined variable: u4 in %s on line %d
-
-Warning: Trying to get property 'a' of non-object in %s on line %d
-Attempt to assign property 'a' of non-object
+Attempt to modify property 'a' of non-object
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 9fa1f20f2d..2050e3ba71 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2703,13 +2703,7 @@ static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t
}
CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS;
} else {
- /* In $a->b->c = $d, fetch $a->b for read and only ->c for write.
- * We will never modify $a->b itself, only the object it holds. */
- if (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_FUNC_ARG) {
- opline = zend_delayed_compile_var(&obj_node, obj_ast, BP_VAR_R, 0);
- } else {
- opline = zend_delayed_compile_var(&obj_node, obj_ast, type, 0);
- }
+ opline = zend_delayed_compile_var(&obj_node, obj_ast, type, 0);
zend_separate_if_call_and_write(&obj_node, obj_ast, type);
}
zend_compile_expr(&prop_node, prop_ast);
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 43b64cde62..68ef127ef6 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -989,7 +989,7 @@ ZEND_VM_COLD_HELPER(zend_undefined_function_helper, ANY, ANY)
HANDLE_EXCEPTION();
}
-ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
+ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, OP)
{
USE_OPLINE
zval *object;
@@ -1002,7 +1002,7 @@ ZEND_VM_HANDLER(28, ZEND_ASSIGN_OBJ_OP, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV,
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
do {
@@ -1080,7 +1080,7 @@ ZEND_VM_C_LABEL(assign_op_object):
FREE_OP_DATA();
FREE_OP2();
- FREE_OP1();
+ FREE_OP1_VAR_PTR();
/* assign_obj has two opcodes! */
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -1248,7 +1248,7 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
+ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
USE_OPLINE
zval *object;
@@ -1260,7 +1260,7 @@ ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, C
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
do {
@@ -1312,7 +1312,7 @@ ZEND_VM_C_LABEL(pre_incdec_object):
} while (0);
FREE_OP2();
- FREE_OP1();
+ FREE_OP1_VAR_PTR();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -1333,7 +1333,7 @@ ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
do {
@@ -1384,7 +1384,7 @@ ZEND_VM_C_LABEL(post_incdec_object):
} while (0);
FREE_OP2();
- FREE_OP1();
+ FREE_OP1_VAR_PTR();
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
@@ -2113,14 +2113,14 @@ ZEND_VM_C_LABEL(fetch_obj_r_finish):
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|DIM_WRITE|CACHE_SLOT)
+ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|DIM_WRITE|CACHE_SLOT)
{
USE_OPLINE
zval *property, *container, *result;
SAVE_OPLINE();
- container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
result = EX_VAR(opline->result.var);
zend_fetch_property_address(
@@ -2128,24 +2128,24 @@ ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FE
((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
FREE_OP2();
- if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
+ if (OP1_TYPE == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
+ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT)
{
USE_OPLINE
zval *property, *container, *result;
SAVE_OPLINE();
- container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
FREE_OP2();
- if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) {
+ if (OP1_TYPE == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -2262,7 +2262,7 @@ ZEND_VM_C_LABEL(fetch_obj_is_finish):
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|CACHE_SLOT)
+ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, FETCH_REF|CACHE_SLOT)
{
#if !ZEND_VM_SPEC
USE_OPLINE
@@ -2270,7 +2270,7 @@ ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMPVAR|UNUSED|THIS
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (OP1_TYPE == IS_CONST) {
+ if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper);
}
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_W);
@@ -2331,7 +2331,7 @@ ZEND_VM_HANDLER(155, ZEND_FETCH_LIST_W, VAR, CONST|TMPVAR|CV)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV))
+ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV))
{
USE_OPLINE
zval *object, *property, *value, tmp;
@@ -2339,7 +2339,7 @@ ZEND_VM_HANDLER(24, ZEND_ASSIGN_OBJ, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CAC
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R);
@@ -2470,7 +2470,7 @@ ZEND_VM_C_LABEL(free_and_exit_assign_obj):
FREE_OP_DATA();
ZEND_VM_C_LABEL(exit_assign_obj):
FREE_OP2();
- FREE_OP1();
+ FREE_OP1_VAR_PTR();
/* assign_obj has two opcodes! */
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
@@ -2676,14 +2676,14 @@ ZEND_VM_HANDLER(30, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC)
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT|SRC, SPEC(OP_DATA=VAR|CV))
+ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT|SRC, SPEC(OP_DATA=VAR|CV))
{
USE_OPLINE
zval *property, *container, *value_ptr;
SAVE_OPLINE();
- container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R);
+ container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W);
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
value_ptr = GET_OP_DATA_ZVAL_PTR_PTR(BP_VAR_W);
@@ -2706,7 +2706,7 @@ ZEND_VM_HANDLER(32, ZEND_ASSIGN_OBJ_REF, TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV,
zend_assign_to_property_reference(container, OP1_TYPE, property, OP2_TYPE, value_ptr OPLINE_CC EXECUTE_DATA_CC);
}
- FREE_OP1();
+ FREE_OP1_VAR_PTR();
FREE_OP2();
FREE_OP_DATA_VAR_PTR();
ZEND_VM_NEXT_OPCODE_EX(1, 2);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 683db7cf82..f7155da46f 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -5434,7 +5434,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_AR
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_CONST == IS_CONST) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -7609,7 +7609,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_AR
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_CONST == IS_CONST) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -9865,7 +9865,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_AR
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_CONST == IS_CONST) {
+ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -13897,170 +13897,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HAN
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object;
- zval *property;
- zval *value;
- zval *zptr;
- void **cache_slot;
- zend_property_info *prop_info;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
-
- do {
- value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_op_object;
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV
- && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZVAL_UNDEFINED_OP1();
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
-
-assign_op_object:
- /* here we are sure we are dealing with an object */
- zobj = Z_OBJ_P(object);
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- UNDEF_RESULT();
- break;
- }
- }
- cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
- if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
- if (UNEXPECTED(Z_ISERROR_P(zptr))) {
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- } else {
- zval *orig_zptr = zptr;
- zend_reference *ref;
-
- do {
- if (UNEXPECTED(Z_ISREF_P(zptr))) {
- ref = Z_REF_P(zptr);
- zptr = Z_REFVAL_P(zptr);
- if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
- zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
- }
-
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
- }
- if (UNEXPECTED(prop_info)) {
- /* special case for typed properties */
- zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_binary_op(zptr, zptr, value OPLINE_CC);
- }
- } while (0);
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), zptr);
- }
- }
- } else {
- zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
- }
- if (IS_CONST != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
- } while (0);
-
- FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object;
- zval *property;
- zval *zptr;
- void **cache_slot;
- zend_property_info *prop_info;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
-
- do {
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto pre_incdec_object;
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV
- && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZVAL_UNDEFINED_OP1();
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
-
-pre_incdec_object:
- /* here we are sure we are dealing with an object */
- zobj = Z_OBJ_P(object);
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- UNDEF_RESULT();
- break;
- }
- }
- cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
- if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
- if (UNEXPECTED(Z_ISERROR_P(zptr))) {
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- } else {
- if (IS_CONST == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
- }
- zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
- }
- if (IS_CONST != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
- } while (0);
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -14230,44 +14066,6 @@ fetch_obj_r_finish:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *result;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
- result = EX_VAR(opline->result.var);
- zend_fetch_property_address(
- result, container, (IS_TMP_VAR|IS_VAR), property, IS_CONST,
- ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *result;
-
- SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
- result = EX_VAR(opline->result.var);
- zend_fetch_property_address(result, container, (IS_TMP_VAR|IS_VAR), property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -14379,677 +14177,6 @@ fetch_obj_is_finish:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-#if 0
- USE_OPLINE
-#endif
-
- if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- /* Behave like FETCH_OBJ_W */
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
- ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- } else {
- ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
- value = RT_CONSTANT((opline+1), (opline+1)->op1);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CONST == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_CONST == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_CONST == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_CONST != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_CONST == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_CONST == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
-
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CONST != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
-
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
- value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CONST == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_TMP_VAR == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_TMP_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_TMP_VAR != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_TMP_VAR == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_TMP_VAR == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CONST != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
- value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CONST == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_VAR == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_VAR != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_VAR == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_VAR == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CONST != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
- value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CONST == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_CV == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_CV == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_CV != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_CV == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_CV == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_CV == IS_CV || IS_CV == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CONST == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
-
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CONST != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
-
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *value_ptr;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
-
- value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if (1) {
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
- if (IS_CONST == IS_CONST) {
- zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- if (IS_CONST == IS_CONST) {
- zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- }
- } else {
- zend_assign_to_property_reference(container, (IS_TMP_VAR|IS_VAR), property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *value_ptr;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = RT_CONSTANT(opline, opline->op2);
-
- value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if (1) {
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
- if (IS_CONST == IS_CONST) {
- zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- if (IS_CONST == IS_CONST) {
- zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- }
- } else {
- zend_assign_to_property_reference(container, (IS_TMP_VAR|IS_VAR), property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-
-
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -16151,171 +15278,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HA
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object;
- zval *property;
- zval *value;
- zval *zptr;
- void **cache_slot;
- zend_property_info *prop_info;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
-
- do {
- value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_op_object;
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV
- && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZVAL_UNDEFINED_OP1();
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
-
-assign_op_object:
- /* here we are sure we are dealing with an object */
- zobj = Z_OBJ_P(object);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- UNDEF_RESULT();
- break;
- }
- }
- cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
- if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
- if (UNEXPECTED(Z_ISERROR_P(zptr))) {
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- } else {
- zval *orig_zptr = zptr;
- zend_reference *ref;
-
- do {
- if (UNEXPECTED(Z_ISREF_P(zptr))) {
- ref = Z_REF_P(zptr);
- zptr = Z_REFVAL_P(zptr);
- if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
- zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
- }
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
- }
- if (UNEXPECTED(prop_info)) {
- /* special case for typed properties */
- zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_binary_op(zptr, zptr, value OPLINE_CC);
- }
- } while (0);
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), zptr);
- }
- }
- } else {
- zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
- }
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
- } while (0);
-
- FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object;
- zval *property;
- zval *zptr;
- void **cache_slot;
- zend_property_info *prop_info;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
-
- do {
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto pre_incdec_object;
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV
- && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZVAL_UNDEFINED_OP1();
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
-
-pre_incdec_object:
- /* here we are sure we are dealing with an object */
- zobj = Z_OBJ_P(object);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- UNDEF_RESULT();
- break;
- }
- }
- cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
- if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
- if (UNEXPECTED(Z_ISERROR_P(zptr))) {
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
- }
- zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
- }
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
- } while (0);
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -16485,44 +15447,6 @@ fetch_obj_r_finish:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *result;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- result = EX_VAR(opline->result.var);
- zend_fetch_property_address(
- result, container, (IS_TMP_VAR|IS_VAR), property, (IS_TMP_VAR|IS_VAR),
- (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *result;
-
- SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- result = EX_VAR(opline->result.var);
- zend_fetch_property_address(result, container, (IS_TMP_VAR|IS_VAR), property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -16634,677 +15558,6 @@ fetch_obj_is_finish:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-#if 0
- USE_OPLINE
-#endif
-
- if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- /* Behave like FETCH_OBJ_W */
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
- ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- } else {
- ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- value = RT_CONSTANT((opline+1), (opline+1)->op1);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_CONST == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_CONST == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_CONST != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_CONST == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_CONST == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
-
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
-
-exit_assign_obj:
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_TMP_VAR == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_TMP_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_TMP_VAR != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_TMP_VAR == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_TMP_VAR == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
-exit_assign_obj:
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_VAR == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_VAR != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_VAR == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_VAR == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
-exit_assign_obj:
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
- value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_CV == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_CV == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_CV != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_CV == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_CV == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_CV == IS_CV || IS_CV == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
-
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
-
-exit_assign_obj:
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *value_ptr;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
-
- value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if (1) {
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- }
- } else {
- zend_assign_to_property_reference(container, (IS_TMP_VAR|IS_VAR), property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *value_ptr;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
-
- value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if (1) {
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- }
- } else {
- zend_assign_to_property_reference(container, (IS_TMP_VAR|IS_VAR), property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
-
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -18300,170 +16553,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDL
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object;
- zval *property;
- zval *value;
- zval *zptr;
- void **cache_slot;
- zend_property_info *prop_info;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
-
- do {
- value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_op_object;
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV
- && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZVAL_UNDEFINED_OP1();
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
-
-assign_op_object:
- /* here we are sure we are dealing with an object */
- zobj = Z_OBJ_P(object);
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- UNDEF_RESULT();
- break;
- }
- }
- cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
- if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
- if (UNEXPECTED(Z_ISERROR_P(zptr))) {
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- } else {
- zval *orig_zptr = zptr;
- zend_reference *ref;
-
- do {
- if (UNEXPECTED(Z_ISREF_P(zptr))) {
- ref = Z_REF_P(zptr);
- zptr = Z_REFVAL_P(zptr);
- if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
- zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
- }
-
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
- }
- if (UNEXPECTED(prop_info)) {
- /* special case for typed properties */
- zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_binary_op(zptr, zptr, value OPLINE_CC);
- }
- } while (0);
-
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), zptr);
- }
- }
- } else {
- zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
- }
- if (IS_CV != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
- } while (0);
-
- FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object;
- zval *property;
- zval *zptr;
- void **cache_slot;
- zend_property_info *prop_info;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
-
- do {
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto pre_incdec_object;
- }
- if ((IS_TMP_VAR|IS_VAR) == IS_CV
- && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
- ZVAL_UNDEFINED_OP1();
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- break;
- }
-
-pre_incdec_object:
- /* here we are sure we are dealing with an object */
- zobj = Z_OBJ_P(object);
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- UNDEF_RESULT();
- break;
- }
- }
- cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
- if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
- if (UNEXPECTED(Z_ISERROR_P(zptr))) {
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_NULL(EX_VAR(opline->result.var));
- }
- } else {
- if (IS_CV == IS_CONST) {
- prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
- } else {
- prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
- }
- zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
- }
- if (IS_CV != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
- } while (0);
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -18633,44 +16722,6 @@ fetch_obj_r_finish:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *result;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- result = EX_VAR(opline->result.var);
- zend_fetch_property_address(
- result, container, (IS_TMP_VAR|IS_VAR), property, IS_CV,
- ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
- BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *result;
-
- SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- result = EX_VAR(opline->result.var);
- zend_fetch_property_address(result, container, (IS_TMP_VAR|IS_VAR), property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
- FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
- }
- ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
-}
-
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -18782,677 +16833,6 @@ fetch_obj_is_finish:
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-#if 0
- USE_OPLINE
-#endif
-
- if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
- /* Behave like FETCH_OBJ_W */
- if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
- ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
- ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- } else {
- ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
- }
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- value = RT_CONSTANT((opline+1), (opline+1)->op1);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CV == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_CONST == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_CONST == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_CONST != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_CONST == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_CONST == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
-
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CV != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
-
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CV == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_TMP_VAR == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_TMP_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_TMP_VAR != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_TMP_VAR == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_TMP_VAR == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CV != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CV == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_VAR == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_VAR != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_VAR == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_VAR == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CV != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *object, *property, *value, tmp;
- zend_object *zobj;
- zend_string *name, *tmp_name;
-
- SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
- value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
- if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
- object = Z_REFVAL_P(object);
- goto assign_object;
- }
- zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
- value = &EG(uninitialized_zval);
- goto free_and_exit_assign_obj;
- }
-
-assign_object:
- zobj = Z_OBJ_P(object);
- if (IS_CV == IS_CONST &&
- EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
- void **cache_slot = CACHE_ADDR(opline->extended_value);
- uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
- zend_object *zobj = Z_OBJ_P(object);
- zval *property_val;
-
- if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
- property_val = OBJ_PROP(zobj, prop_offset);
- if (Z_TYPE_P(property_val) != IS_UNDEF) {
- zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
-
- if (UNEXPECTED(prop_info != NULL)) {
- zend_uchar orig_type = IS_UNDEF;
-
- if (IS_CV == IS_CONST) {
- orig_type = Z_TYPE_P(value);
- }
-
- value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
-
- /* will remain valid, thus no need to check prop_info in future here */
- if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
- CACHE_PTR_EX(cache_slot + 2, NULL);
- }
- goto free_and_exit_assign_obj;
- } else {
-fast_assign_obj:
- value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- } else {
- if (EXPECTED(zobj->properties != NULL)) {
- if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
- if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
- GC_DELREF(zobj->properties);
- }
- zobj->properties = zend_array_dup(zobj->properties);
- }
- property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
- if (property_val) {
- goto fast_assign_obj;
- }
- }
-
- if (!zobj->ce->__set) {
-
- if (EXPECTED(zobj->properties == NULL)) {
- rebuild_object_properties(zobj);
- }
- if (IS_CV == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
- Z_ADDREF_P(value);
- }
- } else if (IS_CV != IS_TMP_VAR) {
- if (Z_ISREF_P(value)) {
- if (IS_CV == IS_VAR) {
- zend_reference *ref = Z_REF_P(value);
- if (GC_DELREF(ref) == 0) {
- ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
- efree_size(ref, sizeof(zend_reference));
- value = &tmp;
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else {
- value = Z_REFVAL_P(value);
- Z_TRY_ADDREF_P(value);
- }
- } else if (IS_CV == IS_CV) {
- Z_TRY_ADDREF_P(value);
- }
- }
- zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY(EX_VAR(opline->result.var), value);
- }
- goto exit_assign_obj;
- }
- }
- }
-
- if (IS_CV == IS_CV || IS_CV == IS_VAR) {
- ZVAL_DEREF(value);
- }
-
- if (IS_CV == IS_CONST) {
- name = Z_STR_P(property);
- } else {
- name = zval_try_get_tmp_string(property, &tmp_name);
- if (UNEXPECTED(!name)) {
-
- UNDEF_RESULT();
- goto exit_assign_obj;
- }
- }
-
- value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
-
- if (IS_CV != IS_CONST) {
- zend_tmp_string_release(tmp_name);
- }
-
-free_and_exit_assign_obj:
- if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
- ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
- }
-
-exit_assign_obj:
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
- /* assign_obj has two opcodes! */
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *value_ptr;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
-
- value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if (1) {
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
- if (IS_CV == IS_CONST) {
- zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- if (IS_CV == IS_CONST) {
- zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- }
- } else {
- zend_assign_to_property_reference(container, (IS_TMP_VAR|IS_VAR), property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-
- zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
- USE_OPLINE
- zval *property, *container, *value_ptr;
-
- SAVE_OPLINE();
-
- container = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
- property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
-
- value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
-
- if (1) {
- if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) {
- if (IS_CV == IS_CONST) {
- zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- } else {
- if (IS_CV == IS_CONST) {
- zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- } else {
- zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
- }
- } else {
- zend_assign_to_property_reference(container, (IS_TMP_VAR|IS_VAR), property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
- }
-
- zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
-
-
- ZEND_VM_NEXT_OPCODE_EX(1, 2);
-}
-
-/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -20600,6 +17980,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CO
}
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if 0
+ USE_OPLINE
+#endif
+
+ if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
+ /* Behave like FETCH_OBJ_W */
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -20986,6 +18383,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TM
}
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if 0
+ USE_OPLINE
+#endif
+
+ if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
+ /* Behave like FETCH_OBJ_W */
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -21702,6 +19116,23 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV
}
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if 0
+ USE_OPLINE
+#endif
+
+ if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
+ /* Behave like FETCH_OBJ_W */
+ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -23551,6 +20982,103 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONS
ZEND_VM_SMART_BRANCH(result, 1);
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object;
+ zval *property;
+ zval *value;
+ zval *zptr;
+ void **cache_slot;
+ zend_property_info *prop_info;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+
+ do {
+ value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_op_object;
+ }
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZVAL_UNDEFINED_OP1();
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+
+assign_op_object:
+ /* here we are sure we are dealing with an object */
+ zobj = Z_OBJ_P(object);
+ if (IS_CONST == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ UNDEF_RESULT();
+ break;
+ }
+ }
+ cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
+ if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
+ if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+ } else {
+ zval *orig_zptr = zptr;
+ zend_reference *ref;
+
+ do {
+ if (UNEXPECTED(Z_ISREF_P(zptr))) {
+ ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
+ if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
+ zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+ }
+
+ if (IS_CONST == IS_CONST) {
+ prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
+ } else {
+ prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
+ }
+ if (UNEXPECTED(prop_info)) {
+ /* special case for typed properties */
+ zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_binary_op(zptr, zptr, value OPLINE_CC);
+ }
+ } while (0);
+
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), zptr);
+ }
+ }
+ } else {
+ zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
+ }
+ if (IS_CONST != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+ } while (0);
+
+ FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -23664,6 +21192,73 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDL
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object;
+ zval *property;
+ zval *zptr;
+ void **cache_slot;
+ zend_property_info *prop_info;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+
+ do {
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto pre_incdec_object;
+ }
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZVAL_UNDEFINED_OP1();
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+
+pre_incdec_object:
+ /* here we are sure we are dealing with an object */
+ zobj = Z_OBJ_P(object);
+ if (IS_CONST == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ UNDEF_RESULT();
+ break;
+ }
+ }
+ cache_slot = (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
+ if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
+ if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+ } else {
+ if (IS_CONST == IS_CONST) {
+ prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
+ } else {
+ prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
+ }
+ zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
+ }
+ if (IS_CONST != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+ } while (0);
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -23676,7 +21271,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HA
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
property = RT_CONSTANT(opline, opline->op2);
do {
@@ -23794,6 +21389,61 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *result;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+ result = EX_VAR(opline->result.var);
+ zend_fetch_property_address(
+ result, container, IS_VAR, property, IS_CONST,
+ ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
+ BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+
+ if (IS_VAR == IS_VAR) {
+ FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *result;
+
+ SAVE_OPLINE();
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+ result = EX_VAR(opline->result.var);
+ zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
+
+ if (IS_VAR == IS_VAR) {
+ FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if 0
+ USE_OPLINE
+#endif
+
+ if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
+ /* Behave like FETCH_OBJ_W */
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -23833,6 +21483,586 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HA
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+ value = RT_CONSTANT((opline+1), (opline+1)->op1);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_CONST == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_CONST != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_CONST == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_CONST == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CONST == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CONST != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_TMP_VAR == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_TMP_VAR != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_TMP_VAR == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_TMP_VAR == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CONST == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CONST != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+ value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_VAR == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_VAR != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_VAR == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_VAR == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CONST == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CONST != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CONST == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_CV == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_CV != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_CV == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_CV == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_CV == IS_CV || IS_CV == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CONST == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CONST != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -24327,6 +22557,80 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_U
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *value_ptr;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+
+ value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (1) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *value_ptr;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = RT_CONSTANT(opline, opline->op2);
+
+ value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (1) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ if (IS_CONST == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CONST, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+
+
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -24943,6 +23247,103 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLE
ZEND_VM_SMART_BRANCH(result, 1);
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object;
+ zval *property;
+ zval *value;
+ zval *zptr;
+ void **cache_slot;
+ zend_property_info *prop_info;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+
+ do {
+ value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_op_object;
+ }
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZVAL_UNDEFINED_OP1();
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+
+assign_op_object:
+ /* here we are sure we are dealing with an object */
+ zobj = Z_OBJ_P(object);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ UNDEF_RESULT();
+ break;
+ }
+ }
+ cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
+ if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
+ if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+ } else {
+ zval *orig_zptr = zptr;
+ zend_reference *ref;
+
+ do {
+ if (UNEXPECTED(Z_ISREF_P(zptr))) {
+ ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
+ if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
+ zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+ }
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
+ } else {
+ prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
+ }
+ if (UNEXPECTED(prop_info)) {
+ /* special case for typed properties */
+ zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_binary_op(zptr, zptr, value OPLINE_CC);
+ }
+ } while (0);
+
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), zptr);
+ }
+ }
+ } else {
+ zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+ } while (0);
+
+ FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -25058,6 +23459,74 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HAND
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object;
+ zval *property;
+ zval *zptr;
+ void **cache_slot;
+ zend_property_info *prop_info;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+
+ do {
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto pre_incdec_object;
+ }
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZVAL_UNDEFINED_OP1();
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+
+pre_incdec_object:
+ /* here we are sure we are dealing with an object */
+ zobj = Z_OBJ_P(object);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ UNDEF_RESULT();
+ break;
+ }
+ }
+ cache_slot = ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
+ if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
+ if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
+ } else {
+ prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
+ }
+ zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
+ }
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+ } while (0);
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -25070,7 +23539,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_H
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
do {
@@ -25189,6 +23658,61 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVA
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *result;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+ result = EX_VAR(opline->result.var);
+ zend_fetch_property_address(
+ result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR),
+ (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
+ BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ if (IS_VAR == IS_VAR) {
+ FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *result;
+
+ SAVE_OPLINE();
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+ result = EX_VAR(opline->result.var);
+ zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ if (IS_VAR == IS_VAR) {
+ FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if 0
+ USE_OPLINE
+#endif
+
+ if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
+ /* Behave like FETCH_OBJ_W */
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -25229,6 +23753,586 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_H
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+ value = RT_CONSTANT((opline+1), (opline+1)->op1);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_CONST == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_CONST != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_CONST == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_CONST == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+
+exit_assign_obj:
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_TMP_VAR == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_TMP_VAR != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_TMP_VAR == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_TMP_VAR == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+exit_assign_obj:
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_VAR == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_VAR != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_VAR == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_VAR == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+exit_assign_obj:
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_CV == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_CV != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_CV == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_CV == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_CV == IS_CV || IS_CV == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+
+exit_assign_obj:
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -25683,6 +24787,80 @@ assign_dim_error:
ZEND_VM_NEXT_OPCODE_EX(1, 2);
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *value_ptr;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+
+ value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (1) {
+ if (IS_VAR == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *value_ptr;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
+
+ value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (1) {
+ if (IS_VAR == IS_UNUSED) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
+
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -27525,6 +26703,103 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDL
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object;
+ zval *property;
+ zval *value;
+ zval *zptr;
+ void **cache_slot;
+ zend_property_info *prop_info;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+
+ do {
+ value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_op_object;
+ }
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZVAL_UNDEFINED_OP1();
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+
+assign_op_object:
+ /* here we are sure we are dealing with an object */
+ zobj = Z_OBJ_P(object);
+ if (IS_CV == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ UNDEF_RESULT();
+ break;
+ }
+ }
+ cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL;
+ if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
+ if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+ } else {
+ zval *orig_zptr = zptr;
+ zend_reference *ref;
+
+ do {
+ if (UNEXPECTED(Z_ISREF_P(zptr))) {
+ ref = Z_REF_P(zptr);
+ zptr = Z_REFVAL_P(zptr);
+ if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
+ zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+ }
+
+ if (IS_CV == IS_CONST) {
+ prop_info = (zend_property_info*)CACHED_PTR_EX(cache_slot + 2);
+ } else {
+ prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), orig_zptr);
+ }
+ if (UNEXPECTED(prop_info)) {
+ /* special case for typed properties */
+ zend_binary_assign_op_typed_prop(prop_info, zptr, value OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_binary_op(zptr, zptr, value OPLINE_CC);
+ }
+ } while (0);
+
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), zptr);
+ }
+ }
+ } else {
+ zend_assign_op_overloaded_property(zobj, name, cache_slot, value OPLINE_CC EXECUTE_DATA_CC);
+ }
+ if (IS_CV != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+ } while (0);
+
+ FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMP|VAR|CV, UNUSED|CONST|TMPVAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -27638,6 +26913,73 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object;
+ zval *property;
+ zval *zptr;
+ void **cache_slot;
+ zend_property_info *prop_info;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+
+ do {
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto pre_incdec_object;
+ }
+ if (IS_VAR == IS_CV
+ && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ ZVAL_UNDEFINED_OP1();
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ break;
+ }
+
+pre_incdec_object:
+ /* here we are sure we are dealing with an object */
+ zobj = Z_OBJ_P(object);
+ if (IS_CV == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ UNDEF_RESULT();
+ break;
+ }
+ }
+ cache_slot = (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL;
+ if (EXPECTED((zptr = zobj->handlers->get_property_ptr_ptr(zobj, name, BP_VAR_RW, cache_slot)) != NULL)) {
+ if (UNEXPECTED(Z_ISERROR_P(zptr))) {
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_NULL(EX_VAR(opline->result.var));
+ }
+ } else {
+ if (IS_CV == IS_CONST) {
+ prop_info = (zend_property_info *) CACHED_PTR_EX(cache_slot + 2);
+ } else {
+ prop_info = zend_object_fetch_property_type_info(Z_OBJ_P(object), zptr);
+ }
+ zend_pre_incdec_property_zval(zptr, prop_info OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ zend_pre_incdec_overloaded_property(zobj, name, cache_slot OPLINE_CC EXECUTE_DATA_CC);
+ }
+ if (IS_CV != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+ } while (0);
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -27650,7 +26992,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDL
zend_string *name, *tmp_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
do {
@@ -27768,6 +27110,61 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HA
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *result;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ result = EX_VAR(opline->result.var);
+ zend_fetch_property_address(
+ result, container, IS_VAR, property, IS_CV,
+ ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
+ BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
+
+ if (IS_VAR == IS_VAR) {
+ FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *result;
+
+ SAVE_OPLINE();
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ result = EX_VAR(opline->result.var);
+ zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
+
+ if (IS_VAR == IS_VAR) {
+ FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
+ }
+ ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
+}
+
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+#if 0
+ USE_OPLINE
+#endif
+
+ if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
+ /* Behave like FETCH_OBJ_W */
+ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) {
+ ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ } else {
+ ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
+ }
+}
+
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -27807,6 +27204,586 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDL
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = RT_CONSTANT((opline+1), (opline+1)->op1);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CV == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_CONST == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_CONST == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_CONST, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_CONST != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_CONST == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_CONST == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CV == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CV != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_tmp((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CV == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_TMP_VAR == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_TMP_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_TMP_VAR, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_TMP_VAR != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_TMP_VAR == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_TMP_VAR == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CV == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CV != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CV == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_VAR == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_VAR == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_VAR, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_VAR != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_VAR == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_VAR == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CV == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CV != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *object, *property, *value, tmp;
+ zend_object *zobj;
+ zend_string *name, *tmp_name;
+
+ SAVE_OPLINE();
+ object = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+ value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) {
+ if (Z_ISREF_P(object) && Z_TYPE_P(Z_REFVAL_P(object)) == IS_OBJECT) {
+ object = Z_REFVAL_P(object);
+ goto assign_object;
+ }
+ zend_throw_non_object_error(object, property OPLINE_CC EXECUTE_DATA_CC);
+ value = &EG(uninitialized_zval);
+ goto free_and_exit_assign_obj;
+ }
+
+assign_object:
+ zobj = Z_OBJ_P(object);
+ if (IS_CV == IS_CONST &&
+ EXPECTED(zobj->ce == CACHED_PTR(opline->extended_value))) {
+ void **cache_slot = CACHE_ADDR(opline->extended_value);
+ uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1);
+ zend_object *zobj = Z_OBJ_P(object);
+ zval *property_val;
+
+ if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) {
+ property_val = OBJ_PROP(zobj, prop_offset);
+ if (Z_TYPE_P(property_val) != IS_UNDEF) {
+ zend_property_info *prop_info = (zend_property_info*) CACHED_PTR_EX(cache_slot + 2);
+
+ if (UNEXPECTED(prop_info != NULL)) {
+ zend_uchar orig_type = IS_UNDEF;
+
+ if (IS_CV == IS_CONST) {
+ orig_type = Z_TYPE_P(value);
+ }
+
+ value = zend_assign_to_typed_prop(prop_info, property_val, value EXECUTE_DATA_CC);
+
+ /* will remain valid, thus no need to check prop_info in future here */
+ if (IS_CV == IS_CONST && Z_TYPE_P(value) == orig_type) {
+ CACHE_PTR_EX(cache_slot + 2, NULL);
+ }
+ goto free_and_exit_assign_obj;
+ } else {
+fast_assign_obj:
+ value = zend_assign_to_variable(property_val, value, IS_CV, EX_USES_STRICT_TYPES());
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ } else {
+ if (EXPECTED(zobj->properties != NULL)) {
+ if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) {
+ if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) {
+ GC_DELREF(zobj->properties);
+ }
+ zobj->properties = zend_array_dup(zobj->properties);
+ }
+ property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1);
+ if (property_val) {
+ goto fast_assign_obj;
+ }
+ }
+
+ if (!zobj->ce->__set) {
+
+ if (EXPECTED(zobj->properties == NULL)) {
+ rebuild_object_properties(zobj);
+ }
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) {
+ Z_ADDREF_P(value);
+ }
+ } else if (IS_CV != IS_TMP_VAR) {
+ if (Z_ISREF_P(value)) {
+ if (IS_CV == IS_VAR) {
+ zend_reference *ref = Z_REF_P(value);
+ if (GC_DELREF(ref) == 0) {
+ ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value));
+ efree_size(ref, sizeof(zend_reference));
+ value = &tmp;
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else {
+ value = Z_REFVAL_P(value);
+ Z_TRY_ADDREF_P(value);
+ }
+ } else if (IS_CV == IS_CV) {
+ Z_TRY_ADDREF_P(value);
+ }
+ }
+ zend_hash_add_new(zobj->properties, Z_STR_P(property), value);
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY(EX_VAR(opline->result.var), value);
+ }
+ goto exit_assign_obj;
+ }
+ }
+ }
+
+ if (IS_CV == IS_CV || IS_CV == IS_VAR) {
+ ZVAL_DEREF(value);
+ }
+
+ if (IS_CV == IS_CONST) {
+ name = Z_STR_P(property);
+ } else {
+ name = zval_try_get_tmp_string(property, &tmp_name);
+ if (UNEXPECTED(!name)) {
+
+ UNDEF_RESULT();
+ goto exit_assign_obj;
+ }
+ }
+
+ value = zobj->handlers->write_property(zobj, name, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL);
+
+ if (IS_CV != IS_CONST) {
+ zend_tmp_string_release(tmp_name);
+ }
+
+free_and_exit_assign_obj:
+ if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
+ ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value);
+ }
+
+exit_assign_obj:
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+ /* assign_obj has two opcodes! */
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -28335,6 +28312,80 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
}
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *value_ptr;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+
+ value_ptr = _get_zval_ptr_ptr_var((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (1) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+
+ zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var));;
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
+static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
+{
+ USE_OPLINE
+ zval *property, *container, *value_ptr;
+
+ SAVE_OPLINE();
+
+ container = _get_zval_ptr_ptr_var(opline->op1.var EXECUTE_DATA_CC);
+ property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC);
+
+ value_ptr = _get_zval_ptr_cv_BP_VAR_W((opline+1)->op1.var EXECUTE_DATA_CC);
+
+ if (1) {
+ if (IS_VAR == IS_UNUSED) {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_this_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_this_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ } else {
+ if (IS_CV == IS_CONST) {
+ zend_assign_to_property_reference_var_const(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ } else {
+ zend_assign_to_property_reference_var_var(container, property, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+ }
+ } else {
+ zend_assign_to_property_reference(container, IS_VAR, property, IS_CV, value_ptr OPLINE_CC EXECUTE_DATA_CC);
+ }
+
+ zval_ptr_dtor_nogc(EX_VAR(opline->op1.var));
+
+
+ ZEND_VM_NEXT_OPCODE_EX(1, 2);
+}
+
+/* No specialization for op_types (CONST|TMPVAR|CV, UNUSED|CONST|VAR) */
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
@@ -29482,7 +29533,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_
((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_UNUSED & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -29499,7 +29550,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_UNUSED & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -29624,7 +29675,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_UNUSED == IS_CONST) {
+ if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -31349,7 +31400,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR
(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- if (IS_UNUSED & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -31366,7 +31417,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVA
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- if (IS_UNUSED & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -31491,7 +31542,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_UNUSED == IS_CONST) {
+ if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -33744,7 +33795,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HAN
((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_UNUSED & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -33761,7 +33812,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HA
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_UNUSED & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_UNUSED == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -33886,7 +33937,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_UNUSED == IS_CONST) {
+ if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -38056,7 +38107,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HAND
((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -38073,7 +38124,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HAN
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -38198,7 +38249,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CON
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_CV == IS_CONST) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -41534,7 +41585,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HAN
(((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -41551,7 +41602,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HA
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
zval_ptr_dtor_nogc(EX_VAR(opline->op2.var));
- if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -41676,7 +41727,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_CV == IS_CONST) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -46342,7 +46393,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER
((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_FETCH_OBJ_FLAGS) : NULL),
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -46359,7 +46410,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLE
result = EX_VAR(opline->result.var);
zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW, 0, 1 OPLINE_CC EXECUTE_DATA_CC);
- if (IS_CV & (IS_VAR|IS_TMP_VAR)) {
+ if (IS_CV == IS_VAR) {
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
}
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
@@ -46484,7 +46535,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
/* Behave like FETCH_OBJ_W */
- if (IS_CV == IS_CONST) {
+ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) {
ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
}
ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU));
@@ -49444,56 +49495,56 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
@@ -49604,16 +49655,16 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_LABEL,
@@ -49682,19 +49733,13 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
@@ -49702,34 +49747,40 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL,
@@ -50144,16 +50195,16 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL,
(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL,
(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
(void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL,
@@ -50199,16 +50250,16 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL,
(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL,
(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
(void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL,
@@ -50309,16 +50360,16 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL,
(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL,
(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
(void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL,
@@ -50584,16 +50635,16 @@ ZEND_API void execute_ex(zend_execute_data *ex)
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_LABEL,
(void*)&&ZEND_NULL_LABEL,
- (void*)&&ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL,
+ (void*)&&ZEND_NULL_LABEL,
+ (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL,
(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL,
(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
(void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL,
@@ -53421,14 +53472,6 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST)
ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST):
- VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST)
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST):
- VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST)
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST):
VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST)
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53441,46 +53484,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST)
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST):
- VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST)
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST):
- VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST)
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST):
VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST)
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST):
- VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST)
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR)
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV)
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST):
VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST)
ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53561,14 +53568,6 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR)
ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR)
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR):
- VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR)
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR):
VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR)
ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53581,46 +53580,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR)
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR):
- VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR)
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR):
- VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR)
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR):
VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR)
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR):
- VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR)
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR)
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV)
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR):
VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR)
ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53713,14 +53676,6 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV)
ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV)
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV):
- VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV)
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV):
VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV)
ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53733,46 +53688,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV)
ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV):
- VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV)
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV):
- VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV)
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV):
VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV)
ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
- HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV):
- VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV)
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV)
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR):
- VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR)
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
- HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV):
- VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV)
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
- HYBRID_BREAK();
HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV):
VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV)
ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53930,6 +53849,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST)
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST):
+ VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST)
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST):
VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST)
ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -53958,6 +53881,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR)
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR):
+ VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR)
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR):
VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR)
ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54014,6 +53941,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV)
ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV):
+ VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV)
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV):
VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV)
ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54227,6 +54158,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST)
ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST):
+ VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST)
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST):
VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST)
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54235,6 +54170,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CONST)
ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST):
+ VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST)
+ ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST):
VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST)
ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54255,6 +54194,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST)
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST):
+ VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST)
+ ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST):
+ VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST)
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST):
+ VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST)
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST):
VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST)
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54263,6 +54214,22 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST)
ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST):
VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST)
ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54287,6 +54254,14 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED)
ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR)
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV)
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST):
VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST)
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54319,6 +54294,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST)
ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR)
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR):
VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR)
ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54327,6 +54306,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR)
ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR):
+ VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR)
+ ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR):
VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR)
ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54347,6 +54330,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR)
ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR):
+ VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR)
+ ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR):
+ VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR)
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR):
+ VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR)
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR):
VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR)
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54355,6 +54350,22 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR)
ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST):
VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST)
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54371,6 +54382,14 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV)
ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR)
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV)
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR):
VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR)
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54499,6 +54518,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED)
ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV)
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV):
VM_TRACE(ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV)
ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54507,6 +54530,10 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_ASSIGN_OP_SPEC_VAR_CV)
ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV):
+ VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV)
+ ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV):
VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV)
ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54527,6 +54554,18 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV)
ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV):
+ VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV)
+ ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV):
+ VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV)
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV):
+ VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV)
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV):
VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV)
ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54535,6 +54574,22 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV)
ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV)
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST):
VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST)
ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -54563,6 +54618,14 @@ zend_leave_helper_SPEC_LABEL:
VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV)
ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR):
+ VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR)
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
+ HYBRID_CASE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV):
+ VM_TRACE(ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV)
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ HYBRID_BREAK();
HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV):
VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV)
ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -56976,56 +57039,56 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER,
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER,
ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
@@ -57136,16 +57199,16 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_HANDLER,
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HANDLER,
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST_HANDLER,
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR_HANDLER,
@@ -57214,19 +57277,13 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
@@ -57234,34 +57291,40 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER,
@@ -57676,16 +57739,16 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
+ ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER,
@@ -57731,16 +57794,16 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER,
@@ -57841,16 +57904,16 @@ void zend_vm_init(void)
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV_HANDLER,
+ ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER,
@@ -58116,16 +58179,16 @@ void zend_vm_init(void)
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER,
ZEND_NULL_HANDLER,
- ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
+ ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER,
+ ZEND_NULL_HANDLER,
+ ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER,
diff --git a/Zend/zend_vm_handlers.h b/Zend/zend_vm_handlers.h
index 870506e8e2..e5d50a4083 100644
--- a/Zend/zend_vm_handlers.h
+++ b/Zend/zend_vm_handlers.h
@@ -436,38 +436,22 @@
_(857, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) \
_(858, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) \
_(860, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) \
- _(886, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST) \
- _(887, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP) \
- _(888, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
- _(890, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV) \
- _(891, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
- _(892, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
- _(893, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(895, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(896, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
- _(897, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
- _(898, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(900, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(906, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST) \
- _(907, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP) \
- _(908, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR) \
- _(910, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV) \
- _(911, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST) \
- _(912, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP) \
- _(913, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
- _(915, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV) \
- _(916, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
- _(917, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
- _(918, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(920, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(921, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
- _(922, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
- _(923, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(925, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(931, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST) \
- _(932, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP) \
- _(933, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR) \
- _(935, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV) \
+ _(911, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST) \
+ _(912, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP) \
+ _(913, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR) \
+ _(915, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV) \
+ _(916, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
+ _(917, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
+ _(918, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
+ _(920, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
+ _(921, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
+ _(922, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
+ _(923, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
+ _(925, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
+ _(931, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST) \
+ _(932, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP) \
+ _(933, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR) \
+ _(935, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV) \
_(936, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) \
_(937, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) \
_(938, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) \
@@ -522,14 +506,10 @@
_(1038, ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR) \
_(1039, ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED) \
_(1040, ZEND_ASSIGN_DIM_OP_SPEC_CV_CV) \
- _(1046, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST) \
- _(1047, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
- _(1048, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
- _(1050, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV) \
- _(1051, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST) \
- _(1052, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
- _(1053, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
- _(1055, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV) \
+ _(1051, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST) \
+ _(1052, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
+ _(1053, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
+ _(1055, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV) \
_(1056, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST) \
_(1057, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
_(1058, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
@@ -547,22 +527,14 @@
_(1093, ZEND_QM_ASSIGN_SPEC_TMP) \
_(1094, ZEND_QM_ASSIGN_SPEC_VAR) \
_(1096, ZEND_QM_ASSIGN_SPEC_CV) \
- _(1124, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
- _(1126, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV) \
- _(1129, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(1131, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(1134, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(1136, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(1144, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR) \
- _(1146, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV) \
- _(1149, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
- _(1151, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV) \
- _(1154, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(1156, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(1159, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
- _(1161, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
- _(1169, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR) \
- _(1171, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV) \
+ _(1149, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR) \
+ _(1151, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV) \
+ _(1154, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
+ _(1156, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
+ _(1159, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
+ _(1161, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
+ _(1169, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR) \
+ _(1171, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_CV) \
_(1174, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR) \
_(1176, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV) \
_(1179, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
@@ -817,14 +789,10 @@
_(1578, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
_(1579, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
_(1580, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
- _(1586, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST) \
- _(1587, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
- _(1588, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
- _(1590, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV) \
- _(1591, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST) \
- _(1592, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
- _(1593, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
- _(1595, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV) \
+ _(1591, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
+ _(1592, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
+ _(1593, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
+ _(1595, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \
_(1596, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
_(1597, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
_(1598, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
@@ -847,14 +815,10 @@
_(1633, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
_(1634, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
_(1635, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
- _(1641, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST) \
- _(1642, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
- _(1643, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
- _(1645, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV) \
- _(1646, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST) \
- _(1647, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
- _(1648, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
- _(1650, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV) \
+ _(1646, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
+ _(1647, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
+ _(1648, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
+ _(1650, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \
_(1651, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
_(1652, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
_(1653, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
@@ -931,14 +895,14 @@
_(1747, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
_(1748, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
_(1750, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
- _(1751, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST) \
- _(1752, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
- _(1753, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
- _(1755, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV) \
- _(1756, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST) \
- _(1757, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
- _(1758, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
- _(1760, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV) \
+ _(1751, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
+ _(1752, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1753, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
+ _(1755, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
+ _(1756, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
+ _(1757, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1758, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
+ _(1760, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
_(1761, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
_(1762, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
_(1763, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
@@ -1115,14 +1079,10 @@
_(2018, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
_(2019, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
_(2020, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
- _(2026, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST) \
- _(2027, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2028, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2030, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV) \
- _(2031, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST) \
- _(2032, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2033, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
- _(2035, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV) \
+ _(2031, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
+ _(2032, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2033, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
+ _(2035, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \
_(2036, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
_(2037, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
_(2038, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c
index 143bac1960..65733779e4 100644
--- a/Zend/zend_vm_opcodes.c
+++ b/Zend/zend_vm_opcodes.c
@@ -245,15 +245,15 @@ static uint32_t zend_vm_opcodes_flags[195] = {
0x00000b0b,
0x00000301,
0x00006701,
- 0x00040755,
+ 0x00040751,
0x00040000,
0x04000701,
0x04006701,
- 0x04000755,
+ 0x04000751,
0x04000000,
0x0b000101,
0x00000003,
- 0x0b040755,
+ 0x0b040751,
0x0b040000,
0x00000001,
0x00000001,
@@ -306,16 +306,16 @@ static uint32_t zend_vm_opcodes_flags[195] = {
0x00040757,
0x00010107,
0x00006701,
- 0x00640755,
+ 0x00640751,
0x00010107,
0x00006701,
- 0x00040755,
+ 0x00040751,
0x00010107,
0x00000707,
0x00040757,
0x00010107,
0x00006703,
- 0x00240757,
+ 0x00240753,
0x00010107,
0x00000701,
0x00040751,
@@ -353,7 +353,7 @@ static uint32_t zend_vm_opcodes_flags[195] = {
0x00000000,
0x00000000,
0x00000000,
- 0x00040755,
+ 0x00040751,
0x00040751,
0x00040751,
0x00040751,
diff --git a/ext/simplexml/tests/bug35785.phpt b/ext/simplexml/tests/bug35785.phpt
index 9ffea71e30..420515bb03 100644
--- a/ext/simplexml/tests/bug35785.phpt
+++ b/ext/simplexml/tests/bug35785.phpt
@@ -12,9 +12,15 @@ $xml = simplexml_load_string("<root></root>");
var_dump(isset($xml->bla->posts));
$xml->bla->posts[0]->name = "FooBar";
echo $xml->asXML();
+$xml = simplexml_load_string("<root></root>");
+$xml->bla->posts[]->name = "FooBar";
+echo $xml->asXML();
?>
---EXPECTF--
-Fatal error: Uncaught Error: Attempt to assign property 'name' of non-object in %s:%d
-Stack trace:
-#0 {main}
- thrown in %s on line %d
+--EXPECT--
+<?xml version="1.0"?>
+<root><bla><posts><name>FooBar</name></posts></bla></root>
+bool(false)
+<?xml version="1.0"?>
+<root><bla><posts><name>FooBar</name></posts></bla></root>
+<?xml version="1.0"?>
+<root><bla><posts><name>FooBar</name></posts></bla></root>
diff --git a/ext/simplexml/tests/bug41582.phpt b/ext/simplexml/tests/bug41582.phpt
index a896530dc3..b270f3b639 100644
--- a/ext/simplexml/tests/bug41582.phpt
+++ b/ext/simplexml/tests/bug41582.phpt
@@ -13,5 +13,6 @@ $xml->movie[]->characters->character[0]->name = 'Miss Coder';
echo($xml->asXml());
?>
---EXPECTF--
-Fatal error: Cannot use [] for reading in %s on line %d
+--EXPECT--
+<?xml version="1.0" standalone="yes"?>
+<collection><movie><characters><character><name>Miss Coder</name></character></characters></movie></collection>