static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zval *function_name, *func;
+ zval *function_name_ptr, *function_name, *func;
call_slot *call = EX(call_slots) + opline->result.num;
if (IS_CONST == IS_CONST) {
- function_name = (zval*)(opline->op2.literal+1);
+ function_name_ptr = function_name = (zval*)(opline->op2.literal+1);
if (CACHED_PTR(opline->op2.literal->cache_slot)) {
call->fbc = CACHED_PTR(opline->op2.literal->cache_slot);
} else if (UNEXPECTED((func = zend_hash_find(EG(function_table), Z_STR_P(function_name))) == NULL)) {
SAVE_OPLINE();
- function_name = opline->op2.zv;
+ function_name_ptr = function_name = opline->op2.zv;
+ if (Z_TYPE_P(function_name) == IS_REFERENCE) {
+ function_name = Z_REFVAL_P(function_name);
+ }
if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
if (Z_STRVAL_P(function_name)[0] == '\\') {
if (IS_CONST == IS_VAR && 0 && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- call->fbc->common.prototype = (zend_function*)function_name;
+ call->fbc->common.prototype = (zend_function*)function_name_ptr;
} else {
}
static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zval *function_name, *func;
+ zval *function_name_ptr, *function_name, *func;
call_slot *call = EX(call_slots) + opline->result.num;
if (IS_TMP_VAR == IS_CONST) {
- function_name = (zval*)(opline->op2.literal+1);
+ function_name_ptr = function_name = (zval*)(opline->op2.literal+1);
if (CACHED_PTR(opline->op2.literal->cache_slot)) {
call->fbc = CACHED_PTR(opline->op2.literal->cache_slot);
} else if (UNEXPECTED((func = zend_hash_find(EG(function_table), Z_STR_P(function_name))) == NULL)) {
zend_free_op free_op2;
SAVE_OPLINE();
- function_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ function_name_ptr = function_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ if (Z_TYPE_P(function_name) == IS_REFERENCE) {
+ function_name = Z_REFVAL_P(function_name);
+ }
if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
if (Z_STRVAL_P(function_name)[0] == '\\') {
if (IS_TMP_VAR == IS_VAR && 1 && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- call->fbc->common.prototype = (zend_function*)function_name;
+ call->fbc->common.prototype = (zend_function*)function_name_ptr;
} else {
zval_dtor(free_op2.var);
}
static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zval *function_name, *func;
+ zval *function_name_ptr, *function_name, *func;
call_slot *call = EX(call_slots) + opline->result.num;
if (IS_VAR == IS_CONST) {
- function_name = (zval*)(opline->op2.literal+1);
+ function_name_ptr = function_name = (zval*)(opline->op2.literal+1);
if (CACHED_PTR(opline->op2.literal->cache_slot)) {
call->fbc = CACHED_PTR(opline->op2.literal->cache_slot);
} else if (UNEXPECTED((func = zend_hash_find(EG(function_table), Z_STR_P(function_name))) == NULL)) {
zend_free_op free_op2;
SAVE_OPLINE();
- function_name = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ function_name_ptr = function_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ if (Z_TYPE_P(function_name) == IS_REFERENCE) {
+ function_name = Z_REFVAL_P(function_name);
+ }
if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
if (Z_STRVAL_P(function_name)[0] == '\\') {
if (IS_VAR == IS_VAR && (free_op2.var != NULL) && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- call->fbc->common.prototype = (zend_function*)function_name;
+ call->fbc->common.prototype = (zend_function*)function_name_ptr;
} else {
zval_ptr_dtor_nogc(free_op2.var);
}
static int ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zval *function_name, *func;
+ zval *function_name_ptr, *function_name, *func;
call_slot *call = EX(call_slots) + opline->result.num;
if (IS_CV == IS_CONST) {
- function_name = (zval*)(opline->op2.literal+1);
+ function_name_ptr = function_name = (zval*)(opline->op2.literal+1);
if (CACHED_PTR(opline->op2.literal->cache_slot)) {
call->fbc = CACHED_PTR(opline->op2.literal->cache_slot);
} else if (UNEXPECTED((func = zend_hash_find(EG(function_table), Z_STR_P(function_name))) == NULL)) {
SAVE_OPLINE();
- function_name = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+ function_name_ptr = function_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+ if (Z_TYPE_P(function_name) == IS_REFERENCE) {
+ function_name = Z_REFVAL_P(function_name);
+ }
if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) {
if (Z_STRVAL_P(function_name)[0] == '\\') {
if (IS_CV == IS_VAR && 0 && Z_REFCOUNT_P(function_name) == 1 &&
call->fbc->common.fn_flags & ZEND_ACC_CLOSURE) {
/* Delay closure destruction until its invocation */
- call->fbc->common.prototype = (zend_function*)function_name;
+ call->fbc->common.prototype = (zend_function*)function_name_ptr;
} else {
}
break;
}
- retval_ptr = opline->op1.zv;
+ retval_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
-//??? if (EX(return_value)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
//??? ZVAL_DUP(EX(return_value), retval_ptr);
-//??? }
-//??? break;
+ zval tmp;
+ ZVAL_DUP(&tmp, retval_ptr);
+ ZVAL_NEW_REF(EX(return_value), &tmp);
+ }
+ break;
//??? }
}
if ((IS_CONST == IS_CV || IS_CONST == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
- array_ptr = opline->op1.zv;
+ array_ptr = NULL;
if (Z_ISREF_P(array_ptr)) {
array_ref = array_ptr;
array_ptr = Z_REFVAL_P(array_ptr);
static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1;
+
zval *varname;
zval *retval;
zval tmp_varname;
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CONST == IS_VAR && !free_op1.var) {
+ if (IS_CONST == IS_VAR && !0) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
SAVE_OPLINE();
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
- expr_ptr = opline->op1.zv;
+ expr_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = opline->op1.zv;
+ zval *value_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
SAVE_OPLINE();
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
- expr_ptr = opline->op1.zv;
+ expr_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = opline->op1.zv;
+ zval *value_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1;
+
zval *varname;
zval *retval;
zval tmp_varname;
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CONST == IS_VAR && !free_op1.var) {
+ if (IS_CONST == IS_VAR && !0) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
SAVE_OPLINE();
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
- expr_ptr = opline->op1.zv;
+ expr_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = opline->op1.zv;
+ zval *value_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1;
+
zval *varname;
zval *retval;
zval tmp_varname;
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CONST == IS_VAR && !free_op1.var) {
+ if (IS_CONST == IS_VAR && !0) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
SAVE_OPLINE();
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
- expr_ptr = opline->op1.zv;
+ expr_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = opline->op1.zv;
+ zval *value_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
SAVE_OPLINE();
if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && opline->extended_value) {
- expr_ptr = opline->op1.zv;
+ expr_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = opline->op1.zv;
+ zval *value_ptr = NULL;
if (IS_CONST == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
break;
}
- retval_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ retval_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
-//??? if (EX(return_value)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
//??? ZVAL_DUP(EX(return_value), retval_ptr);
-//??? }
-//??? break;
+ zval tmp;
+ ZVAL_DUP(&tmp, retval_ptr);
+ ZVAL_NEW_REF(EX(return_value), &tmp);
+ }
+ break;
//??? }
}
if ((IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
- array_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ array_ptr = NULL;
if (Z_ISREF_P(array_ptr)) {
array_ref = array_ptr;
array_ptr = Z_REFVAL_P(array_ptr);
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
+ if (IS_TMP_VAR == IS_VAR && !1) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
SAVE_OPLINE();
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
SAVE_OPLINE();
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
+ if (IS_TMP_VAR == IS_VAR && !1) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
SAVE_OPLINE();
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
+ if (IS_TMP_VAR == IS_VAR && !1) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
SAVE_OPLINE();
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
SAVE_OPLINE();
if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = NULL;
if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
zval *var_ptr;
SAVE_OPLINE();
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
zval *var_ptr;
SAVE_OPLINE();
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
zval *var_ptr, *retval;
SAVE_OPLINE();
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
zval *var_ptr, *retval;
SAVE_OPLINE();
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
break;
}
- retval_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
-//??? if (EX(return_value)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
//??? ZVAL_DUP(EX(return_value), retval_ptr);
-//??? }
-//??? break;
+ zval tmp;
+ ZVAL_DUP(&tmp, retval_ptr);
+ ZVAL_NEW_REF(EX(return_value), &tmp);
+ }
+ break;
//??? }
}
zval *varptr;
SAVE_OPLINE();
- varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ varptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(varptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
if ((IS_VAR == IS_CV || IS_VAR == IS_VAR) &&
(opline->extended_value & ZEND_FE_RESET_VARIABLE)) {
- array_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (Z_ISREF_P(array_ptr)) {
array_ref = array_ptr;
array_ptr = Z_REFVAL_P(array_ptr);
{
USE_OPLINE
zend_free_op free_op1, free_op_data1;
- zval *object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
zval *property = opline->op2.zv;
zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
int have_get_ptr = 0;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
break;
case ZEND_ASSIGN_DIM: {
- zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_CONST, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
default:
value = opline->op2.zv;
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* do nothing */
break;
}
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = opline->op2.zv;
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = opline->op2.zv;
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_VAR == IS_VAR && !free_op1.var) {
+ if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
USE_OPLINE
zend_free_op free_op1;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_VAR == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_W TSRMLS_CC);
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_VAR == IS_VAR && do_free) {
- if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
- }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
property = opline->op2.zv;
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = opline->op2.zv;
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *container, *property, *retval_ptr;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = opline->op2.zv;
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *property_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property_name = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
-//??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
+//??? }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zval *object_ptr;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zval *property_name = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
+//??? }
} else {
zend_free_op free_op_data1, free_op_data2;
zval *value;
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_CONST, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
SAVE_OPLINE();
value = opline->op2.zv;
- variable_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_CONST TSRMLS_CC)) {
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
ulong hval;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_CONST == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_CONST == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = opline->op2.zv;
if (IS_VAR != IS_VAR || container) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else {
}
}
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
{
USE_OPLINE
zend_free_op free_op1, free_op2, free_op_data1;
- zval *object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
zval *property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
int have_get_ptr = 0;
}
} else {
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
FREE_OP(free_op_data1);
}
return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
break;
case ZEND_ASSIGN_DIM: {
- zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
default:
value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* do nothing */
break;
}
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
USE_OPLINE
zend_free_op free_op1, free_op2;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_VAR == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
zval_dtor(free_op2.var);
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_VAR == IS_VAR && do_free) {
- if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
- }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
} else {
zval *retval;
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *container, *property, *retval_ptr;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *property_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_dtor(free_op2.var);
- }
-//??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
+//??? }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zval *object_ptr;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else {
zend_free_op free_op2, free_op_data1, free_op_data2;
zval *value;
zval_dtor(free_op2.var);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
SAVE_OPLINE();
value = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- variable_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_TMP_VAR TSRMLS_CC)) {
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
ulong hval;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//???? if (IS_TMP_VAR == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_TMP_VAR == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//???? if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR != IS_VAR || container) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else {
zval_dtor(free_op2.var);
}
}
zval_dtor(free_op2.var);
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
{
USE_OPLINE
zend_free_op free_op1, free_op2, free_op_data1;
- zval *object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
zval *property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
int have_get_ptr = 0;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
FREE_OP(free_op_data1);
}
return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
break;
case ZEND_ASSIGN_DIM: {
- zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_VAR, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
default:
value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* do nothing */
break;
}
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_VAR == IS_VAR && !free_op1.var) {
+ if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
USE_OPLINE
zend_free_op free_op1, free_op2;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_VAR == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
zval_ptr_dtor_nogc(free_op2.var);
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_VAR == IS_VAR && do_free) {
- if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
- }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *container, *property, *retval_ptr;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *property_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
-//??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
+//??? }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zval *object_ptr;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else {
zend_free_op free_op2, free_op_data1, free_op_data2;
zval *value;
zval_ptr_dtor_nogc(free_op2.var);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
SAVE_OPLINE();
value = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- variable_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_VAR TSRMLS_CC)) {
zval *value_ptr;
SAVE_OPLINE();
- value_ptr = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR == IS_VAR &&
value_ptr &&
!Z_ISREF_P(value_ptr) &&
opline->extended_value == ZEND_RETURNS_FUNCTION /*???&&
!EX_T(opline->op2.var).var.fcall_returned_reference*/) {
- if (free_op2.var == NULL) {
+ if (!(free_op2.var != NULL)) {
PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
}
zend_error(E_STRICT, "Only variables should be assigned by reference");
//??? zend_error_noreturn(E_ERROR, "Cannot assign by reference to overloaded object");
//??? }
- variable_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if ((IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) ||
(IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET))) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
}
-//???: instead of FREE_OP2_VAR_PTR
- if (IS_VAR == IS_VAR && free_op2.var) {
- if (Z_REFCOUNTED_P(free_op2.var)) Z_DELREF_P(free_op2.var);
- free_op2.var = NULL;
- }
zend_assign_to_variable_reference(variable_ptr, value_ptr TSRMLS_CC);
if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
-//??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
if (free_op2.var) {zval_ptr_dtor_nogc(free_op2.var);};
CHECK_EXCEPTION();
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
ulong hval;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_VAR == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_VAR == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR != IS_VAR || container) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else {
zval_ptr_dtor_nogc(free_op2.var);
}
}
zval_ptr_dtor_nogc(free_op2.var);
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
{
USE_OPLINE
zend_free_op free_op1, free_op_data1;
- zval *object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
zval *property = NULL;
zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
int have_get_ptr = 0;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
break;
case ZEND_ASSIGN_DIM: {
- zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
default:
value = NULL;
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* do nothing */
break;
}
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_VAR == IS_VAR && !free_op1.var) {
+ if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
USE_OPLINE
zend_free_op free_op1;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_VAR == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_W TSRMLS_CC);
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_VAR == IS_VAR && do_free) {
- if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
- }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zval *object_ptr;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zval *property_name = NULL;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
+//??? }
} else {
zend_free_op free_op_data1, free_op_data2;
zval *value;
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_UNUSED, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
SAVE_OPLINE();
var_ptr = EX_VAR(opline->op1.var);
- if (Z_TYPE_P(var_ptr) != IS_OBJECT && !Z_ISREF_P(var_ptr)) {
- if (Z_REFCOUNTED_P(var_ptr) &&
- Z_REFCOUNT_P(var_ptr) > 1) {
- Z_DELREF_P(var_ptr);
- }
+ if (Z_TYPE_P(var_ptr) != IS_OBJECT &&
+ !Z_ISREF_P(var_ptr) &&
+ Z_REFCOUNTED_P(var_ptr) &&
+ Z_REFCOUNT_P(var_ptr) > 1) {
+
+ Z_DELREF_P(var_ptr);
ZVAL_DUP(EX_VAR(opline->op1.var), var_ptr);
}
ZEND_VM_NEXT_OPCODE();
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
{
USE_OPLINE
zend_free_op free_op1, free_op_data1;
- zval *object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
zval *property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
zval *value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
int have_get_ptr = 0;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
break;
case ZEND_ASSIGN_DIM: {
- zval *container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_CV, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
default:
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- var_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
/* do nothing */
break;
}
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
int have_get_ptr = 0;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
retval = EX_VAR(opline->result.var);
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
USE_OPLINE
zend_free_op free_op1;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_VAR == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_W TSRMLS_CC);
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_VAR == IS_VAR && do_free) {
- if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
- }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
if (zend_is_by_ref_func_arg_fetch(opline, EX(call) TSRMLS_CC)) {
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(container == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zval *container;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
zval_ptr_dtor_nogc(free_op1.var);
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *container, *property, *retval_ptr;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_VAR == IS_VAR && (free_op1.var != NULL) && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
zval *property_name;
SAVE_OPLINE();
- object = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
-//??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
+//??? }
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zval *object_ptr;
SAVE_OPLINE();
- object_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(object_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
zval *property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
+//??? }
} else {
zend_free_op free_op_data1, free_op_data2;
zval *value;
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_CV, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
SAVE_OPLINE();
value = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- variable_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR(opline->op1.var), value, IS_CV TSRMLS_CC)) {
static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1, free_op2;
+ zend_free_op free_op1;
zval *variable_ptr;
zval *value_ptr;
!Z_ISREF_P(value_ptr) &&
opline->extended_value == ZEND_RETURNS_FUNCTION /*???&&
!EX_T(opline->op2.var).var.fcall_returned_reference*/) {
- if (free_op2.var == NULL) {
+ if (!0) {
PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
}
zend_error(E_STRICT, "Only variables should be assigned by reference");
//??? zend_error_noreturn(E_ERROR, "Cannot assign by reference to overloaded object");
//??? }
- variable_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if ((IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) ||
(IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET))) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
}
-//???: instead of FREE_OP2_VAR_PTR
- if (IS_CV == IS_VAR && free_op2.var) {
- if (Z_REFCOUNTED_P(free_op2.var)) Z_DELREF_P(free_op2.var);
- free_op2.var = NULL;
- }
zend_assign_to_variable_reference(variable_ptr, value_ptr TSRMLS_CC);
if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
-//??? if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
+ if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
SAVE_OPLINE();
if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && opline->extended_value) {
- expr_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(expr_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets");
}
ulong hval;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_CV == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_CV == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
zval *offset;
SAVE_OPLINE();
- container = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ container = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
if (IS_VAR != IS_VAR || container) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else {
}
}
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
zval_copy_ctor(&generator->value);
}
} else {
- zval *value_ptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(value_ptr) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot yield string offsets by reference");
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_CONST, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_obj_zval_ptr_unused(TSRMLS_C);
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = opline->op2.zv;
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
property = opline->op2.zv;
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_UNUSED == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_obj_zval_ptr_unused(TSRMLS_C);
property_name = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
+
+//??? }
- }
-//??? ;
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_CONST == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_CONST == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else {
}
}
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
}
} else {
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
} else {
zval *retval;
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_obj_zval_ptr_unused(TSRMLS_C);
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_UNUSED == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_obj_zval_ptr_unused(TSRMLS_C);
property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_dtor(free_op2.var);
- }
-//??? ;
+//??? }
+
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//???? if (IS_TMP_VAR == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_TMP_VAR == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//???? if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else {
zval_dtor(free_op2.var);
}
}
zval_dtor(free_op2.var);
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_VAR, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_obj_zval_ptr_unused(TSRMLS_C);
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_UNUSED == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_obj_zval_ptr_unused(TSRMLS_C);
property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
-//??? ;
+//??? }
+
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_VAR == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_VAR == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else {
zval_ptr_dtor_nogc(free_op2.var);
}
}
zval_ptr_dtor_nogc(free_op2.var);
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_CV, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_obj_zval_ptr_unused(TSRMLS_C);
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
container = _get_obj_zval_ptr_unused(TSRMLS_C);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_UNUSED == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_UNUSED == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_obj_zval_ptr_unused(TSRMLS_C);
property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_UNUSED == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
+
+//??? }
- }
-//??? ;
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_CV == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_CV == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else {
}
}
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
//??? if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
//??? EX_T(opline->op1.var).var.fcall_returned_reference) {
//??? } else if (EX_T(opline->op1.var).var.ptr_ptr == &EX_T(opline->op1.var).var.ptr) {
- zend_error(E_NOTICE, "Only variable references should be returned by reference");
-//??? if (EX(return_value)) {
+ zend_error(E_NOTICE, "Only variable references should be returned by reference");
+ if (EX(return_value)) {
//??? ZVAL_DUP(EX(return_value), retval_ptr);
-//??? }
-//??? break;
+ zval tmp;
+ ZVAL_DUP(&tmp, retval_ptr);
+ ZVAL_NEW_REF(EX(return_value), &tmp);
+ }
+ break;
//??? }
}
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_CONST, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1;
+
zval *varname;
zval *retval;
zval tmp_varname;
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CV == IS_VAR && !free_op1.var) {
+ if (IS_CV == IS_VAR && !0) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
USE_OPLINE
zend_free_op free_op1;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_CV == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, opline->op2.zv, IS_CONST, BP_VAR_W TSRMLS_CC);
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_CV == IS_VAR && do_free) {
-
- }
-
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = opline->op2.zv;
container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
property = opline->op2.zv;
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_CV == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
property_name = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
+
+//??? }
- }
-//??? ;
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zval *property_name = opline->op2.zv;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
+//??? }
} else {
zend_free_op free_op_data1, free_op_data2;
zval *value;
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_CONST, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_CONST == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_CONST == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else {
}
}
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CONST == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
}
} else {
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_TMP_VAR, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
USE_OPLINE
zend_free_op free_op1, free_op2;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_CV == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_TMP_VAR, BP_VAR_W TSRMLS_CC);
zval_dtor(free_op2.var);
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_CV == IS_VAR && do_free) {
-
- }
-
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
} else {
zval *retval;
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
property = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_CV == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (1) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_dtor(free_op2.var);
- }
-//??? ;
+//??? }
+
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (1) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else {
zend_free_op free_op2, free_op_data1, free_op_data2;
zval *value;
zval_dtor(free_op2.var);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//???? if (IS_TMP_VAR == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_TMP_VAR == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//???? if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else {
zval_dtor(free_op2.var);
}
}
zval_dtor(free_op2.var);
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (1) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (1) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_TMP_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (1) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (1) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_dtor(free_op2.var);
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_VAR, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1;
+
zval *varname;
zval *retval;
zval tmp_varname;
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CV == IS_VAR && !free_op1.var) {
+ if (IS_CV == IS_VAR && !0) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
USE_OPLINE
zend_free_op free_op1, free_op2;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_CV == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC), IS_VAR, BP_VAR_W TSRMLS_CC);
zval_ptr_dtor_nogc(free_op2.var);
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_CV == IS_VAR && do_free) {
-
- }
-
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
}
CHECK_EXCEPTION();
property = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_CV == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
+
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
-//??? ;
+//??? }
+
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zend_free_op free_op2;
zval *property_name = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else {
zend_free_op free_op2, free_op_data1, free_op_data2;
zval *value;
zval_ptr_dtor_nogc(free_op2.var);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
zval *value_ptr;
SAVE_OPLINE();
- value_ptr = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
if (IS_VAR == IS_VAR &&
value_ptr &&
!Z_ISREF_P(value_ptr) &&
opline->extended_value == ZEND_RETURNS_FUNCTION /*???&&
!EX_T(opline->op2.var).var.fcall_returned_reference*/) {
- if (free_op2.var == NULL) {
+ if (!(free_op2.var != NULL)) {
PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
}
zend_error(E_STRICT, "Only variables should be assigned by reference");
(IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET))) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
}
-//???: instead of FREE_OP2_VAR_PTR
- if (IS_VAR == IS_VAR && free_op2.var) {
- if (Z_REFCOUNTED_P(free_op2.var)) Z_DELREF_P(free_op2.var);
- free_op2.var = NULL;
- }
zend_assign_to_variable_reference(variable_ptr, value_ptr TSRMLS_CC);
if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
-//??? ;
if (free_op2.var) {zval_ptr_dtor_nogc(free_op2.var);};
CHECK_EXCEPTION();
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_VAR == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_VAR == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else {
zval_ptr_dtor_nogc(free_op2.var);
}
}
zval_ptr_dtor_nogc(free_op2.var);
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_VAR == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
zval_ptr_dtor_nogc(free_op2.var);
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_UNUSED, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type, ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op1;
+
zval *varname;
zval *retval;
zval tmp_varname;
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
/* break missing intentionally */
case BP_VAR_IS:
- //???
- //ZVAL_NULL(retval);
- ZVAL_NULL(EX_VAR(opline->result.var));
+ retval = EX_VAR(opline->result.var);
+ ZVAL_NULL(retval);
break;
case BP_VAR_RW:
zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
zval_update_constant(retval, (void*) 1 TSRMLS_CC);
break;
case ZEND_FETCH_GLOBAL_LOCK:
- if (IS_CV == IS_VAR && !free_op1.var) {
+ if (IS_CV == IS_VAR && !0) {
Z_ADDREF_P(EX_VAR(opline->op1.var));
}
break;
}
/* break missing intentionally */
default:
-//??? if (Z_REFCOUNTED_P(retval)) Z_ADDREF_P(retval);
ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
break;
}
USE_OPLINE
zend_free_op free_op1;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_CV == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, NULL, IS_UNUSED, BP_VAR_W TSRMLS_CC);
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_CV == IS_VAR && do_free) {
-
- }
-
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
zval *property_name = NULL;
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_UNUSED == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
+//??? }
} else {
zend_free_op free_op_data1, free_op_data2;
zval *value;
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_UNUSED, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
}
} else {
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
/* here property is a string */
if (opline->extended_value == ZEND_ASSIGN_OBJ
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
FREE_OP(free_op_data1);
}
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), container, dim, IS_CV, BP_VAR_RW TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- var_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ var_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
}
}
break;
if (opline->extended_value == ZEND_ASSIGN_DIM) {
FREE_OP(free_op_data1);
- if (var_ptr != free_op_data2.var) {
- FREE_OP_VAR_PTR(free_op_data2);
- }
+ FREE_OP_VAR_PTR(free_op_data2);
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
/* here we are sure we are dealing with an object */
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
zval *zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
}
}
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
- }
+//??? }
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
USE_OPLINE
zend_free_op free_op1;
zval *container;
-//???
- int do_free = 1;
SAVE_OPLINE();
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
-//??? we must not free implicitly created array (it should be fixed in another way)
- if (IS_CV == IS_VAR && !Z_REFCOUNTED_P(container)) {
- do_free = 0;
- }
zend_fetch_dimension_address(EX_VAR(opline->result.var), container, _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC), IS_CV, BP_VAR_W TSRMLS_CC);
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(EX_VAR(opline->result.var));
//??? }
-//???
- if (IS_CV == IS_VAR && do_free) {
-
- }
-
/* We are going to assign the result by reference */
if (UNEXPECTED(opline->extended_value != 0)) {
zval *retval_ptr = EX_VAR(opline->result.var);
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_R, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
SAVE_OPLINE();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (Z_REFCOUNTED_P(retval_ptr)) {
Z_DELREF_P(retval_ptr);
SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr);
- Z_ADDREF_P(retval_ptr);
} else {
ZVAL_NEW_REF(retval_ptr, retval_ptr);
}
+ Z_ADDREF_P(retval_ptr);
}
}
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
container = _get_zval_ptr_cv_BP_VAR_RW(execute_data, opline->op1.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_RW TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
} else {
zval *retval;
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
/* here we are sure we are dealing with an object */
retval = Z_OBJ_HT_P(container)->read_property(container, offset, BP_VAR_IS, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), EX_VAR(opline->result.var) TSRMLS_CC);
ZVAL_COPY(EX_VAR(opline->result.var), retval);
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
}
CHECK_EXCEPTION();
property = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
container = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_W TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
if (IS_CV == IS_CV) {
SEPARATE_ZVAL_IF_NOT_REF(container);
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(property);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(container) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an object");
}
zend_fetch_property_address(EX_VAR(opline->result.var), container, property, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL), BP_VAR_UNSET TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property);
+//??? } else {
+
+//??? }
- }
//??? if (IS_CV == IS_VAR && 0 && READY_TO_DESTROY(free_op1.var)) {
//??? EXTRACT_ZVAL_PTR(&EX_T(opline->result.var));
//??? }
object = _get_zval_ptr_cv_BP_VAR_W(execute_data, opline->op1.var TSRMLS_CC);
property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(object) == IS_STR_OFFSET)) {
zend_error_noreturn(E_ERROR, "Cannot use string offset as an array");
}
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_OBJ, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
+
+//??? }
- }
-//??? ;
/* assign_obj has two opcodes! */
CHECK_EXCEPTION();
ZEND_VM_INC_OPCODE();
zval *property_name = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
- if (0) {
- MAKE_REAL_ZVAL_PTR(property_name);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(property_name);
+//??? }
zend_assign_to_object(RETURN_VALUE_USED(opline)?EX_VAR(opline->result.var):NULL, object_ptr, property_name, (opline+1)->op1_type, &(opline+1)->op1, execute_data, ZEND_ASSIGN_DIM, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(property_name);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(property_name);
+//??? } else {
- }
+//??? }
} else {
zend_free_op free_op_data1, free_op_data2;
zval *value;
zend_fetch_dimension_address(EX_VAR((opline+1)->op2.var), object_ptr, dim, IS_CV, BP_VAR_W TSRMLS_CC);
value = get_zval_ptr((opline+1)->op1_type, &(opline+1)->op1, execute_data, &free_op_data1, BP_VAR_R);
- variable_ptr = _get_zval_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
+ variable_ptr = _get_zval_ptr_ptr_var((opline+1)->op2.var, execute_data, &free_op_data2 TSRMLS_CC);
if (UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET)) {
if (zend_assign_to_string_offset(EX_VAR((opline+1)->op2.var), value, (opline+1)->op1_type TSRMLS_CC)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
//??? instead of FREE_OP_VAR_PTR(free_op_data2);
-//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
+//??? zval_ptr_dtor(Z_STR_OFFSET_P(variable_ptr)->str);
efree(Z_STR_OFFSET_P(variable_ptr));
} else if (UNEXPECTED(variable_ptr == &EG(error_zval))) {
if (IS_TMP_FREE(free_op_data1)) {
if (RETURN_VALUE_USED(opline)) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
} else {
if ((opline+1)->op1_type == IS_TMP_VAR) {
value = zend_assign_tmp_to_variable(variable_ptr, value TSRMLS_CC);
if (RETURN_VALUE_USED(opline)) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
}
-//??? FREE_OP_VAR_PTR(free_op_data2);
+ FREE_OP_VAR_PTR(free_op_data2);
}
FREE_OP_IF_VAR(free_op_data1);
}
static int ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
- zend_free_op free_op2;
+
zval *variable_ptr;
zval *value_ptr;
!Z_ISREF_P(value_ptr) &&
opline->extended_value == ZEND_RETURNS_FUNCTION /*???&&
!EX_T(opline->op2.var).var.fcall_returned_reference*/) {
- if (free_op2.var == NULL) {
+ if (!0) {
PZVAL_LOCK(value_ptr); /* undo the effect of get_zval_ptr_ptr() */
}
zend_error(E_STRICT, "Only variables should be assigned by reference");
(IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(variable_ptr) == IS_STR_OFFSET))) {
zend_error_noreturn(E_ERROR, "Cannot create references to/from string offsets nor overloaded objects");
}
-//???: instead of FREE_OP2_VAR_PTR
- if (IS_CV == IS_VAR && free_op2.var) {
- if (Z_REFCOUNTED_P(free_op2.var)) Z_DELREF_P(free_op2.var);
- free_op2.var = NULL;
- }
zend_assign_to_variable_reference(variable_ptr, value_ptr TSRMLS_CC);
if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_NEW) {
ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr);
}
-//??? ;
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) {
zend_error_noreturn(E_ERROR, "Cannot use object as array");
}
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//???? if (IS_CV == IS_CONST) {
+//???? ZVAL_DUP(offset, offset);
+//???? } else if (IS_CV == IS_TMP_VAR) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
Z_OBJ_HT_P(container)->unset_dimension(container, offset TSRMLS_CC);
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//???? if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
SEPARATE_ZVAL_IF_NOT_REF(container);
}
if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (Z_OBJ_HT_P(container)->unset_property) {
Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to unset property of non-object");
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else {
}
}
} else if (Z_TYPE_P(container) == IS_OBJECT) {
- if (0) {
- MAKE_REAL_ZVAL_PTR(offset);
- }
+//??? if (0) {
+//??? MAKE_REAL_ZVAL_PTR(offset);
+//??? }
if (prop_dim) {
if (Z_OBJ_HT_P(container)->has_property) {
result = Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY) != 0, ((IS_CV == IS_CONST) ? opline->op2.literal : NULL) TSRMLS_CC);
result = 0;
}
}
- if (0) {
- zval_ptr_dtor(offset);
- } else {
+//??? if (0) {
+//??? zval_ptr_dtor(offset);
+//??? } else {
- }
+//??? }
} else if (Z_TYPE_P(container) == IS_STRING && !prop_dim) { /* string offsets */
zval tmp;