Skip to content

Stdlib: class_implements() on enum case object — must return UnitEnum/BackedEnum (ext/standard/basic_functions.c) #5651

Description

@PurHur

Category

stdlib

Problem

class_implements() accepts an object operand. On a backed enum case (E::A), Zend returns the same interface map as class_implements(E::class) (UnitEnum, BackedEnum). This compiler returns false (not an array).

#5422 tracks class_implements(E::class) (type name string). This issue is the enum case object operand only.

php-src reference

Repro (failure today)

<?php
enum E: int { case A = 1; }
var_dump(class_implements(E::A));
var_dump(class_implements(E::class));
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php -r "enum E:int{case A=1;} var_dump(class_implements(E::A));"
php bin/vm.php -r "enum E:int{case A=1;} var_dump(class_implements(E::A));"
'
Runtime class_implements(E::A)
Zend array(2) { ["UnitEnum"]=>... ["BackedEnum"]=>... }
vm.php today bool(false)

Scope (this repo)

Area Path
Builtin ext/standard/class_implements.php / VmClassIntrospection
Enum cases lib/VM/EnumCaseSupport.php — resolve case object → enum ClassEntry interfaces

Fix together with #5422 if one PR is simpler; keep both acceptance criteria green.

Done when

  • class_implements(E::A) returns same array as class_implements(E::class) on VM
  • Unit enum cases return UnitEnum only
  • test/compliance/cases/stdlib/class_implements_enum_case_object.phpt green
  • ./script/ci-fast.sh --filter class_implements_enum green

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machineenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web apps

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions