mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Moved proxy object support in ASSIGN_ADD (and family) from VM to slow paths of corresponding operators
This commit is contained in:
parent
ae127faf5b
commit
089f496799
@ -924,7 +924,7 @@ ZEND_API int add_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
|
||||
} else if (Z_ISREF_P(op2)) {
|
||||
op2 = Z_REFVAL_P(op2);
|
||||
} else if (!converted) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_ADD);
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_ADD, add_function);
|
||||
|
||||
zendi_convert_scalar_to_number(op1, op1_copy, result);
|
||||
zendi_convert_scalar_to_number(op2, op2_copy, result);
|
||||
@ -977,7 +977,7 @@ ZEND_API int sub_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
|
||||
} else if (Z_ISREF_P(op2)) {
|
||||
op2 = Z_REFVAL_P(op2);
|
||||
} else if (!converted) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_SUB);
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_SUB, sub_function);
|
||||
|
||||
zendi_convert_scalar_to_number(op1, op1_copy, result);
|
||||
zendi_convert_scalar_to_number(op2, op2_copy, result);
|
||||
@ -1024,7 +1024,7 @@ ZEND_API int mul_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
|
||||
} else if (Z_ISREF_P(op2)) {
|
||||
op2 = Z_REFVAL_P(op2);
|
||||
} else if (!converted) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_MUL);
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_MUL, mul_function);
|
||||
|
||||
zendi_convert_scalar_to_number(op1, op1_copy, result);
|
||||
zendi_convert_scalar_to_number(op2, op2_copy, result);
|
||||
@ -1102,7 +1102,7 @@ ZEND_API int pow_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
|
||||
} else if (Z_ISREF_P(op2)) {
|
||||
op2 = Z_REFVAL_P(op2);
|
||||
} else if (!converted) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW);
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_POW, pow_function);
|
||||
|
||||
if (Z_TYPE_P(op1) == IS_ARRAY) {
|
||||
ZVAL_LONG(result, 0);
|
||||
@ -1183,7 +1183,7 @@ ZEND_API int div_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
|
||||
} else if (Z_ISREF_P(op2)) {
|
||||
op2 = Z_REFVAL_P(op2);
|
||||
} else if (!converted) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_DIV);
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_DIV, div_function);
|
||||
|
||||
zendi_convert_scalar_to_number(op1, op1_copy, result);
|
||||
zendi_convert_scalar_to_number(op2, op2_copy, result);
|
||||
@ -1202,14 +1202,14 @@ ZEND_API int mod_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ *
|
||||
zval op1_copy, op2_copy;
|
||||
zend_long op1_lval;
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_LONG || Z_TYPE_P(op2) != IS_LONG) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_MOD);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_MOD, mod_function);
|
||||
zendi_convert_to_long(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_MOD);
|
||||
zendi_convert_to_long(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
}
|
||||
|
||||
if (Z_LVAL_P(op2) == 0) {
|
||||
@ -1234,15 +1234,14 @@ ZEND_API int boolean_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
|
||||
zval op1_copy, op2_copy;
|
||||
zend_long op1_lval;
|
||||
|
||||
if ((Z_TYPE_P(op1) != IS_FALSE && Z_TYPE_P(op1) != IS_TRUE) ||
|
||||
(Z_TYPE_P(op2) != IS_FALSE && Z_TYPE_P(op2) != IS_TRUE)) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_BOOL_XOR);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_FALSE && Z_TYPE_P(op1) != IS_TRUE)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BOOL_XOR, boolean_xor_function);
|
||||
zendi_convert_to_boolean(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_TYPE_P(op1) == IS_TRUE;
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_FALSE && Z_TYPE_P(op2) != IS_TRUE)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BOOL_XOR);
|
||||
zendi_convert_to_boolean(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_TYPE_P(op1) == IS_TRUE;
|
||||
}
|
||||
|
||||
ZVAL_BOOL(result, op1_lval ^ (Z_TYPE_P(op2) == IS_TRUE));
|
||||
@ -1329,14 +1328,14 @@ ZEND_API int bitwise_or_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_LONG || Z_TYPE_P(op2) != IS_LONG) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_BW_OR);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_OR, bitwise_or_function);
|
||||
zendi_convert_to_long(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BW_OR);
|
||||
zendi_convert_to_long(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
}
|
||||
|
||||
ZVAL_LONG(result, op1_lval | Z_LVAL_P(op2));
|
||||
@ -1374,14 +1373,14 @@ ZEND_API int bitwise_and_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_LONG || Z_TYPE_P(op2) != IS_LONG) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_BW_AND);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_AND, bitwise_and_function);
|
||||
zendi_convert_to_long(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BW_AND);
|
||||
zendi_convert_to_long(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
}
|
||||
|
||||
ZVAL_LONG(result, op1_lval & Z_LVAL_P(op2));
|
||||
@ -1419,14 +1418,14 @@ ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_LONG || Z_TYPE_P(op2) != IS_LONG) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_BW_XOR);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_BW_XOR, bitwise_xor_function);
|
||||
zendi_convert_to_long(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_BW_XOR);
|
||||
zendi_convert_to_long(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
}
|
||||
|
||||
ZVAL_LONG(result, op1_lval ^ Z_LVAL_P(op2));
|
||||
@ -1439,14 +1438,14 @@ ZEND_API int shift_left_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /
|
||||
zval op1_copy, op2_copy;
|
||||
zend_long op1_lval;
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_LONG || Z_TYPE_P(op2) != IS_LONG) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_SL);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_SL, shift_left_function);
|
||||
zendi_convert_to_long(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_SL);
|
||||
zendi_convert_to_long(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
}
|
||||
|
||||
/* prevent wrapping quirkiness on some processors where << 64 + x == << x */
|
||||
@ -1471,14 +1470,14 @@ ZEND_API int shift_right_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
|
||||
zval op1_copy, op2_copy;
|
||||
zend_long op1_lval;
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_LONG || Z_TYPE_P(op2) != IS_LONG) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_SR);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(ZEND_SR, shift_right_function);
|
||||
zendi_convert_to_long(op1, op1_copy, result);
|
||||
}
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_LONG)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_SR);
|
||||
zendi_convert_to_long(op2, op2_copy, result);
|
||||
} else {
|
||||
op1_lval = Z_LVAL_P(op1);
|
||||
}
|
||||
|
||||
/* prevent wrapping quirkiness on some processors where >> 64 + x == >> x */
|
||||
@ -1530,30 +1529,29 @@ ZEND_API int concat_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{
|
||||
zval op1_copy, op2_copy;
|
||||
int use_copy1 = 0, use_copy2 = 0;
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_STRING) ||
|
||||
UNEXPECTED(Z_TYPE_P(op2) != IS_STRING)) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT);
|
||||
|
||||
if (Z_TYPE_P(op1) != IS_STRING) {
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) != IS_STRING)) {
|
||||
ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT, concat_function);
|
||||
use_copy1 = zend_make_printable_zval(op1, &op1_copy TSRMLS_CC);
|
||||
}
|
||||
if (Z_TYPE_P(op2) != IS_STRING) {
|
||||
use_copy2 = zend_make_printable_zval(op2, &op2_copy TSRMLS_CC);
|
||||
}
|
||||
}
|
||||
|
||||
if (use_copy1) {
|
||||
/* We have created a converted copy of op1. Therefore, op1 won't become the result so
|
||||
* we have to free it.
|
||||
*/
|
||||
if (result == op1) {
|
||||
zval_dtor(op1);
|
||||
if (UNEXPECTED(op1 == op2)) {
|
||||
op2 = &op1_copy;
|
||||
}
|
||||
}
|
||||
op1 = &op1_copy;
|
||||
}
|
||||
}
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) != IS_STRING)) {
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_CONCAT);
|
||||
use_copy2 = zend_make_printable_zval(op2, &op2_copy TSRMLS_CC);
|
||||
if (use_copy2) {
|
||||
op2 = &op2_copy;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
size_t op1_len = Z_STRLEN_P(op1);
|
||||
|
@ -887,21 +887,42 @@ static zend_always_inline void fast_is_not_identical_function(zval *result, zval
|
||||
ZVAL_BOOL(result, Z_TYPE_P(result) != IS_TRUE);
|
||||
}
|
||||
|
||||
#define ZEND_TRY_BINARY_OBJECT_OPERATION(opcode) \
|
||||
if (Z_TYPE_P(op1) == IS_OBJECT && Z_OBJ_HANDLER_P(op1, do_operation)) { \
|
||||
if (SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, op2 TSRMLS_CC)) { \
|
||||
return SUCCESS; \
|
||||
} \
|
||||
} else if (Z_TYPE_P(op2) == IS_OBJECT && Z_OBJ_HANDLER_P(op2, do_operation)) { \
|
||||
if (SUCCESS == Z_OBJ_HANDLER_P(op2, do_operation)(opcode, result, op1, op2 TSRMLS_CC)) { \
|
||||
#define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
|
||||
&& op1 == result \
|
||||
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, get)) \
|
||||
&& EXPECTED(Z_OBJ_HANDLER_P(op1, set))) { \
|
||||
int ret; \
|
||||
zval rv; \
|
||||
zval *objval = Z_OBJ_HANDLER_P(op1, get)(op1, &rv TSRMLS_CC); \
|
||||
Z_ADDREF_P(objval); \
|
||||
ret = binary_op(objval, objval, op2 TSRMLS_CC); \
|
||||
Z_OBJ_HANDLER_P(op1, set)(op1, objval TSRMLS_CC); \
|
||||
zval_ptr_dtor(objval); \
|
||||
return ret; \
|
||||
} else if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
|
||||
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation))) { \
|
||||
if (EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, op2 TSRMLS_CC))) { \
|
||||
return SUCCESS; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode) \
|
||||
if (UNEXPECTED(Z_TYPE_P(op2) == IS_OBJECT) \
|
||||
&& UNEXPECTED(Z_OBJ_HANDLER_P(op2, do_operation)) \
|
||||
&& EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op2, do_operation)(opcode, result, op1, op2 TSRMLS_CC))) { \
|
||||
return SUCCESS; \
|
||||
}
|
||||
|
||||
#define ZEND_TRY_BINARY_OBJECT_OPERATION(opcode, binary_op) \
|
||||
ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \
|
||||
else \
|
||||
ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode)
|
||||
|
||||
#define ZEND_TRY_UNARY_OBJECT_OPERATION(opcode) \
|
||||
if (Z_TYPE_P(op1) == IS_OBJECT && Z_OBJ_HANDLER_P(op1, do_operation) \
|
||||
&& SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, NULL TSRMLS_CC) \
|
||||
) { \
|
||||
if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \
|
||||
&& UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation)) \
|
||||
&& EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, NULL TSRMLS_CC))) { \
|
||||
return SUCCESS; \
|
||||
}
|
||||
|
||||
|
@ -458,18 +458,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_dim_helper, VAR|UNUSED|CV, CONST|TMP|VAR
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -510,18 +499,7 @@ ZEND_VM_HELPER_EX(zend_binary_assign_op_helper, VAR|UNUSED|CV, CONST|TMP|VAR|UNU
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
|
@ -17596,18 +17596,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(int (*b
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -17648,18 +17637,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binar
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -20014,18 +19992,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMP(int (*bin
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -20066,18 +20033,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -22014,18 +21970,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_VAR(int (*bin
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -22066,18 +22011,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -24099,18 +24033,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(int (*
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -24151,18 +24074,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*bina
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -25560,18 +25472,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CV(int (*bina
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -25612,18 +25513,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_o
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -27417,18 +27307,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(int
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -27469,18 +27348,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*bi
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -28796,18 +28664,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMP(int (*
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -28848,18 +28705,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*bina
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -30092,18 +29938,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_VAR(int (*
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -30144,18 +29979,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*bina
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -31387,18 +31211,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_UNUSED(int
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -31439,18 +31252,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*b
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -31902,18 +31704,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(int (*b
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -31954,18 +31745,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binar
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -34865,18 +34645,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CONST(int (*bi
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -34917,18 +34686,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -37115,18 +36873,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMP(int (*bina
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -37167,18 +36914,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_o
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -38987,18 +38723,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_VAR(int (*bina
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -39039,18 +38764,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_o
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -40942,18 +40656,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(int (*b
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -40994,18 +40697,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binar
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -42258,18 +41950,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CV(int (*binar
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
@ -42310,18 +41991,7 @@ static int ZEND_FASTCALL zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op
|
||||
ZVAL_DEREF(var_ptr);
|
||||
SEPARATE_ZVAL_NOREF(var_ptr);
|
||||
|
||||
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_OBJECT) &&
|
||||
UNEXPECTED(Z_OBJ_HANDLER_P(var_ptr, get) && Z_OBJ_HANDLER_P(var_ptr, set))) {
|
||||
/* proxy object */
|
||||
zval rv;
|
||||
zval *objval = Z_OBJ_HANDLER_P(var_ptr, get)(var_ptr, &rv TSRMLS_CC);
|
||||
Z_ADDREF_P(objval);
|
||||
binary_op(objval, objval, value TSRMLS_CC);
|
||||
Z_OBJ_HANDLER_P(var_ptr, set)(var_ptr, objval TSRMLS_CC);
|
||||
zval_ptr_dtor(objval);
|
||||
} else {
|
||||
binary_op(var_ptr, var_ptr, value TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
|
||||
ZVAL_COPY(EX_VAR(opline->result.var), var_ptr);
|
||||
|
Loading…
Reference in New Issue
Block a user