diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-04-24 09:34:50 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-24 09:34:50 +0300 |
commit | 62656877688abf51fcac74ec342483ca520ee15d (patch) | |
tree | 738b3314e1ae6a5baf7602cd4ba26b9b9e46592c /ext/opcache | |
parent | 000d5d7ec9f5aaf78fbf34162b888892731bf7dd (diff) | |
download | php-git-62656877688abf51fcac74ec342483ca520ee15d.tar.gz |
Added HashTable flag HASH_FLAG_STATIC_KEYS that is maintaned to be set if all hash table keys are numbers or interned strings.
Take this flag into account when copy or destroy HashTable to avoud useless checks for each key.
Diffstat (limited to 'ext/opcache')
-rw-r--r-- | ext/opcache/zend_persist.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index 2b94e3da7b..b8a8694b84 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -268,6 +268,7 @@ static void zend_persist_zval(zval *z) Z_TYPE_FLAGS_P(z) = IS_TYPE_IMMUTABLE; GC_REFCOUNT(Z_COUNTED_P(z)) = 2; GC_FLAGS(Z_COUNTED_P(z)) |= IS_ARRAY_IMMUTABLE; + Z_ARRVAL_P(z)->u.flags |= HASH_FLAG_STATIC_KEYS; Z_ARRVAL_P(z)->u.flags &= ~HASH_FLAG_APPLY_PROTECTION; } } @@ -323,6 +324,7 @@ static void zend_persist_zval_static(zval *z) Z_TYPE_FLAGS_P(z) = IS_TYPE_IMMUTABLE; GC_REFCOUNT(Z_COUNTED_P(z)) = 2; GC_FLAGS(Z_COUNTED_P(z)) |= IS_ARRAY_IMMUTABLE; + Z_ARRVAL_P(z)->u.flags |= HASH_FLAG_STATIC_KEYS; Z_ARRVAL_P(z)->u.flags &= ~HASH_FLAG_APPLY_PROTECTION; } } @@ -380,6 +382,7 @@ static void zend_persist_zval_const(zval *z) Z_TYPE_FLAGS_P(z) = IS_TYPE_IMMUTABLE; GC_REFCOUNT(Z_COUNTED_P(z)) = 2; GC_FLAGS(Z_COUNTED_P(z)) |= IS_ARRAY_IMMUTABLE; + Z_ARRVAL_P(z)->u.flags |= HASH_FLAG_STATIC_KEYS; Z_ARRVAL_P(z)->u.flags &= ~HASH_FLAG_APPLY_PROTECTION; } } @@ -445,6 +448,7 @@ static void zend_persist_op_array_ex(zend_op_array *op_array, zend_persistent_sc /* make immutable array */ GC_REFCOUNT(op_array->static_variables) = 2; GC_TYPE_INFO(op_array->static_variables) = IS_ARRAY | (IS_ARRAY_IMMUTABLE << 8); + op_array->static_variables->u.flags |= HASH_FLAG_STATIC_KEYS; op_array->static_variables->u.flags &= ~HASH_FLAG_APPLY_PROTECTION; } } |