/* {{{ Calls the callback with the current value, the current key and the inner iterator as arguments */
PHP_METHOD(CallbackFilterIterator, accept)
{
- spl_dual_it_object *intern = Z_SPLDUAL_IT_P(ZEND_THIS);
- zend_fcall_info *fci = &intern->u.cbfilter->fci;
- zend_fcall_info_cache *fcc = &intern->u.cbfilter->fcc;
- zval params[3];
+ spl_dual_it_object *intern = Z_SPLDUAL_IT_P(ZEND_THIS);
if (zend_parse_parameters_none() == FAILURE) {
RETURN_THROWS();
}
+ SPL_FETCH_AND_CHECK_DUAL_IT(intern, ZEND_THIS);
+
if (Z_TYPE(intern->current.data) == IS_UNDEF || Z_TYPE(intern->current.key) == IS_UNDEF) {
RETURN_FALSE;
}
+ zval params[3];
ZVAL_COPY_VALUE(¶ms[0], &intern->current.data);
ZVAL_COPY_VALUE(¶ms[1], &intern->current.key);
ZVAL_COPY_VALUE(¶ms[2], &intern->inner.zobject);
+ zend_fcall_info *fci = &intern->u.cbfilter->fci;
+ zend_fcall_info_cache *fcc = &intern->u.cbfilter->fcc;
fci->retval = return_value;
fci->param_count = 3;
fci->params = params;
if (zend_call_function(fci, fcc) != SUCCESS || Z_ISUNDEF_P(return_value)) {
RETURN_FALSE;
}
-
- if (EG(exception)) {
- RETURN_THROWS();
- }
}
/* }}} */