diff options
author | Felipe Pena <felipe@php.net> | 2011-07-10 12:37:42 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2011-07-10 12:37:42 +0000 |
commit | 9aa25d09383d11fe5e00aa72ecf88d7ee935b1a7 (patch) | |
tree | d64e6d69f75c188e71bd9897bdcfa60abcbcf09e /Zend/zend_constants.c | |
parent | c6396dd9deb05c9aa116f9877f6496ae62e8b539 (diff) | |
download | php-git-9aa25d09383d11fe5e00aa72ecf88d7ee935b1a7.tar.gz |
- Minor optimization taking the computed hash of interned strings
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r-- | Zend/zend_constants.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index b695795720..58cc495ebb 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -452,6 +452,7 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC) char *lowercase_name = NULL; char *name; int ret = SUCCESS; + ulong chash = 0; #if 0 printf("Registering constant for module %d\n", c->module_number); @@ -463,6 +464,7 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC) zend_str_tolower(lowercase_name, c->name_len-1); lowercase_name = zend_new_interned_string(lowercase_name, c->name_len, 1 TSRMLS_CC); name = lowercase_name; + chash = IS_INTERNED(lowercase_name) ? INTERNED_HASH(lowercase_name) : 0; } else { char *slash = strrchr(c->name, '\\'); if(slash) { @@ -470,15 +472,20 @@ ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC) zend_str_tolower(lowercase_name, slash-c->name); lowercase_name = zend_new_interned_string(lowercase_name, c->name_len, 1 TSRMLS_CC); name = lowercase_name; + + chash = IS_INTERNED(lowercase_name) ? INTERNED_HASH(lowercase_name) : 0; } else { name = c->name; } } + if (chash == 0) { + chash = zend_hash_func(name, c->name_len); + } /* Check if the user is trying to define the internal pseudo constant name __COMPILER_HALT_OFFSET__ */ if ((c->name_len == sizeof("__COMPILER_HALT_OFFSET__") && !memcmp(name, "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__")-1)) - || zend_hash_add(EG(zend_constants), name, c->name_len, (void *) c, sizeof(zend_constant), NULL)==FAILURE) { + || zend_hash_quick_add(EG(zend_constants), name, c->name_len, chash, (void *) c, sizeof(zend_constant), NULL)==FAILURE) { /* The internal __COMPILER_HALT_OFFSET__ is prefixed by NULL byte */ if (c->name[0] == '\0' && c->name_len > sizeof("\0__COMPILER_HALT_OFFSET__") |