mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
- Revert automatic pass arg_info
# We need to find a better solutions to prevent havy extension writer probs
This commit is contained in:
parent
1546a578ec
commit
f71644b480
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user