if (IS_BOT(data)) {
dup_partial_array(&zv, op1);
ct_eval_del_array_elem(&zv, op2);
+ SET_RESULT_BOT(result);
+ SET_RESULT(op1, &zv);
+ zval_ptr_dtor_nogc(&tmp);
+ zval_ptr_dtor_nogc(&zv);
+ break;
+ }
+
+ if (zend_optimizer_eval_binary_op(&tmp, zend_compound_assign_to_binary_op(opline->opcode), &tmp, data) != SUCCESS) {
+ SET_RESULT_BOT(result);
+ SET_RESULT_BOT(op1);
+ zval_ptr_dtor_nogc(&tmp);
+ break;
+ }
+
+ if (IS_PARTIAL_ARRAY(op1)) {
+ dup_partial_array(&zv, op1);
} else {
- if (zend_optimizer_eval_binary_op(&tmp, zend_compound_assign_to_binary_op(opline->opcode), &tmp, data) != SUCCESS) {
- SET_RESULT_BOT(result);
- SET_RESULT_BOT(op1);
- zval_ptr_dtor_nogc(&tmp);
- break;
- }
-
- if (IS_PARTIAL_ARRAY(op1)) {
- dup_partial_array(&zv, op1);
- } else {
- ZVAL_COPY(&zv, op1);
- }
+ ZVAL_COPY(&zv, op1);
}
if (ct_eval_assign_dim(&zv, &tmp, op2) == SUCCESS) {
zval_ptr_dtor_nogc(&zv);
break;
}
+
zval_ptr_dtor_nogc(&tmp);
zval_ptr_dtor_nogc(&zv);
}
if (IS_BOT(data)) {
dup_partial_object(&zv, op1);
ct_eval_del_obj_prop(&zv, op2);
- } else {
- if (zend_optimizer_eval_binary_op(&tmp, zend_compound_assign_to_binary_op(opline->opcode), &tmp, data) != SUCCESS) {
- SET_RESULT_BOT(result);
- SET_RESULT_BOT(op1);
- zval_ptr_dtor_nogc(&tmp);
- break;
- }
+ SET_RESULT_BOT(result);
+ SET_RESULT(op1, &zv);
+ zval_ptr_dtor_nogc(&tmp);
+ zval_ptr_dtor_nogc(&zv);
+ break;
+ }
- dup_partial_object(&zv, op1);
+ if (zend_optimizer_eval_binary_op(&tmp, zend_compound_assign_to_binary_op(opline->opcode), &tmp, data) != SUCCESS) {
+ SET_RESULT_BOT(result);
+ SET_RESULT_BOT(op1);
+ zval_ptr_dtor_nogc(&tmp);
+ break;
}
+ dup_partial_object(&zv, op1);
+
if (ct_eval_assign_obj(&zv, &tmp, op2) == SUCCESS) {
SET_RESULT(result, &tmp);
SET_RESULT(op1, &zv);
zval_ptr_dtor_nogc(&zv);
break;
}
+
zval_ptr_dtor_nogc(&tmp);
zval_ptr_dtor_nogc(&zv);
}