summaryrefslogtreecommitdiff
path: root/ext/opcache
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-04-24 09:34:50 +0300
committerDmitry Stogov <dmitry@zend.com>2015-04-24 09:34:50 +0300
commit62656877688abf51fcac74ec342483ca520ee15d (patch)
tree738b3314e1ae6a5baf7602cd4ba26b9b9e46592c /ext/opcache
parent000d5d7ec9f5aaf78fbf34162b888892731bf7dd (diff)
downloadphp-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.c4
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;
}
}