- Revert automatic pass arg_info

# We need to find a better solutions to prevent havy extension writer probs
This commit is contained in:
Marcus Boerger 2004-10-08 22:17:32 +00:00
parent 1546a578ec
commit f71644b480
3 changed files with 6 additions and 18 deletions

View File

@ -1454,7 +1454,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC)
} }
if (function_ptr) { if (function_ptr) {
send_by_reference = ARG_SEND_TYPE(function_ptr, (zend_uint) offset); send_by_reference = ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset) ? ZEND_ARG_SEND_BY_REF : 0;
} else { } else {
send_by_reference = 0; send_by_reference = 0;
} }
@ -1466,7 +1466,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC)
op = ZEND_SEND_VAR_NO_REF; op = ZEND_SEND_VAR_NO_REF;
} }
if (op!=ZEND_SEND_VAR_NO_REF && send_by_reference!=0) { if (op!=ZEND_SEND_VAR_NO_REF && send_by_reference==ZEND_ARG_SEND_BY_REF) {
/* change to passing by reference */ /* change to passing by reference */
switch (param->op_type) { switch (param->op_type) {
case IS_VAR: case IS_VAR:
@ -1474,9 +1474,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC)
op = ZEND_SEND_REF; op = ZEND_SEND_REF;
break; break;
default: default:
if (send_by_reference==ZEND_ARG_SEND_BY_REF) { zend_error(E_COMPILE_ERROR, "Only variables can be passed by reference");
zend_error(E_COMPILE_ERROR, "Only variables can be passed by reference");
}
break; break;
} }
} }

View File

@ -812,7 +812,6 @@ int zendlex(znode *zendlval TSRMLS_DC);
#define ZEND_ARG_SEND_BY_REF (1<<0) #define ZEND_ARG_SEND_BY_REF (1<<0)
#define ZEND_ARG_COMPILE_TIME_BOUND (1<<1) #define ZEND_ARG_COMPILE_TIME_BOUND (1<<1)
#define ZEND_ARG_SEND_AUTOMATIC (1<<2)
/* Lost In Stupid Parentheses */ /* Lost In Stupid Parentheses */
#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \ #define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
@ -823,24 +822,15 @@ int zendlex(znode *zendlval TSRMLS_DC);
( \ ( \
( \ ( \
arg_num<=((zend_function *) zf)->common.num_args \ arg_num<=((zend_function *) zf)->common.num_args \
&& ((zend_function *) zf)->common.arg_info[arg_num-1].pass_by_reference == ZEND_ARG_SEND_BY_REF \ && ((zend_function *) zf)->common.arg_info[arg_num-1].pass_by_reference \
) \ ) \
|| ( \ || ( \
arg_num>((zend_function *) zf)->common.num_args \ arg_num>((zend_function *) zf)->common.num_args \
&& ((zend_function *) zf)->common.pass_rest_by_reference == ZEND_ARG_SEND_BY_REF \ && ((zend_function *) zf)->common.pass_rest_by_reference \
) \ ) \
) \ ) \
) )
#define ARG_SEND_TYPE(zf, arg_num) \
( \
!zf || !((zend_function *) zf)->common.arg_info \
? 0 \
: ( arg_num<=((zend_function *) zf)->common.num_args \
? ((zend_function *) zf)->common.arg_info[arg_num-1].pass_by_reference \
: ((zend_function *) zf)->common.pass_rest_by_reference \
) \
)
#define ZEND_RETURN_VAL 0 #define ZEND_RETURN_VAL 0
#define ZEND_RETURN_REF 1 #define ZEND_RETURN_REF 1

View File

@ -2550,7 +2550,7 @@ ZEND_VM_HANDLER(ZEND_SEND_VAR_NO_REF)
{ {
zend_op *opline = EX(opline); zend_op *opline = EX(opline);
if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */ if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF) && !(opline->extended_value & ZEND_ARG_SEND_AUTOMATIC)) { if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) {
ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper); ZEND_VM_DISPATCH_TO_HELPER(zend_send_by_var_helper);
} }
} else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) { } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {