Date: 04/05/00
- Next message: cesare_pizzi <email protected>: "[PHP-DEV] PHP 4.0 Bug #4046: Makefile syntax error"
- Previous message: Rasmus Lerdorf: "Re: [PHP-DEV] Bug #4045: Apache segfaults when PHP is loaded"
- Next in thread: Andi Gutmans: "Re: [PHP-DEV] [patch] func_get_arg & friends usable as function arguments"
- Reply: Andi Gutmans: "Re: [PHP-DEV] [patch] func_get_arg & friends usable as function arguments"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I'm back again with func_get_args and func_num_args...
But with a patch this time ! :-)
Take a look at this dummy-example :
<?php
function echovalues($val1, $val2) {
echo "This is val 1 :".$val1."\n";
echo "This is val 2 :".$val2."\n";
}
function printme(){
echo implode("\n",func_get_args())."\n";
echovalues(0,func_num_args());
}
printme(0,"one",2,"three");
?>
With current cvs, you get fatal errors :
func_get_args(): Can't be used as a function parameter
func_num_args(): Can't be used as a function parameter
With the following patch applied, you get :
0
one
2
three
This is val 1 :0
This is val 2 :4
which is the result one would expect.
This patch just looks down the argument_stack for the NULL
that was put on the stack on the top of param_count.
( see zend_execute_API.c on line 387 :
zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) (long) param_count, NULL);
)
Andi, Zeev, is this patch ok ? Did I miss something ?
Is there a specific reason why you didn't look for
the NULL down the stack and prefered to return an error ?
Flavien Lebarbe.
-- Flavien LEBARBE OPEN CARE Support for Freedom mailto:flebarbe <email protected> http://www.ocare.com Tel:+33 141430890 Fax:+33 141430891-------------------------------------------------------- --- zend_builtin_functions.c.orig Wed Apr 5 12:21:39 2000 +++ zend_builtin_functions.c Wed Apr 5 15:19:59 2000 @@ -110,8 +110,8 @@ p = EG(argument_stack).top_element-1-1; arg_count = (ulong) *p; /* this is the amount of arguments passed to func_num_args(); */ p -= 1+arg_count; - if (*p) { - zend_error(E_ERROR, "func_num_args(): Can't be used as a function parameter"); + while (*p) { /* Find last function call on the stack */ + p--; } --p; if (p>=EG(argument_stack).elements) { @@ -140,8 +140,8 @@ p = EG(argument_stack).top_element-1-1; arg_count = (ulong) *p; /* this is the amount of arguments passed to func_get_arg(); */ p -= 1+arg_count; - if (*p) { - zend_error(E_ERROR, "func_get_arg(): Can't be used as a function parameter"); + while (*p) { /* Find last function call on the stack */ + p--; } --p; if (p<EG(argument_stack).elements) { @@ -170,8 +170,8 @@ p = EG(argument_stack).top_element-1-1; arg_count = (ulong) *p; /* this is the amount of arguments passed to func_get_args(); */ p -= 1+arg_count; - if (*p) { - zend_error(E_ERROR, "func_get_args(): Can't be used as a function parameter"); + while (*p) { /* Find last function call on the stack */ + p--; } --p;
-- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: php-dev-unsubscribe <email protected> For additional commands, e-mail: php-dev-help <email protected> To contact the list administrators, e-mail: php-list-admin <email protected>
- Next message: cesare_pizzi <email protected>: "[PHP-DEV] PHP 4.0 Bug #4046: Makefile syntax error"
- Previous message: Rasmus Lerdorf: "Re: [PHP-DEV] Bug #4045: Apache segfaults when PHP is loaded"
- Next in thread: Andi Gutmans: "Re: [PHP-DEV] [patch] func_get_arg & friends usable as function arguments"
- Reply: Andi Gutmans: "Re: [PHP-DEV] [patch] func_get_arg & friends usable as function arguments"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

