diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-04-08 00:38:54 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-04-08 00:38:54 +0400 |
commit | f3c57716f76a1f625b8b528a7a550c8f86d309a1 (patch) | |
tree | e489fd7bf2f93f5d9d7bd741d4b46a93872b0e74 /Zend/zend_execute.c | |
parent | 3d17219cd88a73306acd6eeff8cbae02868318c6 (diff) | |
download | php-git-f3c57716f76a1f625b8b528a7a550c8f86d309a1.tar.gz |
Optimized ZEND_FETCH_R and family
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 35 |
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) |