Skip to content

Stdlib: class_implements() on enum must return UnitEnum/BackedEnum (ext/standard/basic_functions.c) #5422

Description

@PurHur

Category

stdlib

Problem

class_implements() on an enum must return the built-in interfaces UnitEnum and (for backed enums) BackedEnum, like Zend. This compiler returns an empty array.

php-src reference

  • ext/standard/basic_functions.c — PHP_FUNCTION(class_implements)
  • Zend/zend_enum.c — enum implements UnitEnum / BackedEnum

Repro

test/compliance/cases/stdlib/class_implements_enum_repro.php:

<?php
enum E: int { case A = 1; }
var_dump(class_implements(E::class));
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && cd /compiler && php bin/vm.php test/compliance/cases/stdlib/class_implements_enum_repro.php'
Runtime Today
Zend array(2) { ["UnitEnum"]=> string(8) "UnitEnum" ["BackedEnum"]=> string(10) "BackedEnum" }
VM array(0) { }

Scope (this repo)

Area Path
Builtin ext/standard/class_implements.php / VmClassIntrospection
Enum metadata lib/VM/EnumSupport.php or class registry — record implemented interfaces at compile time

Done when

  • Repro var_dump matches Zend for unit and backed enums.
  • class_implements(E::class, false) autoload flag behavior matches php-src (document if deferred).

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