com php-src: Revert "Improved zend_get_special_constant ": Zend/zend_constants.c

From: Date: Wed, 18 Mar 2015 12:25:27 +0000
Subject: com php-src: Revert "Improved zend_get_special_constant ": Zend/zend_constants.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-85618@lists.php.net to get a copy of this message
Commit: 65b7f4860e7e8a67c1a4fa54ceb02f04228bd588 Author: Dmitry Stogov <dmitry@zend.com> Wed, 18 Mar 2015 15:25:27 +0300 Parents: a3b5061cb81ac61ce13300986887592a4d6d7b0f Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=65b7f4860e7e8a67c1a4fa54ceb02f04228bd588 Log: Revert "Improved zend_get_special_constant" This reverts commit 624eb49e78b7ae50a85bb4b9c4dc601395fbe71e. Changed paths: M Zend/zend_constants.c Diff: diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index cb308b3..4ca7ef4 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -224,14 +224,15 @@ ZEND_API void zend_register_string_constant(const char *name, size_t name_len, c zend_register_stringl_constant(name, name_len, strval, strlen(strval), flags, module_number); } -static zend_constant *zend_get_special_constant(zend_string *name) +static zend_constant *zend_get_special_constant(const char *name, size_t name_len) { zend_constant *c; static char haltoff[] = "__COMPILER_HALT_OFFSET__"; if (!EG(current_execute_data)) { return NULL; - } else if (zend_string_equals_literal(name, "__CLASS__")) { + } else if (name_len == sizeof("__CLASS__")-1 && + !memcmp(name, "__CLASS__", sizeof("__CLASS__")-1)) { /* Returned constants may be cached, so they have to be stored */ if (EG(scope) && EG(scope)->name) { @@ -250,15 +251,18 @@ static zend_constant *zend_get_special_constant(zend_string *name) } zend_string_release(const_name); } else { - if ((c = zend_hash_find_ptr(EG(zend_constants), name)) == NULL) { + zend_string *const_name = zend_string_init("\0__CLASS__", sizeof("\0__CLASS__")-1, 0); + if ((c = zend_hash_find_ptr(EG(zend_constants), const_name)) == NULL) { c = emalloc(sizeof(zend_constant)); memset(c, 0, sizeof(zend_constant)); ZVAL_EMPTY_STRING(&c->value); - zend_hash_add_ptr(EG(zend_constants), name, c); + zend_hash_add_ptr(EG(zend_constants), const_name, c); } + zend_string_release(const_name); } return c; - } else if (zend_string_equals_literal(name, "__COMPILER_HALT_OFFSET__")) { + } else if (name_len == sizeof("__COMPILER_HALT_OFFSET__")-1 && + !memcmp(name, "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__")-1)) { const char *cfilename; zend_string *haltname; size_t clen; @@ -277,20 +281,20 @@ static zend_constant *zend_get_special_constant(zend_string *name) } -ZEND_API zval *zend_get_constant(zend_string *name) +ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len) { zend_constant *c; ALLOCA_FLAG(use_heap) - if ((c = zend_hash_find_ptr(EG(zend_constants), name)) == NULL) { - char *lcname = do_alloca(name->len + 1, use_heap); - zend_str_tolower_copy(lcname, name->val, name->len); - if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, name->len)) != NULL) { + if ((c = zend_hash_str_find_ptr(EG(zend_constants), name, name_len)) == NULL) { + char *lcname = do_alloca(name_len + 1, use_heap); + zend_str_tolower_copy(lcname, name, name_len); + if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, name_len)) != NULL) { if (c->flags & CONST_CS) { c = NULL; } } else { - c = zend_get_special_constant(name); + c = zend_get_special_constant(name, name_len); } free_alloca(lcname, use_heap); } @@ -298,16 +302,25 @@ ZEND_API zval *zend_get_constant(zend_string *name) return c ? &c->value : NULL; } -ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len) +ZEND_API zval *zend_get_constant(zend_string *name) { - zval *ret; - zend_string *cname = zend_string_init(name, name_len, 0); + zend_constant *c; + ALLOCA_FLAG(use_heap) - ret = zend_get_constant(cname); - - zend_string_release(cname); + if ((c = zend_hash_find_ptr(EG(zend_constants), name)) == NULL) { + char *lcname = do_alloca(name->len + 1, use_heap); + zend_str_tolower_copy(lcname, name->val, name->len); + if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, name->len)) != NULL) { + if (c->flags & CONST_CS) { + c = NULL; + } + } else { + c = zend_get_special_constant(name->val, name->len); + } + free_alloca(lcname, use_heap); + } - return ret; + return c ? &c->value : NULL; } ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, zend_ulong flags) @@ -452,12 +465,12 @@ zend_constant *zend_quick_get_constant(const zval *key, zend_ulong flags) (c->flags & CONST_CS) != 0) { key--; - c = zend_get_special_constant(Z_STR_P(key)); + c = zend_get_special_constant(Z_STRVAL_P(key), Z_STRLEN_P(key)); } } } else { key--; - c = zend_get_special_constant(Z_STR_P(key)); + c = zend_get_special_constant(Z_STRVAL_P(key), Z_STRLEN_P(key)); } } }

« previous php.cvs (#85618) next »