int arg_num;
SAVE_OPLINE();
- args = get_zval_ptr(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
+ args = get_zval_ptr_undef(opline->op1_type, opline->op1, execute_data, &free_op1, BP_VAR_R);
arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1;
send_again:
args = Z_REFVAL_P(args);
goto send_again;
} else {
+ if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(args, BP_VAR_R);
+ }
zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
}
class_name = Z_REFVAL_P(class_name);
goto try_class_name;
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
function_name = Z_REFVAL_P(function_name);
goto try_function_name;
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
class_name = Z_REFVAL_P(class_name);
goto try_class_name;
} else {
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
ZEND_VM_NEXT_OPCODE();
} else {
- zval *class_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *class_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
try_class_name:
if (IS_CV == IS_CONST) {
class_name = Z_REFVAL_P(class_name);
goto try_class_name;
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
uint32_t call_info = ZEND_CALL_NESTED_FUNCTION;
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
try_function_name:
if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
function_name = Z_REFVAL_P(function_name);
goto try_function_name;
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
class_name = Z_REFVAL_P(class_name);
goto try_class_name;
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(class_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
function_name = Z_REFVAL_P(function_name);
goto try_function_name;
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
if (str->len != 0) {
zend_write(str->val, str->len);
+ } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(z, BP_VAR_R);
}
zend_string_release(str);
}
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
}
- }
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(obj, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
ZVAL_UNDEF(&tmp_inc_filename);
if (Z_TYPE_P(inc_filename) != IS_STRING) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(inc_filename) == IS_UNDEF)) {
+ inc_filename = GET_OP1_UNDEF_CV(inc_filename, BP_VAR_R);
+ }
ZVAL_STR(&tmp_inc_filename, zval_get_string(inc_filename));
inc_filename = &tmp_inc_filename;
}
} else {
zend_bool strict;
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
goto try_strlen;
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
container = Z_REFVAL_P(container);
goto try_fetch_list;
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(container, BP_VAR_R);
+ }
ZVAL_NULL(EX_VAR(opline->result.var));
}
CHECK_EXCEPTION();
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if (IS_CONST != IS_CONST) {
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
function_name = EX_CONSTANT(opline->op2);
if (IS_CONST != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
ZVAL_UNDEF(&tmp);
if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_CONST == IS_UNUSED ||
(IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
ZVAL_UNDEF(&tmp);
if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
function_name = NULL;
if (IS_UNUSED != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
ZVAL_UNDEF(&tmp);
if (IS_CONST != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
do {
if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
if (IS_CONST == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if (IS_CONST != IS_CONST) {
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} else if (IS_CV != IS_UNUSED) {
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
zend_string *str;
zend_ulong hval;
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CONST != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_CONST == IS_UNUSED ||
(IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
SAVE_OPLINE();
op1 = EX_CONSTANT(opline->op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if (IS_CONST == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if (IS_CONST != IS_CONST) {
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_CONST == IS_UNUSED ||
(IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
break;
}
}
+ if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
var = EX_CONSTANT(opline->op2);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
var = EX_CONSTANT(opline->op2);
- rope[opline->extended_value] = zval_get_string(var);
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if (IS_CONST == IS_CV) {
+ rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[opline->extended_value] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[opline->extended_value] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ CHECK_EXCEPTION();
+ }
}
ZEND_VM_NEXT_OPCODE();
}
var = EX_CONSTANT(opline->op2);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
var = EX_CONSTANT(opline->op2);
- rope[opline->extended_value] = zval_get_string(var);
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if (IS_CONST == IS_CV) {
+ rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[opline->extended_value] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[opline->extended_value] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ CHECK_EXCEPTION();
+ }
}
for (i = 0; i <= opline->extended_value; i++) {
len += rope[i]->len;
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
- var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- rope[opline->extended_value] = zval_get_string(var);
+ var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if (IS_CV == IS_CV) {
+ rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[opline->extended_value] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[opline->extended_value] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ CHECK_EXCEPTION();
+ }
}
ZEND_VM_NEXT_OPCODE();
}
var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
- var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- rope[opline->extended_value] = zval_get_string(var);
+ var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if (IS_CV == IS_CV) {
+ rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[opline->extended_value] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[opline->extended_value] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ CHECK_EXCEPTION();
+ }
}
for (i = 0; i <= opline->extended_value; i++) {
len += rope[i]->len;
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
zend_string *str;
zend_ulong hval;
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- rope[opline->extended_value] = zval_get_string(var);
- zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
+ rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[opline->extended_value] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[opline->extended_value] = _zval_get_string_func(var);
+ zval_ptr_dtor_nogc(free_op2);
+ CHECK_EXCEPTION();
+ }
}
ZEND_VM_NEXT_OPCODE();
}
var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- rope[opline->extended_value] = zval_get_string(var);
- zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
+ rope[opline->extended_value] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[opline->extended_value] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[opline->extended_value] = _zval_get_string_func(var);
+ zval_ptr_dtor_nogc(free_op2);
+ CHECK_EXCEPTION();
+ }
}
for (i = 0; i <= opline->extended_value; i++) {
len += rope[i]->len;
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
break;
}
}
+ if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
function_name = EX_CONSTANT(opline->op2);
if (IS_CONST != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
}
offset = EX_CONSTANT(opline->op2);
-unset_dim_again:
- if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if (IS_CONST != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if (IS_CONST != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
CHECK_EXCEPTION();
function_name = NULL;
if (IS_UNUSED != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
} else if (IS_CV != IS_UNUSED) {
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
zend_string *str;
zend_ulong hval;
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
-unset_dim_again:
- if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if (IS_CV != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if (IS_CV != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
CHECK_EXCEPTION();
function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
}
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
-unset_dim_again:
- if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_VAR != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_VAR != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_VAR == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
+
zval_ptr_dtor_nogc(free_op2);
if (free_op1) {zval_ptr_dtor_nogc(free_op1);};
CHECK_EXCEPTION();
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
}
- }
+ }
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(obj, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
var = EX_CONSTANT(opline->op2);
rope[0] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
var = EX_CONSTANT(opline->op2);
- rope[0] = zval_get_string(var);
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if (IS_CONST == IS_CV) {
+ rope[0] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[0] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[0] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ CHECK_EXCEPTION();
+ }
}
ZEND_VM_NEXT_OPCODE();
}
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
}
offset = EX_CONSTANT(opline->op2);
-unset_dim_again:
- if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if (IS_CONST != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if (IS_CONST != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
CHECK_EXCEPTION();
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_UNUSED == IS_UNUSED ||
(IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
rope[0] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
- var = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
- rope[0] = zval_get_string(var);
+ var = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if (IS_CV == IS_CV) {
+ rope[0] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[0] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[0] = _zval_get_string_func(var);
- CHECK_EXCEPTION();
+ CHECK_EXCEPTION();
+ }
}
ZEND_VM_NEXT_OPCODE();
}
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
-unset_dim_again:
- if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if (IS_CV != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if (IS_CV != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
CHECK_EXCEPTION();
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_UNUSED == IS_UNUSED ||
(IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
rope[0] = zend_string_copy(Z_STR_P(var));
} else {
- SAVE_OPLINE();
var = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
- rope[0] = zval_get_string(var);
- zval_ptr_dtor_nogc(free_op2);
- CHECK_EXCEPTION();
+ if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
+ rope[0] = zend_string_copy(Z_STR_P(var));
+ } else {
+ rope[0] = Z_STR_P(var);
+ }
+ } else {
+ SAVE_OPLINE();
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(var, BP_VAR_R);
+ }
+ rope[0] = _zval_get_string_func(var);
+ zval_ptr_dtor_nogc(free_op2);
+ CHECK_EXCEPTION();
+ }
}
ZEND_VM_NEXT_OPCODE();
}
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
}
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
-unset_dim_again:
- if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_UNUSED != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_UNUSED != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_UNUSED == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
+
zval_ptr_dtor_nogc(free_op2);
CHECK_EXCEPTION();
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_UNUSED == IS_UNUSED ||
(IS_UNUSED != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
zval *z;
SAVE_OPLINE();
- z = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ z = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (Z_TYPE_P(z) == IS_STRING) {
zend_string *str = Z_STR_P(z);
if (str->len != 0) {
zend_write(str->val, str->len);
+ } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(z, BP_VAR_R);
}
zend_string_release(str);
}
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
do {
if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) {
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
zend_object_clone_obj_t clone_call;
SAVE_OPLINE();
- obj = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ obj = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(obj) == NULL)) {
zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
}
- }
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(obj, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
zend_bool failure_retval=0;
SAVE_OPLINE();
- inc_filename = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ inc_filename = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
ZVAL_UNDEF(&tmp_inc_filename);
if (Z_TYPE_P(inc_filename) != IS_STRING) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(inc_filename) == IS_UNDEF)) {
+ inc_filename = GET_OP1_UNDEF_CV(inc_filename, BP_VAR_R);
+ }
ZVAL_STR(&tmp_inc_filename, zval_get_string(inc_filename));
inc_filename = &tmp_inc_filename;
}
SAVE_OPLINE();
- value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ value = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
try_strlen:
if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) {
ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value));
} else {
zend_bool strict;
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
goto try_strlen;
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = EX_CONSTANT(opline->op2);
do {
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
HashTable *target_symbol_table;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
name = Z_STR_P(varname);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ container = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
try_fetch_list:
if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
container = Z_REFVAL_P(container);
goto try_fetch_list;
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(container, BP_VAR_R);
+ }
ZVAL_NULL(EX_VAR(opline->result.var));
}
CHECK_EXCEPTION();
zend_string *op1_str, *op2_str, *str;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = EX_CONSTANT(opline->op2);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if (IS_CV != IS_CONST) {
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} while (0);
}
- object = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
ZEND_VM_NEXT_OPCODE();
}
- varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
}
offset = EX_CONSTANT(opline->op2);
-unset_dim_again:
- if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if (IS_CONST != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if (IS_CONST != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
CHECK_EXCEPTION();
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_CV == IS_UNUSED ||
(IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
expr = Z_REFVAL_P(expr);
goto try_instanceof;
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(expr, BP_VAR_R);
+ }
result = 0;
}
HashTable *target_symbol_table;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
name = Z_STR_P(varname);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
ZEND_VM_NEXT_OPCODE();
}
- varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
zend_bool result;
SAVE_OPLINE();
- expr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ expr = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
try_instanceof:
if (Z_TYPE_P(expr) == IS_OBJECT) {
expr = Z_REFVAL_P(expr);
goto try_instanceof;
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(expr, BP_VAR_R);
+ }
result = 0;
}
HashTable *target_symbol_table;
SAVE_OPLINE();
- varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
name = Z_STR_P(varname);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
ZEND_VM_NEXT_OPCODE();
}
- varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ varname = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
ZVAL_UNDEF(&tmp);
if (IS_CV != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
do {
if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
zend_string *op1_str, *op2_str, *str;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if (IS_CV != IS_CONST) {
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} while (0);
}
- object = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ zval *offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
zend_string *str;
zend_ulong hval;
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
-unset_dim_again:
- if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if (IS_CV != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if (IS_CV != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
CHECK_EXCEPTION();
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_CV == IS_UNUSED ||
(IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
zval *op1, *op2;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
do {
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
zend_string *op1_str, *op2_str, *str;
SAVE_OPLINE();
- op1 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
+ op1 = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if (IS_CV != IS_CONST) {
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
} while (0);
}
- object = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
+ object = _get_zval_ptr_cv_undef(execute_data, opline->op1.var);
if (IS_CV == IS_UNUSED && UNEXPECTED(Z_OBJ_P(object) == NULL)) {
zend_error(E_EXCEPTION | E_ERROR, "Using $this when not in object context");
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
} else if (Z_TYPE_P(offset) == IS_TRUE) {
hval = 1;
goto num_index;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index;
} else {
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
}
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
-unset_dim_again:
- if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
- HashTable *ht;
+ do {
+ if (IS_CV != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ HashTable *ht;
+unset_dim_array:
+ SEPARATE_ARRAY(container);
+ ht = Z_ARRVAL_P(container);
offset_again:
- SEPARATE_ARRAY(container);
- ht = Z_ARRVAL_P(container);
- if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
- key = Z_STR_P(offset);
- if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
- if (ZEND_HANDLE_NUMERIC(key, hval)) {
- goto num_index_dim;
+ if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) {
+ key = Z_STR_P(offset);
+ if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
+ if (ZEND_HANDLE_NUMERIC(key, hval)) {
+ goto num_index_dim;
+ }
}
- }
str_index_dim:
- if (ht == &EG(symbol_table)) {
- zend_delete_global_variable(key);
- } else {
- zend_hash_del(ht, key);
- }
- } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
- hval = Z_LVAL_P(offset);
+ if (ht == &EG(symbol_table)) {
+ zend_delete_global_variable(key);
+ } else {
+ zend_hash_del(ht, key);
+ }
+ } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) {
+ hval = Z_LVAL_P(offset);
num_index_dim:
- zend_hash_index_del(ht, hval);
- } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
- offset = Z_REFVAL_P(offset);
- goto offset_again;
- } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
- hval = zend_dval_to_lval(Z_DVAL_P(offset));
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_NULL) {
- key = STR_EMPTY_ALLOC();
- goto str_index_dim;
- } else if (Z_TYPE_P(offset) == IS_FALSE) {
- hval = 0;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_TRUE) {
- hval = 1;
- goto num_index_dim;
- } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
- hval = Z_RES_HANDLE_P(offset);
- goto num_index_dim;
- } else {
- zend_error(E_WARNING, "Illegal offset type in unset");
+ zend_hash_index_del(ht, hval);
+ } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) {
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ } else if (Z_TYPE_P(offset) == IS_DOUBLE) {
+ hval = zend_dval_to_lval(Z_DVAL_P(offset));
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_NULL) {
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_FALSE) {
+ hval = 0;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_TRUE) {
+ hval = 1;
+ goto num_index_dim;
+ } else if (Z_TYPE_P(offset) == IS_RESOURCE) {
+ hval = Z_RES_HANDLE_P(offset);
+ goto num_index_dim;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ key = STR_EMPTY_ALLOC();
+ goto str_index_dim;
+ } else {
+ zend_error(E_WARNING, "Illegal offset type in unset");
+ }
+ break;
+ } else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
+ container = Z_REFVAL_P(container);
+ if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
+ goto unset_dim_array;
+ }
}
- } else if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
- if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
- } else {
- Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
}
- } else if (IS_CV != IS_UNUSED && Z_ISREF_P(container)) {
- container = Z_REFVAL_P(container);
- goto unset_dim_again;
- } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
- zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
- }
+ if (IS_CV == IS_UNUSED || EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
+ if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot use object as array");
+ } else {
+ Z_OBJ_HT_P(container)->unset_dimension(container, offset);
+ }
+ } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) {
+ zend_error(E_EXCEPTION | E_ERROR, "Cannot unset string offsets");
+ }
+ } while (0);
+
zval_ptr_dtor_nogc(free_op2);
CHECK_EXCEPTION();
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if (IS_CV == IS_UNUSED ||
(IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
if (str->len != 0) {
zend_write(str->val, str->len);
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(z, BP_VAR_R);
}
zend_string_release(str);
}
if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) {
break;
}
- }
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(obj, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
ZVAL_UNDEF(&tmp_inc_filename);
if (Z_TYPE_P(inc_filename) != IS_STRING) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(inc_filename) == IS_UNDEF)) {
+ inc_filename = GET_OP1_UNDEF_CV(inc_filename, BP_VAR_R);
+ }
ZVAL_STR(&tmp_inc_filename, zval_get_string(inc_filename));
inc_filename = &tmp_inc_filename;
}
} else {
zend_bool strict;
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) {
+ value = GET_OP1_UNDEF_CV(value, BP_VAR_R);
+ }
if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) {
value = Z_REFVAL_P(value);
goto try_strlen;
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
zval_ptr_dtor_nogc(free_op1);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
container = Z_REFVAL_P(container);
goto try_fetch_list;
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(container, BP_VAR_R);
+ }
ZVAL_NULL(EX_VAR(opline->result.var));
}
CHECK_EXCEPTION();
SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = EX_CONSTANT(opline->op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = EX_CONSTANT(opline->op2);
if (IS_CONST == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
break;
}
}
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED ||
((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
expr = Z_REFVAL_P(expr);
goto try_instanceof;
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(expr, BP_VAR_R);
+ }
result = 0;
}
zval_ptr_dtor_nogc(free_op1);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
expr = Z_REFVAL_P(expr);
goto try_instanceof;
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(expr, BP_VAR_R);
+ }
result = 0;
}
zval_ptr_dtor_nogc(free_op1);
name = Z_STR_P(varname);
zend_string_addref(name);
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
name = zval_get_string(varname);
}
ZVAL_UNDEF(&tmp);
if ((IS_TMP_VAR|IS_VAR) != IS_CONST && Z_TYPE_P(varname) != IS_STRING) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) {
+ varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R);
+ }
ZVAL_STR(&tmp, zval_get_string(varname));
varname = &tmp;
}
SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
do {
if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) &&
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
zval_ptr_dtor_nogc(free_op1);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ function_name = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if (IS_CV != IS_CONST &&
UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) {
break;
}
}
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
HANDLE_EXCEPTION();
}
- offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var);
+ offset = _get_zval_ptr_cv_undef(execute_data, opline->op2.var);
if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) {
HashTable *ht;
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED ||
((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {
ZVAL_NEW_STR(EX_VAR(opline->result.var), str);
}
} else {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
concat_function(EX_VAR(opline->result.var), op1, op2);
}
zval_ptr_dtor_nogc(free_op1);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) != Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) != Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
SAVE_OPLINE();
op1 = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
- op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op1_str = Z_STR_P(op1);
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
+ op1_str = zend_string_copy(Z_STR_P(op1));
} else {
- op1_str = zval_get_string(op1);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(op1, BP_VAR_R);
+ }
+ op1_str = _zval_get_string_func(op1);
}
+ op2 = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2);
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
op2_str = Z_STR_P(op2);
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
+ op2_str = zend_string_copy(Z_STR_P(op2));
} else {
- op2_str = zval_get_string(op2);
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(op2, BP_VAR_R);
+ }
+ op2_str = _zval_get_string_func(op2);
}
do {
if ((IS_TMP_VAR|IS_VAR) != IS_CONST) {
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) {
+ GET_OP2_UNDEF_CV(function_name, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
break;
}
}
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) {
+ GET_OP1_UNDEF_CV(object, BP_VAR_R);
+ }
if (UNEXPECTED(EG(exception) != NULL)) {
HANDLE_EXCEPTION();
}
do {
int result;
- if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_LVAL_P(op1) == Z_LVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2));
} else {
break;
}
- } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) {
- if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) {
+ } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) {
+ if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) {
result = (Z_DVAL_P(op1) == Z_DVAL_P(op2));
- } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) {
+ } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) {
result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)));
} else {
break;
} while (0);
SAVE_OPLINE();
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) {
op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R);
}
- if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) {
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) {
op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R);
}
result = EX_VAR(opline->result.var);
} else if (Z_TYPE_P(offset) == IS_RESOURCE) {
hval = Z_RES_HANDLE_P(offset);
goto num_index_prop;
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) {
+ GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ str = STR_EMPTY_ALLOC();
+ goto str_index_prop;
} else {
zend_error(E_WARNING, "Illegal offset type in isset or empty");
goto isset_not_found;
goto isset_dim_obj_array;
}
}
+
+ if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) {
+ offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R);
+ }
+
if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED ||
((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_OBJECT))) {
if (EXPECTED(Z_OBJ_HT_P(container)->has_dimension)) {