Skip to content

Language: keyed list destructuring with spread (#4889) - #4896

Merged
PurHur merged 1 commit into
masterfrom
agent/issue-4889-keyed-list-spread-destruct
Jun 3, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/issue-4889-keyed-list-spread-destruct

Conversation

@PurHur

@PurHur PurHur commented Jun 3, 2026

Copy link
Copy Markdown
Owner

Summary

Implements ['label' => $label, ...$rest] = $assoc VM parity for issue #4889:

php-src reference: Zend/zend_compile.c zend_compile_list_assign keyed + unpack semantics.

JIT spread lowering remains #4885 (phase 2).

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php -r "
\$src = [\"label\" => \"L\", \"a\" => 1, \"b\" => 2];
[\"label\" => \$label, ...\$rest] = \$src;
ksort(\$rest);
var_export(\$label);
echo \"\\n\";
var_export(\$rest);
"'

Output:

'L'
array (
  'a' => 1,
  'b' => 2,
)
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && ./vendor/bin/phpunit --filter list_destructuring_keyed_spread test/compliance/VMTest.php'
OK (1 test, 1 assertion)

Related regressions:

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && ./vendor/bin/phpunit --filter "list_destructuring_spread|keyed_list_destruct" test/compliance/VMTest.php'
OK (3 tests, 3 assertions)

Closes #4889

Made with Cursor

Track compile-time string keys consumed before ...$tail, merge the
remaining assoc entries in VM spread assign, and group keyed+spread
lowering with TYPE_LIST_UNPACK_CHECK like numeric spread (#4835).

Co-authored-by: Cursor <cursoragent@cursor.com>
@PurHur
PurHur merged commit caaca4a into master Jun 3, 2026
@PurHur
PurHur deleted the agent/issue-4889-keyed-list-spread-destruct branch June 3, 2026 06:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Language: keyed list destructuring with spread — ['k' => $v, ...$tail] = (zend_compile.c)

1 participant