while (intern->u.dir.index < pos) {
int valid = 0;
- zend_call_method_with_0_params(&this_ptr, Z_OBJCE_P(getThis()), &intern->u.dir.func_valid, "valid", &retval);
- if (retval) {
- valid = zend_is_true(retval);
+ zend_call_method_with_0_params(&EX(This), Z_OBJCE(EX(This)), &intern->u.dir.func_valid, "valid", &retval);
+ if (!Z_ISUNDEF(retval)) {
+ valid = zend_is_true(&retval);
zval_ptr_dtor(&retval);
- retval = NULL;
}
if (!valid) {
- break;
+ zend_throw_exception_ex(spl_ce_OutOfBoundsException, 0 TSRMLS_CC, "Seek position %ld is out of range", pos);
+ return;
}
- zend_call_method_with_0_params(&this_ptr, Z_OBJCE_P(getThis()), &intern->u.dir.func_next, "next", &retval);
- if (retval) {
- zval_ptr_dtor(&retval);
- }
+ zend_call_method_with_0_params(&EX(This), Z_OBJCE(EX(This)), &intern->u.dir.func_next, "next", NULL);
}
} /* }}} */