summaryrefslogtreecommitdiff
path: root/Zend/zend_constants.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-03-18 15:31:29 +0300
committerDmitry Stogov <dmitry@zend.com>2015-03-18 15:33:56 +0300
commit4e110954381e9f4f2ad0354702409b1b2f89cf94 (patch)
tree196ca8aef094f58b56fed3c98c9f2672b6ed7aaf /Zend/zend_constants.c
parent65b7f4860e7e8a67c1a4fa54ceb02f04228bd588 (diff)
downloadphp-git-4e110954381e9f4f2ad0354702409b1b2f89cf94.tar.gz
Reimplemented special constant handling. Now __HALT_COMPILER_OFFSET__ is resolved at compile-time. __CLASS__ retrived using separate ZEND_FETCH_CLASS_NAME opcode.
Diffstat (limited to 'Zend/zend_constants.c')
-rw-r--r--Zend/zend_constants.c34
1 files changed, 2 insertions, 32 deletions
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 4ca7ef4571..bf4e26a0e8 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -231,36 +231,6 @@ static zend_constant *zend_get_special_constant(const char *name, size_t name_le
if (!EG(current_execute_data)) {
return NULL;
- } 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) {
- size_t const_name_len;
- zend_string *const_name;
-
- const_name_len = sizeof("\0__CLASS__") + EG(scope)->name->len;
- const_name = zend_string_alloc(const_name_len, 0);
- memcpy(const_name->val, "\0__CLASS__", sizeof("\0__CLASS__")-1);
- zend_str_tolower_copy(const_name->val + sizeof("\0__CLASS__")-1, EG(scope)->name->val, EG(scope)->name->len);
- if ((c = zend_hash_find_ptr(EG(zend_constants), const_name)) == NULL) {
- c = emalloc(sizeof(zend_constant));
- memset(c, 0, sizeof(zend_constant));
- ZVAL_STR_COPY(&c->value, EG(scope)->name);
- zend_hash_add_ptr(EG(zend_constants), const_name, c);
- }
- 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) {
- 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_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)) {
const char *cfilename;
@@ -465,12 +435,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 = NULL;
}
}
} else {
key--;
- c = zend_get_special_constant(Z_STRVAL_P(key), Z_STRLEN_P(key));
+ c = NULL;
}
}
}