andrei Mon Jul 17 20:52:12 2006 UTC
Modified files:
/ZendEngine2 zend_API.c zend_API.h zend_execute_API.c
/php-src/ext/standard array.c basic_functions.c basic_functions.h
Log:
- Upgrade usort() to support Unicode (including valid Unicode callbacks).
- Make usort() use 'f' specifier for function call info/cache.
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.c?r1=1.378&r2=1.379&diff_format=u
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.378 ZendEngine2/zend_API.c:1.379
--- ZendEngine2/zend_API.c:1.378 Thu Jul 13 21:27:48 2006
+++ ZendEngine2/zend_API.c Mon Jul 17 20:52:12 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_API.c,v 1.378 2006/07/13 21:27:48 andrei Exp $ */
+/* $Id: zend_API.c,v 1.379 2006/07/17 20:52:12 andrei Exp $ */
#include "zend.h"
#include "zend_execute.h"
@@ -763,7 +763,7 @@
fcc->initialized = 0;
break;
} else {
- return "function";
+ return "valid callback";
}
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_API.h?r1=1.247&r2=1.248&diff_format=u
Index: ZendEngine2/zend_API.h
diff -u ZendEngine2/zend_API.h:1.247 ZendEngine2/zend_API.h:1.248
--- ZendEngine2/zend_API.h:1.247 Tue Jun 13 13:11:42 2006
+++ ZendEngine2/zend_API.h Mon Jul 17 20:52:12 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_API.h,v 1.247 2006/06/13 13:11:42 dmitry Exp $ */
+/* $Id: zend_API.h,v 1.248 2006/07/17 20:52:12 andrei Exp $ */
#ifndef ZEND_API_H
#define ZEND_API_H
@@ -655,6 +655,7 @@
} zend_fcall_info_cache;
BEGIN_EXTERN_C()
+ZEND_API extern zend_fcall_info empty_fcall_info;
ZEND_API extern zend_fcall_info_cache empty_fcall_info_cache;
/** Build zend_call_info/cache from a zval*
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute_API.c?r1=1.375&r2=1.376&diff_format=u
Index: ZendEngine2/zend_execute_API.c
diff -u ZendEngine2/zend_execute_API.c:1.375
ZendEngine2/zend_execute_API.c:1.376
--- ZendEngine2/zend_execute_API.c:1.375 Wed Jul 12 07:54:18 2006
+++ ZendEngine2/zend_execute_API.c Mon Jul 17 20:52:12 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute_API.c,v 1.375 2006/07/12 07:54:18 dmitry Exp $ */
+/* $Id: zend_execute_API.c,v 1.376 2006/07/17 20:52:12 andrei Exp $ */
#include <stdio.h>
#include <signal.h>
@@ -39,6 +39,7 @@
ZEND_API void (*zend_execute_internal)(zend_execute_data *execute_data_ptr,
int return_value_used TSRMLS_DC);
/* true globals */
+ZEND_API zend_fcall_info empty_fcall_info = { sizeof(zend_fcall_info), NULL,
NULL, NULL, 0, NULL, NULL, 0 };
ZEND_API zend_fcall_info_cache empty_fcall_info_cache = { 0, NULL, NULL, NULL
};
#ifdef ZEND_WIN32
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/array.c?r1=1.365&r2=1.366&diff_format=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.365 php-src/ext/standard/array.c:1.366
--- php-src/ext/standard/array.c:1.365 Sat Jul 15 12:09:13 2006
+++ php-src/ext/standard/array.c Mon Jul 17 20:52:12 2006
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.365 2006/07/15 12:09:13 helly Exp $ */
+/* $Id: array.c,v 1.366 2006/07/17 20:52:12 andrei Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -571,8 +571,7 @@
Bucket *f;
Bucket *s;
zval **args[2];
- zval *retval_ptr;
- zend_fcall_info fci;
+ zval *retval_ptr = NULL;
f = *((Bucket **) a);
s = *((Bucket **) b);
@@ -580,17 +579,11 @@
args[0] = (zval **) f->pData;
args[1] = (zval **) s->pData;
- fci.size = sizeof(fci);
- fci.function_table = EG(function_table);
- fci.function_name = *BG(user_compare_func_name);
- fci.symbol_table = NULL;
- fci.object_pp = NULL;
- fci.retval_ptr_ptr = &retval_ptr;
- fci.param_count = 2;
- fci.params = args;
- fci.no_separation = 0;
-
- if (zend_call_function(&fci, &BG(user_compare_fci_cache) TSRMLS_CC)==
SUCCESS
+ BG(user_compare_fci).param_count = 2;
+ BG(user_compare_fci).params = args;
+ BG(user_compare_fci).retval_ptr_ptr = &retval_ptr;
+ BG(user_compare_fci).no_separation = 0;
+ if (zend_call_function(&BG(user_compare_fci),
&BG(user_compare_fci_cache) TSRMLS_CC)== SUCCESS
&& retval_ptr) {
long retval;
@@ -607,6 +600,7 @@
#define PHP_ARRAY_CMP_FUNC_CHECK(func_name) \
if (!zend_is_callable(*func_name, 0, NULL)) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid comparison
function."); \
+ BG(user_compare_fci) = old_user_compare_fci; \
BG(user_compare_fci_cache) = old_user_compare_fci_cache; \
BG(user_compare_func_name) = old_compare_func; \
RETURN_FALSE; \
@@ -622,41 +616,38 @@
#define PHP_ARRAY_CMP_FUNC_VARS \
zval **old_compare_func; \
+ zend_fcall_info old_user_compare_fci; \
zend_fcall_info_cache old_user_compare_fci_cache \
#define PHP_ARRAY_CMP_FUNC_BACKUP() \
old_compare_func = BG(user_compare_func_name); \
+ old_user_compare_fci = BG(user_compare_fci); \
old_user_compare_fci_cache = BG(user_compare_fci_cache); \
BG(user_compare_fci_cache) = empty_fcall_info_cache; \
#define PHP_ARRAY_CMP_FUNC_RESTORE() \
+ BG(user_compare_fci) = old_user_compare_fci; \
BG(user_compare_fci_cache) = old_user_compare_fci_cache; \
BG(user_compare_func_name) = old_compare_func; \
-/* {{{ proto bool usort(array array_arg, string cmp_function)
+/* {{{ proto bool usort(array array_arg, mixed comparator) U
Sort an array by values using a user-defined comparison function */
PHP_FUNCTION(usort)
{
- zval **array;
+ zval *array;
HashTable *target_hash;
PHP_ARRAY_CMP_FUNC_VARS;
PHP_ARRAY_CMP_FUNC_BACKUP();
-
- if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &array,
&BG(user_compare_func_name)) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "af", &array,
+
&BG(user_compare_fci), &BG(user_compare_fci_cache)) == FAILURE) {
PHP_ARRAY_CMP_FUNC_RESTORE();
- WRONG_PARAM_COUNT;
- }
- target_hash = HASH_OF(*array);
- if (!target_hash) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument
should be an array");
- PHP_ARRAY_CMP_FUNC_RESTORE();
- RETURN_FALSE;
+ return;
}
- PHP_ARRAY_CMP_FUNC_CHECK(BG(user_compare_func_name))
+ target_hash = HASH_OF(array);
if (zend_hash_sort(target_hash, zend_qsort, array_user_compare, 1
TSRMLS_CC) == FAILURE) {
PHP_ARRAY_CMP_FUNC_RESTORE();
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.791&r2=1.792&diff_format=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.791
php-src/ext/standard/basic_functions.c:1.792
--- php-src/ext/standard/basic_functions.c:1.791 Mon Jul 17 19:32:10 2006
+++ php-src/ext/standard/basic_functions.c Mon Jul 17 20:52:12 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.791 2006/07/17 19:32:10 andrei Exp $ */
+/* $Id: basic_functions.c,v 1.792 2006/07/17 20:52:12 andrei Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -3858,6 +3858,7 @@
BG(left) = -1;
BG(user_tick_functions) = NULL;
BG(user_filter_map) = NULL;
+ BG(user_compare_fci) = empty_fcall_info;
BG(user_compare_fci_cache) = empty_fcall_info_cache;
zend_hash_init(&BG(sm_protected_env_vars), 5, NULL, NULL, 1);
BG(sm_allowed_env_vars) = NULL;
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.h?r1=1.146&r2=1.147&diff_format=u
Index: php-src/ext/standard/basic_functions.h
diff -u php-src/ext/standard/basic_functions.h:1.146
php-src/ext/standard/basic_functions.h:1.147
--- php-src/ext/standard/basic_functions.h:1.146 Mon Jun 26 20:28:30 2006
+++ php-src/ext/standard/basic_functions.h Mon Jul 17 20:52:12 2006
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.h,v 1.146 2006/06/26 20:28:30 bjori Exp $ */
+/* $Id: basic_functions.h,v 1.147 2006/07/17 20:52:12 andrei Exp $ */
#ifndef BASIC_FUNCTIONS_H
#define BASIC_FUNCTIONS_H
@@ -165,6 +165,7 @@
char str_ebuf[40];
zval **array_walk_func_name;
zval **user_compare_func_name;
+ zend_fcall_info user_compare_fci;
zend_fcall_info_cache user_compare_fci_cache;
zend_llist *user_tick_functions;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php