args = get_zval_ptr(opline->op1_type, &opline->op1, execute_data, &free_op1, BP_VAR_R);
arg_num = opline->op2.num + EX(call)->num_additional_args + 1;
+again:
switch (Z_TYPE_P(args)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(args);
iter->funcs->dtor(iter TSRMLS_CC);
break;
}
+ case IS_REFERENCE:
+ args = Z_REFVAL_P(args);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Only arrays and Traversables can be unpacked");
}
zval_copy_ctor(result);
}
}
+
+again:
switch (opline->extended_value) {
case IS_NULL:
convert_to_null(result);
case IS_OBJECT:
convert_to_object(result);
break;
+ case IS_REFERENCE:
+ result = Z_REFVAL_P(result);
+ goto again;
+ break;
}
CHECK_EXCEPTION();
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=opline->op1.zv;
+ expr_ptr = opline->op1.zv;
if (0) { /* temporary variable */
zval new_expr;
zval *offset = opline->op2.zv;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=opline->op1.zv;
+ expr_ptr = opline->op1.zv;
if (0) { /* temporary variable */
zval new_expr;
zval *offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=opline->op1.zv;
+ expr_ptr = opline->op1.zv;
if (0) { /* temporary variable */
zval new_expr;
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=opline->op1.zv;
+ expr_ptr = opline->op1.zv;
if (0) { /* temporary variable */
zval new_expr;
zval *offset = NULL;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=opline->op1.zv;
+ expr_ptr = opline->op1.zv;
if (0) { /* temporary variable */
zval new_expr;
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+ zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
zval_copy_ctor(result);
}
}
+
+again:
switch (opline->extended_value) {
case IS_NULL:
convert_to_null(result);
case IS_OBJECT:
convert_to_object(result);
break;
+ case IS_REFERENCE:
+ result = Z_REFVAL_P(result);
+ goto again;
+ break;
}
CHECK_EXCEPTION();
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (1) { /* temporary variable */
zval new_expr;
zval *offset = opline->op2.zv;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (1) { /* temporary variable */
zval new_expr;
zval *offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (1) { /* temporary variable */
zval new_expr;
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (1) { /* temporary variable */
zval new_expr;
zval *offset = NULL;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (1) { /* temporary variable */
zval new_expr;
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+ zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
zval_copy_ctor(result);
}
}
+
+again:
switch (opline->extended_value) {
case IS_NULL:
convert_to_null(result);
case IS_OBJECT:
convert_to_object(result);
break;
+ case IS_REFERENCE:
+ result = Z_REFVAL_P(result);
+ goto again;
+ break;
}
zval_ptr_dtor_nogc(free_op1.var);
CHECK_EXCEPTION();
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
zval *offset = opline->op2.zv;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_VAR != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
zval *offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_VAR != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
zval_dtor(free_op2.var);
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_VAR != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
zval_ptr_dtor_nogc(free_op2.var);
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
zval *offset = NULL;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_var_deref(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+ zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_VAR != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
if (IS_UNUSED != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
if (IS_UNUSED != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
zval_dtor(free_op2.var);
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
if (IS_UNUSED != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
zval_ptr_dtor_nogc(free_op2.var);
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
if (IS_UNUSED != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
zval_copy_ctor(result);
}
}
+
+again:
switch (opline->extended_value) {
case IS_NULL:
convert_to_null(result);
case IS_OBJECT:
convert_to_object(result);
break;
+ case IS_REFERENCE:
+ result = Z_REFVAL_P(result);
+ goto again;
+ break;
}
CHECK_EXCEPTION();
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
zval *offset = opline->op2.zv;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_CV != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
zval *offset = _get_zval_ptr_tmp(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_CV != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
zval_dtor(free_op2.var);
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
if (IS_VAR != IS_UNUSED) {
zend_free_op free_op2;
- zval *offset = _get_zval_ptr_var_deref(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
+ zval *offset = _get_zval_ptr_var(opline->op2.var, execute_data, &free_op2 TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_CV != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
zval_ptr_dtor_nogc(free_op2.var);
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
zval *offset = NULL;
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
Z_ADDREF_P(expr_ptr);
}
} else {
- expr_ptr=_get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ expr_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
if (0) { /* temporary variable */
zval new_expr;
if (IS_CV != IS_UNUSED) {
- zval *offset = _get_zval_ptr_cv_deref_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
+ zval *offset = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op2.var TSRMLS_CC);
ulong hval;
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), STR_EMPTY_ALLOC(), expr_ptr);
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type");
zval_ptr_dtor(expr_ptr);
if (IS_CV != IS_VAR || container) {
//???deref
- if (Z_TYPE_P(container) == IS_REFERENCE) {
- container = Z_REFVAL_P(container);
- }
+container_again:
switch (Z_TYPE_P(container)) {
case IS_ARRAY: {
HashTable *ht = Z_ARRVAL_P(container);
-
+offset_again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
case IS_NULL:
zend_hash_del(ht, STR_EMPTY_ALLOC());
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto offset_again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in unset");
break;
case IS_STRING:
zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
ZEND_VM_CONTINUE(); /* bailed out before */
+ case IS_REFERENCE:
+ container = Z_REFVAL_P(container);
+ goto container_again;
+ break;
default:
break;
ht = Z_ARRVAL_P(container);
+again:
switch (Z_TYPE_P(offset)) {
case IS_DOUBLE:
hval = zend_dval_to_lval(Z_DVAL_P(offset));
isset = 1;
}
break;
+ case IS_REFERENCE:
+ offset = Z_REFVAL_P(offset);
+ goto again;
+ break;
default:
zend_error(E_WARNING, "Illegal offset type in isset or empty");
break;