Repository navigation
Stdlib: SPL heap structures — SplPriorityQueue / SplMinHeap / SplMaxHeap parity (ext/spl/spl_heap.c) #4387
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
SPL heap structures are missing: SplPriorityQueue, SplMinHeap, and SplMaxHeap should match Zend insert/extract ordering, compare semantics, and SplPriorityQueue::setExtractFlags() modes.
Distinct from #3330 (ArrayObject/queue/stack/storage) and #4689 (SplDoublyLinkedList). Registration should go through ext/spl/Module.php once #4769 lands.
php-src reference
- php/php-src
ext/spl/spl_heap.c—SplHeap, min/max heap compare - php/php-src
ext/spl/spl_priority_queue.c— priority + extract flags - php/php-src
ext/spl/spl_iterators.c— iteration
Repro
Save as repro_spl_priority_queue.php:
<?php
$pq = new SplPriorityQueue();
$pq->setExtractFlags(SplPriorityQueue::EXTR_BOTH);
$pq->insert('low', 1);
$pq->insert('high', 100);
$first = $pq->extract();
$second = $pq->extract();
echo $first['data'], ':', $first['priority'], "\n";
echo $second['data'], ':', $second['priority'], "\n";
$max = new SplMaxHeap();
$max->insert(1);
$max->insert(3);
echo $max->extract(), "\n";./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php repro_spl_priority_queue.php
php bin/vm.php repro_spl_priority_queue.php
'| Runtime | First line |
|---|---|
| Zend | high:100 |
| This compiler | Class "SplPriorityQueue" not found |
Scope (this repo)
| Layer | Path |
|---|---|
| Module | ext/spl/Module.php (#4769) |
| VM classes | lib/VM/BuiltinClasses.php or ext/spl/SplPriorityQueue.php heap storage |
| Methods v1 | insert, extract, count, isEmpty, top, setExtractFlags, getExtractFlags |
| Min/Max heap | SplMinHeap / SplMaxHeap with default compare |
| JIT/AOT | VM-first v1 |
| Tests | test/compliance/cases/stdlib/spl_priority_queue.phpt, spl_max_heap.phpt |
Done when
- Repro prints
high:100thenlow:1on VM -
SplMaxHeapextract order matches Zend (3before1) -
EXTR_DATA,EXTR_PRIORITY,EXTR_BOTHflags behave per php-src for supported subset -
./script/ci-fast.sh --filter spl_priority_queuegreen - Capability matrix rows for all three classes
Related
- Stdlib: SPL core structures — ArrayObject / SplQueue / SplStack / SplObjectStorage (ext/spl parity) #3330 · Stdlib: SplDoublyLinkedList — deque/stack/queue modes (ext/spl/spl_dllist.c parity) #4689 · Bootstrap: ext/spl/ module skeleton — register SPL builtin classes for self-host (M4) #4769 ext/spl module · Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492
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 15, 2026
claim: PHP Compiler STD Lib Advanced — batch (issues #4387, #6138, #6563)
Starting with #4387 SplHeap/SplMinHeap/SplMaxHeap/SplPriorityQueue method tables (classes stubbed on master; insert/extract missing). Then #6138 IteratorIterator+Generator rewind, then #6563 socket_create_pair.
PurHur commentedon Jul 15, 2026
claim: PHP Compiler STD Lib Advanced — continuing batch after #6138 merged (#19327). Starting #4387 SplHeap/SplPriorityQueue methods next.
Stdlib: SplHeap / SplMinHeap / SplMaxHeap / SplPriorityQueue (#4387) (#…
PurHur commentedon Jul 15, 2026
Merged via PR #19328.
Shipped:
SplHeap/SplMinHeap/SplMaxHeap/SplPriorityQueuemethod tables inext/spl/SplHeapBuiltin.php— insert/extract/top/count/isEmpty/iterator +EXTR_*flags.Verification: