From: Marcus Boerger Date: Fri, 8 Oct 2004 22:17:32 +0000 (+0000) Subject: - Revert automatic pass arg_info X-Git-Tag: PRE_NEW_VM_GEN_PATCH~58 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f71644b480a1df1ef21df8aacee85fea73375a06;p=php - Revert automatic pass arg_info # We need to find a better solutions to prevent havy extension writer probs --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c41309c46a..f5e3fe8dc5 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1454,7 +1454,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) } 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 { 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; } - 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 */ switch (param->op_type) { 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; break; 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; } } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index e99c866ffe..3fab70f746 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -812,7 +812,6 @@ int zendlex(znode *zendlval TSRMLS_DC); #define ZEND_ARG_SEND_BY_REF (1<<0) #define ZEND_ARG_COMPILE_TIME_BOUND (1<<1) -#define ZEND_ARG_SEND_AUTOMATIC (1<<2) /* Lost In Stupid Parentheses */ #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 \ - && ((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 \ - && ((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_REF 1 diff --git a/Zend/zend_vm_handlers.h b/Zend/zend_vm_handlers.h index 04b2af5bcf..0f2c312f12 100644 --- a/Zend/zend_vm_handlers.h +++ b/Zend/zend_vm_handlers.h @@ -2550,7 +2550,7 @@ ZEND_VM_HANDLER(ZEND_SEND_VAR_NO_REF) { 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_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); } } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {