Skip to content

Stdlib: register Zend builtin interfaces UnitEnum/BackedEnum/Serializable (#6354) - #7692

Merged
PurHur merged 1 commit into
masterfrom
agent/stdlib-builtin-interfaces-6354
Jun 8, 2026
Merged

PurHur merged 1 commit into
masterfrom
agent/stdlib-builtin-interfaces-6354

Conversation

@PurHur

@PurHur PurHur commented Jun 8, 2026

Copy link
Copy Markdown
Owner

Summary

  • Register UnitEnum, BackedEnum (extends UnitEnum), and Serializable internal interfaces in lib/VM/BuiltinClasses.php per php-src Zend/zend_interfaces.c.
  • Seed JIT compile-time interface registry in lib/JIT/Builtin/Type/Object_.php for literal interface_exists() lowering.
  • Add VM/JIT compliance PHPTs and issue repro scripts.

Closes #6354

php-src reference

  • Zend/zend_interfaces.c — zend_register_internal_interface for UnitEnum, BackedEnum, ArrayAccess, Serializable
  • PHP implementation: lib/VM/BuiltinClasses.php

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php test/repro/parity_builtin_interface_registry.php
php bin/vm.php test/repro/parity_builtin_interface_registry.php
php bin/jit.php test/repro/parity_builtin_interface_registry.php
vendor/bin/phpunit --filter builtin_interface
php bin/compile.php -l test/repro/builtin_iface_aot_probe.php
php bin/compile.php -l test/fixtures/aot/compile-only/enum_instanceof.php
'

Output (VM/JIT repro):

interface_exists(UnitEnum): true
interface_exists(BackedEnum): true
interface_exists(ArrayAccess): true
interface_exists(Serializable): true
declared UnitEnum: true
is_a case UnitEnum: true

PHPUnit: OK (4 tests, 4 assertions) for --filter builtin_interface.

AOT -l lint passes; native AOT link remains blocked by pre-existing LLVM verify failures on this harness (same as get_declared_interfaces AOT case).

Made with Cursor

…6354)

Seed internal interface ClassEntry rows at VM init so interface_exists(),
get_declared_interfaces(), UnitEnum::class, and is_a() on enum cases match
php-src zend_interfaces.c. JIT literal interface_exists gets compile-time seeds.

Co-authored-by: Cursor <cursoragent@cursor.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant