ZEND_VM_HANDLER(65, ZEND_SEND_VAL, CONST|TMP, ANY)
{
USE_OPLINE
+ zval *value, *top;
+ zend_free_op free_op1;
SAVE_OPLINE();
if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
}
}
- {
- zval *top;
- zval *value;
- zend_free_op free_op1;
-
- value = GET_OP1_ZVAL_PTR(BP_VAR_R);
- top = zend_vm_stack_top_inc(TSRMLS_C);
- ZVAL_COPY_VALUE(top, value);
- if (!IS_OP1_TMP_FREE()) {
- zval_opt_copy_ctor(top);
- }
- FREE_OP1_IF_VAR();
+ value = GET_OP1_ZVAL_PTR(BP_VAR_R);
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ ZVAL_COPY_VALUE(top, value);
+ if (OP1_TYPE == IS_CONST) {
+ zval_opt_copy_ctor(top);
}
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
ZVAL_DUP(top, Z_REFVAL_P(varptr));
FREE_OP1();
} else {
+ ZVAL_COPY_VALUE(top, varptr);
if (OP1_TYPE == IS_CV) {
- if (Z_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
+ if (Z_OPT_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
}
- ZVAL_COPY_VALUE(top, varptr);
}
-
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
{
USE_OPLINE
zend_free_op free_op1;
- zval *varptr;
+ zval *varptr, *top;
int arg_num;
SAVE_OPLINE();
Z_TYPE_P(varptr) == IS_OBJECT ||
(Z_REFCOUNTED_P(varptr) && Z_REFCOUNT_P(varptr) == 1))) {
- if (Z_ISREF_P(varptr)) {
- if (OP1_TYPE == IS_CV) {
- Z_ADDREF_P(varptr);
- }
- } else {
+ if (!Z_ISREF_P(varptr)) {
ZVAL_NEW_REF(varptr, varptr);
- if (OP1_TYPE == IS_CV) {
- Z_ADDREF_P(varptr);
- }
+ }
+ if (OP1_TYPE == IS_CV) {
+ Z_ADDREF_P(varptr);
}
zend_vm_stack_push(varptr TSRMLS_CC);
} else {
- zval val;
-
if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
!(opline->extended_value & ZEND_ARG_SEND_SILENT) :
!ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
zend_error(E_STRICT, "Only variables should be passed by reference");
}
- ZVAL_COPY_VALUE(&val, varptr);
- if (!IS_OP1_TMP_FREE()) {
- zval_opt_copy_ctor(&val);
- }
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ ZVAL_COPY_VALUE(top, varptr);
+ zval_opt_copy_ctor(top);
FREE_OP1_IF_VAR();
- zend_vm_stack_push(&val TSRMLS_CC);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
if (OP1_TYPE == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
zend_vm_stack_push(&EG(uninitialized_zval) TSRMLS_CC);
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
zend_vm_stack_push(varptr TSRMLS_CC);
FREE_OP1_VAR_PTR();
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(66, ZEND_SEND_VAR, VAR|CV, ANY)
{
USE_OPLINE
+ zval *varptr, *top;
+ zend_free_op free_op1;
if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
int arg_num = opline->op2.num + EX(call)->num_additional_args;
ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF);
}
}
- SAVE_OPLINE();
- ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper);
+
+ varptr = GET_OP1_ZVAL_PTR(BP_VAR_R);
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ if (Z_ISREF_P(varptr)) {
+ ZVAL_DUP(top, Z_REFVAL_P(varptr));
+ FREE_OP1();
+ } else {
+ ZVAL_COPY_VALUE(top, varptr);
+ if (OP1_TYPE == IS_CV) {
+ if (Z_OPT_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
+ }
+ }
+ ZEND_VM_NEXT_OPCODE();
}
ZEND_VM_HANDLER(165, ZEND_SEND_UNPACK, ANY, ANY)
static int ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
+ zval *value, *top;
+
SAVE_OPLINE();
if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
}
}
- {
- zval *top;
- zval *value;
-
-
- value = opline->op1.zv;
- top = zend_vm_stack_top_inc(TSRMLS_C);
- ZVAL_COPY_VALUE(top, value);
- if (!0) {
- zval_opt_copy_ctor(top);
- }
-
+ value = opline->op1.zv;
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ ZVAL_COPY_VALUE(top, value);
+ if (IS_CONST == IS_CONST) {
+ zval_opt_copy_ctor(top);
}
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
static int ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
+ zval *value, *top;
+ zend_free_op free_op1;
SAVE_OPLINE();
if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
}
}
- {
- zval *top;
- zval *value;
- zend_free_op free_op1;
-
- value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
- top = zend_vm_stack_top_inc(TSRMLS_C);
- ZVAL_COPY_VALUE(top, value);
- if (!1) {
- zval_opt_copy_ctor(top);
- }
-
+ value = _get_zval_ptr_tmp(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ ZVAL_COPY_VALUE(top, value);
+ if (IS_TMP_VAR == IS_CONST) {
+ zval_opt_copy_ctor(top);
}
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
ZVAL_DUP(top, Z_REFVAL_P(varptr));
zval_ptr_dtor_nogc(free_op1.var);
} else {
+ ZVAL_COPY_VALUE(top, varptr);
if (IS_VAR == IS_CV) {
- if (Z_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
+ if (Z_OPT_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
}
- ZVAL_COPY_VALUE(top, varptr);
}
-
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
{
USE_OPLINE
zend_free_op free_op1;
- zval *varptr;
+ zval *varptr, *top;
int arg_num;
SAVE_OPLINE();
Z_TYPE_P(varptr) == IS_OBJECT ||
(Z_REFCOUNTED_P(varptr) && Z_REFCOUNT_P(varptr) == 1))) {
- if (Z_ISREF_P(varptr)) {
- if (IS_VAR == IS_CV) {
- Z_ADDREF_P(varptr);
- }
- } else {
+ if (!Z_ISREF_P(varptr)) {
ZVAL_NEW_REF(varptr, varptr);
- if (IS_VAR == IS_CV) {
- Z_ADDREF_P(varptr);
- }
+ }
+ if (IS_VAR == IS_CV) {
+ Z_ADDREF_P(varptr);
}
zend_vm_stack_push(varptr TSRMLS_CC);
} else {
- zval val;
-
if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
!(opline->extended_value & ZEND_ARG_SEND_SILENT) :
!ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
zend_error(E_STRICT, "Only variables should be passed by reference");
}
- ZVAL_COPY_VALUE(&val, varptr);
- if (!0) {
- zval_opt_copy_ctor(&val);
- }
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ ZVAL_COPY_VALUE(top, varptr);
+ zval_opt_copy_ctor(top);
zval_ptr_dtor_nogc(free_op1.var);
- zend_vm_stack_push(&val TSRMLS_CC);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
if (IS_VAR == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
zend_vm_stack_push(&EG(uninitialized_zval) TSRMLS_CC);
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
zend_vm_stack_push(varptr TSRMLS_CC);
if (free_op1.var) {zval_ptr_dtor_nogc(free_op1.var);};
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
static int ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
+ zval *varptr, *top;
+ zend_free_op free_op1;
if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
int arg_num = opline->op2.num + EX(call)->num_additional_args;
return ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
}
}
- SAVE_OPLINE();
- return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+
+ varptr = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1 TSRMLS_CC);
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ if (Z_ISREF_P(varptr)) {
+ ZVAL_DUP(top, Z_REFVAL_P(varptr));
+ zval_ptr_dtor_nogc(free_op1.var);
+ } else {
+ ZVAL_COPY_VALUE(top, varptr);
+ if (IS_VAR == IS_CV) {
+ if (Z_OPT_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
+ }
+ }
+ ZEND_VM_NEXT_OPCODE();
}
static int ZEND_FASTCALL ZEND_BOOL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
ZVAL_DUP(top, Z_REFVAL_P(varptr));
} else {
+ ZVAL_COPY_VALUE(top, varptr);
if (IS_CV == IS_CV) {
- if (Z_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
+ if (Z_OPT_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
}
- ZVAL_COPY_VALUE(top, varptr);
}
-
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
{
USE_OPLINE
- zval *varptr;
+ zval *varptr, *top;
int arg_num;
SAVE_OPLINE();
Z_TYPE_P(varptr) == IS_OBJECT ||
(Z_REFCOUNTED_P(varptr) && Z_REFCOUNT_P(varptr) == 1))) {
- if (Z_ISREF_P(varptr)) {
- if (IS_CV == IS_CV) {
- Z_ADDREF_P(varptr);
- }
- } else {
+ if (!Z_ISREF_P(varptr)) {
ZVAL_NEW_REF(varptr, varptr);
- if (IS_CV == IS_CV) {
- Z_ADDREF_P(varptr);
- }
+ }
+ if (IS_CV == IS_CV) {
+ Z_ADDREF_P(varptr);
}
zend_vm_stack_push(varptr TSRMLS_CC);
} else {
- zval val;
-
if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
!(opline->extended_value & ZEND_ARG_SEND_SILENT) :
!ARG_MAY_BE_SENT_BY_REF(EX(call)->fbc, arg_num)) {
zend_error(E_STRICT, "Only variables should be passed by reference");
}
- ZVAL_COPY_VALUE(&val, varptr);
- if (!0) {
- zval_opt_copy_ctor(&val);
- }
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ ZVAL_COPY_VALUE(top, varptr);
+ zval_opt_copy_ctor(top);
- zend_vm_stack_push(&val TSRMLS_CC);
}
CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
if (IS_CV == IS_VAR && UNEXPECTED(varptr == &EG(error_zval))) {
zend_vm_stack_push(&EG(uninitialized_zval) TSRMLS_CC);
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
zend_vm_stack_push(varptr TSRMLS_CC);
- CHECK_EXCEPTION();
ZEND_VM_NEXT_OPCODE();
}
static int ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
USE_OPLINE
+ zval *varptr, *top;
+
if (opline->extended_value == ZEND_DO_FCALL_BY_NAME) {
int arg_num = opline->op2.num + EX(call)->num_additional_args;
return ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
}
}
- SAVE_OPLINE();
- return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
+
+ varptr = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var TSRMLS_CC);
+ top = zend_vm_stack_top_inc(TSRMLS_C);
+ if (Z_ISREF_P(varptr)) {
+ ZVAL_DUP(top, Z_REFVAL_P(varptr));
+
+ } else {
+ ZVAL_COPY_VALUE(top, varptr);
+ if (IS_CV == IS_CV) {
+ if (Z_OPT_REFCOUNTED_P(varptr)) Z_ADDREF_P(varptr);
+ }
+ }
+ ZEND_VM_NEXT_OPCODE();
}
static int ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)