diff options
Diffstat (limited to 'Zend/zend_iterators.c')
-rw-r--r-- | Zend/zend_iterators.c | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/Zend/zend_iterators.c b/Zend/zend_iterators.c index faf4f91d84..c2f51c4dd6 100644 --- a/Zend/zend_iterators.c +++ b/Zend/zend_iterators.c @@ -24,13 +24,14 @@ static zend_class_entry zend_iterator_class_entry; +static void iter_wrapper_free(zend_object *object TSRMLS_DC); static void iter_wrapper_dtor(zend_object *object TSRMLS_DC); static zend_object_handlers iterator_object_handlers = { 0, + iter_wrapper_free, iter_wrapper_dtor, NULL, - NULL, NULL, /* prop read */ NULL, /* prop write */ NULL, /* read dim */ @@ -58,12 +59,16 @@ ZEND_API void zend_register_iterator_wrapper(TSRMLS_D) INIT_CLASS_ENTRY(zend_iterator_class_entry, "__iterator_wrapper", NULL); } -static void iter_wrapper_dtor(zend_object *object TSRMLS_DC) +static void iter_wrapper_free(zend_object *object TSRMLS_DC) { zend_object_iterator *iter = (zend_object_iterator*)object; iter->funcs->dtor(iter TSRMLS_CC); } +static void iter_wrapper_dtor(zend_object *object TSRMLS_DC) +{ +} + ZEND_API void zend_iterator_init(zend_object_iterator *iter TSRMLS_DC) { zend_object_std_init(&iter->std, &zend_iterator_class_entry TSRMLS_CC); @@ -79,29 +84,13 @@ ZEND_API void zend_iterator_dtor(zend_object_iterator *iter TSRMLS_DC) zend_objects_store_del(&iter->std TSRMLS_CC); } -ZEND_API enum zend_object_iterator_kind zend_iterator_unwrap( - zval *array_ptr, zend_object_iterator **iter TSRMLS_DC) +ZEND_API zend_object_iterator* zend_iterator_unwrap(zval *array_ptr TSRMLS_DC) { - switch (Z_TYPE_P(array_ptr)) { - case IS_OBJECT: - if (Z_OBJ_HT_P(array_ptr) == &iterator_object_handlers) { - *iter = (zend_object_iterator *)Z_OBJ_P(array_ptr); - return ZEND_ITER_OBJECT; - } - if (Z_OBJPROP_P(array_ptr)) { - return ZEND_ITER_PLAIN_OBJECT; - } - return ZEND_ITER_INVALID; - - case IS_ARRAY: - if (Z_ARRVAL_P(array_ptr)) { - return ZEND_ITER_PLAIN_ARRAY; - } - return ZEND_ITER_INVALID; - - default: - return ZEND_ITER_INVALID; + if (Z_TYPE_P(array_ptr) && + Z_OBJ_HT_P(array_ptr) == &iterator_object_handlers) { + return (zend_object_iterator *)Z_OBJ_P(array_ptr); } + return NULL; } /* |