Can you send  a unified diff of what call_user_function() would look like 
with your changes?

Andi

At 06:04 AM 2/25/2002 -0800, brad lafountain wrote:
>Ok,
>  I know ive already posted this but no responded. So I'll do it again.
>
>Currently call_user_function() doesn't call overloaded class methods.
>I hacked together a function to get around this. Does anyone want to look 
>at it
>and see if it's gunna mess anything up as far as zend execution. if not put it
>in as part as the normal call_user_function.
>
>int my_call_user_function(HashTable *function_table, zval **object_pp, zval
>*function_name, zval *retval_ptr, int param_count, zval *params[] TSRMLS_DC)
>{
>         if(call_user_function(function_table, object_pp, function_name, 
> retval_ptr,
>param_count, params TSRMLS_CC) == FAILURE)
>         {
>                 if(Z_OBJCE_PP(object_pp)->handle_function_call != NULL)
>                 {
>                         zend_overloaded_element overloaded_element;
>                         zend_property_reference property_reference;
>                         zend_function_state function_state;
>                         zend_function_state *original_function_state_ptr;
>                         int i;
>
>                         overloaded_element.element = *function_name;
>                         overloaded_element.type = OE_IS_METHOD;
>
>                         function_state.function = (zend_function *) 
> emalloc(sizeof(zend_function));
>                         function_state.function->type = 
> ZEND_OVERLOADED_FUNCTION;
>                         function_state.function->common.arg_types = NULL;
> 
>function_state.function->overloaded_function.function_name =
>Z_STRVAL_P(function_name);
>
>                         property_reference.object = *object_pp;
>                         property_reference.type = BP_VAR_NA;
>                         property_reference.elements_list = (zend_llist
>*)emalloc(sizeof(zend_llist));
>                         zend_llist_init(property_reference.elements_list,
>sizeof(zend_overloaded_element), NULL, 0);
> 
>zend_llist_add_element(property_reference.elements_list,
>&overloaded_element);
>
>                         //Build argument stack
>                         for(i = 0;i < param_count;i++)
>                                 zend_ptr_stack_push(&EG(argument_stack), 
> params[i]);
>                         zend_ptr_stack_n_push(&EG(argument_stack), 2, 
> (void *)param_count, NULL);
>
>                         EG(function_state_ptr) = &function_state;
> 
>Z_OBJCE_PP(object_pp)->handle_function_call(param_count, retval_ptr,
>*object_pp, 1 TSRMLS_CC, &property_reference);
>                         EG(function_state_ptr) = original_function_state_ptr;
>
>                         zend_llist_destroy(property_reference.elements_list);
>                         efree(property_reference.elements_list);
>                         efree(function_state.function);
>
>                         zend_ptr_stack_clear_multiple(TSRMLS_C);
>                         return SUCCESS;
>                 }
>         }
>}
>
>
>__________________________________________________
>Do You Yahoo!?
>Yahoo! Sports - Coverage of the 2002 Olympic Games
>http://sports.yahoo.com
>
>--
>PHP Development Mailing List <http://www.php.net/>
>To unsubscribe, visit: http://www.php.net/unsub.php


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to