@@ -2037,8 +2037,10 @@ SPL_METHOD(RegexIterator, accept)
2037
2037
2038
2038
if (Z_TYPE (intern -> current .data ) == IS_UNDEF ) {
2039
2039
RETURN_FALSE ;
2040
+ } else if (Z_TYPE (intern -> current .data ) == IS_ARRAY ) {
2041
+ RETURN_FALSE ;
2040
2042
}
2041
-
2043
+
2042
2044
if (intern -> u .regex .flags & REGIT_USE_KEY ) {
2043
2045
subject_ptr = & intern -> current .key ;
2044
2046
} else {
@@ -2074,8 +2076,7 @@ SPL_METHOD(RegexIterator, accept)
2074
2076
ZVAL_UNDEF (& intern -> current .data );
2075
2077
php_pcre_match_impl (intern -> u .regex .pce , subject , subject_len , & zcount ,
2076
2078
& intern -> current .data , intern -> u .regex .mode == REGIT_MODE_ALL_MATCHES , intern -> u .regex .use_flags , intern -> u .regex .preg_flags , 0 TSRMLS_CC );
2077
- count = zend_hash_num_elements (Z_ARRVAL (intern -> current .data ));
2078
- RETVAL_BOOL (count > 0 );
2079
+ RETVAL_BOOL (Z_LVAL (zcount ) > 0 );
2079
2080
break ;
2080
2081
2081
2082
case REGIT_MODE_SPLIT :
@@ -2254,7 +2255,7 @@ SPL_METHOD(RecursiveRegexIterator, __construct)
2254
2255
SPL_METHOD (RecursiveRegexIterator , getChildren )
2255
2256
{
2256
2257
spl_dual_it_object * intern ;
2257
- zval retval , regex ;
2258
+ zval retval ;
2258
2259
2259
2260
if (zend_parse_parameters_none () == FAILURE ) {
2260
2261
return ;
@@ -2264,13 +2265,40 @@ SPL_METHOD(RecursiveRegexIterator, getChildren)
2264
2265
2265
2266
zend_call_method_with_0_params (& intern -> inner .zobject , intern -> inner .ce , NULL , "getchildren" , & retval );
2266
2267
if (!EG (exception )) {
2267
- ZVAL_STR_COPY (& regex , intern -> u .regex .regex );
2268
- spl_instantiate_arg_ex2 (Z_OBJCE_P (getThis ()), return_value , & retval , & regex TSRMLS_CC );
2269
- zval_ptr_dtor (& regex );
2268
+ zval args [5 ];
2269
+
2270
+ ZVAL_COPY (& args [0 ], & retval );
2271
+ ZVAL_STR_COPY (& args [1 ], intern -> u .regex .regex );
2272
+ ZVAL_LONG (& args [2 ], intern -> u .regex .mode );
2273
+ ZVAL_LONG (& args [3 ], intern -> u .regex .flags );
2274
+ ZVAL_LONG (& args [4 ], intern -> u .regex .preg_flags );
2275
+
2276
+ spl_instantiate_arg_n (Z_OBJCE_P (getThis ()), return_value , 5 , args TSRMLS_CC );
2277
+
2278
+ zval_ptr_dtor (& args [1 ]);
2270
2279
}
2271
2280
zval_ptr_dtor (& retval );
2272
2281
} /* }}} */
2273
2282
2283
+ SPL_METHOD (RecursiveRegexIterator , accept )
2284
+ {
2285
+ spl_dual_it_object * intern ;
2286
+
2287
+ if (zend_parse_parameters_none () == FAILURE ) {
2288
+ return ;
2289
+ }
2290
+
2291
+ SPL_FETCH_AND_CHECK_DUAL_IT (intern , getThis ());
2292
+
2293
+ if (Z_TYPE (intern -> current .data ) == IS_UNDEF ) {
2294
+ RETURN_FALSE ;
2295
+ } else if (Z_TYPE (intern -> current .data ) == IS_ARRAY ) {
2296
+ RETURN_BOOL (zend_hash_num_elements (Z_ARRVAL (intern -> current .data )) > 0 );
2297
+ }
2298
+
2299
+ zend_call_method_with_0_params (getThis (), spl_ce_RegexIterator , NULL , "accept" , return_value );
2300
+ }
2301
+
2274
2302
#endif
2275
2303
2276
2304
/* {{{ spl_dual_it_dtor */
@@ -2456,6 +2484,7 @@ ZEND_END_ARG_INFO();
2456
2484
2457
2485
static const zend_function_entry spl_funcs_RecursiveRegexIterator [] = {
2458
2486
SPL_ME (RecursiveRegexIterator , __construct , arginfo_rec_regex_it___construct , ZEND_ACC_PUBLIC )
2487
+ SPL_ME (RecursiveRegexIterator , accept , arginfo_recursive_it_void , ZEND_ACC_PUBLIC )
2459
2488
SPL_ME (RecursiveFilterIterator , hasChildren , arginfo_recursive_it_void , ZEND_ACC_PUBLIC )
2460
2489
SPL_ME (RecursiveRegexIterator , getChildren , arginfo_recursive_it_void , ZEND_ACC_PUBLIC )
2461
2490
PHP_FE_END
0 commit comments