com php-src: Merge branch 'PHP-5.6': ext/spl/spl_engine.h ext/spl/spl_iterators.c
| From: | Tjerk Anne Meesters | Date: | Tue, 14 Oct 2014 15:00:17 +0000 |
| Subject: | com php-src: Merge branch 'PHP-5.6': ext/spl/spl_engine.h ext/spl/spl_iterators.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-82287@lists.php.net to get a copy of this message | ||
Commit: 1f4f2ef403e8b8df206bf337cc475483b4ba0a2f
Author: Tjerk Meesters <datibbaw@php.net> Tue, 14 Oct 2014 23:00:17 +0800
Parents: d2daa19701bdf0ac72bb6c23d868949185ca6723 fb35d7c56ec32ca43bcdb3e151bf1766b52984fe
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=1f4f2ef403e8b8df206bf337cc475483b4ba0a2f
Log:
Merge branch 'PHP-5.6'
* PHP-5.6:
Fixed bug #68128
Conflicts:
ext/spl/spl_iterators.c
Bugs:
https://bugs.php.net/68128
Changed paths:
MM ext/spl/spl_engine.h
MM ext/spl/spl_iterators.c
diff --cc ext/spl/spl_engine.h index a621355,473438b..8fa5539 --- a/ext/spl/spl_engine.h +++ b/ext/spl/spl_engine.h @@@ -51,6 -49,41 +51,36 @@@ static inline int spl_instantiate_arg_e } /* }}} */ + /* {{{ spl_instantiate_arg_n */ -static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval **retval, int argc, zval ***argv TSRMLS_DC) ++static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval *retval, int argc, zval *argv TSRMLS_DC) + { + zend_function *func = pce->constructor; + zend_fcall_info fci; + zend_fcall_info_cache fcc; - zval *dummy; - zval z_name; ++ zval dummy; + - spl_instantiate(pce, retval, 0 TSRMLS_CC); - - ZVAL_STRING(&z_name, func->common.function_name, 0); ++ spl_instantiate(pce, retval TSRMLS_CC); + + fci.size = sizeof(zend_fcall_info); + fci.function_table = &pce->function_table; - fci.function_name = &z_name; - fci.object_ptr = *retval; ++ ZVAL_STR(&fci.function_name, func->common.function_name); ++ fci.object = Z_OBJ_P(retval); + fci.symbol_table = NULL; - fci.retval_ptr_ptr = &dummy; ++ fci.retval = &dummy; + fci.param_count = argc; + fci.params = argv; + fci.no_separation = 1; + + fcc.initialized = 1; + fcc.function_handler = func; + fcc.calling_scope = EG(scope); + fcc.called_scope = pce; - fcc.object_ptr = *retval; ++ fcc.object = Z_OBJ_P(retval); + + zend_call_function(&fci, &fcc TSRMLS_CC); - - zval_ptr_dtor(&dummy); + } + /* }}} */ + #endif /* SPL_ENGINE_H */ /* diff --cc ext/spl/spl_iterators.c index f47093b,3a37241..8b09e3e --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@@ -2035,18 -2043,19 +2035,20 @@@ SPL_METHOD(RegexIterator, accept SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis()); - if (intern->current.data == NULL) { + if (Z_TYPE(intern->current.data) == IS_UNDEF) { RETURN_FALSE; - } else if (Z_TYPE_P(intern->current.data) == IS_ARRAY) { ++ } else if (Z_TYPE(intern->current.data) == IS_ARRAY) { + RETURN_FALSE; } - + if (intern->u.regex.flags & REGIT_USE_KEY) { - subject_ptr = intern->current.key; + subject_ptr = &intern->current.key; } else { - subject_ptr = intern->current.data; + subject_ptr = &intern->current.data; } - zend_make_printable_zval(subject_ptr, &subject_copy, &use_copy); + ZVAL_UNDEF(&subject_copy); + use_copy = zend_make_printable_zval(subject_ptr, &subject_copy TSRMLS_CC); if (use_copy) { subject = Z_STRVAL(subject_copy); subject_len = Z_STRLEN(subject_copy); @@@ -2055,63 -2064,63 +2057,62 @@@ subject_len = Z_STRLEN_P(subject_ptr); } + use_copy = 0; switch (intern->u.regex.mode) { - case REGIT_MODE_MAX: /* won't happen but makes compiler happy */ - case REGIT_MODE_MATCH: - count = pcre_exec(intern->u.regex.pce->re, intern->u.regex.pce->extra, subject, subject_len, 0, 0, NULL, 0); - RETVAL_BOOL(count >= 0); - break; - - case REGIT_MODE_ALL_MATCHES: - case REGIT_MODE_GET_MATCH: - if (!use_copy) { - subject = estrndup(subject, subject_len); - use_copy = 1; - } - zval_ptr_dtor(&intern->current.data); - ALLOC_INIT_ZVAL(intern->current.data); - php_pcre_match_impl(intern->u.regex.pce, subject, subject_len, &zcount, - intern->current.data, intern->u.regex.mode == REGIT_MODE_ALL_MATCHES, intern->u.regex.use_flags, intern->u.regex.preg_flags, 0 TSRMLS_CC); - RETVAL_BOOL(Z_LVAL(zcount) > 0); - break; - - case REGIT_MODE_SPLIT: - if (!use_copy) { - subject = estrndup(subject, subject_len); - use_copy = 1; - } - zval_ptr_dtor(&intern->current.data); - ALLOC_INIT_ZVAL(intern->current.data); - php_pcre_split_impl(intern->u.regex.pce, subject, subject_len, intern->current.data, -1, intern->u.regex.preg_flags TSRMLS_CC); - count = zend_hash_num_elements(Z_ARRVAL_P(intern->current.data)); - RETVAL_BOOL(count > 1); - break; - - case REGIT_MODE_REPLACE: - replacement = zend_read_property(intern->std.ce, getThis(), "replacement", sizeof("replacement")-1, 1 TSRMLS_CC); - if (Z_TYPE_P(replacement) != IS_STRING) { - tmp_replacement = *replacement; - zval_copy_ctor(&tmp_replacement); - convert_to_string(&tmp_replacement); - replacement = &tmp_replacement; - } - result = php_pcre_replace_impl(intern->u.regex.pce, subject, subject_len, replacement, 0, &result_len, -1, &count TSRMLS_CC); - - if (intern->u.regex.flags & REGIT_USE_KEY) { - zval_ptr_dtor(&intern->current.key); - MAKE_STD_ZVAL(intern->current.key); - ZVAL_STRINGL(intern->current.key, result, result_len, 0); - } else { + case REGIT_MODE_MAX: /* won't happen but makes compiler happy */ + case REGIT_MODE_MATCH: + count = pcre_exec(intern->u.regex.pce->re, intern->u.regex.pce->extra, subject, subject_len, 0, 0, NULL, 0); + RETVAL_BOOL(count >= 0); + break; + + case REGIT_MODE_ALL_MATCHES: + case REGIT_MODE_GET_MATCH: + if (!use_copy) { + subject = estrndup(subject, subject_len); + use_copy = 1; + } zval_ptr_dtor(&intern->current.data); - MAKE_STD_ZVAL(intern->current.data); - ZVAL_STRINGL(intern->current.data, result, result_len, 0); - } + ZVAL_UNDEF(&intern->current.data); + php_pcre_match_impl(intern->u.regex.pce, subject, subject_len, &zcount, + &intern->current.data, intern->u.regex.mode == REGIT_MODE_ALL_MATCHES, intern->u.regex.use_flags, intern->u.regex.preg_flags, 0 TSRMLS_CC); - count = zend_hash_num_elements(Z_ARRVAL(intern->current.data)); - RETVAL_BOOL(count > 0); ++ RETVAL_BOOL(Z_LVAL(zcount) > 0); + break; - if (replacement == &tmp_replacement) { - zval_dtor(replacement); - } - RETVAL_BOOL(count > 0); + case REGIT_MODE_SPLIT: + if (!use_copy) { + subject = estrndup(subject, subject_len); + use_copy = 1; + } + zval_ptr_dtor(&intern->current.data); + ZVAL_UNDEF(&intern->current.data); + php_pcre_split_impl(intern->u.regex.pce, subject, subject_len, &intern->current.data, -1, intern->u.regex.preg_flags TSRMLS_CC); + count = zend_hash_num_elements(Z_ARRVAL(intern->current.data)); + RETVAL_BOOL(count > 1); + break; + + case REGIT_MODE_REPLACE: + replacement = zend_read_property(intern->std.ce, getThis(), "replacement", sizeof("replacement")-1, 1 TSRMLS_CC); + if (Z_TYPE_P(replacement) != IS_STRING) { + tmp_replacement = *replacement; + zval_copy_ctor(&tmp_replacement); + convert_to_string(&tmp_replacement); + replacement = &tmp_replacement; + } + result = php_pcre_replace_impl(intern->u.regex.pce, subject, subject_len, replacement, 0, -1, &count TSRMLS_CC); + + if (intern->u.regex.flags & REGIT_USE_KEY) { + zval_ptr_dtor(&intern->current.key); + ZVAL_STR(&intern->current.key, result); + } else { + zval_ptr_dtor(&intern->current.data); + ZVAL_STR(&intern->current.data, result); + } + + if (replacement == &tmp_replacement) { + zval_dtor(replacement); + } + RETVAL_BOOL(count > 0); } if (intern->u.regex.flags & REGIT_INVERTED) { @@@ -2254,7 -2260,7 +2255,7 @@@ SPL_METHOD(RecursiveRegexIterator, __co SPL_METHOD(RecursiveRegexIterator, getChildren) { spl_dual_it_object *intern; - zval retval, regex; - zval *retval; ++ zval retval; if (zend_parse_parameters_none() == FAILURE) { return; @@@ -2264,13 -2270,61 +2265,40 @@@ zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval); if (!EG(exception)) { - ZVAL_STR_COPY(®ex, intern->u.regex.regex); - spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), return_value, &retval, ®ex TSRMLS_CC); - zval **args[5], *object, *regex, *mode, *flags, *preg_flags; - - MAKE_STD_ZVAL(object); - MAKE_STD_ZVAL(regex); - MAKE_STD_ZVAL(mode); - MAKE_STD_ZVAL(flags); - MAKE_STD_ZVAL(preg_flags); - - MAKE_COPY_ZVAL(&retval, object); - ZVAL_STRING(regex, intern->u.regex.regex, 1); - ZVAL_LONG(mode, intern->u.regex.mode); - ZVAL_LONG(flags, intern->u.regex.flags); - ZVAL_LONG(preg_flags, intern->u.regex.preg_flags); - - args[0] = &object; - args[1] = ®ex; - args[2] = &mode; - args[3] = &flags; - args[4] = &preg_flags; - - spl_instantiate_arg_n(Z_OBJCE_P(getThis()), &return_value, 5, args TSRMLS_CC); - - zval_ptr_dtor(&object); -- zval_ptr_dtor(®ex); - zval_ptr_dtor(&mode); - zval_ptr_dtor(&flags); - zval_ptr_dtor(&preg_flags); - } - if (retval) { - zval_ptr_dtor(&retval); ++ zval args[5]; ++ ++ ZVAL_COPY(&args[0], &retval); ++ ZVAL_STR_COPY(&args[1], intern->u.regex.regex); ++ ZVAL_LONG(&args[2], intern->u.regex.mode); ++ ZVAL_LONG(&args[3], intern->u.regex.flags); ++ ZVAL_LONG(&args[4], intern->u.regex.preg_flags); ++ ++ spl_instantiate_arg_n(Z_OBJCE_P(getThis()), return_value, 5, args TSRMLS_CC); ++ ++ zval_ptr_dtor(&args[1]); } + zval_ptr_dtor(&retval); } /* }}} */ + SPL_METHOD(RecursiveRegexIterator, accept) + { + spl_dual_it_object *intern; - zval *rv; - ++ + if (zend_parse_parameters_none() == FAILURE) { + return; + } - ++ + SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis()); - - if (intern->current.data == NULL) { ++ ++ if (Z_TYPE(intern->current.data) == IS_UNDEF) { + RETURN_FALSE; - } else if (Z_TYPE_P(intern->current.data) == IS_ARRAY) { - RETURN_BOOL(zend_hash_num_elements(Z_ARRVAL_P(intern->current.data)) > 0); ++ } else if (Z_TYPE(intern->current.data) == IS_ARRAY) { ++ RETURN_BOOL(zend_hash_num_elements(Z_ARRVAL(intern->current.data)) > 0); + } + - zend_call_method_with_0_params(&(getThis()), spl_ce_RegexIterator, NULL, "accept", &rv); - - RETURN_ZVAL(rv, 1, 1); ++ zend_call_method_with_0_params(getThis(), spl_ce_RegexIterator, NULL, "accept", return_value); + } + #endif /* {{{ spl_dual_it_dtor */
diff --cc ext/spl/spl_engine.h index a621355,473438b..8fa5539 --- a/ext/spl/spl_engine.h +++ b/ext/spl/spl_engine.h @@@ -51,6 -49,41 +51,36 @@@ static inline int spl_instantiate_arg_e } /* }}} */ + /* {{{ spl_instantiate_arg_n */ -static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval **retval, int argc, zval ***argv TSRMLS_DC) ++static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval *retval, int argc, zval *argv TSRMLS_DC) + { + zend_function *func = pce->constructor; + zend_fcall_info fci; + zend_fcall_info_cache fcc; - zval *dummy; - zval z_name; ++ zval dummy; + - spl_instantiate(pce, retval, 0 TSRMLS_CC); - - ZVAL_STRING(&z_name, func->common.function_name, 0); ++ spl_instantiate(pce, retval TSRMLS_CC); + + fci.size = sizeof(zend_fcall_info); + fci.function_table = &pce->function_table; - fci.function_name = &z_name; - fci.object_ptr = *retval; ++ ZVAL_STR(&fci.function_name, func->common.function_name); ++ fci.object = Z_OBJ_P(retval); + fci.symbol_table = NULL; - fci.retval_ptr_ptr = &dummy; ++ fci.retval = &dummy; + fci.param_count = argc; + fci.params = argv; + fci.no_separation = 1; + + fcc.initialized = 1; + fcc.function_handler = func; + fcc.calling_scope = EG(scope); + fcc.called_scope = pce; - fcc.object_ptr = *retval; ++ fcc.object = Z_OBJ_P(retval); + + zend_call_function(&fci, &fcc TSRMLS_CC); - - zval_ptr_dtor(&dummy); + } + /* }}} */ + #endif /* SPL_ENGINE_H */ /* diff --cc ext/spl/spl_iterators.c index f47093b,3a37241..8b09e3e --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@@ -2035,18 -2043,19 +2035,20 @@@ SPL_METHOD(RegexIterator, accept SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis()); - if (intern->current.data == NULL) { + if (Z_TYPE(intern->current.data) == IS_UNDEF) { RETURN_FALSE; - } else if (Z_TYPE_P(intern->current.data) == IS_ARRAY) { ++ } else if (Z_TYPE(intern->current.data) == IS_ARRAY) { + RETURN_FALSE; } - + if (intern->u.regex.flags & REGIT_USE_KEY) { - subject_ptr = intern->current.key; + subject_ptr = &intern->current.key; } else { - subject_ptr = intern->current.data; + subject_ptr = &intern->current.data; } - zend_make_printable_zval(subject_ptr, &subject_copy, &use_copy); + ZVAL_UNDEF(&subject_copy); + use_copy = zend_make_printable_zval(subject_ptr, &subject_copy TSRMLS_CC); if (use_copy) { subject = Z_STRVAL(subject_copy); subject_len = Z_STRLEN(subject_copy); @@@ -2055,63 -2064,63 +2057,62 @@@ subject_len = Z_STRLEN_P(subject_ptr); } + use_copy = 0; switch (intern->u.regex.mode) { - case REGIT_MODE_MAX: /* won't happen but makes compiler happy */ - case REGIT_MODE_MATCH: - count = pcre_exec(intern->u.regex.pce->re, intern->u.regex.pce->extra, subject, subject_len, 0, 0, NULL, 0); - RETVAL_BOOL(count >= 0); - break; - - case REGIT_MODE_ALL_MATCHES: - case REGIT_MODE_GET_MATCH: - if (!use_copy) { - subject = estrndup(subject, subject_len); - use_copy = 1; - } - zval_ptr_dtor(&intern->current.data); - ALLOC_INIT_ZVAL(intern->current.data); - php_pcre_match_impl(intern->u.regex.pce, subject, subject_len, &zcount, - intern->current.data, intern->u.regex.mode == REGIT_MODE_ALL_MATCHES, intern->u.regex.use_flags, intern->u.regex.preg_flags, 0 TSRMLS_CC); - RETVAL_BOOL(Z_LVAL(zcount) > 0); - break; - - case REGIT_MODE_SPLIT: - if (!use_copy) { - subject = estrndup(subject, subject_len); - use_copy = 1; - } - zval_ptr_dtor(&intern->current.data); - ALLOC_INIT_ZVAL(intern->current.data); - php_pcre_split_impl(intern->u.regex.pce, subject, subject_len, intern->current.data, -1, intern->u.regex.preg_flags TSRMLS_CC); - count = zend_hash_num_elements(Z_ARRVAL_P(intern->current.data)); - RETVAL_BOOL(count > 1); - break; - - case REGIT_MODE_REPLACE: - replacement = zend_read_property(intern->std.ce, getThis(), "replacement", sizeof("replacement")-1, 1 TSRMLS_CC); - if (Z_TYPE_P(replacement) != IS_STRING) { - tmp_replacement = *replacement; - zval_copy_ctor(&tmp_replacement); - convert_to_string(&tmp_replacement); - replacement = &tmp_replacement; - } - result = php_pcre_replace_impl(intern->u.regex.pce, subject, subject_len, replacement, 0, &result_len, -1, &count TSRMLS_CC); - - if (intern->u.regex.flags & REGIT_USE_KEY) { - zval_ptr_dtor(&intern->current.key); - MAKE_STD_ZVAL(intern->current.key); - ZVAL_STRINGL(intern->current.key, result, result_len, 0); - } else { + case REGIT_MODE_MAX: /* won't happen but makes compiler happy */ + case REGIT_MODE_MATCH: + count = pcre_exec(intern->u.regex.pce->re, intern->u.regex.pce->extra, subject, subject_len, 0, 0, NULL, 0); + RETVAL_BOOL(count >= 0); + break; + + case REGIT_MODE_ALL_MATCHES: + case REGIT_MODE_GET_MATCH: + if (!use_copy) { + subject = estrndup(subject, subject_len); + use_copy = 1; + } zval_ptr_dtor(&intern->current.data); - MAKE_STD_ZVAL(intern->current.data); - ZVAL_STRINGL(intern->current.data, result, result_len, 0); - } + ZVAL_UNDEF(&intern->current.data); + php_pcre_match_impl(intern->u.regex.pce, subject, subject_len, &zcount, + &intern->current.data, intern->u.regex.mode == REGIT_MODE_ALL_MATCHES, intern->u.regex.use_flags, intern->u.regex.preg_flags, 0 TSRMLS_CC); - count = zend_hash_num_elements(Z_ARRVAL(intern->current.data)); - RETVAL_BOOL(count > 0); ++ RETVAL_BOOL(Z_LVAL(zcount) > 0); + break; - if (replacement == &tmp_replacement) { - zval_dtor(replacement); - } - RETVAL_BOOL(count > 0); + case REGIT_MODE_SPLIT: + if (!use_copy) { + subject = estrndup(subject, subject_len); + use_copy = 1; + } + zval_ptr_dtor(&intern->current.data); + ZVAL_UNDEF(&intern->current.data); + php_pcre_split_impl(intern->u.regex.pce, subject, subject_len, &intern->current.data, -1, intern->u.regex.preg_flags TSRMLS_CC); + count = zend_hash_num_elements(Z_ARRVAL(intern->current.data)); + RETVAL_BOOL(count > 1); + break; + + case REGIT_MODE_REPLACE: + replacement = zend_read_property(intern->std.ce, getThis(), "replacement", sizeof("replacement")-1, 1 TSRMLS_CC); + if (Z_TYPE_P(replacement) != IS_STRING) { + tmp_replacement = *replacement; + zval_copy_ctor(&tmp_replacement); + convert_to_string(&tmp_replacement); + replacement = &tmp_replacement; + } + result = php_pcre_replace_impl(intern->u.regex.pce, subject, subject_len, replacement, 0, -1, &count TSRMLS_CC); + + if (intern->u.regex.flags & REGIT_USE_KEY) { + zval_ptr_dtor(&intern->current.key); + ZVAL_STR(&intern->current.key, result); + } else { + zval_ptr_dtor(&intern->current.data); + ZVAL_STR(&intern->current.data, result); + } + + if (replacement == &tmp_replacement) { + zval_dtor(replacement); + } + RETVAL_BOOL(count > 0); } if (intern->u.regex.flags & REGIT_INVERTED) { @@@ -2254,7 -2260,7 +2255,7 @@@ SPL_METHOD(RecursiveRegexIterator, __co SPL_METHOD(RecursiveRegexIterator, getChildren) { spl_dual_it_object *intern; - zval retval, regex; - zval *retval; ++ zval retval; if (zend_parse_parameters_none() == FAILURE) { return; @@@ -2264,13 -2270,61 +2265,40 @@@ zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval); if (!EG(exception)) { - ZVAL_STR_COPY(®ex, intern->u.regex.regex); - spl_instantiate_arg_ex2(Z_OBJCE_P(getThis()), return_value, &retval, ®ex TSRMLS_CC); - zval **args[5], *object, *regex, *mode, *flags, *preg_flags; - - MAKE_STD_ZVAL(object); - MAKE_STD_ZVAL(regex); - MAKE_STD_ZVAL(mode); - MAKE_STD_ZVAL(flags); - MAKE_STD_ZVAL(preg_flags); - - MAKE_COPY_ZVAL(&retval, object); - ZVAL_STRING(regex, intern->u.regex.regex, 1); - ZVAL_LONG(mode, intern->u.regex.mode); - ZVAL_LONG(flags, intern->u.regex.flags); - ZVAL_LONG(preg_flags, intern->u.regex.preg_flags); - - args[0] = &object; - args[1] = ®ex; - args[2] = &mode; - args[3] = &flags; - args[4] = &preg_flags; - - spl_instantiate_arg_n(Z_OBJCE_P(getThis()), &return_value, 5, args TSRMLS_CC); - - zval_ptr_dtor(&object); -- zval_ptr_dtor(®ex); - zval_ptr_dtor(&mode); - zval_ptr_dtor(&flags); - zval_ptr_dtor(&preg_flags); - } - if (retval) { - zval_ptr_dtor(&retval); ++ zval args[5]; ++ ++ ZVAL_COPY(&args[0], &retval); ++ ZVAL_STR_COPY(&args[1], intern->u.regex.regex); ++ ZVAL_LONG(&args[2], intern->u.regex.mode); ++ ZVAL_LONG(&args[3], intern->u.regex.flags); ++ ZVAL_LONG(&args[4], intern->u.regex.preg_flags); ++ ++ spl_instantiate_arg_n(Z_OBJCE_P(getThis()), return_value, 5, args TSRMLS_CC); ++ ++ zval_ptr_dtor(&args[1]); } + zval_ptr_dtor(&retval); } /* }}} */ + SPL_METHOD(RecursiveRegexIterator, accept) + { + spl_dual_it_object *intern; - zval *rv; - ++ + if (zend_parse_parameters_none() == FAILURE) { + return; + } - ++ + SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis()); - - if (intern->current.data == NULL) { ++ ++ if (Z_TYPE(intern->current.data) == IS_UNDEF) { + RETURN_FALSE; - } else if (Z_TYPE_P(intern->current.data) == IS_ARRAY) { - RETURN_BOOL(zend_hash_num_elements(Z_ARRVAL_P(intern->current.data)) > 0); ++ } else if (Z_TYPE(intern->current.data) == IS_ARRAY) { ++ RETURN_BOOL(zend_hash_num_elements(Z_ARRVAL(intern->current.data)) > 0); + } + - zend_call_method_with_0_params(&(getThis()), spl_ce_RegexIterator, NULL, "accept", &rv); - - RETURN_ZVAL(rv, 1, 1); ++ zend_call_method_with_0_params(getThis(), spl_ce_RegexIterator, NULL, "accept", return_value); + } + #endif /* {{{ spl_dual_it_dtor */