]> granicus.if.org Git - php/commitdiff
- Use zend_fcall_info_cache in invoke() to improve speed.
authorMarcus Boerger <helly@php.net>
Fri, 29 Aug 2003 21:46:12 +0000 (21:46 +0000)
committerMarcus Boerger <helly@php.net>
Fri, 29 Aug 2003 21:46:12 +0000 (21:46 +0000)
# This also fixes the problem with calling static methods.

Zend/zend_reflection_api.c
ext/reflection/php_reflection.c

index bded90fd0bdf1ae3c1de9905f14753157d9882c7..a524ce029634cd27f869d00b5b302d0d4960d645 100644 (file)
@@ -733,6 +733,7 @@ ZEND_METHOD(reflection_function, invoke)
        int result;
        int argc = ZEND_NUM_ARGS();
        zend_fcall_info fci;
+       zend_fcall_info_cache fcc;
        reflection_object *intern;
        zend_function *fptr;
        
@@ -755,7 +756,11 @@ ZEND_METHOD(reflection_function, invoke)
        fci.retval_ptr_ptr = &retval_ptr;
        fci.param_count = argc;
        fci.no_separation = 1;
-       /*fci.function_handler_cache = &fptr;*/
+
+       fcc.initialized = 1;
+       fcc.function_handler = fptr;
+       fcc.calling_scope = EG(scope);
+       fcc.object_pp = NULL;
 
        result = zend_call_function(&fci, NULL TSRMLS_CC);
 
@@ -958,6 +963,7 @@ ZEND_METHOD(reflection_method, invoke)
        int argc = ZEND_NUM_ARGS();
        int result;
        zend_fcall_info fci;
+       zend_fcall_info_cache fcc;
        
        METHOD_NOTSTATIC;
 
@@ -1011,9 +1017,13 @@ ZEND_METHOD(reflection_method, invoke)
        fci.param_count = argc-1;
        fci.params = params+1;
        fci.no_separation = 1;
-       /*fci.function_handler_cache = &mptr;*/
 
-       result = zend_call_function(&fci, NULL TSRMLS_CC);
+       fcc.initialized = 1;
+       fcc.function_handler = mptr;
+       fcc.calling_scope = EG(scope);
+       fcc.object_pp = object_pp;
+
+       result = zend_call_function(&fci, &fcc TSRMLS_CC);
        
        efree(params);
 
index bded90fd0bdf1ae3c1de9905f14753157d9882c7..a524ce029634cd27f869d00b5b302d0d4960d645 100644 (file)
@@ -733,6 +733,7 @@ ZEND_METHOD(reflection_function, invoke)
        int result;
        int argc = ZEND_NUM_ARGS();
        zend_fcall_info fci;
+       zend_fcall_info_cache fcc;
        reflection_object *intern;
        zend_function *fptr;
        
@@ -755,7 +756,11 @@ ZEND_METHOD(reflection_function, invoke)
        fci.retval_ptr_ptr = &retval_ptr;
        fci.param_count = argc;
        fci.no_separation = 1;
-       /*fci.function_handler_cache = &fptr;*/
+
+       fcc.initialized = 1;
+       fcc.function_handler = fptr;
+       fcc.calling_scope = EG(scope);
+       fcc.object_pp = NULL;
 
        result = zend_call_function(&fci, NULL TSRMLS_CC);
 
@@ -958,6 +963,7 @@ ZEND_METHOD(reflection_method, invoke)
        int argc = ZEND_NUM_ARGS();
        int result;
        zend_fcall_info fci;
+       zend_fcall_info_cache fcc;
        
        METHOD_NOTSTATIC;
 
@@ -1011,9 +1017,13 @@ ZEND_METHOD(reflection_method, invoke)
        fci.param_count = argc-1;
        fci.params = params+1;
        fci.no_separation = 1;
-       /*fci.function_handler_cache = &mptr;*/
 
-       result = zend_call_function(&fci, NULL TSRMLS_CC);
+       fcc.initialized = 1;
+       fcc.function_handler = mptr;
+       fcc.calling_scope = EG(scope);
+       fcc.object_pp = object_pp;
+
+       result = zend_call_function(&fci, &fcc TSRMLS_CC);
        
        efree(params);