Skip to content

Language: Class constant fetch on user-defined classes (Router::CONST) #2215

Closed

Description

@PurHur

Problem

examples/003-MiniWebApp uses Router::DEFAULT_CONTACT_NAME_MAX inside global function miniwebapp_contact_name_is_valid() (see examples/003-MiniWebApp/src/Router.php). Related trackers:

Fetching a constant on a user class (Expr_ClassConstFetch) is a separate acceptance path: lint may pass declaration while fetch still fails VM/JIT/AOT, blocking honest #2059 curls.

Goal

VM + JIT + AOT resolve ClassName::CONST for user-defined classes (integer literals minimum for MiniWebApp).

./phpc lint examples/003-MiniWebApp/src/Router.php
./phpc run -q 'name='$(python3 -c 'print("x"*201)') examples/003-MiniWebApp/example.php
# invalid long name rejected; valid short name accepted

Implementation hints

Layer Files Notes
Compiler lib/Compiler.php compileClassConstFetch Already emits TYPE_CLASS_CONST_FETCH; verify user-class operands
VM lib/VM.php class tables Store member consts at class init; resolve fetch opcode
JIT lib/JIT.php / lib/JIT/Builtin/Type/Object_.php defineClassConst / fetch lowering for internal + user classes
AOT native class metadata Same as VM const table
Tests test/compliance/cases/classes/class_const_fetch_user.phpt Router-style class + global helper

Search before coding

rg 'TYPE_CLASS_CONST_FETCH|compileClassConstFetch' lib/
rg 'defineClassConst' lib/VM.php lib/JIT/

Acceptance criteria

./script/ci-fast.sh --filter ClassConstFetch
./phpc lint --all examples/003-MiniWebApp   # no unsupported on Router::CONST fetch

Harness (Runforge — do not use raw docker run -v):

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter ClassConstFetch'

Dependencies

Links

  • ROADMAP #78 Phase 1 Language
  • MiniWebApp #2059

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions