com php-src: Improved zend_get_special_constant: Zend /zend_constants.c
| From: | Xinchen Hui | Date: | Wed, 18 Mar 2015 04:22:07 +0000 |
| Subject: | com php-src: Improved zend_get_special_constant: Zend /zend_constants.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-85596@lists.php.net to get a copy of this message | ||
Commit: 624eb49e78b7ae50a85bb4b9c4dc601395fbe71e
Author: Xinchen Hui <laruence@php.net> Wed, 18 Mar 2015 12:22:07 +0800
Parents: f57f1a903d7d2bff023c67f17626ddedda918bd4
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=624eb49e78b7ae50a85bb4b9c4dc601395fbe71e
Log:
Improved zend_get_special_constant
Changed paths:
M Zend/zend_constants.c
Diff:
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 4ca7ef4..cb308b3 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -224,15 +224,14 @@ 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(const char *name, size_t name_len)
+static zend_constant *zend_get_special_constant(zend_string *name)
{
zend_constant *c;
static char haltoff[] = "__COMPILER_HALT_OFFSET__";
if (!EG(current_execute_data)) {
return NULL;
- } else if (name_len == sizeof("__CLASS__")-1 &&
- !memcmp(name, "__CLASS__", sizeof("__CLASS__")-1)) {
+ } else if (zend_string_equals_literal(name, "__CLASS__")) {
/* Returned constants may be cached, so they have to be stored */
if (EG(scope) && EG(scope)->name) {
@@ -251,18 +250,15 @@ static zend_constant *zend_get_special_constant(const char *name, size_t
name_le
}
zend_string_release(const_name);
} else {
- 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) {
+ if ((c = zend_hash_find_ptr(EG(zend_constants), 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), const_name, c);
+ zend_hash_add_ptr(EG(zend_constants), name, c);
}
- zend_string_release(const_name);
}
return c;
- } else if (name_len == sizeof("__COMPILER_HALT_OFFSET__")-1 &&
- !memcmp(name, "__COMPILER_HALT_OFFSET__",
sizeof("__COMPILER_HALT_OFFSET__")-1)) {
+ } else if (zend_string_equals_literal(name, "__COMPILER_HALT_OFFSET__")) {
const char *cfilename;
zend_string *haltname;
size_t clen;
@@ -281,27 +277,6 @@ static zend_constant *zend_get_special_constant(const char *name, size_t
name_le
}
-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_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, name_len);
- }
- free_alloca(lcname, use_heap);
- }
-
- return c ? &c->value : NULL;
-}
-
ZEND_API zval *zend_get_constant(zend_string *name)
{
zend_constant *c;
@@ -315,7 +290,7 @@ ZEND_API zval *zend_get_constant(zend_string *name)
c = NULL;
}
} else {
- c = zend_get_special_constant(name->val, name->len);
+ c = zend_get_special_constant(name);
}
free_alloca(lcname, use_heap);
}
@@ -323,6 +298,18 @@ 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)
+{
+ zval *ret;
+ zend_string *cname = zend_string_init(name, name_len, 0);
+
+ ret = zend_get_constant(cname);
+
+ zend_string_release(cname);
+
+ return ret;
+}
+
ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, zend_ulong flags)
{
zend_constant *c;
@@ -465,12 +452,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_STRVAL_P(key), Z_STRLEN_P(key));
+ c = zend_get_special_constant(Z_STR_P(key));
}
}
} else {
key--;
- c = zend_get_special_constant(Z_STRVAL_P(key), Z_STRLEN_P(key));
+ c = zend_get_special_constant(Z_STR_P(key));
}
}
}