diff options
author | Dmitry Stogov <dmitry@zend.com> | 2016-05-12 13:47:22 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2016-05-12 13:47:22 +0300 |
commit | 7b94b958ccbc87595d688d178f96daf96a9f54b3 (patch) | |
tree | f74f2fdf78a194c86fa7d34f27e0cf8f1e2d8ec0 /Zend/zend_string.h | |
parent | 00390449c6c5d3cb65e129cb558b9e523e17090f (diff) | |
download | php-git-7b94b958ccbc87595d688d178f96daf96a9f54b3.tar.gz |
Intern some known (and offten used) strings.
Diffstat (limited to 'Zend/zend_string.h')
-rw-r--r-- | Zend/zend_string.h | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/Zend/zend_string.h b/Zend/zend_string.h index 28aebb0ffc..05bf4ef7b8 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -358,29 +358,67 @@ EMPTY_SWITCH_DEFAULT_CASE() #endif } -static zend_always_inline void zend_interned_empty_string_init(zend_string **s) +#ifdef ZTS +static zend_always_inline zend_string* zend_zts_interned_string_init(const char *val, size_t len) { zend_string *str; - str = zend_string_alloc(sizeof("")-1, 1); - ZSTR_VAL(str)[0] = '\000'; + str = zend_string_init(val, len, 1); -#ifndef ZTS - *s = zend_new_interned_string(str); -#else zend_string_hash_val(str); GC_FLAGS(str) |= IS_STR_INTERNED; - *s = str; -#endif + return str; } -static zend_always_inline void zend_interned_empty_string_free(zend_string **s) +static zend_always_inline void zend_zts_interned_string_free(zend_string **s) { if (NULL != *s) { free(*s); *s = NULL; } } +#endif + +#define ZEND_KNOWN_STRINGS(_) \ + _(ZEND_STR_FILE, "file") \ + _(ZEND_STR_LINE, "line") \ + _(ZEND_STR_FUNCTION, "function") \ + _(ZEND_STR_CLASS, "class") \ + _(ZEND_STR_OBJECT, "object") \ + _(ZEND_STR_TYPE, "type") \ + _(ZEND_STR_OBJECT_OPERATOR, "->") \ + _(ZEND_STR_PAAMAYIM_NEKUDOTAYIM, "::") \ + _(ZEND_STR_ARGS, "args") \ + _(ZEND_STR_UNKNOWN, "unknown") \ + _(ZEND_STR_EVAL, "eval") \ + _(ZEND_STR_INCLUDE, "include") \ + _(ZEND_STR_REQUIRE, "require") \ + _(ZEND_STR_INCLUDE_ONCE, "include_once") \ + _(ZEND_STR_REQUIRE_ONCE, "require_once") \ + _(ZEND_STR_SCALAR, "scalar") \ + _(ZEND_STR_ERROR_REPORTING, "error_reporting") \ + _(ZEND_STR_STATIC, "static") \ + _(ZEND_STR_THIS, "this") \ + _(ZEND_STR_VALUE, "value") \ + _(ZEND_STR_KEY, "key") \ + _(ZEND_STR_MAGIC_AUTOLOAD, "__autoload") \ + _(ZEND_STR_MAGIC_INVOKE, "__invoke") \ + _(ZEND_STR_PREVIOUS, "previous") \ + _(ZEND_STR_CODE, "code") \ + _(ZEND_STR_MESSAGE, "message") \ + _(ZEND_STR_SEVERITY, "severity") \ + _(ZEND_STR_STRING, "string") \ + _(ZEND_STR_TRACE, "trace") \ + + +typedef enum _zend_known_string_id { +#define _ZEND_STR_ID(id, str) id, +ZEND_KNOWN_STRINGS(_ZEND_STR_ID) +#undef _ZEND_STR_ID + ZEND_STR_LAST_KNOWN +} zend_known_string_id; + +ZEND_API uint32_t zend_intern_known_strings(const char **strings, uint32_t count); #endif /* ZEND_STRING_H */ |