diff options
Diffstat (limited to 'Zend/zend_vm_def.h')
-rw-r--r-- | Zend/zend_vm_def.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 015a766616..a42371cc26 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2377,6 +2377,9 @@ ZEND_VM_C_LABEL(assign_object): } else { ZEND_VM_C_LABEL(fast_assign_obj): value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE, EX_USES_STRICT_TYPES()); + if (UNEXPECTED(RETURN_VALUE_USED(opline))) { + ZVAL_COPY(EX_VAR(opline->result.var), value); + } ZEND_VM_C_GOTO(exit_assign_obj); } } @@ -2424,6 +2427,9 @@ ZEND_VM_C_LABEL(fast_assign_obj): } } 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); + } ZEND_VM_C_GOTO(exit_assign_obj); } } @@ -2451,11 +2457,11 @@ ZEND_VM_C_LABEL(fast_assign_obj): } ZEND_VM_C_LABEL(free_and_exit_assign_obj): - FREE_OP_DATA(); -ZEND_VM_C_LABEL(exit_assign_obj): if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } + FREE_OP_DATA(); +ZEND_VM_C_LABEL(exit_assign_obj): FREE_OP2(); FREE_OP1_VAR_PTR(); /* assign_obj has two opcodes! */ |