mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Revert "Fetch for read in nested property assignments"
This reverts commit bb43a3822e
.
After thinking about this a bit more, this is now going to be
a complete solution for the "readonly properties" case, for example:
unset($foo->readOnly->bar);
should also be legal and
$foo->readOnly['bar'] = 42;
should also be legal if $foo->readOnly is not an array but an
ArrayAccess object.
I think it may be better to distinguish better on the BP_VAR flag
level. Reverting for now.
This commit is contained in:
parent
a5f136b855
commit
df79277de3
15 changed files with 3176 additions and 3192 deletions
17
UPGRADING
17
UPGRADING
|
@ -44,8 +44,8 @@ PHP 8.0 UPGRADE NOTES
|
||||||
. Removed ability to use array_key_exists() with objects. Use one of isset()
|
. Removed ability to use array_key_exists() with objects. Use one of isset()
|
||||||
or property_exists() instead.
|
or property_exists() instead.
|
||||||
. Made the behavior of array_key_exists() regarding the type of the key
|
. Made the behavior of array_key_exists() regarding the type of the key
|
||||||
parameter consistent with isset() and normal array access. All key types
|
parameter consistent with isset() and normal array access. All key types now use
|
||||||
now use the usual coercions and array/object keys throw a TypeError.
|
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
|
. 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.
|
its next implicit key. Even if n is negative.
|
||||||
RFC: https://wiki.php.net/rfc/negative_array_index
|
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.
|
of the return value is not stable and may change between PHP versions.
|
||||||
. Reflection export() methods have been removed.
|
. 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:
|
- Socket:
|
||||||
. The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES
|
. The deprecated AI_IDN_ALLOW_UNASSIGNED and AI_IDN_USE_STD3_ASCII_RULES
|
||||||
flags for socket_addrinfo_lookup() have been removed.
|
flags for socket_addrinfo_lookup() have been removed.
|
||||||
|
|
|
@ -15,6 +15,14 @@ try {
|
||||||
echo $e->getMessage(), "\n";
|
echo $e->getMessage(), "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$arr[][] = 2;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$arr[][]->bar = 2;
|
||||||
|
} catch (Error $e) {
|
||||||
|
echo $e->getMessage(), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
Warning: Undefined variable: arr in %s on line %d
|
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 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: 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 'foo' of non-object
|
||||||
|
Attempt to assign property 'bar' of non-object
|
||||||
|
|
|
@ -9,7 +9,7 @@ $foo[0]->bar = "xyz";
|
||||||
echo "Done\n";
|
echo "Done\n";
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--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:
|
Stack trace:
|
||||||
#0 {main}
|
#0 {main}
|
||||||
thrown in %s on line %d
|
thrown in %s on line %d
|
||||||
|
|
|
@ -8,9 +8,7 @@ $foo[3]->bar[1] = "bang";
|
||||||
echo "ok\n";
|
echo "ok\n";
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--EXPECTF--
|
||||||
Warning: Uninitialized string offset: 3 in %s on line %d
|
Fatal error: Uncaught Error: Cannot use string offset as an object in %sbug41919.php:%d
|
||||||
|
|
||||||
Fatal error: Uncaught Error: Attempt to modify property 'bar' of non-object in %s:%d
|
|
||||||
Stack trace:
|
Stack trace:
|
||||||
#0 {main}
|
#0 {main}
|
||||||
thrown in %sbug41919.php on line %d
|
thrown in %sbug41919.php on line %d
|
||||||
|
|
|
@ -6,7 +6,7 @@ $s = "abd";
|
||||||
$s[0]->a += 1;
|
$s[0]->a += 1;
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--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:
|
Stack trace:
|
||||||
#0 {main}
|
#0 {main}
|
||||||
thrown in %sbug47704.php on line %d
|
thrown in %sbug47704.php on line %d
|
||||||
|
|
|
@ -51,25 +51,19 @@ Warning: Undefined variable: x in %s on line %d
|
||||||
Attempt to assign property 'a' of non-object
|
Attempt to assign property 'a' of non-object
|
||||||
|
|
||||||
Warning: Undefined variable: x in %s on line %d
|
Warning: Undefined variable: x in %s on line %d
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
|
||||||
Attempt to assign property 'b' of non-object
|
|
||||||
|
|
||||||
Warning: Undefined variable: x in %s on line %d
|
Warning: Undefined variable: x in %s on line %d
|
||||||
Attempt to increment/decrement property 'a' of non-object
|
Attempt to increment/decrement property 'a' of non-object
|
||||||
|
|
||||||
Warning: Undefined variable: x in %s on line %d
|
Warning: Undefined variable: x in %s on line %d
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
|
||||||
Attempt to increment/decrement property 'b' of non-object
|
|
||||||
|
|
||||||
Warning: Undefined variable: x in %s on line %d
|
Warning: Undefined variable: x in %s on line %d
|
||||||
Attempt to assign property 'a' of non-object
|
Attempt to assign property 'a' of non-object
|
||||||
|
|
||||||
Warning: Undefined variable: x in %s on line %d
|
Warning: Undefined variable: x in %s on line %d
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
|
||||||
Attempt to assign property 'b' of non-object
|
|
||||||
|
|
||||||
Warning: Undefined variable: x in %s on line %d
|
Warning: Undefined variable: x in %s on line %d
|
||||||
|
|
||||||
|
|
|
@ -53,29 +53,15 @@ Attempt to modify property 'a' of non-object
|
||||||
|
|
||||||
Warning: Undefined variable: null in %s on line %d
|
Warning: Undefined variable: null in %s on line %d
|
||||||
NULL
|
NULL
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
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
|
|
||||||
|
|
||||||
Warning: Undefined variable: null in %s on line %d
|
Warning: Undefined variable: null in %s on line %d
|
||||||
NULL
|
NULL
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
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
|
|
||||||
|
|
||||||
Warning: Undefined variable: null in %s on line %d
|
Warning: Undefined variable: null in %s on line %d
|
||||||
NULL
|
NULL
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
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
|
|
||||||
|
|
||||||
Warning: Undefined variable: null in %s on line %d
|
Warning: Undefined variable: null in %s on line %d
|
||||||
NULL
|
NULL
|
||||||
|
|
|
@ -34,6 +34,4 @@ Warning: Undefined variable: u3 in %s on line %d
|
||||||
Attempt to increment/decrement property 'a' of non-object
|
Attempt to increment/decrement property 'a' of non-object
|
||||||
|
|
||||||
Warning: Undefined variable: u4 in %s on line %d
|
Warning: Undefined variable: u4 in %s on line %d
|
||||||
|
Attempt to modify property 'a' of non-object
|
||||||
Warning: Trying to get property 'a' of non-object in %s on line %d
|
|
||||||
Attempt to assign property 'a' of non-object
|
|
||||||
|
|
|
@ -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;
|
CG(active_op_array)->fn_flags |= ZEND_ACC_USES_THIS;
|
||||||
} else {
|
} else {
|
||||||
/* In $a->b->c = $d, fetch $a->b for read and only ->c for write.
|
opline = zend_delayed_compile_var(&obj_node, obj_ast, type, 0);
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
zend_separate_if_call_and_write(&obj_node, obj_ast, type);
|
zend_separate_if_call_and_write(&obj_node, obj_ast, type);
|
||||||
}
|
}
|
||||||
zend_compile_expr(&prop_node, prop_ast);
|
zend_compile_expr(&prop_node, prop_ast);
|
||||||
|
|
|
@ -989,7 +989,7 @@ ZEND_VM_COLD_HELPER(zend_undefined_function_helper, ANY, ANY)
|
||||||
HANDLE_EXCEPTION();
|
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
|
USE_OPLINE
|
||||||
zval *object;
|
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;
|
zend_string *name, *tmp_name;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -1080,7 +1080,7 @@ ZEND_VM_C_LABEL(assign_op_object):
|
||||||
|
|
||||||
FREE_OP_DATA();
|
FREE_OP_DATA();
|
||||||
FREE_OP2();
|
FREE_OP2();
|
||||||
FREE_OP1();
|
FREE_OP1_VAR_PTR();
|
||||||
/* assign_obj has two opcodes! */
|
/* assign_obj has two opcodes! */
|
||||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
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_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
|
USE_OPLINE
|
||||||
zval *object;
|
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;
|
zend_string *name, *tmp_name;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -1312,7 +1312,7 @@ ZEND_VM_C_LABEL(pre_incdec_object):
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
FREE_OP2();
|
FREE_OP2();
|
||||||
FREE_OP1();
|
FREE_OP1_VAR_PTR();
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
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;
|
zend_string *name, *tmp_name;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -1384,7 +1384,7 @@ ZEND_VM_C_LABEL(post_incdec_object):
|
||||||
} while (0);
|
} while (0);
|
||||||
|
|
||||||
FREE_OP2();
|
FREE_OP2();
|
||||||
FREE_OP1();
|
FREE_OP1_VAR_PTR();
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
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_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
|
USE_OPLINE
|
||||||
zval *property, *container, *result;
|
zval *property, *container, *result;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
result = EX_VAR(opline->result.var);
|
result = EX_VAR(opline->result.var);
|
||||||
zend_fetch_property_address(
|
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),
|
((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);
|
BP_VAR_W, opline->extended_value & ZEND_FETCH_OBJ_FLAGS, 1 OPLINE_CC EXECUTE_DATA_CC);
|
||||||
FREE_OP2();
|
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);
|
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
|
||||||
}
|
}
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
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
|
USE_OPLINE
|
||||||
zval *property, *container, *result;
|
zval *property, *container, *result;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
result = EX_VAR(opline->result.var);
|
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);
|
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();
|
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);
|
FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(opline->op1.var);
|
||||||
}
|
}
|
||||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
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_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
|
#if !ZEND_VM_SPEC
|
||||||
USE_OPLINE
|
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)) {
|
if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) {
|
||||||
/* Behave like FETCH_OBJ_W */
|
/* 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_HELPER(zend_use_tmp_in_write_context_helper);
|
||||||
}
|
}
|
||||||
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_W);
|
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_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
|
USE_OPLINE
|
||||||
zval *object, *property, *value, tmp;
|
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;
|
zend_string *name, *tmp_name;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
value = GET_OP_DATA_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();
|
FREE_OP_DATA();
|
||||||
ZEND_VM_C_LABEL(exit_assign_obj):
|
ZEND_VM_C_LABEL(exit_assign_obj):
|
||||||
FREE_OP2();
|
FREE_OP2();
|
||||||
FREE_OP1();
|
FREE_OP1_VAR_PTR();
|
||||||
/* assign_obj has two opcodes! */
|
/* assign_obj has two opcodes! */
|
||||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
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_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
|
USE_OPLINE
|
||||||
zval *property, *container, *value_ptr;
|
zval *property, *container, *value_ptr;
|
||||||
|
|
||||||
SAVE_OPLINE();
|
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);
|
property = GET_OP2_ZVAL_PTR(BP_VAR_R);
|
||||||
|
|
||||||
value_ptr = GET_OP_DATA_ZVAL_PTR_PTR(BP_VAR_W);
|
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);
|
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_OP2();
|
||||||
FREE_OP_DATA_VAR_PTR();
|
FREE_OP_DATA_VAR_PTR();
|
||||||
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
ZEND_VM_NEXT_OPCODE_EX(1, 2);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -436,38 +436,22 @@
|
||||||
_(857, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) \
|
_(857, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) \
|
||||||
_(858, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) \
|
_(858, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) \
|
||||||
_(860, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) \
|
_(860, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) \
|
||||||
_(886, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CONST) \
|
_(911, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST) \
|
||||||
_(887, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_TMP) \
|
_(912, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP) \
|
||||||
_(888, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
|
_(913, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR) \
|
||||||
_(890, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CONST_OP_DATA_CV) \
|
_(915, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV) \
|
||||||
_(891, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
|
_(916, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
|
||||||
_(892, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
|
_(917, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
|
||||||
_(893, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
_(918, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||||
_(895, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
_(920, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||||
_(896, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CONST) \
|
_(921, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \
|
||||||
_(897, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_TMP) \
|
_(922, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \
|
||||||
_(898, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
_(923, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||||
_(900, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
_(925, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||||
_(906, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CONST) \
|
_(931, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST) \
|
||||||
_(907, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_TMP) \
|
_(932, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP) \
|
||||||
_(908, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_VAR) \
|
_(933, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR) \
|
||||||
_(910, ZEND_ASSIGN_OBJ_SPEC_TMPVAR_CV_OP_DATA_CV) \
|
_(935, ZEND_ASSIGN_OBJ_SPEC_VAR_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) \
|
|
||||||
_(936, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) \
|
_(936, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) \
|
||||||
_(937, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) \
|
_(937, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) \
|
||||||
_(938, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) \
|
_(938, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) \
|
||||||
|
@ -522,14 +506,10 @@
|
||||||
_(1038, ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR) \
|
_(1038, ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR) \
|
||||||
_(1039, ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED) \
|
_(1039, ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED) \
|
||||||
_(1040, ZEND_ASSIGN_DIM_OP_SPEC_CV_CV) \
|
_(1040, ZEND_ASSIGN_DIM_OP_SPEC_CV_CV) \
|
||||||
_(1046, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CONST) \
|
_(1051, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST) \
|
||||||
_(1047, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
|
_(1052, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
|
||||||
_(1048, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_TMPVAR) \
|
_(1053, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR) \
|
||||||
_(1050, ZEND_ASSIGN_OBJ_OP_SPEC_TMPVAR_CV) \
|
_(1055, ZEND_ASSIGN_OBJ_OP_SPEC_VAR_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) \
|
|
||||||
_(1056, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST) \
|
_(1056, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONST) \
|
||||||
_(1057, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
|
_(1057, ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPVAR) \
|
||||||
_(1058, 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) \
|
_(1093, ZEND_QM_ASSIGN_SPEC_TMP) \
|
||||||
_(1094, ZEND_QM_ASSIGN_SPEC_VAR) \
|
_(1094, ZEND_QM_ASSIGN_SPEC_VAR) \
|
||||||
_(1096, ZEND_QM_ASSIGN_SPEC_CV) \
|
_(1096, ZEND_QM_ASSIGN_SPEC_CV) \
|
||||||
_(1124, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_VAR) \
|
_(1149, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_VAR) \
|
||||||
_(1126, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CONST_OP_DATA_CV) \
|
_(1151, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CONST_OP_DATA_CV) \
|
||||||
_(1129, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
_(1154, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||||
_(1131, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
_(1156, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||||
_(1134, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_VAR) \
|
_(1159, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_VAR) \
|
||||||
_(1136, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_TMPVAR_OP_DATA_CV) \
|
_(1161, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_TMPVAR_OP_DATA_CV) \
|
||||||
_(1144, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_VAR) \
|
_(1169, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_CV_OP_DATA_VAR) \
|
||||||
_(1146, ZEND_ASSIGN_OBJ_REF_SPEC_TMPVAR_CV_OP_DATA_CV) \
|
_(1171, ZEND_ASSIGN_OBJ_REF_SPEC_VAR_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) \
|
|
||||||
_(1174, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR) \
|
_(1174, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_VAR) \
|
||||||
_(1176, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV) \
|
_(1176, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_CONST_OP_DATA_CV) \
|
||||||
_(1179, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
|
_(1179, ZEND_ASSIGN_OBJ_REF_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \
|
||||||
|
@ -817,14 +789,10 @@
|
||||||
_(1578, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
|
_(1578, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \
|
||||||
_(1579, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
|
_(1579, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \
|
||||||
_(1580, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
|
_(1580, ZEND_FETCH_DIM_W_SPEC_CV_CV) \
|
||||||
_(1586, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CONST) \
|
_(1591, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \
|
||||||
_(1587, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
|
_(1592, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
|
||||||
_(1588, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_TMPVAR) \
|
_(1593, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \
|
||||||
_(1590, ZEND_FETCH_OBJ_W_SPEC_TMPVAR_CV) \
|
_(1595, ZEND_FETCH_OBJ_W_SPEC_VAR_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) \
|
|
||||||
_(1596, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
|
_(1596, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \
|
||||||
_(1597, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
|
_(1597, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \
|
||||||
_(1598, 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) \
|
_(1633, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \
|
||||||
_(1634, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
|
_(1634, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \
|
||||||
_(1635, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
|
_(1635, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \
|
||||||
_(1641, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CONST) \
|
_(1646, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \
|
||||||
_(1642, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
|
_(1647, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
|
||||||
_(1643, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_TMPVAR) \
|
_(1648, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \
|
||||||
_(1645, ZEND_FETCH_OBJ_RW_SPEC_TMPVAR_CV) \
|
_(1650, ZEND_FETCH_OBJ_RW_SPEC_VAR_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) \
|
|
||||||
_(1651, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
|
_(1651, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \
|
||||||
_(1652, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
|
_(1652, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \
|
||||||
_(1653, 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) \
|
_(1747, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \
|
||||||
_(1748, 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) \
|
_(1750, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \
|
||||||
_(1751, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST) \
|
_(1751, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \
|
||||||
_(1752, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
_(1752, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
|
||||||
_(1753, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
_(1753, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \
|
||||||
_(1755, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV) \
|
_(1755, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \
|
||||||
_(1756, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CONST) \
|
_(1756, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \
|
||||||
_(1757, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
_(1757, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
|
||||||
_(1758, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_TMPVAR) \
|
_(1758, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \
|
||||||
_(1760, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMPVAR_CV) \
|
_(1760, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \
|
||||||
_(1761, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
|
_(1761, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \
|
||||||
_(1762, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
|
_(1762, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \
|
||||||
_(1763, 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) \
|
_(2018, ZEND_DO_UCALL_SPEC_RETVAL_USED) \
|
||||||
_(2019, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
|
_(2019, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \
|
||||||
_(2020, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
|
_(2020, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \
|
||||||
_(2026, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CONST) \
|
_(2031, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \
|
||||||
_(2027, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
|
_(2032, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
|
||||||
_(2028, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_TMPVAR) \
|
_(2033, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \
|
||||||
_(2030, ZEND_PRE_INC_OBJ_SPEC_TMPVAR_CV) \
|
_(2035, ZEND_PRE_INC_OBJ_SPEC_VAR_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) \
|
|
||||||
_(2036, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
|
_(2036, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \
|
||||||
_(2037, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
|
_(2037, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
|
||||||
_(2038, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
|
_(2038, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \
|
||||||
|
|
|
@ -245,15 +245,15 @@ static uint32_t zend_vm_opcodes_flags[195] = {
|
||||||
0x00000b0b,
|
0x00000b0b,
|
||||||
0x00000301,
|
0x00000301,
|
||||||
0x00006701,
|
0x00006701,
|
||||||
0x00040755,
|
0x00040751,
|
||||||
0x00040000,
|
0x00040000,
|
||||||
0x04000701,
|
0x04000701,
|
||||||
0x04006701,
|
0x04006701,
|
||||||
0x04000755,
|
0x04000751,
|
||||||
0x04000000,
|
0x04000000,
|
||||||
0x0b000101,
|
0x0b000101,
|
||||||
0x00000003,
|
0x00000003,
|
||||||
0x0b040755,
|
0x0b040751,
|
||||||
0x0b040000,
|
0x0b040000,
|
||||||
0x00000001,
|
0x00000001,
|
||||||
0x00000001,
|
0x00000001,
|
||||||
|
@ -306,16 +306,16 @@ static uint32_t zend_vm_opcodes_flags[195] = {
|
||||||
0x00040757,
|
0x00040757,
|
||||||
0x00010107,
|
0x00010107,
|
||||||
0x00006701,
|
0x00006701,
|
||||||
0x00640755,
|
0x00640751,
|
||||||
0x00010107,
|
0x00010107,
|
||||||
0x00006701,
|
0x00006701,
|
||||||
0x00040755,
|
0x00040751,
|
||||||
0x00010107,
|
0x00010107,
|
||||||
0x00000707,
|
0x00000707,
|
||||||
0x00040757,
|
0x00040757,
|
||||||
0x00010107,
|
0x00010107,
|
||||||
0x00006703,
|
0x00006703,
|
||||||
0x00240757,
|
0x00240753,
|
||||||
0x00010107,
|
0x00010107,
|
||||||
0x00000701,
|
0x00000701,
|
||||||
0x00040751,
|
0x00040751,
|
||||||
|
@ -353,7 +353,7 @@ static uint32_t zend_vm_opcodes_flags[195] = {
|
||||||
0x00000000,
|
0x00000000,
|
||||||
0x00000000,
|
0x00000000,
|
||||||
0x00000000,
|
0x00000000,
|
||||||
0x00040755,
|
0x00040751,
|
||||||
0x00040751,
|
0x00040751,
|
||||||
0x00040751,
|
0x00040751,
|
||||||
0x00040751,
|
0x00040751,
|
||||||
|
|
|
@ -12,9 +12,15 @@ $xml = simplexml_load_string("<root></root>");
|
||||||
var_dump(isset($xml->bla->posts));
|
var_dump(isset($xml->bla->posts));
|
||||||
$xml->bla->posts[0]->name = "FooBar";
|
$xml->bla->posts[0]->name = "FooBar";
|
||||||
echo $xml->asXML();
|
echo $xml->asXML();
|
||||||
|
$xml = simplexml_load_string("<root></root>");
|
||||||
|
$xml->bla->posts[]->name = "FooBar";
|
||||||
|
echo $xml->asXML();
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--EXPECT--
|
||||||
Fatal error: Uncaught Error: Attempt to assign property 'name' of non-object in %s:%d
|
<?xml version="1.0"?>
|
||||||
Stack trace:
|
<root><bla><posts><name>FooBar</name></posts></bla></root>
|
||||||
#0 {main}
|
bool(false)
|
||||||
thrown in %s on line %d
|
<?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>
|
||||||
|
|
|
@ -13,5 +13,6 @@ $xml->movie[]->characters->character[0]->name = 'Miss Coder';
|
||||||
echo($xml->asXml());
|
echo($xml->asXml());
|
||||||
|
|
||||||
?>
|
?>
|
||||||
--EXPECTF--
|
--EXPECT--
|
||||||
Fatal error: Cannot use [] for reading in %s on line %d
|
<?xml version="1.0" standalone="yes"?>
|
||||||
|
<collection><movie><characters><character><name>Miss Coder</name></character></characters></movie></collection>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue