}
if (opline->result_type == IS_VAR
&& opline->result.var == op1->u.op.var) {
- if (opline->opcode == ZEND_FETCH_R ||
- opline->opcode == ZEND_FETCH_DIM_R ||
- opline->opcode == ZEND_FETCH_OBJ_R ||
- opline->opcode == ZEND_FETCH_STATIC_PROP_R) {
- /* It's very rare and useless case. It's better to use
- additional FREE opcode and simplify the FETCH handlers
- their selves */
- zend_emit_op(NULL, ZEND_FREE, op1, NULL);
- } else if (opline->opcode == ZEND_FETCH_THIS) {
+ if (opline->opcode == ZEND_FETCH_THIS) {
opline->opcode = ZEND_NOP;
opline->result_type = IS_UNUSED;
} else {
/* FETCH_LIST on a string behaves like FETCH_R on null */
tmp = zend_array_element_type(
opline->opcode != ZEND_FETCH_LIST_R ? t1 : ((t1 & ~MAY_BE_STRING) | MAY_BE_NULL),
- opline->opcode != ZEND_FETCH_DIM_R && opline->opcode != ZEND_FETCH_DIM_IS
- && opline->opcode != ZEND_FETCH_LIST_R,
+ opline->result_type == IS_VAR,
opline->op2_type == IS_UNUSED);
if (opline->opcode == ZEND_FETCH_DIM_W ||
opline->opcode == ZEND_FETCH_DIM_RW ||
}
if (ssa_ops[i].result_def >= 0) {
tmp = MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
- if (opline->opcode == ZEND_FETCH_OBJ_R || opline->opcode == ZEND_FETCH_OBJ_IS) {
+ if (opline->result_type == IS_TMP_VAR) {
/* can't be REF because of ZVAL_COPY_DEREF() usage */
tmp |= MAY_BE_RC1 | MAY_BE_RCN;
} else {
/* Forbidden opcodes */
ZEND_ASSERT(0);
break;
- case ZEND_FETCH_R:
- case ZEND_FETCH_IS:
- case ZEND_FETCH_STATIC_PROP_R:
- case ZEND_FETCH_STATIC_PROP_IS:
- /* can't be REF because of ZVAL_COPY_DEREF() usage */
- tmp = MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
- UPDATE_SSA_TYPE(tmp, ssa_ops[i].result_def);
- break;
default:
unknown_opcode:
if (ssa_ops[i].op1_def >= 0) {