mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Revert "Improved zend_get_special_constant"
This reverts commit 624eb49e78
.
This commit is contained in:
parent
a3b5061cb8
commit
65b7f4860e
@ -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,6 +281,27 @@ static zend_constant *zend_get_special_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_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;
|
||||
@ -290,7 +315,7 @@ ZEND_API zval *zend_get_constant(zend_string *name)
|
||||
c = NULL;
|
||||
}
|
||||
} else {
|
||||
c = zend_get_special_constant(name);
|
||||
c = zend_get_special_constant(name->val, name->len);
|
||||
}
|
||||
free_alloca(lcname, use_heap);
|
||||
}
|
||||
@ -298,18 +323,6 @@ 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;
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user