@@ -1812,19 +1812,21 @@ static zend_never_inline void zend_fetch_dimension_address_UNSET(zval *result, z
1812
1812
zend_fetch_dimension_address (result , container_ptr , dim , dim_type , BP_VAR_UNSET );
1813
1813
}
1814
1814
1815
- static zend_always_inline void zend_fetch_dimension_address_read (zval * result , zval * container , zval * dim , int dim_type , int type , int support_strings )
1815
+ static zend_always_inline void zend_fetch_dimension_address_read (zval * result , zval * container , zval * dim , int dim_type , int type , int support_strings , int slow )
1816
1816
{
1817
1817
zval * retval ;
1818
1818
1819
- if (EXPECTED (Z_TYPE_P (container ) == IS_ARRAY )) {
1820
- try_array :
1821
- retval = zend_fetch_dimension_address_inner (Z_ARRVAL_P (container ), dim , dim_type , type );
1822
- ZVAL_COPY (result , retval );
1823
- return ;
1824
- } else if (EXPECTED (Z_TYPE_P (container ) == IS_REFERENCE )) {
1825
- container = Z_REFVAL_P (container );
1819
+ if (!slow ) {
1826
1820
if (EXPECTED (Z_TYPE_P (container ) == IS_ARRAY )) {
1827
- goto try_array ;
1821
+ try_array :
1822
+ retval = zend_fetch_dimension_address_inner (Z_ARRVAL_P (container ), dim , dim_type , type );
1823
+ ZVAL_COPY (result , retval );
1824
+ return ;
1825
+ } else if (EXPECTED (Z_TYPE_P (container ) == IS_REFERENCE )) {
1826
+ container = Z_REFVAL_P (container );
1827
+ if (EXPECTED (Z_TYPE_P (container ) == IS_ARRAY )) {
1828
+ goto try_array ;
1829
+ }
1828
1830
}
1829
1831
}
1830
1832
if (support_strings && EXPECTED (Z_TYPE_P (container ) == IS_STRING )) {
@@ -1921,17 +1923,22 @@ static zend_always_inline void zend_fetch_dimension_address_read(zval *result, z
1921
1923
1922
1924
static zend_never_inline void zend_fetch_dimension_address_read_R (zval * result , zval * container , zval * dim , int dim_type )
1923
1925
{
1924
- zend_fetch_dimension_address_read (result , container , dim , dim_type , BP_VAR_R , 1 );
1926
+ zend_fetch_dimension_address_read (result , container , dim , dim_type , BP_VAR_R , 1 , 0 );
1927
+ }
1928
+
1929
+ static zend_never_inline void zend_fetch_dimension_address_read_R_slow (zval * result , zval * container , zval * dim )
1930
+ {
1931
+ zend_fetch_dimension_address_read (result , container , dim , IS_CV , BP_VAR_R , 1 , 1 );
1925
1932
}
1926
1933
1927
1934
static zend_never_inline void zend_fetch_dimension_address_read_IS (zval * result , zval * container , zval * dim , int dim_type )
1928
1935
{
1929
- zend_fetch_dimension_address_read (result , container , dim , dim_type , BP_VAR_IS , 1 );
1936
+ zend_fetch_dimension_address_read (result , container , dim , dim_type , BP_VAR_IS , 1 , 0 );
1930
1937
}
1931
1938
1932
1939
static zend_never_inline void zend_fetch_dimension_address_read_LIST (zval * result , zval * container , zval * dim )
1933
1940
{
1934
- zend_fetch_dimension_address_read (result , container , dim , IS_TMP_VAR , BP_VAR_R , 0 );
1941
+ zend_fetch_dimension_address_read (result , container , dim , IS_TMP_VAR , BP_VAR_R , 0 , 0 );
1935
1942
}
1936
1943
1937
1944
ZEND_API void zend_fetch_dimension_by_zval (zval * result , zval * container , zval * dim )
@@ -1941,7 +1948,7 @@ ZEND_API void zend_fetch_dimension_by_zval(zval *result, zval *container, zval *
1941
1948
1942
1949
ZEND_API void zend_fetch_dimension_by_zval_is (zval * result , zval * container , zval * dim , int dim_type )
1943
1950
{
1944
- zend_fetch_dimension_address_read (result , container , dim , dim_type , BP_VAR_IS , 1 );
1951
+ zend_fetch_dimension_address_read (result , container , dim , dim_type , BP_VAR_IS , 1 , 0 );
1945
1952
}
1946
1953
1947
1954
0 commit comments