]> granicus.if.org Git - php/commitdiff
Various fixes related to read_property(), read_dimension() and iterators refactoring
authorDmitry Stogov <dmitry@zend.com>
Thu, 27 Feb 2014 12:07:36 +0000 (16:07 +0400)
committerDmitry Stogov <dmitry@zend.com>
Thu, 27 Feb 2014 12:07:36 +0000 (16:07 +0400)
Zend/zend_builtin_functions.c
Zend/zend_closures.c
Zend/zend_execute_API.c
Zend/zend_generators.c
ext/spl/spl_array.c
ext/spl/spl_fixedarray.c
ext/spl/spl_iterators.c
ext/standard/incomplete_class.c

index 3add55afe6d5e112d18577fbd84aa8d58211b7ff..20477af906e15ca77b27aab51b33114b4bdbe577 100644 (file)
@@ -1781,7 +1781,7 @@ ZEND_FUNCTION(create_function)
                }
                new_function = emalloc(sizeof(zend_op_array));
                memcpy(new_function, func, sizeof(zend_op_array));
-               function_add_ref(new_function);
+               function_add_ref((zend_function*)new_function);
 
                function_name = STR_ALLOC(sizeof("0lambda_")+MAX_LENGTH_OF_LONG, 0);
                function_name->val[0] = '\0';
index 839a3ad41b6afa3478b9e22f4857f9d9d11109d6..46894c6106a10510c1c6b77e9e8ad7ebd81076ca 100644 (file)
@@ -180,7 +180,7 @@ static zend_function *zend_closure_get_method(zval *object_ptr, zend_string *met
 }
 /* }}} */
 
-static zval *zend_closure_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */
+static zval *zend_closure_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) /* {{{ */
 {
        ZEND_CLOSURE_PROPERTY_ERROR();
        return &EG(uninitialized_zval);
index c8679625c1860204c9d56c696c4660658be04efb..e81339b1381d86b4fc7c10edbf3b88997a389176 100644 (file)
@@ -477,7 +477,7 @@ ZEND_API int zval_update_constant_ex(zval *p, void *arg, zend_class_entry *scope
                zend_error(E_ERROR, "Cannot declare self-referencing constant '%s'", Z_STRVAL_P(p));
        } else if ((Z_TYPE_P(p) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT) {
                int refcount;
-               zend_uchar is_ref;
+//???          zend_uchar is_ref;
 
                SEPARATE_ZVAL_IF_NOT_REF(p);
 
index 7fb12c3cc28c62d365c8ed368c46a1597e365153..7bdebf6a7b64358539343450e533c54adc9532ac 100644 (file)
@@ -671,7 +671,7 @@ zend_object_iterator *zend_generator_get_iterator(zend_class_entry *ce, zval *ob
 
        iterator = &generator->iterator;
        
-       zend_iterator_init(&iterator TSRMLS_CC);
+       zend_iterator_init(iterator TSRMLS_CC);
 
        iterator->funcs = &zend_generator_iterator_functions;
        ZVAL_COPY(&iterator->data, object);
index ece2090a5619380fcbbc9443e784fe3c75405cd0..6564e0832bf82bf90d478f9bcfd22486d6cd689f 100644 (file)
@@ -371,7 +371,7 @@ fetch_dim_string:
        }
 } /* }}} */
 
-static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type TSRMLS_DC) /* {{{ */
+static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval *offset, int type, zval *zv TSRMLS_DC) /* {{{ */
 {
        zval *ret;
 
@@ -411,9 +411,9 @@ static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval
        */
 } /* }}} */
 
-static zval *spl_array_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) /* {{{ */
+static zval *spl_array_read_dimension(zval *object, zval *offset, int type, zval *rv TSRMLS_DC) /* {{{ */
 {
-       return spl_array_read_dimension_ex(1, object, offset, type TSRMLS_CC);
+       return spl_array_read_dimension_ex(1, object, offset, type, rv TSRMLS_CC);
 } /* }}} */
 
 static void spl_array_write_dimension_ex(int check_inherited, zval *object, zval *offset, zval *value TSRMLS_DC) /* {{{ */
@@ -690,8 +690,10 @@ SPL_METHOD(Array, offsetGet)
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &index) == FAILURE) {
                return;
        }
-       value = spl_array_read_dimension_ex(0, getThis(), index, BP_VAR_R TSRMLS_CC);
-       RETURN_ZVAL(value, 1, 0);
+       value = spl_array_read_dimension_ex(0, getThis(), index, BP_VAR_R, return_value TSRMLS_CC);
+       if (value != return_value) {
+               RETURN_ZVAL(value, 1, 0);
+       }
 } /* }}} */
 
 /* {{{ proto void ArrayObject::offsetSet(mixed $index, mixed $newval)
@@ -826,7 +828,7 @@ static zval *spl_array_read_property(zval *object, zval *member, int type, const
 
        if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0
                && !std_object_handlers.has_property(object, member, 2, key TSRMLS_CC)) {
-               return spl_array_read_dimension(object, member, type TSRMLS_CC);
+               return spl_array_read_dimension(object, member, type, rv TSRMLS_CC);
        }
        return std_object_handlers.read_property(object, member, type, key, rv TSRMLS_CC);
 } /* }}} */
index acff4964f248521ce2e1ecb82511f40603dfc8b1..5d419898be13a0ea9d65fef69ed79aafed43beff 100644 (file)
@@ -350,7 +350,7 @@ static inline zval *spl_fixedarray_object_read_dimension_helper(spl_fixedarray_o
 }
 /* }}} */
 
-static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) /* {{{ */
+static zval *spl_fixedarray_object_read_dimension(zval *object, zval *offset, int type, zval *rv TSRMLS_DC) /* {{{ */
 {
        spl_fixedarray_object *intern;
 
index b30dd4ed5ea87627f132de5ae214467991d6759e..5a621bab09e2f8415e6ede709c6a840060f1ebef 100644 (file)
@@ -2572,7 +2572,7 @@ static inline void spl_caching_it_next(spl_dual_it_object *intern TSRMLS_DC)
                                }
                        } else {
                                if (zend_is_true(&retval TSRMLS_CC)) {
-                                       zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
+                                       zend_call_method_with_0_params(intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren);
                                        if (EG(exception)) {
                                                zval_ptr_dtor(&zchildren);
                                                if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) {
index 3cbe70479de5a2b59ef1f5c3627cc07b0d02793c..fc82eb8923fd19c506738a4eecfd069f3d080add 100644 (file)
@@ -49,7 +49,7 @@ static void incomplete_class_message(zval *object, int error_type TSRMLS_DC)
 }
 /* }}} */
 
-static zval *incomplete_class_get_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */
+static zval *incomplete_class_get_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) /* {{{ */
 {
        incomplete_class_message(object, E_NOTICE TSRMLS_CC);