SAVE_OPLINE();
varname = opline->op1.zv;
+ ZVAL_UNDEF(&tmp_varname);
if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_CONST != IS_CONST && varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST) {
zval_dtor(&tmp_varname);
}
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_CONST != IS_TMP_VAR) {
-
- }
- break;
- case ZEND_FETCH_LOCAL:
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CONST == IS_VAR && !0) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
}
}
-
- if (IS_CONST != IS_CONST && varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_CONST_CONST(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_CONST_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = opline->op1.zv;
+ ZVAL_UNDEF(&tmp_varname);
if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_CONST != IS_CONST && varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST) {
zval_dtor(&tmp_varname);
}
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_CONST != IS_TMP_VAR) {
-
- }
- break;
- case ZEND_FETCH_LOCAL:
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CONST == IS_VAR && !0) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
}
}
-
- if (IS_CONST != IS_CONST && varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_CONST_VAR(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_CONST_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = opline->op1.zv;
+ ZVAL_UNDEF(&tmp_varname);
if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_CONST != IS_CONST && varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST) {
zval_dtor(&tmp_varname);
}
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_CONST != IS_TMP_VAR) {
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
- }
- break;
- case ZEND_FETCH_LOCAL:
-
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CONST == IS_VAR && !0) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
}
}
-
- if (IS_CONST != IS_CONST && varname == &tmp_varname) {
+ if (IS_CONST != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
zval_dtor(free_op1.var);
zval_dtor(free_op1.var);
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_TMP_VAR != IS_TMP_VAR) {
- zval_dtor(free_op1.var);
- }
- break;
- case ZEND_FETCH_LOCAL:
- zval_dtor(free_op1.var);
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_TMP_VAR == IS_VAR && !1) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
+ zval_dtor(free_op1.var);
}
}
-
- if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_TMP_CONST(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_TMP_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
zval_dtor(free_op1.var);
zval_dtor(free_op1.var);
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_TMP_VAR != IS_TMP_VAR) {
- zval_dtor(free_op1.var);
- }
- break;
- case ZEND_FETCH_LOCAL:
- zval_dtor(free_op1.var);
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_TMP_VAR == IS_VAR && !1) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
+ zval_dtor(free_op1.var);
}
}
-
- if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_TMP_VAR(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_TMP_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_TMP_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
zval_dtor(free_op1.var);
zval_dtor(free_op1.var);
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_TMP_VAR != IS_TMP_VAR) {
- zval_dtor(free_op1.var);
- }
- break;
- case ZEND_FETCH_LOCAL:
- zval_dtor(free_op1.var);
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_TMP_VAR == IS_VAR && !1) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
+ zval_dtor(free_op1.var);
}
}
-
- if (IS_TMP_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_TMP_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_TMP_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
zval_ptr_dtor_nogc(free_op1.var);
zval_ptr_dtor_nogc(free_op1.var);
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_VAR != IS_TMP_VAR) {
- zval_ptr_dtor_nogc(free_op1.var);
- }
- break;
- case ZEND_FETCH_LOCAL:
- zval_ptr_dtor_nogc(free_op1.var);
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
+ zval_ptr_dtor_nogc(free_op1.var);
}
}
-
- if (IS_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_VAR_CONST(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_VAR_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
zval_ptr_dtor_nogc(free_op1.var);
zval_ptr_dtor_nogc(free_op1.var);
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_VAR != IS_TMP_VAR) {
- zval_ptr_dtor_nogc(free_op1.var);
- }
- break;
- case ZEND_FETCH_LOCAL:
- zval_ptr_dtor_nogc(free_op1.var);
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
+ zval_ptr_dtor_nogc(free_op1.var);
}
}
-
- if (IS_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_VAR_VAR(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_VAR_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_VAR != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
zval_ptr_dtor_nogc(free_op1.var);
zval_ptr_dtor_nogc(free_op1.var);
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_VAR != IS_TMP_VAR) {
- zval_ptr_dtor_nogc(free_op1.var);
- }
- break;
- case ZEND_FETCH_LOCAL:
- zval_ptr_dtor_nogc(free_op1.var);
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
+ zval_ptr_dtor_nogc(free_op1.var);
}
}
-
- if (IS_VAR != IS_CONST && varname == &tmp_varname) {
+ if (IS_VAR != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_VAR_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_CV != IS_CONST && varname == &tmp_varname) {
+ if (IS_CV != IS_CONST) {
zval_dtor(&tmp_varname);
}
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_CV != IS_TMP_VAR) {
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
- }
- break;
- case ZEND_FETCH_LOCAL:
-
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CV == IS_VAR && !0) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
}
}
-
- if (IS_CV != IS_CONST && varname == &tmp_varname) {
+ if (IS_CV != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_CV_CONST(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_CV_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_CV != IS_CONST && varname == &tmp_varname) {
+ if (IS_CV != IS_CONST) {
zval_dtor(&tmp_varname);
}
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_CV != IS_TMP_VAR) {
-
- }
- break;
- case ZEND_FETCH_LOCAL:
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CV == IS_VAR && !0) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
}
}
-
- if (IS_CV != IS_CONST && varname == &tmp_varname) {
+ if (IS_CV != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_CV_VAR(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_CV_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
SAVE_OPLINE();
varname = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ ZVAL_UNDEF(&tmp_varname);
if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(varname) != IS_STRING)) {
ZVAL_DUP_DEREF(&tmp_varname, varname);
convert_to_string(&tmp_varname);
} else {
ce = zend_fetch_class_by_name(Z_STR_P(opline->op2.zv), opline->op2.literal + 1, 0 TSRMLS_CC);
if (UNEXPECTED(ce == NULL)) {
- if (IS_CV != IS_CONST && varname == &tmp_varname) {
+ if (IS_CV != IS_CONST) {
zval_dtor(&tmp_varname);
}
} else {
target_symbol_table = zend_get_target_symbol_table(opline->extended_value & ZEND_FETCH_TYPE_MASK TSRMLS_CC);
- if ((retval = zend_hash_find(target_symbol_table, Z_STR_P(varname))) == NULL) {
+ retval = zend_hash_find(target_symbol_table, Z_STR_P(varname));
+ if (retval == NULL) {
switch (type) {
case BP_VAR_R:
case BP_VAR_UNSET:
}
}
}
- switch (opline->extended_value & ZEND_FETCH_TYPE_MASK) {
- case ZEND_FETCH_GLOBAL:
- if (IS_CV != IS_TMP_VAR) {
+ if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_STATIC) {
+ zval_update_constant(retval, (void*) 1 TSRMLS_CC);
+ } else if ((opline->extended_value & ZEND_FETCH_TYPE_MASK) != ZEND_FETCH_GLOBAL_LOCK) {
- }
- break;
- case ZEND_FETCH_LOCAL:
-
- break;
- case ZEND_FETCH_STATIC:
- zval_update_constant(retval, (void*) 1 TSRMLS_CC);
- break;
- case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CV == IS_VAR && !0) {
- Z_ADDREF_P(EX_VAR(opline->op1.var));
- }
- break;
}
}
-
- if (IS_CV != IS_CONST && varname == &tmp_varname) {
+ if (IS_CV != IS_CONST) {
zval_dtor(&tmp_varname);
}
- if (opline->extended_value & ZEND_FETCH_MAKE_REF) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
- }
-
- if (EXPECTED(retval != NULL)) {
- switch (type) {
- case BP_VAR_R:
- case BP_VAR_IS:
- ZVAL_COPY(EX_VAR(opline->result.var), retval);
- break;
- case BP_VAR_UNSET: {
- //??? zend_free_op free_res;
- //???
- //??? PZVAL_UNLOCK(*retval, &free_res);
- //??? if (retval != &EG(uninitialized_zval_ptr)) {
- //??? SEPARATE_ZVAL_IF_NOT_REF(retval);
- //??? }
- //??? PZVAL_LOCK(*retval);
- //??? FREE_OP_VAR_PTR(free_res);
- }
- /* break missing intentionally */
- default:
- ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
- break;
+ ZEND_ASSERT(retval != NULL);
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
+ } else {
+ if (/*type == BP_VAR_W &&*/ (opline->extended_value & ZEND_FETCH_MAKE_REF)) {
+ SEPARATE_ZVAL_TO_MAKE_IS_REF(retval);
}
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
{
USE_OPLINE
- return zend_fetch_var_address_helper_SPEC_CV_UNUSED(zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC) ? BP_VAR_W : BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
+ return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ } else {
+ return zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+ }
}
static int ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)