summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-04-08 00:38:54 +0400
committerDmitry Stogov <dmitry@zend.com>2014-04-08 00:38:54 +0400
commitf3c57716f76a1f625b8b528a7a550c8f86d309a1 (patch)
treee489fd7bf2f93f5d9d7bd741d4b46a93872b0e74 /Zend/zend_execute.c
parent3d17219cd88a73306acd6eeff8cbae02868318c6 (diff)
downloadphp-git-f3c57716f76a1f625b8b528a7a550c8f86d309a1.tar.gz
Optimized ZEND_FETCH_R and family
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c35
1 files changed, 15 insertions, 20 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 31c2514913..0772414616 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -959,27 +959,22 @@ static void zend_extension_fcall_end_handler(const zend_extension *extension, ze
static inline HashTable *zend_get_target_symbol_table(int fetch_type TSRMLS_DC)
{
- switch (fetch_type) {
- case ZEND_FETCH_LOCAL:
- if (!EG(active_symbol_table)) {
- zend_rebuild_symbol_table(TSRMLS_C);
- }
- return &EG(active_symbol_table)->ht;
- break;
- case ZEND_FETCH_GLOBAL:
- case ZEND_FETCH_GLOBAL_LOCK:
- return &EG(symbol_table).ht;
- break;
- case ZEND_FETCH_STATIC:
- if (!EG(active_op_array)->static_variables) {
- ALLOC_HASHTABLE(EG(active_op_array)->static_variables);
- zend_hash_init(EG(active_op_array)->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0);
- }
- return EG(active_op_array)->static_variables;
- break;
- EMPTY_SWITCH_DEFAULT_CASE()
+ HashTable *ht;
+
+ if (EXPECTED(fetch_type == ZEND_FETCH_GLOBAL_LOCK) ||
+ EXPECTED(fetch_type == ZEND_FETCH_GLOBAL)) {
+ ht = &EG(symbol_table).ht;
+ } else if (EXPECTED(fetch_type == ZEND_FETCH_STATIC)) {
+ ZEND_ASSERT(EG(active_op_array)->static_variables != NULL);
+ ht = EG(active_op_array)->static_variables;
+ } else {
+ ZEND_ASSERT(fetch_type == ZEND_FETCH_LOCAL);
+ if (!EG(active_symbol_table)) {
+ zend_rebuild_symbol_table(TSRMLS_C);
+ }
+ ht = &EG(active_symbol_table)->ht;
}
- return NULL;
+ return ht;
}
static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht, const zval *dim, int dim_type, int type TSRMLS_DC)