Category
stdlib | php-src-strict
Problem
compact('x') when $x holds an enum case must return the enum case object in the result array. This compiler coerces backed enum cases to their backing scalar (1 instead of E::A).
Related coercion family: #5547 (array_values/array_merge), #5691 (sort), but compact() is not covered.
php-src reference
Repro (failure today)
<?php
enum E: int { case A = 1; }
$a = E::A;
var_export(compact('a'));
php bin/vm.php -r "enum E: int { case A = 1; } \$a = E::A; var_export(compact('a'));"
# VM: array ('a' => 1)
php -r "enum E: int { case A = 1; } \$a = E::A; var_export(compact('a'));"
# Zend: array ('a' => \E::A)
Compliance guard (expects enum object — currently fails VM):
php bin/vm.php test/compliance/cases/stdlib/compact_enum_case.phpt
Scope (this repo)
| Layer |
Path |
| VM |
ext/standard/VmScope.php — compact() variable copy without enum scalarization |
| JIT |
ext/standard/compact_.php / JIT lowering if literal name list is compiled |
| Tests |
test/compliance/cases/stdlib/compact_enum_case.phpt (exists, red on VM) |
Done when
Related
Category
stdlib| php-src-strictProblem
compact('x')when$xholds an enum case must return the enum case object in the result array. This compiler coerces backed enum cases to their backing scalar (1instead ofE::A).Related coercion family: #5547 (
array_values/array_merge), #5691 (sort), butcompact()is not covered.php-src reference
ext/standard/basic_functions.c—PHP_FUNCTION(compact)(copies zvals without enum backing unwrap)Repro (failure today)
Compliance guard (expects enum object — currently fails VM):
Scope (this repo)
ext/standard/VmScope.php—compact()variable copy without enum scalarizationext/standard/compact_.php/ JIT lowering if literal name list is compiledtest/compliance/cases/stdlib/compact_enum_case.phpt(exists, red on VM)Done when
.phptboth show\E::Ain result arrayRelated