diff options
| author | Marcus Boerger <helly@php.net> | 2003-08-16 20:27:29 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2003-08-16 20:27:29 +0000 |
| commit | c346aad91a3f5db185f7add67ddf778db59c7bbd (patch) | |
| tree | a7ea62a3289d133e8828d1d631ba080a1ad31fcc /ext/spl/spl_foreach.c | |
| parent | 7a12eb8a2d788f9a3bb99075f78b20712c7b307d (diff) | |
| download | php-git-c346aad91a3f5db185f7add67ddf778db59c7bbd.tar.gz | |
spl_call_method returns the zval* if used
Diffstat (limited to 'ext/spl/spl_foreach.c')
| -rwxr-xr-x | ext/spl/spl_foreach.c | 14 |
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; } |
