diff options
| author | Marcus Boerger <helly@php.net> | 2004-11-01 12:09:46 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2004-11-01 12:09:46 +0000 |
| commit | db47e478c542dc4751c14e682654811b42958111 (patch) | |
| tree | 9ef6e5df43a8a85dadb2173c5748b8ccff4aabe8 /ext/standard/array.c | |
| parent | 8e3a8b1e8edb23613c5785d0ee2a3104c8a8d616 (diff) | |
| download | php-git-db47e478c542dc4751c14e682654811b42958111.tar.gz | |
- Use new way for global variables
- Cache class lookup
Diffstat (limited to 'ext/standard/array.c')
| -rw-r--r-- | ext/standard/array.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c index 218bbfb7f5..de3016332a 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -95,12 +95,32 @@ php_array_globals array_globals; #define DOUBLE_DRIFT_FIX 0.000000000000001 -PHP_MINIT_FUNCTION(array) -{ +ZEND_BEGIN_MODULE_GLOBALS(array) + int *multisort_flags[2]; + int (*compare_func)(zval *result, zval *op1, zval *op2 TSRMLS_DC); + zend_class_entry *php_ce_countable; +ZEND_END_MODULE_GLOBALS(array) + +ZEND_DECLARE_MODULE_GLOBALS(array) + #ifdef ZTS - ts_allocate_id(&array_globals_id, sizeof(php_array_globals), NULL, NULL); +#define ARRAYG(v) TSRMG(array_globals_id, zend_array_globals *, v) +#else +#define ARRAYG(v) (array_globals.v) #endif +/* {{{ php_extname_init_globals + */ +static void php_array_init_globals(zend_array_globals *array_globals) +{ + memset(array_globals, 0, sizeof(array_globals)); +} +/* }}} */ + +PHP_MINIT_FUNCTION(array) +{ + ZEND_INIT_MODULE_GLOBALS(array, php_array_init_globals, NULL); + REGISTER_LONG_CONSTANT("EXTR_OVERWRITE", EXTR_OVERWRITE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("EXTR_SKIP", EXTR_SKIP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("EXTR_PREFIX_SAME", EXTR_PREFIX_SAME, CONST_CS | CONST_PERSISTENT); @@ -304,10 +324,15 @@ PHP_FUNCTION(count) break; case IS_OBJECT: { #if HAVE_SPL - zend_class_entry **pce = NULL; zval *retval; + zend_class_entry **pce; - if (zend_lookup_class("countable", sizeof("countable")-1, &pce TSRMLS_CC) == SUCCESS) { + if (!ARRAYG(php_ce_countable)) { + if (zend_lookup_class("countable", sizeof("countable")-1, &pce TSRMLS_CC) == SUCCESS) { + ARRAYG(php_ce_countable) = *pce; + } + } + if (ARRAYG(php_ce_countable) && instanceof_function(Z_OBJCE_P(array), ARRAYG(php_ce_countable) TSRMLS_CC)) { zend_call_method_with_0_params(&array, NULL, NULL, "count", &retval); RETVAL_LONG(Z_LVAL_P(retval)); zval_ptr_dtor(&retval); |
