Repository navigation
Stdlib: MultipleIterator — parallel Traversable iteration (ext/spl/spl_iterators.c) #6792
Copy link
Copy link
Closed
Labels
area:vmVirtual machineVirtual machineenhancementNew feature or requestNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsPhase 4 – stdlib for web apps
Description
Category
stdlib
Problem
MultipleIterator (iterate several Traversable objects in lockstep) is missing. class_exists('MultipleIterator') is false on VM. SPL umbrella #4546 lists wrapper iterators broadly; this ticket scopes the multi-attach iterator used in zip-style foreach over parallel streams.
php-src reference
- php/php-src
ext/spl/spl_iterators.c—spl_multipleiterator_*, attach/detach,MIT_NEED_ALL/MIT_NEED_ANYflags - php/php-src
ext/spl/spl_iterators.stub.php
Repro (failure today)
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php -r "
var_dump(class_exists(\"MultipleIterator\"));
"'Observed (2026-06-06): bool(false).
Minimal usage (Zend):
<?php
$m = new MultipleIterator(MultipleIterator::MIT_NEED_ALL);
$m->attachIterator(new ArrayIterator([1, 2]));
$m->attachIterator(new ArrayIterator(['a', 'b']));
foreach ($m as $row) { var_dump($row); }
// array(2) { [0]=> int(1) [1]=> string(1) "a" } …Scope (this repo)
| Area | Path | Notes |
|---|---|---|
| ext/spl | MultipleIterator builtin class |
Register in ext/spl/Module.php + BuiltinClasses.php |
| lib/VM | iterator protocol | Reuse existing Iterator/IteratorAggregate dispatch |
| JIT/AOT | optional follow-up | VM parity sufficient |
PHP-in-PHP first: implement attach/detach/valid/current/next in ext/spl/; no new C runtime.
Done when
class_exists('MultipleIterator')is true.- Constants
MultipleIterator::MIT_NEED_ALLandMIT_NEED_ANYmatch Zend values. - Attach two
ArrayIterators;foreach ($m as $row)yields parallel tuples matching php-src. test/compliance/cases/stdlib/multiple_iterator.phptpasses on VM.
Verification
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
vendor/bin/phpunit test/compliance/VMTest.php --filter multiple_iterator
'Related
- Stdlib: SPL iterator wrappers — FilterIterator, LimitIterator, AppendIterator, … (ext/spl parity) #4546 SPL iterator wrappers umbrella
- Stdlib: SPL core structures — ArrayObject / SplQueue / SplStack / SplObjectStorage (ext/spl parity) #3330 ArrayObject / SplQueue / SplStack
- Stdlib: SPL EmptyIterator / RecursiveArrayIterator / OuterIterator — iterator graph missing (ext/spl/spl_iterators.c) #6593 OuterIterator graph
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:vmVirtual machineVirtual machineenhancementNew feature or requestNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimSpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsPhase 4 – stdlib for web apps
Activity
PurHur commentedon Jul 16, 2026
claim: PHP Compiler STD Lib Advanced — batch (issues #6273, #6792, #3635, #4689) — verifying MultipleIterator; implementing RecursiveTreeIterator first (#6273).
PurHur commentedon Jul 16, 2026
claim released: MultipleIterator already green on master —
class_existstrue;test/repro/maintainer_gap_multipleiterator_attach.php→ ok on VM. Recommend closing as done (superseded by earlier landings). Batch continued with #6273 merged via #19438.PurHur commentedon Jul 16, 2026
Verified done on master: MultipleIterator registers;
maintainer_gap_multipleiterator_attach.php→ ok. Closing as superseded.