cvs: ZendEngine2(PHP_5_1) / zend_API.c

From: Date: Thu, 03 Nov 2005 23:45:28 +0000
Subject: cvs: ZendEngine2(PHP_5_1) / zend_API.c
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-4320@lists.php.net to get a copy of this message
helly Thu Nov 3 18:45:28 2005 EDT Modified files: (Branch: PHP_5_1) /ZendEngine2 zend_API.c Log: - Fix static check in zend_is_callable_ex() - Fix/speedup zend_make_callable() # Actually the ...STATIC... flag in zend_is_callable_ex() *must* go, too. # We keep it for the moment to support old stuff and skip analyzing them # in detail... http://cvs.php.net/diff.php/ZendEngine2/zend_API.c?r1=1.296.2.8&r2=1.296.2.9&ty=u Index: ZendEngine2/zend_API.c diff -u ZendEngine2/zend_API.c:1.296.2.8 ZendEngine2/zend_API.c:1.296.2.9 --- ZendEngine2/zend_API.c:1.296.2.8 Wed Nov 2 15:30:13 2005 +++ ZendEngine2/zend_API.c Thu Nov 3 18:45:18 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_API.c,v 1.296.2.8 2005/11/02 20:30:13 helly Exp $ */ +/* $Id: zend_API.c,v 1.296.2.9 2005/11/03 23:45:18 helly Exp $ */ #include "zend.h" #include "zend_execute.h" @@ -1996,6 +1996,7 @@ efree(lmname); return 0; } + efree(lcname); *ce_ptr = *pce; ftable = &(*ce_ptr)->function_table; } else { @@ -2007,11 +2008,8 @@ if (zend_hash_find(ftable, lmname, mlen+1, (void**)fptr_ptr) == SUCCESS) { retval = 1; } - if (*ce_ptr) { - efree(lcname); - if (!((*fptr_ptr)->common.fn_flags & ZEND_ACC_STATIC)) { - retval = 0; - } + if (*ce_ptr && *fptr_ptr && !((*fptr_ptr)->common.fn_flags & ZEND_ACC_STATIC)) { + retval = 0; } efree(lmname); break; @@ -2097,17 +2095,12 @@ } } } - if (retval) { - if ((check_flags & IS_CALLABLE_CHECK_IS_STATIC) != 0 && (fbc->common.fn_flags & ZEND_ACC_STATIC) == 0) { - retval = 0; - } else { - *fptr_ptr = fbc; - } - } + *fptr_ptr = fbc; } /* check for __call too */ if (retval == 0 && *zobj_ptr_ptr && ce->__call != 0) { retval = 1; + *fptr_ptr = ce->__call; } efree(lcname); } @@ -2115,7 +2108,7 @@ *callable_name = estrndup("Array", sizeof("Array")-1); *callable_name_len = sizeof("Array") - 1; } - if (!*zobj_ptr_ptr && (!*fptr_ptr || !((*fptr_ptr)->common.fn_flags & ZEND_ACC_STATIC))) { + if ((check_flags & IS_CALLABLE_CHECK_IS_STATIC) != 0 && !*zobj_ptr_ptr && (!*fptr_ptr || !((*fptr_ptr)->common.fn_flags & ZEND_ACC_STATIC))) { retval = 0; } *ce_ptr = ce; @@ -2149,36 +2142,20 @@ ZEND_API zend_bool zend_make_callable(zval *callable, char **callable_name TSRMLS_DC) { - char *lcname, *func, *class_name; - zend_bool retval = 0; - zend_class_entry **pce; - int class_name_len; + zend_class_entry *ce; + zend_function *fptr; + zval **zobj_ptr; - if (zend_is_callable_ex(callable, 0, callable_name, NULL, NULL, NULL, NULL TSRMLS_CC)) { + if (zend_is_callable_ex(callable, 0, callable_name, NULL, &ce, &fptr, &zobj_ptr TSRMLS_CC)) { + if (Z_TYPE_P(callable) == IS_STRING && ce) { + zval_dtor(callable); + array_init(callable); + add_next_index_string(callable, ce->name, 1); + add_next_index_string(callable, fptr->common.function_name, 1); + } return 1; } - switch (Z_TYPE_P(callable)) { - case IS_STRING: - lcname = zend_str_tolower_dup(Z_STRVAL_P(callable), Z_STRLEN_P(callable)); - - if ((func = strstr(lcname, "::")) != NULL) { - *func = '\0'; - class_name_len = func - lcname; - class_name = estrndup(Z_STRVAL_P(callable), class_name_len); - if (zend_lookup_class(class_name, class_name_len, &pce TSRMLS_CC) == SUCCESS) { - zval_dtor(callable); - array_init(callable); - add_next_index_stringl(callable, lcname, class_name_len, 1); - func += 2; - add_next_index_stringl(callable, func, strlen(func), 1); - retval = 1; - } - efree(class_name); - } - efree(lcname); - break; - } - return retval; + return 0; }

« previous php.zend-engine.cvs (#4320) next »