com php-src: Allow ReflectionClass::isIterable() to return true for Traversables: ext/reflection/php_reflection.c

From: Date: Wed, 31 May 2017 21:23:57 +0000
Subject: com php-src: Allow ReflectionClass::isIterable() to return true for Traversables: ext/reflection/php_reflection.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-97971@lists.php.net to get a copy of this message
Commit: d1cfd87fbe9e34bf909abedb61cfa4b2d7022b4d Author: Sara Golemon <pollita@php.net> Wed, 31 May 2017 14:18:19 -0700 Parents: c1500f8519aded29c3632de4240fbc0a4e485a81 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d1cfd87fbe9e34bf909abedb61cfa4b2d7022b4d Log: Allow ReflectionClass::isIterable() to return true for Traversables Current behavior is essentially "Is an INTERNAL iterable class". This change allows isIterable() to return true for userspace classes as well. Changed paths: M ext/reflection/php_reflection.c Diff: diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 84f4d66..19975d2 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -5131,7 +5131,12 @@ ZEND_METHOD(reflection_class, isIterable) METHOD_NOTSTATIC(reflection_class_ptr); GET_REFLECTION_OBJECT_PTR(ce); - RETURN_BOOL(ce->get_iterator != NULL); + if (ce->ce_flags & (ZEND_ACC_INTERFACE | ZEND_ACC_IMPLICIT_ABSTRACT_CLASS | + ZEND_ACC_TRAIT | ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) { + RETURN_FALSE; + } + + RETURN_BOOL(ce->get_iterator || instanceof_function(ce, zend_ce_traversable)); } /* }}} */

« previous php.cvs (#97971) next »