]> granicus.if.org Git - php/commitdiff
Refactored API for constant array element propagation
authorDmitry Stogov <dmitry@zend.com>
Thu, 15 Jun 2017 19:50:04 +0000 (22:50 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 15 Jun 2017 19:50:04 +0000 (22:50 +0300)
Zend/zend_ast.c
Zend/zend_execute.c
Zend/zend_execute.h

index a4d32d8d777fe67dd890faf89ae50e9234aa26ed..c19a47f037e1a8e5a85d128fcfd8b90f761fa203 100644 (file)
@@ -432,11 +432,7 @@ ZEND_API int zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *sc
                        } else {
                                zval tmp;
 
-                               if (ast->attr == ZEND_DIM_IS) {
-                                       zend_fetch_dimension_by_zval_is(&tmp, &op1, &op2, IS_CONST);
-                               } else {
-                                       zend_fetch_dimension_by_zval(&tmp, &op1, &op2);
-                               }
+                               zend_fetch_dimension_const(&tmp, &op1, &op2, (ast->attr == ZEND_DIM_IS) ? BP_VAR_IS : BP_VAR_R);
 
                                if (UNEXPECTED(Z_ISREF(tmp))) {
                                        ZVAL_DUP(result, Z_REFVAL(tmp));
index a1cfcd36500313922caa097aaac9f27179c7ee38..1174c13401fc829b4e95ae9ae75f8faf4c81da74 100644 (file)
@@ -1827,17 +1827,15 @@ static zend_never_inline void zend_fetch_dimension_address_read_LIST(zval *resul
        zend_fetch_dimension_address_read(result, container, dim, IS_TMP_VAR, BP_VAR_R, 0, 0);
 }
 
-ZEND_API void zend_fetch_dimension_by_zval(zval *result, zval *container, zval *dim)
+ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type)
 {
-       zend_fetch_dimension_address_read_R(result, container, dim, IS_TMP_VAR);
-}
-
-ZEND_API void zend_fetch_dimension_by_zval_is(zval *result, zval *container, zval *dim, int dim_type)
-{
-       zend_fetch_dimension_address_read(result, container, dim, dim_type, BP_VAR_IS, 1, 0);
+       if (type == BP_VAR_IS) {
+               zend_fetch_dimension_address_read_IS(result, container, dim, IS_CONST);
+       } else {
+               zend_fetch_dimension_address_read_R(result, container, dim, IS_CONST);
+       }
 }
 
-
 static zend_always_inline void zend_fetch_property_address(zval *result, zval *container, uint32_t container_op_type, zval *prop_ptr, uint32_t prop_op_type, void **cache_slot, int type)
 {
     if (container_op_type != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) {
index 5f0caf6b6114d1ebe8f7a6f1de5b5decf907a7cd..5938a97a9ec4364815ee4f8ab53de3258c03bbe2 100644 (file)
@@ -298,8 +298,7 @@ ZEND_API zend_class_entry *zend_fetch_class(zend_string *class_name, int fetch_t
 ZEND_API zend_class_entry *zend_fetch_class_by_name(zend_string *class_name, const zval *key, int fetch_type);
 void zend_verify_abstract_class(zend_class_entry *ce);
 
-ZEND_API void zend_fetch_dimension_by_zval(zval *result, zval *container, zval *dim);
-ZEND_API void zend_fetch_dimension_by_zval_is(zval *result, zval *container, zval *dim, int dim_type);
+ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type);
 
 ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, uint32_t var);