SET_UNUSED(opline->op2);
opline->op2.u.EA.type = ZEND_FETCH_LOCAL;
SET_UNUSED(opline->result);
+ opline->extended_value = ZEND_QUICK_SET;
} else {
last_op = &CG(active_op_array)->opcodes[get_next_op_number(CG(active_op_array))-1];
SET_UNUSED(last_op->op2);
last_op->op2.u.EA.type = ZEND_FETCH_LOCAL;
last_op->result.u.var = get_temporary_variable(CG(active_op_array));
+ last_op->extended_value = ZEND_QUICK_SET;
} else {
last_op = &CG(active_op_array)->opcodes[get_next_op_number(CG(active_op_array))-1];
last_op->opcode = ZEND_ISSET_ISEMPTY_PROP_OBJ;
break;
}
+ last_op->extended_value = 0;
}
last_op->result.op_type = IS_TMP_VAR;
- last_op->extended_value = type;
+ last_op->extended_value |= type;
*result = last_op->result;
}
HashTable *target_symbol_table;
zend_free_op free_op1;
- if (OP1_TYPE == IS_CV) {
+ if (OP1_TYPE == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EG(active_symbol_table)) {
zend_execute_data *ex = EX(prev_execute_data);
zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.u.var);
zval_copy_ctor(&tmp);
convert_to_text(&tmp);
varname = &tmp;
- } else if (OP1_TYPE == IS_VAR) {
+ } else if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
Z_ADDREF_P(varname);
}
if (varname == &tmp) {
zval_dtor(&tmp);
- } else if (OP1_TYPE == IS_VAR) {
+ } else if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
zval_ptr_dtor(&varname);
}
FREE_OP1();
zval **value;
zend_bool isset = 1;
- if (OP1_TYPE == IS_CV) {
+ if (OP1_TYPE == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EX(CVs)[opline->op1.u.var]) {
value = EX(CVs)[opline->op1.u.var];
} else if (EG(active_symbol_table)) {
Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
- switch (opline->extended_value) {
+ switch (opline->extended_value & ZEND_ISSET_ISEMPTY_MASK) {
case ZEND_ISSET:
if (isset && Z_TYPE_PP(value) == IS_NULL) {
Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
HashTable *target_symbol_table;
- if (IS_CONST == IS_CV) {
+ if (IS_CONST == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EG(active_symbol_table)) {
zend_execute_data *ex = EX(prev_execute_data);
zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.u.var);
zval_copy_ctor(&tmp);
convert_to_text(&tmp);
varname = &tmp;
- } else if (IS_CONST == IS_VAR) {
+ } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
Z_ADDREF_P(varname);
}
if (varname == &tmp) {
zval_dtor(&tmp);
- } else if (IS_CONST == IS_VAR) {
+ } else if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
zval_ptr_dtor(&varname);
}
zval **value;
zend_bool isset = 1;
- if (IS_CONST == IS_CV) {
+ if (IS_CONST == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EX(CVs)[opline->op1.u.var]) {
value = EX(CVs)[opline->op1.u.var];
} else if (EG(active_symbol_table)) {
Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
- switch (opline->extended_value) {
+ switch (opline->extended_value & ZEND_ISSET_ISEMPTY_MASK) {
case ZEND_ISSET:
if (isset && Z_TYPE_PP(value) == IS_NULL) {
Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
HashTable *target_symbol_table;
zend_free_op free_op1;
- if (IS_TMP_VAR == IS_CV) {
+ if (IS_TMP_VAR == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EG(active_symbol_table)) {
zend_execute_data *ex = EX(prev_execute_data);
zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.u.var);
zval_copy_ctor(&tmp);
convert_to_text(&tmp);
varname = &tmp;
- } else if (IS_TMP_VAR == IS_VAR) {
+ } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
Z_ADDREF_P(varname);
}
if (varname == &tmp) {
zval_dtor(&tmp);
- } else if (IS_TMP_VAR == IS_VAR) {
+ } else if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
zval_ptr_dtor(&varname);
}
zval_dtor(free_op1.var);
zval **value;
zend_bool isset = 1;
- if (IS_TMP_VAR == IS_CV) {
+ if (IS_TMP_VAR == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EX(CVs)[opline->op1.u.var]) {
value = EX(CVs)[opline->op1.u.var];
} else if (EG(active_symbol_table)) {
Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
- switch (opline->extended_value) {
+ switch (opline->extended_value & ZEND_ISSET_ISEMPTY_MASK) {
case ZEND_ISSET:
if (isset && Z_TYPE_PP(value) == IS_NULL) {
Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
HashTable *target_symbol_table;
zend_free_op free_op1;
- if (IS_VAR == IS_CV) {
+ if (IS_VAR == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EG(active_symbol_table)) {
zend_execute_data *ex = EX(prev_execute_data);
zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.u.var);
zval_copy_ctor(&tmp);
convert_to_text(&tmp);
varname = &tmp;
- } else if (IS_VAR == IS_VAR) {
+ } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
Z_ADDREF_P(varname);
}
if (varname == &tmp) {
zval_dtor(&tmp);
- } else if (IS_VAR == IS_VAR) {
+ } else if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
zval_ptr_dtor(&varname);
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
zval **value;
zend_bool isset = 1;
- if (IS_VAR == IS_CV) {
+ if (IS_VAR == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EX(CVs)[opline->op1.u.var]) {
value = EX(CVs)[opline->op1.u.var];
} else if (EG(active_symbol_table)) {
Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
- switch (opline->extended_value) {
+ switch (opline->extended_value & ZEND_ISSET_ISEMPTY_MASK) {
case ZEND_ISSET:
if (isset && Z_TYPE_PP(value) == IS_NULL) {
Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
HashTable *target_symbol_table;
- if (IS_CV == IS_CV) {
+ if (IS_CV == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EG(active_symbol_table)) {
zend_execute_data *ex = EX(prev_execute_data);
zend_compiled_variable *cv = &CV_DEF_OF(opline->op1.u.var);
zval_copy_ctor(&tmp);
convert_to_text(&tmp);
varname = &tmp;
- } else if (IS_CV == IS_VAR) {
+ } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
Z_ADDREF_P(varname);
}
if (varname == &tmp) {
zval_dtor(&tmp);
- } else if (IS_CV == IS_VAR) {
+ } else if (IS_CV == IS_VAR || IS_CV == IS_CV) {
zval_ptr_dtor(&varname);
}
zval **value;
zend_bool isset = 1;
- if (IS_CV == IS_CV) {
+ if (IS_CV == IS_CV && (opline->extended_value & ZEND_QUICK_SET)) {
if (EX(CVs)[opline->op1.u.var]) {
value = EX(CVs)[opline->op1.u.var];
} else if (EG(active_symbol_table)) {
Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
- switch (opline->extended_value) {
+ switch (opline->extended_value & ZEND_ISSET_ISEMPTY_MASK) {
case ZEND_ISSET:
if (isset && Z_TYPE_PP(value) == IS_NULL) {
Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;