summaryrefslogtreecommitdiff
path: root/ext/spl/spl_foreach.c
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-08-16 20:27:29 +0000
committerMarcus Boerger <helly@php.net>2003-08-16 20:27:29 +0000
commitc346aad91a3f5db185f7add67ddf778db59c7bbd (patch)
treea7ea62a3289d133e8828d1d631ba080a1ad31fcc /ext/spl/spl_foreach.c
parent7a12eb8a2d788f9a3bb99075f78b20712c7b307d (diff)
downloadphp-git-c346aad91a3f5db185f7add67ddf778db59c7bbd.tar.gz
spl_call_method returns the zval* if used
Diffstat (limited to 'ext/spl/spl_foreach.c')
-rwxr-xr-xext/spl/spl_foreach.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/ext/spl/spl_foreach.c b/ext/spl/spl_foreach.c
index 114aa53952..d57d048fde 100755
--- a/ext/spl/spl_foreach.c
+++ b/ext/spl/spl_foreach.c
@@ -141,6 +141,7 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_FE_FETCH)
spl_foreach_proxy *proxy;
if (Z_TYPE_PP(obj) == IS_STRING) {
+ int has_more;
proxy = (spl_foreach_proxy*)Z_STRVAL_PP(obj);
obj = &proxy->obj; /* will be optimized out */
@@ -159,13 +160,10 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_FE_FETCH)
}
spl_call_method_0(obj, proxy->obj_ce, &proxy->funcs.more, "has_more", sizeof("has_more")-1, &more);
- if (!more->type == IS_BOOL && !more->type == IS_LONG) {
- php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Method %s::has_more implements spl_forward::has_more and should return a value of type boolean or int");
- convert_to_boolean(more);
- }
- if (more->value.lval) {
- zval_dtor(more);
- FREE_ZVAL(more);
+ has_more = i_zend_is_true(more);
+ zval_dtor(more);
+ FREE_ZVAL(more);
+ if (has_more) {
result = &EX_T(EX(opline)->result.u.var).tmp_var;
spl_call_method_0(obj, proxy->obj_ce, &proxy->funcs.current, "current", sizeof("current")-1, &value);
@@ -230,8 +228,6 @@ ZEND_EXECUTE_HOOK_FUNCTION(ZEND_FE_FETCH)
#endif
NEXT_OPCODE();
}
- zval_dtor(more);
- FREE_ZVAL(more);
EX(opline) = op_array->opcodes+EX(opline)->op2.u.opline_num;
return 0;
}