summaryrefslogtreecommitdiff
path: root/Zend/zend_constants.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-12-27 13:26:06 +0300
committerDmitry Stogov <dmitry@zend.com>2017-12-27 13:26:06 +0300
commita6fcbb7c8709d20a471d81839e320693f7636a34 (patch)
tree0d0918b6ba1ae2b12b92db8fcca19453af7ecf90 /Zend/zend_constants.c
parent856ad54f4504e1659797f84f8b951e6f80918da3 (diff)
downloadphp-git-a6fcbb7c8709d20a471d81839e320693f7636a34.tar.gz
Use zend_hash_find() instead of zend_hash_find_ptr() to avoid double check
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r--Zend/zend_constants.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 42bccda28f..fa6d156a6e 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -262,13 +262,17 @@ ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len)
ZEND_API zval *zend_get_constant(zend_string *name)
{
+ zval *zv;
zend_constant *c;
ALLOCA_FLAG(use_heap)
- if ((c = zend_hash_find_ptr(EG(zend_constants), name)) == NULL) {
+ zv = zend_hash_find(EG(zend_constants), name);
+ if (zv == NULL) {
char *lcname = do_alloca(ZSTR_LEN(name) + 1, use_heap);
zend_str_tolower_copy(lcname, ZSTR_VAL(name), ZSTR_LEN(name));
- if ((c = zend_hash_str_find_ptr(EG(zend_constants), lcname, ZSTR_LEN(name))) != NULL) {
+ zv = zend_hash_str_find(EG(zend_constants), lcname, ZSTR_LEN(name));
+ if (zv != NULL) {
+ c = Z_PTR_P(zv);
if (c->flags & CONST_CS) {
c = NULL;
}
@@ -276,9 +280,10 @@ ZEND_API zval *zend_get_constant(zend_string *name)
c = zend_get_special_constant(ZSTR_VAL(name), ZSTR_LEN(name));
}
free_alloca(lcname, use_heap);
+ return c ? &c->value : NULL;
+ } else {
+ return &((zend_constant*)Z_PTR_P(zv))->value;
}
-
- return c ? &c->value : NULL;
}
ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, uint32_t flags)