diff options
author | Jakub Zelenka <bukka@php.net> | 2016-06-19 16:20:02 +0100 |
---|---|---|
committer | Jakub Zelenka <bukka@php.net> | 2016-06-19 16:20:02 +0100 |
commit | c2b90805e81de43b4fa28fa1b30ed255bfba76b2 (patch) | |
tree | a353bb7b1cb958fd4f3e576ab44f3b6ef03a02c2 /Zend/zend_string.h | |
parent | b44cf1a8540d321583a0d83ebca688ebab10d3b0 (diff) | |
parent | d0e84c6f4702dc5dda473851dd33c5e6cee82ee6 (diff) | |
download | php-git-c2b90805e81de43b4fa28fa1b30ed255bfba76b2.tar.gz |
Merge branch 'master' into openssl_error_store
Diffstat (limited to 'Zend/zend_string.h')
-rw-r--r-- | Zend/zend_string.h | 59 |
1 files changed, 49 insertions, 10 deletions
diff --git a/Zend/zend_string.h b/Zend/zend_string.h index 722fc3ae46..8a1ac6f506 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -32,6 +32,7 @@ ZEND_API extern void (*zend_interned_strings_restore)(void); ZEND_API zend_ulong zend_hash_func(const char *str, size_t len); void zend_interned_strings_init(void); void zend_interned_strings_dtor(void); +void zend_known_interned_strings_init(zend_string ***, uint32_t *); END_EXTERN_C() @@ -323,7 +324,7 @@ static zend_always_inline zend_bool zend_string_equals(zend_string *s1, zend_str static zend_always_inline zend_ulong zend_inline_hash_func(const char *str, size_t len) { - register zend_ulong hash = Z_UL(5381); + zend_ulong hash = Z_UL(5381); /* variant with the hash unrolled eight times */ for (; len >= 8; len -= 8) { @@ -358,29 +359,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 */ |