From 62656877688abf51fcac74ec342483ca520ee15d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 24 Apr 2015 09:34:50 +0300 Subject: 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. --- ext/opcache/zend_persist.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ext/opcache') 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; } } -- cgit v1.2.1