From 8d3fc3ab0e9fe5031ff68231450d0d0994f1052c Mon Sep 17 00:00:00 2001
From: PurHur
Date: Wed, 22 Jul 2026 05:56:53 +0000
Subject: [PATCH] Stdlib: ReflectionAttribute::getTarget() returns
Attribute::TARGET_* (#22044)
Store the declaration-site TARGET_* bitmask on ReflectionAttribute and
expose getTarget() on VM/JIT to match php-src zim_reflection_attribute_getTarget.
Co-authored-by: Cursor
---
README.md | 8 +-
docs/bootstrap-generations.md | 12 +-
docs/bootstrap-inventory.md | 2284 +++++++++--------
docs/bootstrap-selfhost.md | 6 +-
docs/pages/development-status.md | 12 +-
docs/pages/index.html | 10 +-
docs/pages/missing-implementation.html | 6 +-
docs/roadmap-wave3.md | 6 +-
docs/self-host-target.md | 14 +-
lib/JIT/Builtin/ReflectionSetup.php | 18 +
lib/JIT/Call/ReflectionAttributeGetTarget.php | 34 +
lib/JIT/Call/ReflectionClassGetAttributes.php | 9 +
.../Call/ReflectionConstantGetAttributes.php | 9 +
.../Call/ReflectionMethodGetAttributes.php | 9 +
.../Call/ReflectionPropertyGetAttributes.php | 9 +
lib/JIT/Context.php | 1 +
lib/VM/AttributeRegistry.php | 37 +-
.../Builtin/ReflectionAttributeGetTarget.php | 36 +
.../ReflectionParameterGetAttributes.php | 8 +-
lib/VM/BuiltinClasses.php | 4 +
lib/VM/ReflectionSupport.php | 11 +-
.../.m3_compiler_lib_sidecar.sha | 2 +-
.../reflection_attribute_get_target.phpt | 50 +
...er_gap_reflection_attribute_get_target.php | 50 +
.../compiler_lib_spine_smoke/main.php | 2 +
test/unit/BootstrapSelfhostBundleTest.php | 2 +-
26 files changed, 1459 insertions(+), 1190 deletions(-)
create mode 100644 lib/JIT/Call/ReflectionAttributeGetTarget.php
create mode 100644 lib/VM/Builtin/ReflectionAttributeGetTarget.php
create mode 100644 test/compliance/cases/stdlib/reflection/reflection_attribute_get_target.phpt
create mode 100644 test/repro/maintainer_gap_reflection_attribute_get_target.php
diff --git a/README.md b/README.md
index 7ebcd8d91d1..3e9e827bdda 100755
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
> **Stable line (2026)** — First maintained **stable** release **[v1.0.0](https://github.com/PurHur/php-compiler/releases/tag/v1.0.0)**; **v1.1.0** prep adds M5 fast-path stability, enum/property-hook parity, `preg_match` JIT, `spl_autoload*`, and php-in-PHP JIT helpers. Demo-ready VM + AOT for a **web-capable PHP subset**, reference examples **000–009**, and an experimental **self-host** path. Not full Zend PHP compatibility — see [what’s missing](https://purhur.github.io/php-compiler/docs/pages/missing-implementation.html).
-**Snapshot (Jul 2026, `master` — v1.1.0 prep):** VM + AOT for shipped examples ✅ · examples web smoke ✅ · self-host spine **6319** / **6319** · **1555** builtins · M5 fast ✅ / strict 🚧 · M3/M4 emit = blob copy ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) · VM probe ~**20ms**
+**Snapshot (Jul 2026, `master` — v1.1.0 prep):** VM + AOT for shipped examples ✅ · examples web smoke ✅ · self-host spine **6335** / **6335** · **1555** builtins · M5 fast ✅ / strict 🚧 · M3/M4 emit = blob copy ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) · VM probe ~**20ms**
---
@@ -23,7 +23,7 @@
| **AOT (`phpc build`)** | ✅ For curated subset | Standalone binaries for examples **000–009** and small CGI apps; not arbitrary Composer stacks |
| **JIT (`bin/jit.php`)** | 🚧 Partial | LLVM IR for many constructs; **MCJIT execute** still flaky ([#98](https://github.com/PurHur/php-compiler/issues/98)); EH scripts VM-fallback ([#2114](https://github.com/PurHur/php-compiler/issues/2114)) |
| **Language wave 3** | ✅ Closed batch | **12/12** language + **13/13** stdlib tracker items ([#1380](https://github.com/PurHur/php-compiler/issues/1380)); closures, try/catch, generators (VM), `parent::class`, backed enums (VM), intersection AOT checks |
-| **Self-host north star** | 🚧 ~65% | M3/M4 emit paths are blob copies ([#21860](https://github.com/PurHur/php-compiler/issues/21860)); `--strict` red; spine **6319** / **6319**; vendor prelink **3/3** ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |
+| **Self-host north star** | 🚧 ~65% | M3/M4 emit paths are blob copies ([#21860](https://github.com/PurHur/php-compiler/issues/21860)); `--strict` red; spine **6335** / **6335**; vendor prelink **3/3** ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |
### What you can rely on today
@@ -40,7 +40,7 @@ Counts from `php script/bootstrap-spine-count.php` (literal `require_once` in `c
| Milestone | Status | What it means |
|-----------|--------|----------------|
| **M0–M1** | ✅ | `compiler_minimal` + compile-smoke bundles link and run natively |
-| **M2** | ✅ **6319** / **6319** | Full Phase A inventory in spine smoke; native link + lint ✅ |
+| **M2** | ✅ **6335** / **6335** | Full Phase A inventory in spine smoke; native link + lint ✅ |
| **M3** | 🚧 | HelloWorld probe output is a prelinked blob **COPY**, not a native emit ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) |
| **M4** | 🚧 | ladder runs, but gen-1→gen-2 is a sidecar **COPY** ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) — gen-0/gen-2/gen-3 being byte-identical follows from that, and is not fixpoint evidence |
| **M5** | 🚧 | `make north-star5-verify-fast` (daily) ✅; vendor **3/3** ✅; gen-0 sidecars refreshed; **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) |
@@ -259,7 +259,7 @@ Full matrices (auto-generated): [`docs/capabilities.md`](docs/capabilities.md) (
**Self-host (experimental, not “stable app” scope)**
-See [Current implementation status](#current-implementation-status-july-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **6319** / **6319**; M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) ✅ — **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) ([#1492](https://github.com/PurHur/php-compiler/issues/1492), [#8559](https://github.com/PurHur/php-compiler/issues/8559)). Recent: native spine bundle probe, fast VM execute smoke ([#2201](https://github.com/PurHur/php-compiler/issues/2201)), `GeneratorYieldSourceMarker` spine unit ([#10356](https://github.com/PurHur/php-compiler/pull/10356)).
+See [Current implementation status](#current-implementation-status-july-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **6335** / **6335**; M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) ✅ — **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) ([#1492](https://github.com/PurHur/php-compiler/issues/1492), [#8559](https://github.com/PurHur/php-compiler/issues/8559)). Recent: native spine bundle probe, fast VM execute smoke ([#2201](https://github.com/PurHur/php-compiler/issues/2201)), `GeneratorYieldSourceMarker` spine unit ([#10356](https://github.com/PurHur/php-compiler/pull/10356)).
**What we do not target in v1.x**
diff --git a/docs/bootstrap-generations.md b/docs/bootstrap-generations.md
index 8ccc4c806e5..03a8370bd0e 100644
--- a/docs/bootstrap-generations.md
+++ b/docs/bootstrap-generations.md
@@ -13,8 +13,8 @@ This document is the **canonical reference** for generation numbering, artifacts
| **0** | Committed `prelinked/bootstrap-gen0/bin-compile-aot` or Zend `php bin/compile.php` | `build/bin-compile-aot`, `build/selfhost-helloworld-compile`, emit helpers | M3 emit TU links; `BOOTSTRAP_M5_NO_ZEND=1` installs prelinked argv driver + `compiler_minimal` sidecar without Zend ([#3053](https://github.com/PurHur/php-compiler/issues/3053)) |
| **1** | Gen-0 emit helper | `build/bootstrap-loop-gen1-compile` | Native compile driver (M3 bridge) is linkable |
| **2 (smoke)** | Gen-1 emit helper | `build/bootstrap-loop-gen2` | Gen-1 **native-emits** a smoke fixture (`compiler smoke`) |
-| **2 (spine)** | Gen-1 full-spine emit | `build/bootstrap-loop-gen2-full-spine` | Gen-1 **native-emits** the **6319/6319** spine bundle |
-| **3** | Gen-2 native driver | `build/bootstrap-loop-gen3-full-spine` | Gen-2 **recompiles** the **6319/6319** spine via argv `-o` (no `PHP_COMPILER_M3_*` on compile; [#2866](https://github.com/PurHur/php-compiler/issues/2866)) |
+| **2 (spine)** | Gen-1 full-spine emit | `build/bootstrap-loop-gen2-full-spine` | Gen-1 **native-emits** the **6335/6335** spine bundle |
+| **3** | Gen-2 native driver | `build/bootstrap-loop-gen3-full-spine` | Gen-2 **recompiles** the **6335/6335** spine via argv `-o` (no `PHP_COMPILER_M3_*` on compile; [#2866](https://github.com/PurHur/php-compiler/issues/2866)) |
**Gen-2 compiles itself** in the M4 sense: `build/bin-compile-aot` (M3 native compile driver, linked via `./script/bootstrap-loop-gen1-link.sh` or `bootstrap-selfhost-helloworld-compile-bin.sh` for `bin/compile.php`) emits the next native binary via **argv** `-o OUT SOURCE.php` (preferred; [#2866](https://github.com/PurHur/php-compiler/issues/2866)) or legacy `PHP_COMPILER_M3_SOURCE` / `PHP_COMPILER_M3_OUT`. **`BOOTSTRAP_M4_GEN2_STRICT=1` default-on** ([#8711](https://github.com/PurHur/php-compiler/issues/8711)); opt-in Zend bisect: `BOOTSTRAP_M4_GEN2_ZEND_FALLBACK=1` (`emit_path=zend partial`). Inventory-scale spine uses link-time sidecar fast paths inside the emit bridge; full `php_compiler_cli_dispatch` lowering for arbitrary PHP remains ([#1937](https://github.com/PurHur/php-compiler/issues/1937), [#2866](https://github.com/PurHur/php-compiler/issues/2866)).
@@ -28,8 +28,8 @@ This document is the **canonical reference** for generation numbering, artifacts
| `build/bootstrap-loop-gen1` | Gen-1 smoke bundle (runs before emit) |
| `build/bootstrap-loop-gen1-compile` | Gen-1 emit helper |
| `build/bootstrap-loop-gen2` | Gen-2 smoke binary |
-| `build/bootstrap-loop-gen2-full-spine` | Gen-2 full spine (6319/6319) |
-| `build/bootstrap-loop-gen3-full-spine` | Gen-3 full spine (6319/6319) — **gen-2 output** |
+| `build/bootstrap-loop-gen2-full-spine` | Gen-2 full spine (6335/6335) |
+| `build/bootstrap-loop-gen3-full-spine` | Gen-3 full spine (6335/6335) — **gen-2 output** |
### Gen-0 compile invoker (`bootstrap-resolve-compile-invoke.sh`, #2894)
@@ -53,8 +53,8 @@ This document is the **canonical reference** for generation numbering, artifacts
```bash
script/apply-patches.sh
make bootstrap-loop-gen1-link # gen-1 → gen-2 smoke (native)
-make bootstrap-loop-gen1-full-spine-emit # gen-1 → gen-2 spine (6319/6319)
-make bootstrap-loop-gen2-recompile-spine # gen-2 → gen-3 spine (6319/6319, argv -o)
+make bootstrap-loop-gen1-full-spine-emit # gen-1 → gen-2 spine (6335/6335)
+make bootstrap-loop-gen2-recompile-spine # gen-2 → gen-3 spine (6335/6335, argv -o)
```
**One-shot probes:**
diff --git a/docs/bootstrap-inventory.md b/docs/bootstrap-inventory.md
index fe74744c2b1..797ad9db935 100644
--- a/docs/bootstrap-inventory.md
+++ b/docs/bootstrap-inventory.md
@@ -8,11 +8,11 @@ Regenerate: `php script/bootstrap-inventory.php`
| Metric | Count |
|--------|------:|
-| PHP files on vm.php path | 6333 |
-| Phase A inventory files (M2 ratio SSOT) | 6333 |
+| PHP files on vm.php path | 6335 |
+| Phase A inventory files (M2 ratio SSOT) | 6335 |
| Phase A ratio-deferred paths | 0 |
| Source constructs flagged (blockers) | 0 |
-| Source constructs flagged (warnings) | 20077 |
+| Source constructs flagged (warnings) | 20083 |
## Compiler CFG gaps (`lib/Compiler.php`)
@@ -4957,7 +4957,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/JIT/Builtin/ReflectionNamedArgumentsLowering.php` | 0 | 1 |
| `lib/JIT/Builtin/ReflectionNative.php` | 0 | 1 |
| `lib/JIT/Builtin/ReflectionRuntime.php` | 0 | 1 |
-| `lib/JIT/Builtin/ReflectionSetup.php` | 0 | 1 |
+| `lib/JIT/Builtin/ReflectionSetup.php` | 0 | 2 |
| `lib/JIT/Builtin/RequestParseBodyRuntime.php` | 0 | 7 |
| `lib/JIT/Builtin/ResolveSidecarRuntime.php` | 0 | 3 |
| `lib/JIT/Builtin/ReturnPendingRuntime.php` | 0 | 1 |
@@ -5372,6 +5372,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/JIT/Call/RandomizerGetBytesFromString.php` | 0 | 1 |
| `lib/JIT/Call/RandomizerMt19937Construct.php` | 0 | 1 |
| `lib/JIT/Call/ReflectionAttributeGetName.php` | 0 | 1 |
+| `lib/JIT/Call/ReflectionAttributeGetTarget.php` | 0 | 1 |
| `lib/JIT/Call/ReflectionAttributeNewInstance.php` | 0 | 2 |
| `lib/JIT/Call/ReflectionClassConstruct.php` | 0 | 1 |
| `lib/JIT/Call/ReflectionClassCreateLazyGhost.php` | 0 | 1 |
@@ -5443,7 +5444,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/JIT/CoalesceHelper.php` | 0 | 1 |
| `lib/JIT/CompileCache.php` | 0 | 1 |
| `lib/JIT/CompilerOperandChainNative.php` | 0 | 3 |
-| `lib/JIT/Context.php` | 0 | 77 |
+| `lib/JIT/Context.php` | 0 | 78 |
| `lib/JIT/DnfParamCheck.php` | 0 | 19 |
| `lib/JIT/DomInstanceMethodJit.php` | 0 | 50 |
| `lib/JIT/DynamicObjectReadonlyGuard.php` | 0 | 1 |
@@ -5737,6 +5738,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/VM/Builtin/PharRunning.php` | 0 | 2 |
| `lib/VM/Builtin/ReflectionAttributeGetArguments.php` | 0 | 1 |
| `lib/VM/Builtin/ReflectionAttributeGetName.php` | 0 | 1 |
+| `lib/VM/Builtin/ReflectionAttributeGetTarget.php` | 0 | 1 |
| `lib/VM/Builtin/ReflectionAttributeIsRepeated.php` | 0 | 1 |
| `lib/VM/Builtin/ReflectionAttributeNewInstance.php` | 0 | 4 |
| `lib/VM/Builtin/ReflectionClassConstantGetDeprecatedMessage.php` | 0 | 1 |
@@ -6034,7 +6036,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
| `lib/VM/Builtin/WeakReferenceConstruct.php` | 0 | 1 |
| `lib/VM/Builtin/WeakReferenceCreate.php` | 0 | 3 |
| `lib/VM/Builtin/WeakReferenceGet.php` | 0 | 1 |
-| `lib/VM/BuiltinClasses.php` | 0 | 503 |
+| `lib/VM/BuiltinClasses.php` | 0 | 505 |
| `lib/VM/BuiltinExceptionSupport.php` | 0 | 5 |
| `lib/VM/BuiltinExecute.php` | 0 | 1 |
| `lib/VM/CallUnpack.php` | 0 | 8 |
@@ -33637,8 +33639,8 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `ext/standard/intdiv.php`
**Warnings** (review for bootstrap subset):
-- new DivisionByZeroError (line 50)
-- new ArithmeticError (line 53)
+- new DivisionByZeroError (line 49)
+- new ArithmeticError (line 52)
- 2 class method(s)
### `ext/standard/interface_exists_.php`
@@ -39637,378 +39639,378 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new Temporary (line 8025)
- new OpCode (line 8030)
- new OpCode (line 8036)
-- new Variable (line 8084)
-- new Operand\Temporary (line 8085)
-- new Op\Type\Literal (line 8288)
-- new Op\Expr\Param (line 8289)
-- new Operand\Literal (line 8290)
-- new Op\Type\Mixed_ (line 8291)
-- new Variable (line 8422)
-- new Variable (line 8587)
-- new Variable (line 8627)
-- new Variable (line 8643)
-- new ClassEntry (line 8651)
-- new ObjectEntry (line 8653)
-- new Variable (line 8663)
-- new Variable (line 8722)
-- new Variable (line 8766)
-- new Variable (line 8771)
-- new Variable (line 8886)
-- new Variable (line 8893)
-- new Variable (line 8905)
-- new Variable (line 8920)
+- new Variable (line 8086)
+- new Operand\Temporary (line 8087)
+- new Op\Type\Literal (line 8291)
+- new Op\Expr\Param (line 8292)
+- new Operand\Literal (line 8293)
+- new Op\Type\Mixed_ (line 8294)
+- new Variable (line 8425)
+- new Variable (line 8590)
+- new Variable (line 8630)
+- new Variable (line 8646)
+- new ClassEntry (line 8654)
+- new ObjectEntry (line 8656)
+- new Variable (line 8666)
+- new Variable (line 8725)
+- new Variable (line 8769)
+- new Variable (line 8774)
+- new Variable (line 8889)
+- new Variable (line 8896)
+- new Variable (line 8908)
- new Variable (line 8923)
-- new Variable (line 8929)
-- new Variable (line 8936)
-- new Variable (line 8943)
-- new Variable (line 8949)
-- new Variable (line 8955)
-- new Variable (line 8962)
-- new Variable (line 8969)
-- new Variable (line 8976)
-- new Variable (line 9046)
-- new Variable (line 9190)
-- new Variable (line 9204)
-- new Variable (line 9213)
-- new Variable (line 9220)
-- new Variable (line 9270)
-- new Variable (line 9276)
-- new Variable (line 9289)
-- new Variable (line 9303)
-- new Variable (line 9309)
-- new Variable (line 9322)
-- new Variable (line 9355)
-- new Variable (line 9361)
-- new Variable (line 9366)
-- new Variable (line 9459)
-- new Variable (line 9479)
-- new ReflectionClassConstant (line 9499)
-- new Variable (line 9505)
-- new Variable (line 9511)
-- new Variable (line 9517)
-- new Variable (line 9523)
-- new CompileFatal (line 9560)
-- new Frame (line 9687)
-- new OpCode (line 9918)
-- new Operand\Literal (line 9993)
-- new OpCode (line 9995)
-- new Operand\Literal (line 10018)
-- new OpCode (line 10021)
-- new OpCode (line 10030)
-- new OpCode (line 10037)
-- new OpCode (line 10045)
-- new OpCode (line 10076)
-- new OpCode (line 10080)
-- new OpCode (line 10091)
+- new Variable (line 8926)
+- new Variable (line 8932)
+- new Variable (line 8939)
+- new Variable (line 8946)
+- new Variable (line 8952)
+- new Variable (line 8958)
+- new Variable (line 8965)
+- new Variable (line 8972)
+- new Variable (line 8979)
+- new Variable (line 9049)
+- new Variable (line 9193)
+- new Variable (line 9207)
+- new Variable (line 9216)
+- new Variable (line 9223)
+- new Variable (line 9273)
+- new Variable (line 9279)
+- new Variable (line 9292)
+- new Variable (line 9306)
+- new Variable (line 9312)
+- new Variable (line 9325)
+- new Variable (line 9358)
+- new Variable (line 9364)
+- new Variable (line 9369)
+- new Variable (line 9462)
+- new Variable (line 9482)
+- new ReflectionClassConstant (line 9502)
+- new Variable (line 9508)
+- new Variable (line 9514)
+- new Variable (line 9520)
+- new Variable (line 9526)
+- new CompileFatal (line 9563)
+- new Frame (line 9690)
+- new OpCode (line 9921)
+- new Operand\Literal (line 9996)
+- new OpCode (line 9998)
+- new Operand\Literal (line 10021)
+- new OpCode (line 10024)
+- new OpCode (line 10033)
+- new OpCode (line 10040)
+- new OpCode (line 10048)
+- new OpCode (line 10079)
+- new OpCode (line 10083)
- new OpCode (line 10094)
-- new OpCode (line 10151)
-- new OpCode (line 10156)
-- new OpCode (line 10170)
-- new OpCode (line 10188)
-- new OpCode (line 10729)
-- new OpCode (line 10748)
-- new Block (line 10760)
-- new OpCode (line 10767)
-- new OpCode (line 10883)
-- new OpCode (line 10933)
-- new OpCode (line 10954)
-- new OpCode (line 10973)
-- new OpCode (line 10997)
-- new Operand\Literal (line 11011)
-- new OpCode (line 11012)
-- new OpCode (line 11033)
-- new OpCode (line 11040)
-- new OpCode (line 11047)
-- new OpCode (line 11062)
-- new OpCode (line 11072)
-- new OpCode (line 11080)
-- new OpCode (line 11145)
-- new OpCode (line 11164)
-- new OpCode (line 11192)
-- new OpCode (line 11200)
-- new OpCode (line 11220)
-- new OpCode (line 11242)
-- new OpCode (line 11260)
-- new OpCode (line 11271)
-- new OpCode (line 11280)
-- new OpCode (line 11288)
-- new OpCode (line 11315)
-- new OpCode (line 11326)
-- new OpCode (line 11338)
-- new Operand\Literal (line 11353)
-- new Operand\Literal (line 11382)
-- new Operand\Literal (line 11402)
-- new OpCode (line 11404)
-- new OpCode (line 11442)
-- new Operand\Temporary (line 11478)
-- new OpCode (line 11480)
-- new OpCode (line 11501)
-- new OpCode (line 11518)
-- new OpCode (line 11533)
-- new OpCode (line 11539)
-- new OpCode (line 11545)
-- new OpCode (line 11577)
-- new OpCode (line 11584)
-- new OpCode (line 11595)
-- new OpCode (line 11614)
-- new Operand\Literal (line 11651)
-- new OpCode (line 11653)
-- new OpCode (line 11680)
-- new OpCode (line 11919)
-- new Operand\Literal (line 11953)
-- new OpCode (line 11956)
-- new Operand\Literal (line 11972)
-- new OpCode (line 11977)
-- new OpCode (line 11989)
-- new OpCode (line 12199)
-- new OpCode (line 12229)
-- new OpCode (line 12282)
-- new OpCode (line 12429)
-- new OpCode (line 12436)
-- new Block (line 12444)
-- new Block (line 12448)
-- new OpCode (line 12473)
-- new Block (line 12481)
-- new OpCode (line 12491)
-- new OpCode (line 12502)
-- new OpCode (line 12513)
-- new OpCode (line 12523)
-- new OpCode (line 12534)
-- new OpCode (line 12543)
+- new OpCode (line 10097)
+- new OpCode (line 10154)
+- new OpCode (line 10159)
+- new OpCode (line 10173)
+- new OpCode (line 10191)
+- new OpCode (line 10732)
+- new OpCode (line 10751)
+- new Block (line 10763)
+- new OpCode (line 10770)
+- new OpCode (line 10886)
+- new OpCode (line 10936)
+- new OpCode (line 10957)
+- new OpCode (line 10976)
+- new OpCode (line 11000)
+- new Operand\Literal (line 11014)
+- new OpCode (line 11015)
+- new OpCode (line 11036)
+- new OpCode (line 11043)
+- new OpCode (line 11050)
+- new OpCode (line 11065)
+- new OpCode (line 11075)
+- new OpCode (line 11083)
+- new OpCode (line 11148)
+- new OpCode (line 11167)
+- new OpCode (line 11195)
+- new OpCode (line 11203)
+- new OpCode (line 11223)
+- new OpCode (line 11245)
+- new OpCode (line 11263)
+- new OpCode (line 11274)
+- new OpCode (line 11283)
+- new OpCode (line 11291)
+- new OpCode (line 11318)
+- new OpCode (line 11329)
+- new OpCode (line 11341)
+- new Operand\Literal (line 11356)
+- new Operand\Literal (line 11385)
+- new Operand\Literal (line 11405)
+- new OpCode (line 11407)
+- new OpCode (line 11445)
+- new Operand\Temporary (line 11481)
+- new OpCode (line 11483)
+- new OpCode (line 11504)
+- new OpCode (line 11521)
+- new OpCode (line 11536)
+- new OpCode (line 11542)
+- new OpCode (line 11548)
+- new OpCode (line 11580)
+- new OpCode (line 11587)
+- new OpCode (line 11598)
+- new OpCode (line 11617)
+- new Operand\Literal (line 11654)
+- new OpCode (line 11656)
+- new OpCode (line 11683)
+- new OpCode (line 11922)
+- new Operand\Literal (line 11956)
+- new OpCode (line 11959)
+- new Operand\Literal (line 11975)
+- new OpCode (line 11980)
+- new OpCode (line 11992)
+- new OpCode (line 12202)
+- new OpCode (line 12232)
+- new OpCode (line 12285)
+- new OpCode (line 12432)
+- new OpCode (line 12439)
+- new Block (line 12447)
+- new Block (line 12451)
+- new OpCode (line 12476)
+- new Block (line 12484)
+- new OpCode (line 12494)
+- new OpCode (line 12505)
+- new OpCode (line 12516)
+- new OpCode (line 12526)
+- new OpCode (line 12537)
- new OpCode (line 12546)
-- new OpCode (line 12557)
-- new OpCode (line 12578)
-- new OpCode (line 12934)
-- new OpCode (line 12951)
-- new OpCode (line 12961)
-- new OpCode (line 12975)
-- new OpCode (line 12988)
-- new Block (line 13219)
-- new Block (line 13223)
-- new Operand\Literal (line 13226)
-- new OpCode (line 13229)
-- new OpCode (line 13235)
-- new Block (line 13239)
-- new OpCode (line 13242)
-- new OpCode (line 13248)
-- new OpCode (line 13254)
-- new Block (line 13275)
-- new Block (line 13279)
-- new Operand\Literal (line 13282)
-- new OpCode (line 13285)
-- new OpCode (line 13291)
-- new Block (line 13295)
-- new OpCode (line 13300)
-- new OpCode (line 13309)
-- new OpCode (line 13317)
-- new OpCode (line 13368)
-- new Block (line 13395)
-- new Block (line 13412)
-- new Block (line 13434)
-- new OpCode (line 13438)
-- new OpCode (line 13444)
-- new Block (line 13448)
-- new OpCode (line 13458)
-- new OpCode (line 13463)
-- new OpCode (line 13478)
-- new Block (line 13503)
-- new OpCode (line 13507)
-- new OpCode (line 13513)
-- new Block (line 13517)
-- new OpCode (line 13521)
-- new OpCode (line 13527)
-- new OpCode (line 13532)
-- new OpCode (line 13547)
-- new Block (line 13571)
-- new Block (line 13575)
-- new Operand\Literal (line 13578)
-- new OpCode (line 13581)
-- new OpCode (line 13587)
-- new Block (line 13591)
-- new OpCode (line 13597)
-- new OpCode (line 13610)
-- new OpCode (line 13618)
-- new Variable (line 13699)
-- new Operand\Literal (line 13701)
-- new Block (line 13752)
-- new OpCode (line 13756)
-- new OpCode (line 13768)
-- new OpCode (line 13776)
-- new OpCode (line 13820)
-- new Op\Expr\Param (line 13957)
-- new Operand\Literal (line 13958)
-- new Op\Type\Mixed_ (line 13959)
-- new HashTable (line 13983)
-- new Variable (line 14046)
-- new Variable (line 14115)
-- new Operand\Literal (line 14163)
-- new Operand\Variable (line 14165)
-- new OpCode (line 14778)
-- new Block (line 14810)
+- new OpCode (line 12549)
+- new OpCode (line 12560)
+- new OpCode (line 12581)
+- new OpCode (line 12937)
+- new OpCode (line 12954)
+- new OpCode (line 12964)
+- new OpCode (line 12978)
+- new OpCode (line 12991)
+- new Block (line 13222)
+- new Block (line 13226)
+- new Operand\Literal (line 13229)
+- new OpCode (line 13232)
+- new OpCode (line 13238)
+- new Block (line 13242)
+- new OpCode (line 13245)
+- new OpCode (line 13251)
+- new OpCode (line 13257)
+- new Block (line 13278)
+- new Block (line 13282)
+- new Operand\Literal (line 13285)
+- new OpCode (line 13288)
+- new OpCode (line 13294)
+- new Block (line 13298)
+- new OpCode (line 13303)
+- new OpCode (line 13312)
+- new OpCode (line 13320)
+- new OpCode (line 13371)
+- new Block (line 13398)
+- new Block (line 13415)
+- new Block (line 13437)
+- new OpCode (line 13441)
+- new OpCode (line 13447)
+- new Block (line 13451)
+- new OpCode (line 13461)
+- new OpCode (line 13466)
+- new OpCode (line 13481)
+- new Block (line 13506)
+- new OpCode (line 13510)
+- new OpCode (line 13516)
+- new Block (line 13520)
+- new OpCode (line 13524)
+- new OpCode (line 13530)
+- new OpCode (line 13535)
+- new OpCode (line 13550)
+- new Block (line 13574)
+- new Block (line 13578)
+- new Operand\Literal (line 13581)
+- new OpCode (line 13584)
+- new OpCode (line 13590)
+- new Block (line 13594)
+- new OpCode (line 13600)
+- new OpCode (line 13613)
+- new OpCode (line 13621)
+- new Variable (line 13702)
+- new Operand\Literal (line 13704)
+- new Block (line 13755)
+- new OpCode (line 13759)
+- new OpCode (line 13771)
+- new OpCode (line 13779)
+- new OpCode (line 13823)
+- new Op\Expr\Param (line 13960)
+- new Operand\Literal (line 13961)
+- new Op\Type\Mixed_ (line 13962)
+- new HashTable (line 13986)
+- new Variable (line 14049)
+- new Variable (line 14118)
+- new Operand\Literal (line 14166)
+- new Operand\Variable (line 14168)
+- new OpCode (line 14781)
- new Block (line 14813)
-- new OpCode (line 14816)
-- new OpCode (line 14822)
-- new OpCode (line 14852)
-- new Block (line 14866)
-- new OpCode (line 14869)
-- new OpCode (line 14879)
-- new Temporary (line 14889)
-- new Variable (line 14899)
-- new Operand\Temporary (line 14901)
-- new OpCode (line 14948)
-- new Temporary (line 18001)
-- new Operand\Temporary (line 32388)
-- new Operand\Temporary (line 32393)
-- new Operand\Temporary (line 32466)
-- new Operand\Temporary (line 32471)
-- new OpCode (line 32627)
-- new OpCode (line 32759)
-- new OpCode (line 32831)
-- new OpCode (line 32934)
-- new OpCode (line 33008)
-- new OpCode (line 33151)
-- new OpCode (line 33254)
-- new OpCode (line 33348)
-- new OpCode (line 33429)
-- new OpCode (line 33514)
-- new OpCode (line 33604)
-- new Variable (line 33655)
-- new Operand\Temporary (line 33662)
-- new Operand\Temporary (line 33667)
-- new OpCode (line 33727)
-- new CfgVariable (line 36373)
-- new Literal (line 36373)
-- new Variable (line 36405)
-- new Variable (line 36459)
-- new OpCode (line 36488)
-- new Operand\Temporary (line 37396)
-- new OpCode (line 37398)
-- new OpCode (line 37426)
-- new OpCode (line 37442)
-- new OpCode (line 37450)
-- new OpCode (line 37457)
-- new OpCode (line 37469)
-- new OpCode (line 37486)
-- new OpCode (line 37492)
-- new OpCode (line 37498)
-- new OpCode (line 37503)
-- new OpCode (line 37519)
-- new OpCode (line 37532)
-- new Variable (line 37545)
-- new Operand\Literal (line 37547)
-- new OpCode (line 37550)
-- new OpCode (line 37576)
+- new Block (line 14816)
+- new OpCode (line 14819)
+- new OpCode (line 14825)
+- new OpCode (line 14855)
+- new Block (line 14869)
+- new OpCode (line 14872)
+- new OpCode (line 14882)
+- new Temporary (line 14892)
+- new Variable (line 14902)
+- new Operand\Temporary (line 14904)
+- new OpCode (line 14951)
+- new Temporary (line 18004)
+- new Operand\Temporary (line 32391)
+- new Operand\Temporary (line 32396)
+- new Operand\Temporary (line 32469)
+- new Operand\Temporary (line 32474)
+- new OpCode (line 32630)
+- new OpCode (line 32762)
+- new OpCode (line 32834)
+- new OpCode (line 32937)
+- new OpCode (line 33011)
+- new OpCode (line 33154)
+- new OpCode (line 33257)
+- new OpCode (line 33351)
+- new OpCode (line 33432)
+- new OpCode (line 33517)
+- new OpCode (line 33607)
+- new Variable (line 33658)
+- new Operand\Temporary (line 33665)
+- new Operand\Temporary (line 33670)
+- new OpCode (line 33730)
+- new CfgVariable (line 36376)
+- new Literal (line 36376)
+- new Variable (line 36408)
+- new Variable (line 36462)
+- new OpCode (line 36491)
+- new Operand\Temporary (line 37399)
+- new OpCode (line 37401)
+- new OpCode (line 37429)
+- new OpCode (line 37445)
+- new OpCode (line 37453)
+- new OpCode (line 37460)
+- new OpCode (line 37472)
+- new OpCode (line 37489)
+- new OpCode (line 37495)
+- new OpCode (line 37501)
+- new OpCode (line 37506)
+- new OpCode (line 37522)
+- new OpCode (line 37535)
+- new Variable (line 37548)
+- new Operand\Literal (line 37550)
+- new OpCode (line 37553)
- new OpCode (line 37579)
-- new OpCode (line 37640)
-- new OpCode (line 37651)
-- new OpCode (line 37664)
-- new OpCode (line 37841)
-- new CompileFatal (line 37903)
-- new Operand\Variable (line 38254)
-- new Operand\Literal (line 38254)
-- new OpCode (line 38286)
-- new OpCode (line 38308)
-- new OpCode (line 38316)
-- new OpCode (line 38322)
-- new Variable (line 38352)
-- new Temporary (line 38354)
-- new Variable (line 38362)
-- new Temporary (line 38364)
-- new OpCode (line 38412)
-- new Operand\Temporary (line 38433)
-- new Operand\Temporary (line 38439)
-- new Operand\Temporary (line 38445)
-- new Operand\Temporary (line 38451)
-- new Operand\Temporary (line 38468)
-- new Operand\Temporary (line 38477)
-- new Operand\Temporary (line 40719)
-- new Variable (line 41261)
-- new Variable (line 41265)
-- new Variable (line 41273)
-- new Variable (line 41277)
-- new Variable (line 41561)
-- new OpCode (line 41669)
-- new OpCode (line 41863)
-- new OpCode (line 41886)
-- new OpCode (line 41919)
-- new OpCode (line 41979)
-- new OpCode (line 42009)
-- new OpCode (line 42040)
-- new OpCode (line 42088)
-- new OpCode (line 42105)
-- new OpCode (line 42124)
-- new OpCode (line 42144)
-- new OpCode (line 42158)
-- new Operand\Temporary (line 42180)
-- new OpCode (line 42214)
-- new OpCode (line 42241)
-- new Operand\Temporary (line 42245)
-- new OpCode (line 42261)
-- new OpCode (line 42294)
-- new OpCode (line 42335)
-- new OpCode (line 42351)
-- new OpCode (line 42374)
-- new OpCode (line 42391)
-- new OpCode (line 42405)
-- new OpCode (line 42427)
-- new OpCode (line 42449)
-- new OpCode (line 42458)
-- new OpCode (line 42478)
-- new OpCode (line 42577)
-- new OpCode (line 42590)
-- new OpCode (line 42603)
-- new OpCode (line 42608)
-- new OpCode (line 42625)
-- new OpCode (line 42671)
-- new OpCode (line 42720)
-- new OpCode (line 42843)
-- new OpCode (line 42882)
-- new OpCode (line 42960)
-- new OpCode (line 42981)
-- new OpCode (line 43016)
-- new OpCode (line 43049)
-- new OpCode (line 43141)
-- new OpCode (line 43195)
-- new OpCode (line 43217)
-- new Operand\Temporary (line 44975)
-- new Operand\Temporary (line 45506)
-- new Operand\Temporary (line 45692)
-- new Operand\Temporary (line 45724)
-- new Operand\Temporary (line 45827)
-- new Operand\Temporary (line 45956)
-- new OpCode (line 45958)
-- new OpCode (line 47541)
-- new Operand\Temporary (line 48012)
-- new OpCode (line 48617)
-- new Operand\Literal (line 48982)
-- new Variable (line 48984)
-- new OpCode (line 49030)
-- new OpCode (line 49245)
-- new OpCode (line 49255)
+- new OpCode (line 37582)
+- new OpCode (line 37643)
+- new OpCode (line 37654)
+- new OpCode (line 37667)
+- new OpCode (line 37844)
+- new CompileFatal (line 37906)
+- new Operand\Variable (line 38257)
+- new Operand\Literal (line 38257)
+- new OpCode (line 38289)
+- new OpCode (line 38311)
+- new OpCode (line 38319)
+- new OpCode (line 38325)
+- new Variable (line 38355)
+- new Temporary (line 38357)
+- new Variable (line 38365)
+- new Temporary (line 38367)
+- new OpCode (line 38415)
+- new Operand\Temporary (line 38436)
+- new Operand\Temporary (line 38442)
+- new Operand\Temporary (line 38448)
+- new Operand\Temporary (line 38454)
+- new Operand\Temporary (line 38471)
+- new Operand\Temporary (line 38480)
+- new Operand\Temporary (line 40722)
+- new Variable (line 41264)
+- new Variable (line 41268)
+- new Variable (line 41276)
+- new Variable (line 41280)
+- new Variable (line 41564)
+- new OpCode (line 41672)
+- new OpCode (line 41866)
+- new OpCode (line 41889)
+- new OpCode (line 41922)
+- new OpCode (line 41982)
+- new OpCode (line 42012)
+- new OpCode (line 42043)
+- new OpCode (line 42091)
+- new OpCode (line 42108)
+- new OpCode (line 42127)
+- new OpCode (line 42147)
+- new OpCode (line 42161)
+- new Operand\Temporary (line 42183)
+- new OpCode (line 42217)
+- new OpCode (line 42244)
+- new Operand\Temporary (line 42248)
+- new OpCode (line 42264)
+- new OpCode (line 42297)
+- new OpCode (line 42338)
+- new OpCode (line 42354)
+- new OpCode (line 42377)
+- new OpCode (line 42394)
+- new OpCode (line 42408)
+- new OpCode (line 42430)
+- new OpCode (line 42452)
+- new OpCode (line 42461)
+- new OpCode (line 42481)
+- new OpCode (line 42580)
+- new OpCode (line 42593)
+- new OpCode (line 42606)
+- new OpCode (line 42611)
+- new OpCode (line 42628)
+- new OpCode (line 42674)
+- new OpCode (line 42723)
+- new OpCode (line 42846)
+- new OpCode (line 42885)
+- new OpCode (line 42963)
+- new OpCode (line 42984)
+- new OpCode (line 43019)
+- new OpCode (line 43052)
+- new OpCode (line 43144)
+- new OpCode (line 43198)
+- new OpCode (line 43220)
+- new Operand\Temporary (line 44978)
+- new Operand\Temporary (line 45509)
+- new Operand\Temporary (line 45695)
+- new Operand\Temporary (line 45727)
+- new Operand\Temporary (line 45830)
+- new Operand\Temporary (line 45959)
+- new OpCode (line 45961)
+- new OpCode (line 47544)
+- new Operand\Temporary (line 48015)
+- new OpCode (line 48620)
+- new Operand\Literal (line 48985)
+- new Variable (line 48987)
+- new OpCode (line 49033)
+- new OpCode (line 49248)
- new OpCode (line 49258)
-- new Operand\Temporary (line 49285)
-- new Operand\Temporary (line 49322)
-- new OpCode (line 49324)
-- new OpCode (line 49335)
-- new Operand\Temporary (line 49338)
-- new OpCode (line 49340)
-- new OpCode (line 49348)
-- new OpCode (line 49358)
-- new OpCode (line 49366)
+- new OpCode (line 49261)
+- new Operand\Temporary (line 49288)
+- new Operand\Temporary (line 49325)
+- new OpCode (line 49327)
+- new OpCode (line 49338)
+- new Operand\Temporary (line 49341)
+- new OpCode (line 49343)
+- new OpCode (line 49351)
+- new OpCode (line 49361)
- new OpCode (line 49369)
-- new OpCode (line 49394)
-- new OpCode (line 49420)
-- new OpCode (line 49438)
-- new OpCode (line 49445)
-- new Operand\Literal (line 50210)
-- new OpCode (line 51747)
-- new Literal (line 51908)
-- new OpCode (line 52007)
-- new Variable (line 52014)
-- new Temporary (line 52016)
-- new OpCode (line 52019)
-- new CompileFatal (line 52354)
-- new CompileFatal (line 52609)
+- new OpCode (line 49372)
+- new OpCode (line 49397)
+- new OpCode (line 49423)
+- new OpCode (line 49441)
+- new OpCode (line 49448)
+- new Operand\Literal (line 50213)
+- new OpCode (line 51750)
+- new Literal (line 51911)
+- new OpCode (line 52010)
+- new Variable (line 52017)
+- new Temporary (line 52019)
+- new OpCode (line 52022)
+- new CompileFatal (line 52357)
+- new CompileFatal (line 52612)
- 1074 class method(s)
- 50 closure(s)
@@ -40556,63 +40558,63 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new Variable (line 11901)
- new Variable (line 11926)
- new Variable (line 11947)
-- new CompileError (line 12683)
-- new CompileError (line 12787)
-- new Variable (line 12844)
-- new Variable (line 13227)
-- new Variable (line 13247)
-- new Variable (line 13268)
-- new Variable (line 13302)
-- new Variable (line 13337)
-- new Variable (line 13431)
-- new Variable (line 13455)
-- new Variable (line 13465)
-- new Variable (line 13639)
-- new Variable (line 13657)
-- new Variable (line 13707)
-- new Variable (line 13734)
-- new Variable (line 13760)
-- new Variable (line 14089)
-- new Variable (line 14457)
-- new Variable (line 14487)
-- new Variable (line 14506)
-- new Variable (line 14536)
-- new Variable (line 14573)
-- new Variable (line 14621)
-- new Variable (line 14664)
-- new VM\Variable (line 15009)
-- new Variable (line 15043)
-- new Variable (line 15094)
-- new Variable (line 15110)
-- new Variable (line 15129)
-- new Variable (line 15136)
-- new OpCode (line 15156)
-- new Variable (line 15157)
-- new Variable (line 15329)
-- new Variable (line 15367)
-- new OpCode (line 15381)
-- new Variable (line 15382)
-- new Variable (line 15441)
-- new OpCode (line 15462)
-- new Variable (line 15463)
-- new Variable (line 15560)
-- new Variable (line 15582)
-- new Variable (line 15650)
-- new Operand\Literal (line 15659)
-- new Variable (line 15674)
-- new Variable (line 15856)
-- new VM\PropertyIsInitializedHandler (line 15938)
-- new JIT\Call\RuntimeIndirectInstanceMethodCall (line 15978)
-- new JIT\Call\RuntimeIndirectInstanceMethodCall (line 16160)
-- new JIT\Call\RuntimeIndirectInstanceMethodCall (line 16265)
-- new JIT\Call\VmCoerceVariableToString (line 16378)
-- new JIT\Call\IncludePathResolverResolve (line 16645)
-- new Variable (line 17703)
-- new VM (line 17747)
-- new VM\Variable (line 17756)
-- new Variable (line 17777)
-- new Variable (line 17823)
-- new Variable (line 18317)
+- new CompileError (line 12687)
+- new CompileError (line 12791)
+- new Variable (line 12848)
+- new Variable (line 13231)
+- new Variable (line 13251)
+- new Variable (line 13272)
+- new Variable (line 13306)
+- new Variable (line 13341)
+- new Variable (line 13435)
+- new Variable (line 13459)
+- new Variable (line 13469)
+- new Variable (line 13643)
+- new Variable (line 13661)
+- new Variable (line 13711)
+- new Variable (line 13738)
+- new Variable (line 13764)
+- new Variable (line 14093)
+- new Variable (line 14461)
+- new Variable (line 14491)
+- new Variable (line 14510)
+- new Variable (line 14540)
+- new Variable (line 14577)
+- new Variable (line 14625)
+- new Variable (line 14668)
+- new VM\Variable (line 15013)
+- new Variable (line 15047)
+- new Variable (line 15098)
+- new Variable (line 15114)
+- new Variable (line 15133)
+- new Variable (line 15140)
+- new OpCode (line 15160)
+- new Variable (line 15161)
+- new Variable (line 15333)
+- new Variable (line 15371)
+- new OpCode (line 15385)
+- new Variable (line 15386)
+- new Variable (line 15445)
+- new OpCode (line 15466)
+- new Variable (line 15467)
+- new Variable (line 15564)
+- new Variable (line 15586)
+- new Variable (line 15654)
+- new Operand\Literal (line 15663)
+- new Variable (line 15678)
+- new Variable (line 15860)
+- new VM\PropertyIsInitializedHandler (line 15942)
+- new JIT\Call\RuntimeIndirectInstanceMethodCall (line 15982)
+- new JIT\Call\RuntimeIndirectInstanceMethodCall (line 16164)
+- new JIT\Call\RuntimeIndirectInstanceMethodCall (line 16269)
+- new JIT\Call\VmCoerceVariableToString (line 16382)
+- new JIT\Call\IncludePathResolverResolve (line 16649)
+- new Variable (line 17707)
+- new VM (line 17751)
+- new VM\Variable (line 17760)
+- new Variable (line 17781)
+- new Variable (line 17827)
+- new Variable (line 18321)
- 370 class method(s)
- 7 closure(s)
@@ -42430,7 +42432,8 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/JIT/Builtin/ReflectionSetup.php`
**Warnings** (review for bootstrap subset):
-- 11 class method(s)
+- new Variable (line 162)
+- 12 class method(s)
### `lib/JIT/Builtin/RequestParseBodyRuntime.php`
@@ -44098,36 +44101,36 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/JIT/Builtin/Type/Object_.php`
**Warnings** (review for bootstrap subset):
-- new Variable (line 888)
-- new Variable (line 927)
-- new Variable (line 964)
-- new Variable (line 1823)
-- new Variable (line 2251)
-- new Variable (line 2313)
-- new Variable (line 2337)
-- new Variable (line 2349)
-- new Variable (line 2362)
-- new Variable (line 2521)
-- new VMVariable (line 3289)
-- new VMVariable (line 3307)
-- new VMVariable (line 3315)
-- new VMVariable (line 3333)
-- new ReflectionClassConstant (line 4542)
-- new Variable (line 4922)
-- new Variable (line 4948)
-- new Variable (line 4956)
+- new Variable (line 891)
+- new Variable (line 930)
+- new Variable (line 967)
+- new Variable (line 1826)
+- new Variable (line 2254)
+- new Variable (line 2316)
+- new Variable (line 2340)
+- new Variable (line 2352)
+- new Variable (line 2365)
+- new Variable (line 2524)
+- new VMVariable (line 3312)
+- new VMVariable (line 3330)
+- new VMVariable (line 3338)
+- new VMVariable (line 3356)
+- new ReflectionClassConstant (line 4565)
+- new Variable (line 4945)
+- new Variable (line 4971)
- new Variable (line 4979)
-- new Variable (line 5005)
-- new Variable (line 5013)
-- new Variable (line 5087)
-- new Literal (line 5104)
-- new Literal (line 5109)
-- new Literal (line 5114)
-- new Variable (line 5125)
-- new Variable (line 5158)
+- new Variable (line 5002)
+- new Variable (line 5028)
+- new Variable (line 5036)
+- new Variable (line 5110)
+- new Literal (line 5127)
+- new Literal (line 5132)
+- new Literal (line 5137)
+- new Variable (line 5148)
- new Variable (line 5181)
-- new Variable (line 5545)
-- 260 class method(s)
+- new Variable (line 5204)
+- new Variable (line 5568)
+- 262 class method(s)
- 8 closure(s)
### `lib/JIT/Builtin/Type/String_.php`
@@ -44736,6 +44739,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 1 class method(s)
+### `lib/JIT/Call/ReflectionAttributeGetTarget.php`
+
+**Warnings** (review for bootstrap subset):
+- 1 class method(s)
+
### `lib/JIT/Call/ReflectionAttributeNewInstance.php`
**Warnings** (review for bootstrap subset):
@@ -44760,8 +44768,8 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/JIT/Call/ReflectionClassGetAttributes.php`
**Warnings** (review for bootstrap subset):
-- new Variable (line 82)
-- new Variable (line 89)
+- new Variable (line 91)
+- new Variable (line 98)
- 1 class method(s)
### `lib/JIT/Call/ReflectionClassGetMethod.php`
@@ -44813,7 +44821,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/JIT/Call/ReflectionConstantGetAttributes.php`
**Warnings** (review for bootstrap subset):
-- new Variable (line 81)
+- new Variable (line 90)
- 1 class method(s)
### `lib/JIT/Call/ReflectionConstantGetName.php`
@@ -44860,7 +44868,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/JIT/Call/ReflectionMethodGetAttributes.php`
**Warnings** (review for bootstrap subset):
-- new Variable (line 80)
+- new Variable (line 89)
- 1 class method(s)
### `lib/JIT/Call/ReflectionMethodGetNamedArguments.php`
@@ -44887,7 +44895,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/JIT/Call/ReflectionPropertyGetAttributes.php`
**Warnings** (review for bootstrap subset):
-- new Variable (line 81)
+- new Variable (line 90)
- 1 class method(s)
### `lib/JIT/Call/RuntimeIndirectClosureCall.php`
@@ -45190,32 +45198,33 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new Call\ReflectionFunctionGetNamedArguments (line 951)
- new Call\ReflectionMethodGetNamedArguments (line 952)
- new Call\ReflectionAttributeGetName (line 954)
-- new Call\ReflectionAttributeNewInstance (line 955)
-- new Call\ReflectionEnumConstruct (line 956)
-- new Call\ReflectionEnumGetName (line 957)
-- new Call\ReflectionEnumHasCase (line 958)
-- new Call\ReflectionEnumGetCase (line 959)
-- new Call\ReflectionEnumIsBacked (line 960)
-- new Call\ReflectionEnumUnitCaseGetName (line 961)
+- new Call\ReflectionAttributeGetTarget (line 955)
+- new Call\ReflectionAttributeNewInstance (line 956)
+- new Call\ReflectionEnumConstruct (line 957)
+- new Call\ReflectionEnumGetName (line 958)
+- new Call\ReflectionEnumHasCase (line 959)
+- new Call\ReflectionEnumGetCase (line 960)
+- new Call\ReflectionEnumIsBacked (line 961)
- new Call\ReflectionEnumUnitCaseGetName (line 962)
-- new Call\ExceptionGetMessage (line 963)
-- new Call\DatePeriodCreateFromISO8601String (line 969)
-- new Call\DatePeriodIteratorMethod (line 971)
-- new Call\DateTimeFormat (line 974)
+- new Call\ReflectionEnumUnitCaseGetName (line 963)
+- new Call\ExceptionGetMessage (line 964)
+- new Call\DatePeriodCreateFromISO8601String (line 970)
+- new Call\DatePeriodIteratorMethod (line 972)
- new Call\DateTimeFormat (line 975)
-- new Result (line 1318)
-- new Result (line 1340)
-- new Variable (line 1941)
-- new Variable (line 2078)
-- new Variable (line 2304)
-- new Variable (line 2362)
-- new VMVariable (line 2500)
-- new VMVariable (line 2516)
-- new VMVariable (line 2522)
-- new VMVariable (line 2528)
-- new VMVariable (line 2539)
-- new Variable (line 2569)
-- new Variable (line 2609)
+- new Call\DateTimeFormat (line 976)
+- new Result (line 1319)
+- new Result (line 1341)
+- new Variable (line 1942)
+- new Variable (line 2079)
+- new Variable (line 2305)
+- new Variable (line 2363)
+- new VMVariable (line 2501)
+- new VMVariable (line 2517)
+- new VMVariable (line 2523)
+- new VMVariable (line 2529)
+- new VMVariable (line 2540)
+- new Variable (line 2570)
+- new Variable (line 2610)
- 102 class method(s)
- 28 closure(s)
@@ -46714,132 +46723,132 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
- new Variable (line 6908)
- new Variable (line 6927)
- new Variable (line 7002)
-- new Variable (line 7054)
-- new Variable (line 7374)
-- new WeakMapIterator (line 7759)
-- new ObjectPropertyIterator (line 7764)
-- new Variable (line 7997)
-- new Variable (line 8469)
-- new Variable (line 8481)
-- new Variable (line 8587)
-- new Variable (line 8642)
-- new Variable (line 8769)
-- new Variable (line 8828)
-- new Variable (line 8852)
-- new Variable (line 9189)
-- new Variable (line 9196)
-- new Variable (line 9263)
-- new Variable (line 9294)
-- new VM\PropertyHookRefWriteSignal (line 9299)
-- new VM\PropertyHookFiberSuspendSignal (line 9302)
-- new Variable (line 9328)
-- new Variable (line 9335)
-- new Variable (line 9352)
-- new VM\NativeFiberStackOverflow (line 10265)
-- new VM\BuiltinCallbackCatchRedirect (line 10316)
+- new Variable (line 7072)
+- new Variable (line 7392)
+- new WeakMapIterator (line 7777)
+- new ObjectPropertyIterator (line 7782)
+- new Variable (line 8015)
+- new Variable (line 8487)
+- new Variable (line 8499)
+- new Variable (line 8605)
+- new Variable (line 8660)
+- new Variable (line 8787)
+- new Variable (line 8846)
+- new Variable (line 8870)
+- new Variable (line 9207)
+- new Variable (line 9214)
+- new Variable (line 9281)
+- new Variable (line 9312)
+- new VM\PropertyHookRefWriteSignal (line 9317)
+- new VM\PropertyHookFiberSuspendSignal (line 9320)
+- new Variable (line 9346)
+- new Variable (line 9353)
+- new Variable (line 9370)
+- new VM\NativeFiberStackOverflow (line 10283)
- new VM\BuiltinCallbackCatchRedirect (line 10334)
-- new Variable (line 10437)
-- new Variable (line 10545)
-- new Variable (line 10678)
-- new ScriptExit (line 10834)
-- new Exception (line 10851)
-- new ScriptExit (line 10859)
-- new Error (line 11122)
-- new VM\PropertyHookRefWriteSignal (line 11170)
-- new Variable (line 11194)
-- new VM\PropertyHookRefWriteSignal (line 11199)
-- new VM\PropertyHookFiberSuspendSignal (line 11202)
-- new VM\PropertyHookRefWriteSignal (line 11327)
-- new Variable (line 11344)
-- new VM\PropertyHookRefWriteSignal (line 11358)
-- new VM\PropertyHookRefWriteSignal (line 11370)
-- new Variable (line 11601)
-- new Variable (line 11624)
-- new Variable (line 11634)
-- new Variable (line 11644)
-- new VM\PropertyHookRefWriteSignal (line 11650)
-- new VM\PropertyHookRefWriteSignal (line 11658)
-- new VM\PropertyHookRefWriteSignal (line 11661)
-- new Variable (line 11673)
-- new Variable (line 11687)
-- new VM\PropertyHookRefWriteSignal (line 11693)
-- new Variable (line 11724)
-- new VM\PropertyHookRefWriteSignal (line 11729)
-- new VM\PropertyHookFiberSuspendSignal (line 11732)
-- new Error (line 12233)
-- new Error (line 12243)
-- new Error (line 12253)
-- new Error (line 12263)
-- new ClassEntry (line 13033)
-- new Variable (line 13034)
-- new VM\ClassProperty (line 13035)
-- new ObjectEntry (line 13038)
-- new Variable (line 13041)
-- new Variable (line 13122)
-- new Error (line 13208)
-- new Variable (line 13300)
-- new VM\GeneratorUncaughtThrow (line 13302)
-- new Error (line 13371)
-- new Variable (line 13416)
-- new VM\GeneratorUncaughtThrow (line 13430)
-- new Variable (line 13519)
-- new VM\GeneratorUncaughtThrow (line 13539)
-- new Variable (line 13607)
-- new Variable (line 13609)
-- new Variable (line 13613)
-- new Variable (line 13743)
-- new Variable (line 13785)
-- new Variable (line 13956)
-- new Variable (line 13972)
-- new Variable (line 14017)
-- new Variable (line 14158)
-- new Variable (line 14232)
-- new Variable (line 14396)
-- new VM\PropertyIsInitializedHandler (line 14405)
-- new Error (line 14524)
-- new VM\EnumFromHandler (line 14550)
-- new CompileError (line 15276)
-- new VM\ClassProperty (line 15441)
-- new Variable (line 15754)
-- new CompileError (line 15772)
-- new Variable (line 15959)
-- new Variable (line 15961)
-- new ClassEntry (line 16004)
-- new Func\PHP (line 16011)
-- new VM\ClassProperty (line 16139)
-- new Func\PHP (line 16286)
-- new Variable (line 16362)
-- new Variable (line 16369)
-- new Variable (line 16375)
-- new Variable (line 16412)
-- new Variable (line 16441)
-- new Variable (line 16626)
-- new Variable (line 16672)
-- new VM\ClassProperty (line 16737)
-- new Error (line 16783)
-- new Error (line 16818)
-- new Error (line 16821)
-- new Error (line 16824)
-- new Error (line 16827)
-- new ObjectEntry (line 16829)
+- new VM\BuiltinCallbackCatchRedirect (line 10352)
+- new Variable (line 10455)
+- new Variable (line 10563)
+- new Variable (line 10696)
+- new ScriptExit (line 10852)
+- new Exception (line 10869)
+- new ScriptExit (line 10877)
+- new Error (line 11140)
+- new VM\PropertyHookRefWriteSignal (line 11188)
+- new Variable (line 11212)
+- new VM\PropertyHookRefWriteSignal (line 11217)
+- new VM\PropertyHookFiberSuspendSignal (line 11220)
+- new VM\PropertyHookRefWriteSignal (line 11345)
+- new Variable (line 11362)
+- new VM\PropertyHookRefWriteSignal (line 11376)
+- new VM\PropertyHookRefWriteSignal (line 11388)
+- new Variable (line 11619)
+- new Variable (line 11642)
+- new Variable (line 11652)
+- new Variable (line 11662)
+- new VM\PropertyHookRefWriteSignal (line 11668)
+- new VM\PropertyHookRefWriteSignal (line 11676)
+- new VM\PropertyHookRefWriteSignal (line 11679)
+- new Variable (line 11691)
+- new Variable (line 11705)
+- new VM\PropertyHookRefWriteSignal (line 11711)
+- new Variable (line 11742)
+- new VM\PropertyHookRefWriteSignal (line 11747)
+- new VM\PropertyHookFiberSuspendSignal (line 11750)
+- new Error (line 12251)
+- new Error (line 12261)
+- new Error (line 12271)
+- new Error (line 12281)
+- new ClassEntry (line 13051)
+- new Variable (line 13052)
+- new VM\ClassProperty (line 13053)
+- new ObjectEntry (line 13056)
+- new Variable (line 13059)
+- new Variable (line 13140)
+- new Error (line 13226)
+- new Variable (line 13318)
+- new VM\GeneratorUncaughtThrow (line 13320)
+- new Error (line 13389)
+- new Variable (line 13434)
+- new VM\GeneratorUncaughtThrow (line 13448)
+- new Variable (line 13537)
+- new VM\GeneratorUncaughtThrow (line 13557)
+- new Variable (line 13625)
+- new Variable (line 13627)
+- new Variable (line 13631)
+- new Variable (line 13761)
+- new Variable (line 13803)
+- new Variable (line 13974)
+- new Variable (line 13990)
+- new Variable (line 14035)
+- new Variable (line 14176)
+- new Variable (line 14250)
+- new Variable (line 14414)
+- new VM\PropertyIsInitializedHandler (line 14423)
+- new Error (line 14542)
+- new VM\EnumFromHandler (line 14568)
+- new CompileError (line 15294)
+- new VM\ClassProperty (line 15459)
+- new Variable (line 15772)
+- new CompileError (line 15790)
+- new Variable (line 15977)
+- new Variable (line 15979)
+- new ClassEntry (line 16022)
+- new Func\PHP (line 16029)
+- new VM\ClassProperty (line 16157)
+- new Func\PHP (line 16304)
+- new Variable (line 16380)
+- new Variable (line 16387)
+- new Variable (line 16393)
+- new Variable (line 16430)
+- new Variable (line 16459)
+- new Variable (line 16644)
+- new Variable (line 16690)
+- new VM\ClassProperty (line 16755)
+- new Error (line 16801)
+- new Error (line 16836)
+- new Error (line 16839)
- new Error (line 16842)
- new Error (line 16845)
-- new Error (line 16848)
-- new Error (line 16867)
-- new ObjectEntry (line 16871)
-- new Variable (line 16873)
-- new Variable (line 16887)
-- new Variable (line 16914)
-- new Variable (line 16927)
-- new Error (line 17057)
-- new Error (line 17062)
-- new VM\ObjectEntry (line 17066)
-- new Variable (line 17210)
+- new ObjectEntry (line 16847)
+- new Error (line 16860)
+- new Error (line 16863)
+- new Error (line 16866)
+- new Error (line 16885)
+- new ObjectEntry (line 16889)
+- new Variable (line 16891)
+- new Variable (line 16905)
+- new Variable (line 16932)
+- new Variable (line 16945)
+- new Error (line 17075)
+- new Error (line 17080)
+- new VM\ObjectEntry (line 17084)
- new Variable (line 17228)
-- new NoDiscardMetadata (line 17397)
-- new Variable (line 17566)
-- new Variable (line 17568)
-- new Variable (line 17668)
+- new Variable (line 17246)
+- new NoDiscardMetadata (line 17415)
+- new Variable (line 17584)
+- new Variable (line 17586)
+- new Variable (line 17686)
- 496 class method(s)
- 25 closure(s)
@@ -47435,6 +47444,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
**Warnings** (review for bootstrap subset):
- 1 class method(s)
+### `lib/VM/Builtin/ReflectionAttributeGetTarget.php`
+
+**Warnings** (review for bootstrap subset):
+- 1 class method(s)
+
### `lib/VM/Builtin/ReflectionAttributeIsRepeated.php`
**Warnings** (review for bootstrap subset):
@@ -49026,508 +49040,510 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/VM/BuiltinClasses.php`
**Warnings** (review for bootstrap subset):
-- new ClassEntry (line 414)
-- new ClassEntry (line 418)
-- new ClassEntry (line 424)
-- new ClassEntry (line 451)
-- new ClassEntry (line 460)
-- new ClassEntry (line 469)
-- new ClassEntry (line 474)
-- new ClassEntry (line 484)
-- new ClassEntry (line 492)
-- new ClassEntry (line 500)
-- new ClassEntry (line 508)
-- new ResourceConstruct (line 510)
-- new ClassEntry (line 518)
-- new Variable (line 519)
-- new ClassProperty (line 520)
-- new WeakReferenceCreate (line 527)
-- new WeakReferenceGet (line 529)
-- new WeakReferenceConstruct (line 531)
-- new ClassEntry (line 539)
-- new Variable (line 541)
-- new ClassProperty (line 542)
-- new ClassProperty (line 547)
-- new WeakMapConstruct (line 553)
-- new WeakMapOffsetSet (line 558)
-- new WeakMapOffsetGet (line 559)
-- new WeakMapOffsetExists (line 560)
-- new WeakMapOffsetUnset (line 561)
-- new WeakMapCount (line 562)
-- new Variable (line 573)
+- new ClassEntry (line 415)
+- new ClassEntry (line 419)
+- new ClassEntry (line 425)
+- new ClassEntry (line 452)
+- new ClassEntry (line 461)
+- new ClassEntry (line 470)
+- new ClassEntry (line 475)
+- new ClassEntry (line 485)
+- new ClassEntry (line 493)
+- new ClassEntry (line 501)
+- new ClassEntry (line 509)
+- new ResourceConstruct (line 511)
+- new ClassEntry (line 519)
+- new Variable (line 520)
+- new ClassProperty (line 521)
+- new WeakReferenceCreate (line 528)
+- new WeakReferenceGet (line 530)
+- new WeakReferenceConstruct (line 532)
+- new ClassEntry (line 540)
+- new Variable (line 542)
+- new ClassProperty (line 543)
+- new ClassProperty (line 548)
+- new WeakMapConstruct (line 554)
+- new WeakMapOffsetSet (line 559)
+- new WeakMapOffsetGet (line 560)
+- new WeakMapOffsetExists (line 561)
+- new WeakMapOffsetUnset (line 562)
+- new WeakMapCount (line 563)
- new Variable (line 574)
- new Variable (line 575)
- new Variable (line 576)
-- new Variable (line 578)
-- new ClassEntry (line 582)
-- new ClassProperty (line 584)
+- new Variable (line 577)
+- new Variable (line 579)
+- new ClassEntry (line 583)
- new ClassProperty (line 585)
- new ClassProperty (line 586)
-- new ReflectionAttributeGetName (line 587)
-- new ReflectionAttributeGetArguments (line 589)
-- new ReflectionAttributeIsRepeated (line 591)
-- new ReflectionAttributeNewInstance (line 593)
-- new ClassEntry (line 597)
-- new ClassProperty (line 598)
-- new ReflectionExtensionConstruct (line 599)
-- new ReflectionExtensionGetName (line 602)
-- new ReflectionExtensionGetVersion (line 604)
-- new ReflectionExtensionGetFunctions (line 606)
-- new ReflectionExtensionGetClasses (line 608)
-- new ReflectionExtensionGetConstants (line 610)
-- new ClassEntry (line 614)
-- new ClassProperty (line 615)
-- new ClassProperty (line 616)
-- new ClassProperty (line 617)
-- new ClassProperty (line 618)
+- new ClassProperty (line 587)
+- new ClassProperty (line 588)
+- new ReflectionAttributeGetName (line 589)
+- new ReflectionAttributeGetArguments (line 591)
+- new ReflectionAttributeIsRepeated (line 593)
+- new ReflectionAttributeGetTarget (line 595)
+- new ReflectionAttributeNewInstance (line 597)
+- new ClassEntry (line 601)
+- new ClassProperty (line 602)
+- new ReflectionExtensionConstruct (line 603)
+- new ReflectionExtensionGetName (line 606)
+- new ReflectionExtensionGetVersion (line 608)
+- new ReflectionExtensionGetFunctions (line 610)
+- new ReflectionExtensionGetClasses (line 612)
+- new ReflectionExtensionGetConstants (line 614)
+- new ClassEntry (line 618)
- new ClassProperty (line 619)
- new ClassProperty (line 620)
-- new ReflectionParameterConstruct (line 621)
-- new ReflectionParameterGetAttributes (line 624)
-- new ReflectionParameterGetName (line 626)
-- new ReflectionParameterGetType (line 628)
-- new ReflectionParameterHasType (line 630)
-- new ReflectionParameterGetValue (line 632)
-- new ReflectionParameterGetDefaultValue (line 634)
-- new ReflectionParameterGetDefaultValueConstantName (line 636)
-- new ReflectionParameterIsDefaultValueAvailable (line 638)
-- new ReflectionParameterIsDefaultValueConstant (line 640)
-- new ReflectionParameterIsOptional (line 642)
-- new ReflectionParameterAllowsNull (line 644)
-- new ReflectionParameterCanBePassedByValue (line 646)
-- new ReflectionParameterIsPassedByReference (line 648)
-- new ReflectionParameterIsNamed (line 650)
-- new ReflectionParameterIsVariadic (line 652)
-- new ReflectionParameterIsSensitive (line 654)
-- new ReflectionParameterIsSensitiveParameter (line 657)
-- new ReflectionParameterIsDeprecated (line 661)
-- new ReflectionParameterIsPromoted (line 664)
-- new ClassEntry (line 668)
-- new ReflectionFunctionGetAttributes (line 670)
-- new ClassEntry (line 674)
-- new ClassProperty (line 676)
-- new ClassProperty (line 677)
-- new ClassProperty (line 678)
-- new ReflectionMethodConstruct (line 679)
-- new ReflectionMethodGetAttributes (line 682)
-- new ReflectionMethodGetParameters (line 684)
-- new ReflectionMethodGetStaticVariables (line 686)
-- new ReflectionMethodGetNumberOfParameters (line 688)
-- new ReflectionMethodGetNumberOfRequiredParameters (line 690)
-- new ReflectionMethodGetName (line 692)
-- new ReflectionMethodGetDeclaringClass (line 694)
-- new ReflectionMethodIsDeprecated (line 696)
-- new ReflectionMethodGetDeprecatedMessage (line 698)
-- new ReflectionMethodGetDeprecatedVersion (line 700)
-- new ReflectionMethodHasPrototype (line 702)
-- new ReflectionMethodHasReturnType (line 704)
-- new ReflectionMethodGetReturnType (line 706)
-- new ReflectionMethodHasTentativeReturnType (line 708)
-- new ReflectionMethodGetTentativeReturnType (line 710)
-- new ReflectionMethodIsConstructor (line 712)
-- new ReflectionMethodIsDestructor (line 714)
-- new ReflectionMethodIsAbstract (line 716)
-- new ReflectionMethodIsInternal (line 718)
-- new ReflectionMethodIsVariadic (line 720)
-- new ReflectionMethodGetPrototype (line 722)
-- new ReflectionMethodInvoke (line 724)
-- new ReflectionMethodInvokeArgs (line 726)
-- new ReflectionMethodGetClosure (line 728)
-- new ReflectionMethodGetClosureScopeClass (line 730)
-- new ReflectionMethodGetClosureThis (line 732)
-- new ReflectionMethodGetClosureUsedVariables (line 734)
-- new ReflectionMethodCreateFromClosure (line 737)
-- new ReflectionMethodCreateFromMethodName (line 739)
-- new ReflectionMethodIsStatic (line 742)
-- new ReflectionMethodIsPublic (line 744)
-- new ReflectionMethodIsProtected (line 746)
-- new ReflectionMethodIsPrivate (line 748)
-- new ReflectionMethodSetAccessible (line 750)
-- new ReflectionMethodIsAccessible (line 752)
-- new ReflectionMethodIsFinal (line 754)
-- new ReflectionMethodIsGenerator (line 756)
-- new ReflectionMethodGetModifiers (line 758)
-- new ReflectionMethodGetDocComment (line 762)
-- new ReflectionMethodGetStartLine (line 763)
-- new ReflectionMethodGetEndLine (line 764)
-- new ReflectionMethodGetFileName (line 765)
-- new ReflectionMethodIsUserDefined (line 766)
-- new ReflectionMethodGetExtensionName (line 767)
-- new ReflectionFunctionGetNamedArguments (line 774)
-- new ClassEntry (line 779)
-- new ClassProperty (line 780)
-- new ReflectionClassConstruct (line 781)
-- new ReflectionClassGetAttributes (line 784)
-- new ReflectionClassGetName (line 786)
-- new ReflectionClassGetShortName (line 788)
-- new ReflectionClassGetMethod (line 790)
-- new ReflectionClassHasMethod (line 792)
-- new ReflectionClassGetProperty (line 794)
-- new ReflectionClassHasProperty (line 796)
-- new ReflectionClassGetProperties (line 798)
-- new ReflectionClassGetStaticProperties (line 800)
-- new ReflectionClassGetStaticPropertyValue (line 802)
-- new ReflectionClassSetStaticPropertyValue (line 804)
-- new ReflectionClassGetReadOnlyProperties (line 806)
-- new ReflectionClassGetLazyPropertyNames (line 808)
-- new ReflectionClassGetMethods (line 810)
-- new ReflectionClassGetReflectionConstant (line 812)
-- new ReflectionClassGetReflectionConstants (line 814)
-- new ReflectionClassGetConstants (line 816)
-- new ReflectionClassGetDefaultProperties (line 818)
-- new ReflectionClassGetTraitAliases (line 820)
-- new ReflectionClassGetTraitNames (line 822)
-- new ReflectionClassGetInterfaceNames (line 824)
-- new ReflectionClassGetParentClass (line 826)
-- new ReflectionClassGetConstructor (line 828)
-- new ReflectionClassIsSubclassOf (line 830)
-- new ReflectionClassImplementsInterface (line 832)
-- new ReflectionClassIsInstance (line 834)
-- new ReflectionClassIsInstantiable (line 836)
-- new ReflectionClassNewInstanceWithoutConstructor (line 838)
-- new ReflectionClassIsAbstract (line 840)
-- new ReflectionClassIsFinal (line 842)
-- new ReflectionClassIsInterface (line 844)
-- new ReflectionClassIsTrait (line 846)
-- new ReflectionClassGetModifiers (line 848)
-- new ReflectionClassIsIterateable (line 850)
-- new ReflectionClassGetConstant (line 852)
-- new ReflectionClassHasConstant (line 854)
-- new ReflectionClassNewLazyProxy (line 858)
-- new ReflectionClassNewLazyGhost (line 860)
-- new ReflectionClassCreateLazyGhost (line 862)
-- new ReflectionClassCreateLazyProxy (line 864)
-- new ReflectionClassGetLazyInitializer (line 866)
-- new ReflectionClassGetLazyInitializationException (line 868)
-- new ReflectionClassGetLazyProxyFactory (line 870)
-- new ReflectionClassIsUninitializedLazyObject (line 872)
-- new ReflectionClassInitializeLazyObject (line 874)
-- new ReflectionClassMarkLazyObjectAsInitialized (line 876)
-- new ReflectionClassResetAsLazyGhost (line 878)
-- new ReflectionClassResetAsLazyProxy (line 880)
-- new ReflectionClassResetAsLazyObject (line 882)
-- new ReflectionClassIsInternal (line 885)
-- new ReflectionClassIsEnum (line 887)
-- new ReflectionClassIsReadOnly (line 889)
-- new ReflectionClassIsAnonymous (line 891)
-- new ReflectionClassIsStatic (line 893)
-- new ReflectionClassIsDeprecated (line 895)
-- new ReflectionClassGetDeprecatedMessage (line 897)
-- new ReflectionClassGetDeprecatedVersion (line 899)
-- new ReflectionClassGetDocComment (line 903)
-- new ReflectionClassGetStartLine (line 904)
-- new ReflectionClassGetEndLine (line 905)
-- new ReflectionClassGetFileName (line 906)
-- new ReflectionClassIsUserDefined (line 907)
-- new ReflectionClassGetExtensionName (line 908)
-- new ReflectionClassGetExtension (line 909)
-- new ClassEntry (line 916)
-- new ClassProperty (line 917)
-- new ClassProperty (line 918)
-- new ClassProperty (line 919)
-- new ClassProperty (line 920)
+- new ClassProperty (line 621)
+- new ClassProperty (line 622)
+- new ClassProperty (line 623)
+- new ClassProperty (line 624)
+- new ReflectionParameterConstruct (line 625)
+- new ReflectionParameterGetAttributes (line 628)
+- new ReflectionParameterGetName (line 630)
+- new ReflectionParameterGetType (line 632)
+- new ReflectionParameterHasType (line 634)
+- new ReflectionParameterGetValue (line 636)
+- new ReflectionParameterGetDefaultValue (line 638)
+- new ReflectionParameterGetDefaultValueConstantName (line 640)
+- new ReflectionParameterIsDefaultValueAvailable (line 642)
+- new ReflectionParameterIsDefaultValueConstant (line 644)
+- new ReflectionParameterIsOptional (line 646)
+- new ReflectionParameterAllowsNull (line 648)
+- new ReflectionParameterCanBePassedByValue (line 650)
+- new ReflectionParameterIsPassedByReference (line 652)
+- new ReflectionParameterIsNamed (line 654)
+- new ReflectionParameterIsVariadic (line 656)
+- new ReflectionParameterIsSensitive (line 658)
+- new ReflectionParameterIsSensitiveParameter (line 661)
+- new ReflectionParameterIsDeprecated (line 665)
+- new ReflectionParameterIsPromoted (line 668)
+- new ClassEntry (line 672)
+- new ReflectionFunctionGetAttributes (line 674)
+- new ClassEntry (line 678)
+- new ClassProperty (line 680)
+- new ClassProperty (line 681)
+- new ClassProperty (line 682)
+- new ReflectionMethodConstruct (line 683)
+- new ReflectionMethodGetAttributes (line 686)
+- new ReflectionMethodGetParameters (line 688)
+- new ReflectionMethodGetStaticVariables (line 690)
+- new ReflectionMethodGetNumberOfParameters (line 692)
+- new ReflectionMethodGetNumberOfRequiredParameters (line 694)
+- new ReflectionMethodGetName (line 696)
+- new ReflectionMethodGetDeclaringClass (line 698)
+- new ReflectionMethodIsDeprecated (line 700)
+- new ReflectionMethodGetDeprecatedMessage (line 702)
+- new ReflectionMethodGetDeprecatedVersion (line 704)
+- new ReflectionMethodHasPrototype (line 706)
+- new ReflectionMethodHasReturnType (line 708)
+- new ReflectionMethodGetReturnType (line 710)
+- new ReflectionMethodHasTentativeReturnType (line 712)
+- new ReflectionMethodGetTentativeReturnType (line 714)
+- new ReflectionMethodIsConstructor (line 716)
+- new ReflectionMethodIsDestructor (line 718)
+- new ReflectionMethodIsAbstract (line 720)
+- new ReflectionMethodIsInternal (line 722)
+- new ReflectionMethodIsVariadic (line 724)
+- new ReflectionMethodGetPrototype (line 726)
+- new ReflectionMethodInvoke (line 728)
+- new ReflectionMethodInvokeArgs (line 730)
+- new ReflectionMethodGetClosure (line 732)
+- new ReflectionMethodGetClosureScopeClass (line 734)
+- new ReflectionMethodGetClosureThis (line 736)
+- new ReflectionMethodGetClosureUsedVariables (line 738)
+- new ReflectionMethodCreateFromClosure (line 741)
+- new ReflectionMethodCreateFromMethodName (line 743)
+- new ReflectionMethodIsStatic (line 746)
+- new ReflectionMethodIsPublic (line 748)
+- new ReflectionMethodIsProtected (line 750)
+- new ReflectionMethodIsPrivate (line 752)
+- new ReflectionMethodSetAccessible (line 754)
+- new ReflectionMethodIsAccessible (line 756)
+- new ReflectionMethodIsFinal (line 758)
+- new ReflectionMethodIsGenerator (line 760)
+- new ReflectionMethodGetModifiers (line 762)
+- new ReflectionMethodGetDocComment (line 766)
+- new ReflectionMethodGetStartLine (line 767)
+- new ReflectionMethodGetEndLine (line 768)
+- new ReflectionMethodGetFileName (line 769)
+- new ReflectionMethodIsUserDefined (line 770)
+- new ReflectionMethodGetExtensionName (line 771)
+- new ReflectionFunctionGetNamedArguments (line 778)
+- new ClassEntry (line 783)
+- new ClassProperty (line 784)
+- new ReflectionClassConstruct (line 785)
+- new ReflectionClassGetAttributes (line 788)
+- new ReflectionClassGetName (line 790)
+- new ReflectionClassGetShortName (line 792)
+- new ReflectionClassGetMethod (line 794)
+- new ReflectionClassHasMethod (line 796)
+- new ReflectionClassGetProperty (line 798)
+- new ReflectionClassHasProperty (line 800)
+- new ReflectionClassGetProperties (line 802)
+- new ReflectionClassGetStaticProperties (line 804)
+- new ReflectionClassGetStaticPropertyValue (line 806)
+- new ReflectionClassSetStaticPropertyValue (line 808)
+- new ReflectionClassGetReadOnlyProperties (line 810)
+- new ReflectionClassGetLazyPropertyNames (line 812)
+- new ReflectionClassGetMethods (line 814)
+- new ReflectionClassGetReflectionConstant (line 816)
+- new ReflectionClassGetReflectionConstants (line 818)
+- new ReflectionClassGetConstants (line 820)
+- new ReflectionClassGetDefaultProperties (line 822)
+- new ReflectionClassGetTraitAliases (line 824)
+- new ReflectionClassGetTraitNames (line 826)
+- new ReflectionClassGetInterfaceNames (line 828)
+- new ReflectionClassGetParentClass (line 830)
+- new ReflectionClassGetConstructor (line 832)
+- new ReflectionClassIsSubclassOf (line 834)
+- new ReflectionClassImplementsInterface (line 836)
+- new ReflectionClassIsInstance (line 838)
+- new ReflectionClassIsInstantiable (line 840)
+- new ReflectionClassNewInstanceWithoutConstructor (line 842)
+- new ReflectionClassIsAbstract (line 844)
+- new ReflectionClassIsFinal (line 846)
+- new ReflectionClassIsInterface (line 848)
+- new ReflectionClassIsTrait (line 850)
+- new ReflectionClassGetModifiers (line 852)
+- new ReflectionClassIsIterateable (line 854)
+- new ReflectionClassGetConstant (line 856)
+- new ReflectionClassHasConstant (line 858)
+- new ReflectionClassNewLazyProxy (line 862)
+- new ReflectionClassNewLazyGhost (line 864)
+- new ReflectionClassCreateLazyGhost (line 866)
+- new ReflectionClassCreateLazyProxy (line 868)
+- new ReflectionClassGetLazyInitializer (line 870)
+- new ReflectionClassGetLazyInitializationException (line 872)
+- new ReflectionClassGetLazyProxyFactory (line 874)
+- new ReflectionClassIsUninitializedLazyObject (line 876)
+- new ReflectionClassInitializeLazyObject (line 878)
+- new ReflectionClassMarkLazyObjectAsInitialized (line 880)
+- new ReflectionClassResetAsLazyGhost (line 882)
+- new ReflectionClassResetAsLazyProxy (line 884)
+- new ReflectionClassResetAsLazyObject (line 886)
+- new ReflectionClassIsInternal (line 889)
+- new ReflectionClassIsEnum (line 891)
+- new ReflectionClassIsReadOnly (line 893)
+- new ReflectionClassIsAnonymous (line 895)
+- new ReflectionClassIsStatic (line 897)
+- new ReflectionClassIsDeprecated (line 899)
+- new ReflectionClassGetDeprecatedMessage (line 901)
+- new ReflectionClassGetDeprecatedVersion (line 903)
+- new ReflectionClassGetDocComment (line 907)
+- new ReflectionClassGetStartLine (line 908)
+- new ReflectionClassGetEndLine (line 909)
+- new ReflectionClassGetFileName (line 910)
+- new ReflectionClassIsUserDefined (line 911)
+- new ReflectionClassGetExtensionName (line 912)
+- new ReflectionClassGetExtension (line 913)
+- new ClassEntry (line 920)
- new ClassProperty (line 921)
-- new ReflectionPropertyConstruct (line 923)
-- new ReflectionPropertyGetName (line 926)
-- new ReflectionPropertyGetDeclaringClass (line 928)
-- new ReflectionPropertyGetDefaultValue (line 930)
-- new ReflectionPropertyGetDocComment (line 932)
-- new ReflectionPropertyGetValue (line 934)
-- new ReflectionPropertySetValue (line 936)
-- new ReflectionPropertySetAccessible (line 938)
-- new ReflectionPropertyIsAccessible (line 940)
-- new ReflectionPropertySetRawValue (line 942)
-- new ReflectionPropertyGetRawValue (line 944)
-- new ReflectionPropertyGetAttributes (line 946)
-- new ReflectionPropertyGetType (line 948)
-- new ReflectionPropertyIsPublic (line 952)
-- new ReflectionPropertyIsPrivate (line 953)
-- new ReflectionPropertyIsProtected (line 954)
-- new ReflectionPropertyGetMangledName (line 955)
-- new ReflectionPropertyIsReadOnly (line 956)
-- new ReflectionPropertyIsPromoted (line 957)
-- new ReflectionPropertyIsInitialized (line 958)
-- new ReflectionPropertyGetReadableType (line 959)
-- new ReflectionPropertyGetSettableType (line 960)
-- new ReflectionPropertyHasDefaultValue (line 961)
-- new ReflectionPropertyIsDefaultValueAvailable (line 962)
-- new ReflectionPropertyGetAsymmetricVisibility (line 977)
-- new ReflectionPropertyIsAbstract (line 987)
-- new ReflectionPropertyIsVirtual (line 988)
-- new ReflectionPropertyIsFinal (line 989)
-- new ReflectionPropertyHasHook (line 990)
-- new ReflectionPropertyHasHooks (line 991)
-- new ReflectionPropertyGetHook (line 992)
-- new ReflectionPropertyGetHooks (line 993)
-- new ReflectionPropertyIsLazy (line 994)
-- new ReflectionPropertySetRawValueWithoutLazyInitialization (line 995)
-- new ReflectionPropertySkipLazyInitialization (line 996)
-- new ReflectionPropertyIsDynamic (line 1010)
-- new ReflectionPropertyIsDeprecated (line 1014)
-- new ClassEntry (line 1019)
-- new ClassProperty (line 1021)
-- new ClassProperty (line 1022)
-- new ReflectionFunctionConstruct (line 1023)
-- new ReflectionFunctionGetName (line 1028)
-- new ReflectionFunctionGetParameters (line 1029)
-- new ReflectionFunctionGetNumberOfParameters (line 1030)
-- new ReflectionFunctionGetNumberOfRequiredParameters (line 1031)
-- new ReflectionFunctionGetReturnType (line 1032)
-- new ReflectionFunctionHasReturnType (line 1033)
-- new ReflectionFunctionIsAnonymous (line 1034)
-- new ReflectionFunctionIsClosure (line 1035)
-- new ReflectionFunctionIsGenerator (line 1036)
-- new ReflectionFunctionIsInternal (line 1037)
-- new ReflectionFunctionIsUserDefined (line 1038)
-- new ReflectionFunctionGetExtensionName (line 1039)
-- new ReflectionFunctionGetClosureThis (line 1040)
-- new ReflectionFunctionGetClosure (line 1041)
-- new ReflectionFunctionGetClosureScopeClass (line 1042)
-- new ReflectionFunctionGetClosureCalledClass (line 1043)
-- new ReflectionFunctionGetClosureUsedVariables (line 1044)
-- new ReflectionFunctionGetStaticVariables (line 1045)
-- new ReflectionFunctionInvoke (line 1046)
-- new ReflectionFunctionSetAccessible (line 1047)
-- new ReflectionFunctionIsAccessible (line 1048)
-- new ReflectionFunctionCreateFromCallable (line 1055)
-- new ReflectionFunctionCreateFromFunction (line 1057)
-- new ReflectionFunctionIsDeprecated (line 1060)
-- new ReflectionFunctionGetNamedArguments (line 1063)
-- new ClassEntry (line 1070)
-- new ClassProperty (line 1071)
-- new ClassProperty (line 1072)
-- new ReflectionConstantConstruct (line 1073)
-- new ReflectionConstantGetName (line 1076)
-- new ReflectionConstantGetNamespaceName (line 1078)
-- new ReflectionConstantGetShortName (line 1080)
-- new ReflectionConstantToString (line 1082)
-- new ReflectionConstantGetFileName (line 1085)
-- new ReflectionConstantGetExtension (line 1087)
-- new ReflectionConstantGetExtensionName (line 1089)
-- new ReflectionConstantGetValue (line 1092)
-- new ReflectionConstantGetAttributes (line 1094)
-- new ReflectionConstantGetDeclaringClass (line 1096)
-- new ReflectionConstantGetType (line 1098)
-- new ReflectionConstantHasType (line 1100)
-- new ReflectionConstantGetModifiers (line 1102)
-- new ReflectionConstantIsDeprecated (line 1105)
-- new ReflectionConstantGetDeprecatedMessage (line 1107)
-- new ReflectionConstantGetDeprecatedVersion (line 1109)
-- new ReflectionConstantIsFinal (line 1112)
-- new ReflectionConstantIsEnumCase (line 1114)
-- new ReflectionConstantIsPublic (line 1116)
-- new ReflectionConstantIsProtected (line 1118)
-- new ReflectionConstantIsPrivate (line 1120)
-- new ClassEntry (line 1126)
-- new ClassProperty (line 1127)
-- new ClassProperty (line 1128)
-- new ReflectionConstantConstruct (line 1129)
-- new ReflectionConstantGetName (line 1132)
-- new ReflectionConstantGetValue (line 1134)
-- new ReflectionConstantGetAttributes (line 1136)
-- new ReflectionConstantGetDeclaringClass (line 1138)
-- new ReflectionClassConstantGetType (line 1140)
-- new ReflectionClassConstantHasType (line 1142)
-- new ReflectionClassConstantGetModifiers (line 1144)
-- new ReflectionClassConstantIsDeprecated (line 1147)
-- new ReflectionClassConstantGetDeprecatedMessage (line 1149)
-- new ReflectionClassConstantGetDeprecatedVersion (line 1151)
-- new ReflectionClassConstantIsFinal (line 1154)
-- new ReflectionClassConstantIsEnumCase (line 1156)
-- new ReflectionClassConstantIsPublic (line 1158)
-- new ReflectionClassConstantIsProtected (line 1160)
-- new ReflectionClassConstantIsPrivate (line 1162)
-- new Variable (line 1170)
-- new ClassEntry (line 1171)
-- new ClassProperty (line 1174)
-- new ClassProperty (line 1175)
-- new ReflectionObjectConstruct (line 1176)
-- new ClassEntry (line 1181)
-- new ClassProperty (line 1184)
-- new ReflectionEnumConstruct (line 1185)
-- new ReflectionEnumGetName (line 1188)
-- new ReflectionEnumIsBacked (line 1190)
-- new ReflectionEnumGetBackingType (line 1192)
-- new ReflectionEnumGetCases (line 1194)
-- new ReflectionEnumGetCase (line 1196)
-- new ReflectionEnumHasCase (line 1198)
-- new ReflectionEnumFromName (line 1201)
-- new ReflectionClassGetTraitNames (line 1205)
-- new ReflectionClassGetInterfaceNames (line 1206)
-- new ClassEntry (line 1210)
-- new ClassProperty (line 1213)
-- new ClassProperty (line 1214)
-- new ReflectionEnumUnitCaseConstruct (line 1215)
-- new ReflectionEnumUnitCaseGetAttributes (line 1218)
-- new ReflectionEnumUnitCaseGetName (line 1220)
-- new ReflectionEnumUnitCaseGetValue (line 1222)
-- new ReflectionEnumUnitCaseGetEnum (line 1224)
-- new ReflectionEnumUnitCaseGetDeclaringClass (line 1226)
-- new ReflectionEnumUnitCaseGetDocComment (line 1228)
-- new ReflectionEnumUnitCaseToString (line 1230)
-- new ReflectionEnumUnitCaseIsBacked (line 1233)
-- new ReflectionEnumUnitCaseIsDeprecated (line 1237)
-- new ClassEntry (line 1242)
-- new ClassProperty (line 1244)
-- new ClassProperty (line 1245)
-- new ReflectionEnumBackedCaseConstruct (line 1246)
-- new ReflectionEnumBackedCaseGetBackingValue (line 1249)
-- new ReflectionEnumBackedCaseIsBacked (line 1252)
-- new ClassEntry (line 1257)
-- new ReflectionTypeAllowsNull (line 1259)
-- new ReflectionTypeToString (line 1261)
-- new ReflectionNamedTypeGetName (line 1274)
-- new ReflectionNamedTypeIsBuiltin (line 1275)
-- new ReflectionCompositeTypeGetTypes (line 1287)
-- new ReflectionCompositeTypeGetTypes (line 1299)
-- new Variable (line 1303)
-- new ClassEntry (line 1304)
-- new ClassProperty (line 1305)
-- new ReflectionFiberConstruct (line 1306)
-- new ReflectionFiberGetFiber (line 1311)
-- new ReflectionFiberIsStarted (line 1312)
-- new ReflectionFiberIsSuspended (line 1313)
-- new ReflectionFiberIsTerminated (line 1314)
-- new ReflectionFiberIsRunning (line 1315)
-- new ReflectionFiberGetExecutingLine (line 1316)
-- new ReflectionFiberGetExecutingFile (line 1317)
-- new ReflectionFiberGetTrace (line 1318)
-- new ReflectionFiberGetExecutingFiber (line 1319)
-- new ClassEntry (line 1327)
-- new ClassProperty (line 1328)
-- new ReflectionGeneratorConstruct (line 1329)
-- new ReflectionGeneratorGetFunction (line 1334)
-- new ReflectionGeneratorGetExecutingLine (line 1335)
-- new ReflectionGeneratorGetExecutingFile (line 1336)
-- new ReflectionGeneratorGetExecutingGenerator (line 1337)
-- new ClassEntry (line 1359)
-- new ClassProperty (line 1361)
-- new ClassProperty (line 1362)
-- new ClassProperty (line 1363)
-- new ClassProperty (line 1364)
+- new ClassProperty (line 922)
+- new ClassProperty (line 923)
+- new ClassProperty (line 924)
+- new ClassProperty (line 925)
+- new ReflectionPropertyConstruct (line 927)
+- new ReflectionPropertyGetName (line 930)
+- new ReflectionPropertyGetDeclaringClass (line 932)
+- new ReflectionPropertyGetDefaultValue (line 934)
+- new ReflectionPropertyGetDocComment (line 936)
+- new ReflectionPropertyGetValue (line 938)
+- new ReflectionPropertySetValue (line 940)
+- new ReflectionPropertySetAccessible (line 942)
+- new ReflectionPropertyIsAccessible (line 944)
+- new ReflectionPropertySetRawValue (line 946)
+- new ReflectionPropertyGetRawValue (line 948)
+- new ReflectionPropertyGetAttributes (line 950)
+- new ReflectionPropertyGetType (line 952)
+- new ReflectionPropertyIsPublic (line 956)
+- new ReflectionPropertyIsPrivate (line 957)
+- new ReflectionPropertyIsProtected (line 958)
+- new ReflectionPropertyGetMangledName (line 959)
+- new ReflectionPropertyIsReadOnly (line 960)
+- new ReflectionPropertyIsPromoted (line 961)
+- new ReflectionPropertyIsInitialized (line 962)
+- new ReflectionPropertyGetReadableType (line 963)
+- new ReflectionPropertyGetSettableType (line 964)
+- new ReflectionPropertyHasDefaultValue (line 965)
+- new ReflectionPropertyIsDefaultValueAvailable (line 966)
+- new ReflectionPropertyGetAsymmetricVisibility (line 981)
+- new ReflectionPropertyIsAbstract (line 991)
+- new ReflectionPropertyIsVirtual (line 992)
+- new ReflectionPropertyIsFinal (line 993)
+- new ReflectionPropertyHasHook (line 994)
+- new ReflectionPropertyHasHooks (line 995)
+- new ReflectionPropertyGetHook (line 996)
+- new ReflectionPropertyGetHooks (line 997)
+- new ReflectionPropertyIsLazy (line 998)
+- new ReflectionPropertySetRawValueWithoutLazyInitialization (line 999)
+- new ReflectionPropertySkipLazyInitialization (line 1000)
+- new ReflectionPropertyIsDynamic (line 1014)
+- new ReflectionPropertyIsDeprecated (line 1018)
+- new ClassEntry (line 1023)
+- new ClassProperty (line 1025)
+- new ClassProperty (line 1026)
+- new ReflectionFunctionConstruct (line 1027)
+- new ReflectionFunctionGetName (line 1032)
+- new ReflectionFunctionGetParameters (line 1033)
+- new ReflectionFunctionGetNumberOfParameters (line 1034)
+- new ReflectionFunctionGetNumberOfRequiredParameters (line 1035)
+- new ReflectionFunctionGetReturnType (line 1036)
+- new ReflectionFunctionHasReturnType (line 1037)
+- new ReflectionFunctionIsAnonymous (line 1038)
+- new ReflectionFunctionIsClosure (line 1039)
+- new ReflectionFunctionIsGenerator (line 1040)
+- new ReflectionFunctionIsInternal (line 1041)
+- new ReflectionFunctionIsUserDefined (line 1042)
+- new ReflectionFunctionGetExtensionName (line 1043)
+- new ReflectionFunctionGetClosureThis (line 1044)
+- new ReflectionFunctionGetClosure (line 1045)
+- new ReflectionFunctionGetClosureScopeClass (line 1046)
+- new ReflectionFunctionGetClosureCalledClass (line 1047)
+- new ReflectionFunctionGetClosureUsedVariables (line 1048)
+- new ReflectionFunctionGetStaticVariables (line 1049)
+- new ReflectionFunctionInvoke (line 1050)
+- new ReflectionFunctionSetAccessible (line 1051)
+- new ReflectionFunctionIsAccessible (line 1052)
+- new ReflectionFunctionCreateFromCallable (line 1059)
+- new ReflectionFunctionCreateFromFunction (line 1061)
+- new ReflectionFunctionIsDeprecated (line 1064)
+- new ReflectionFunctionGetNamedArguments (line 1067)
+- new ClassEntry (line 1074)
+- new ClassProperty (line 1075)
+- new ClassProperty (line 1076)
+- new ReflectionConstantConstruct (line 1077)
+- new ReflectionConstantGetName (line 1080)
+- new ReflectionConstantGetNamespaceName (line 1082)
+- new ReflectionConstantGetShortName (line 1084)
+- new ReflectionConstantToString (line 1086)
+- new ReflectionConstantGetFileName (line 1089)
+- new ReflectionConstantGetExtension (line 1091)
+- new ReflectionConstantGetExtensionName (line 1093)
+- new ReflectionConstantGetValue (line 1096)
+- new ReflectionConstantGetAttributes (line 1098)
+- new ReflectionConstantGetDeclaringClass (line 1100)
+- new ReflectionConstantGetType (line 1102)
+- new ReflectionConstantHasType (line 1104)
+- new ReflectionConstantGetModifiers (line 1106)
+- new ReflectionConstantIsDeprecated (line 1109)
+- new ReflectionConstantGetDeprecatedMessage (line 1111)
+- new ReflectionConstantGetDeprecatedVersion (line 1113)
+- new ReflectionConstantIsFinal (line 1116)
+- new ReflectionConstantIsEnumCase (line 1118)
+- new ReflectionConstantIsPublic (line 1120)
+- new ReflectionConstantIsProtected (line 1122)
+- new ReflectionConstantIsPrivate (line 1124)
+- new ClassEntry (line 1130)
+- new ClassProperty (line 1131)
+- new ClassProperty (line 1132)
+- new ReflectionConstantConstruct (line 1133)
+- new ReflectionConstantGetName (line 1136)
+- new ReflectionConstantGetValue (line 1138)
+- new ReflectionConstantGetAttributes (line 1140)
+- new ReflectionConstantGetDeclaringClass (line 1142)
+- new ReflectionClassConstantGetType (line 1144)
+- new ReflectionClassConstantHasType (line 1146)
+- new ReflectionClassConstantGetModifiers (line 1148)
+- new ReflectionClassConstantIsDeprecated (line 1151)
+- new ReflectionClassConstantGetDeprecatedMessage (line 1153)
+- new ReflectionClassConstantGetDeprecatedVersion (line 1155)
+- new ReflectionClassConstantIsFinal (line 1158)
+- new ReflectionClassConstantIsEnumCase (line 1160)
+- new ReflectionClassConstantIsPublic (line 1162)
+- new ReflectionClassConstantIsProtected (line 1164)
+- new ReflectionClassConstantIsPrivate (line 1166)
+- new Variable (line 1174)
+- new ClassEntry (line 1175)
+- new ClassProperty (line 1178)
+- new ClassProperty (line 1179)
+- new ReflectionObjectConstruct (line 1180)
+- new ClassEntry (line 1185)
+- new ClassProperty (line 1188)
+- new ReflectionEnumConstruct (line 1189)
+- new ReflectionEnumGetName (line 1192)
+- new ReflectionEnumIsBacked (line 1194)
+- new ReflectionEnumGetBackingType (line 1196)
+- new ReflectionEnumGetCases (line 1198)
+- new ReflectionEnumGetCase (line 1200)
+- new ReflectionEnumHasCase (line 1202)
+- new ReflectionEnumFromName (line 1205)
+- new ReflectionClassGetTraitNames (line 1209)
+- new ReflectionClassGetInterfaceNames (line 1210)
+- new ClassEntry (line 1214)
+- new ClassProperty (line 1217)
+- new ClassProperty (line 1218)
+- new ReflectionEnumUnitCaseConstruct (line 1219)
+- new ReflectionEnumUnitCaseGetAttributes (line 1222)
+- new ReflectionEnumUnitCaseGetName (line 1224)
+- new ReflectionEnumUnitCaseGetValue (line 1226)
+- new ReflectionEnumUnitCaseGetEnum (line 1228)
+- new ReflectionEnumUnitCaseGetDeclaringClass (line 1230)
+- new ReflectionEnumUnitCaseGetDocComment (line 1232)
+- new ReflectionEnumUnitCaseToString (line 1234)
+- new ReflectionEnumUnitCaseIsBacked (line 1237)
+- new ReflectionEnumUnitCaseIsDeprecated (line 1241)
+- new ClassEntry (line 1246)
+- new ClassProperty (line 1248)
+- new ClassProperty (line 1249)
+- new ReflectionEnumBackedCaseConstruct (line 1250)
+- new ReflectionEnumBackedCaseGetBackingValue (line 1253)
+- new ReflectionEnumBackedCaseIsBacked (line 1256)
+- new ClassEntry (line 1261)
+- new ReflectionTypeAllowsNull (line 1263)
+- new ReflectionTypeToString (line 1265)
+- new ReflectionNamedTypeGetName (line 1278)
+- new ReflectionNamedTypeIsBuiltin (line 1279)
+- new ReflectionCompositeTypeGetTypes (line 1291)
+- new ReflectionCompositeTypeGetTypes (line 1303)
+- new Variable (line 1307)
+- new ClassEntry (line 1308)
+- new ClassProperty (line 1309)
+- new ReflectionFiberConstruct (line 1310)
+- new ReflectionFiberGetFiber (line 1315)
+- new ReflectionFiberIsStarted (line 1316)
+- new ReflectionFiberIsSuspended (line 1317)
+- new ReflectionFiberIsTerminated (line 1318)
+- new ReflectionFiberIsRunning (line 1319)
+- new ReflectionFiberGetExecutingLine (line 1320)
+- new ReflectionFiberGetExecutingFile (line 1321)
+- new ReflectionFiberGetTrace (line 1322)
+- new ReflectionFiberGetExecutingFiber (line 1323)
+- new ClassEntry (line 1331)
+- new ClassProperty (line 1332)
+- new ReflectionGeneratorConstruct (line 1333)
+- new ReflectionGeneratorGetFunction (line 1338)
+- new ReflectionGeneratorGetExecutingLine (line 1339)
+- new ReflectionGeneratorGetExecutingFile (line 1340)
+- new ReflectionGeneratorGetExecutingGenerator (line 1341)
+- new ClassEntry (line 1363)
- new ClassProperty (line 1365)
-- new Variable (line 1377)
-- new Variable (line 1378)
-- new ClassEntry (line 1382)
-- new ClassProperty (line 1384)
-- new DateTimeZoneConstruct (line 1385)
-- new DateTimeZoneGetName (line 1388)
-- new DateTimeZoneGetOffset (line 1390)
-- new DateTimeZoneGetLocation (line 1392)
-- new DateTimeZoneGetTransitions (line 1394)
-- new DateTimeZoneListAbbreviations (line 1396)
-- new DateTimeZoneListIdentifiers (line 1398)
-- new DateTimeFormat (line 1403)
-- new DateTimeGetTimestamp (line 1404)
-- new DateTimeGetOffset (line 1405)
-- new DateTimeGetTimezone (line 1406)
-- new DateTimeGetMicrosecond (line 1408)
-- new DateTimeModify (line 1410)
-- new DateTimeAdd (line 1411)
-- new DateTimeSub (line 1412)
-- new DateTimeDiff (line 1413)
-- new DateTimeSetDate (line 1414)
-- new DateTimeSetISODate (line 1415)
-- new DateTimeSetTime (line 1416)
-- new DateTimeSetMicrosecond (line 1418)
-- new DateTimeSetTimestamp (line 1420)
-- new DateTimeSetTimezone (line 1421)
-- new ClassEntry (line 1424)
-- new ClassProperty (line 1426)
-- new ClassProperty (line 1427)
-- new ClassProperty (line 1428)
-- new DateTimeConstruct (line 1429)
-- new DateTimeCreateFromFormat (line 1436)
-- new DateTimeCreateFromImmutable (line 1438)
-- new DateTimeCreateFromInterface (line 1440)
-- new DateTimeCreateFromTimestamp (line 1443)
-- new DateTimeGetLastErrors (line 1446)
-- new ClassEntry (line 1450)
-- new ClassProperty (line 1452)
-- new ClassProperty (line 1453)
-- new ClassProperty (line 1454)
-- new DateTimeImmutableConstruct (line 1455)
-- new DateTimeImmutableCreateFromFormat (line 1462)
-- new DateTimeImmutableCreateFromMutable (line 1464)
-- new DateTimeImmutableCreateFromInterface (line 1466)
-- new DateTimeImmutableCreateFromTimestamp (line 1469)
-- new DateTimeGetLastErrors (line 1472)
-- new Variable (line 1476)
-- new Variable (line 1477)
-- new ClassEntry (line 1479)
-- new ClassProperty (line 1481)
-- new ClassProperty (line 1483)
-- new ClassProperty (line 1484)
+- new ClassProperty (line 1366)
+- new ClassProperty (line 1367)
+- new ClassProperty (line 1368)
+- new ClassProperty (line 1369)
+- new Variable (line 1381)
+- new Variable (line 1382)
+- new ClassEntry (line 1386)
+- new ClassProperty (line 1388)
+- new DateTimeZoneConstruct (line 1389)
+- new DateTimeZoneGetName (line 1392)
+- new DateTimeZoneGetOffset (line 1394)
+- new DateTimeZoneGetLocation (line 1396)
+- new DateTimeZoneGetTransitions (line 1398)
+- new DateTimeZoneListAbbreviations (line 1400)
+- new DateTimeZoneListIdentifiers (line 1402)
+- new DateTimeFormat (line 1407)
+- new DateTimeGetTimestamp (line 1408)
+- new DateTimeGetOffset (line 1409)
+- new DateTimeGetTimezone (line 1410)
+- new DateTimeGetMicrosecond (line 1412)
+- new DateTimeModify (line 1414)
+- new DateTimeAdd (line 1415)
+- new DateTimeSub (line 1416)
+- new DateTimeDiff (line 1417)
+- new DateTimeSetDate (line 1418)
+- new DateTimeSetISODate (line 1419)
+- new DateTimeSetTime (line 1420)
+- new DateTimeSetMicrosecond (line 1422)
+- new DateTimeSetTimestamp (line 1424)
+- new DateTimeSetTimezone (line 1425)
+- new ClassEntry (line 1428)
+- new ClassProperty (line 1430)
+- new ClassProperty (line 1431)
+- new ClassProperty (line 1432)
+- new DateTimeConstruct (line 1433)
+- new DateTimeCreateFromFormat (line 1440)
+- new DateTimeCreateFromImmutable (line 1442)
+- new DateTimeCreateFromInterface (line 1444)
+- new DateTimeCreateFromTimestamp (line 1447)
+- new DateTimeGetLastErrors (line 1450)
+- new ClassEntry (line 1454)
+- new ClassProperty (line 1456)
+- new ClassProperty (line 1457)
+- new ClassProperty (line 1458)
+- new DateTimeImmutableConstruct (line 1459)
+- new DateTimeImmutableCreateFromFormat (line 1466)
+- new DateTimeImmutableCreateFromMutable (line 1468)
+- new DateTimeImmutableCreateFromInterface (line 1470)
+- new DateTimeImmutableCreateFromTimestamp (line 1473)
+- new DateTimeGetLastErrors (line 1476)
+- new Variable (line 1480)
+- new Variable (line 1481)
+- new ClassEntry (line 1483)
- new ClassProperty (line 1485)
-- new ClassProperty (line 1486)
-- new DateIntervalConstruct (line 1490)
-- new DateIntervalFormat (line 1493)
-- new DateIntervalCreateFromDateString (line 1495)
-- new Variable (line 1499)
-- new Variable (line 1500)
-- new ClassEntry (line 1501)
-- new ClassProperty (line 1504)
-- new ClassProperty (line 1505)
-- new ClassProperty (line 1506)
-- new ClassProperty (line 1507)
+- new ClassProperty (line 1487)
+- new ClassProperty (line 1488)
+- new ClassProperty (line 1489)
+- new ClassProperty (line 1490)
+- new DateIntervalConstruct (line 1494)
+- new DateIntervalFormat (line 1497)
+- new DateIntervalCreateFromDateString (line 1499)
+- new Variable (line 1503)
+- new Variable (line 1504)
+- new ClassEntry (line 1505)
- new ClassProperty (line 1508)
- new ClassProperty (line 1509)
- new ClassProperty (line 1510)
-- new DatePeriodConstruct (line 1514)
-- new DatePeriodRewind (line 1517)
-- new DatePeriodValid (line 1519)
-- new DatePeriodCurrent (line 1521)
-- new DatePeriodKey (line 1523)
-- new DatePeriodNext (line 1525)
-- new DatePeriodGetStartDate (line 1527)
-- new DatePeriodGetEndDate (line 1529)
-- new DatePeriodGetDateInterval (line 1531)
-- new DatePeriodGetRecurrences (line 1533)
-- new DatePeriodGetEndDate (line 1535)
-- new DatePeriodCreateFromISO8601String (line 1538)
-- new ClassEntry (line 1546)
-- new Variable (line 1569)
-- new Variable (line 1570)
-- new ClassEntry (line 1580)
-- new Variable (line 1586)
-- new Variable (line 1587)
-- new Variable (line 1588)
-- new ClassProperty (line 1591)
-- new ClassProperty (line 1592)
-- new ClassProperty (line 1593)
-- new ClassProperty (line 1594)
+- new ClassProperty (line 1511)
+- new ClassProperty (line 1512)
+- new ClassProperty (line 1513)
+- new ClassProperty (line 1514)
+- new DatePeriodConstruct (line 1518)
+- new DatePeriodRewind (line 1521)
+- new DatePeriodValid (line 1523)
+- new DatePeriodCurrent (line 1525)
+- new DatePeriodKey (line 1527)
+- new DatePeriodNext (line 1529)
+- new DatePeriodGetStartDate (line 1531)
+- new DatePeriodGetEndDate (line 1533)
+- new DatePeriodGetDateInterval (line 1535)
+- new DatePeriodGetRecurrences (line 1537)
+- new DatePeriodGetEndDate (line 1539)
+- new DatePeriodCreateFromISO8601String (line 1542)
+- new ClassEntry (line 1550)
+- new Variable (line 1573)
+- new Variable (line 1574)
+- new ClassEntry (line 1584)
+- new Variable (line 1590)
+- new Variable (line 1591)
+- new Variable (line 1592)
- new ClassProperty (line 1595)
-- new ClassProperty (line 1603)
-- new Variable (line 1612)
-- new ClassProperty (line 1614)
-- new ClassProperty (line 1624)
-- new ErrorExceptionConstruct (line 1625)
-- new ExceptionConstruct (line 1627)
-- new ExceptionWakeup (line 1631)
-- new ExceptionGetMessage (line 1635)
-- new ExceptionGetCode (line 1636)
-- new ExceptionGetFile (line 1637)
-- new ExceptionGetLine (line 1638)
-- new ExceptionGetPrevious (line 1639)
-- new ExceptionGetTrace (line 1640)
-- new ExceptionGetTraceAsString (line 1641)
-- new ExceptionToString (line 1642)
-- new ErrorExceptionGetSeverity (line 1649)
-- new ClassEntry (line 1658)
-- new ClassEntry (line 1665)
-- new FiberConstruct (line 1669)
-- new FiberStart (line 1674)
-- new FiberResume (line 1675)
-- new FiberThrow (line 1676)
-- new FiberSuspend (line 1677)
-- new FiberGetCurrent (line 1678)
-- new FiberIsStarted (line 1679)
-- new FiberIsSuspended (line 1680)
-- new FiberIsRunning (line 1681)
-- new FiberIsTerminated (line 1682)
-- new FiberGetReturn (line 1683)
-- new FiberGetTrace (line 1684)
-- new FiberGetTraceAsString (line 1685)
+- new ClassProperty (line 1596)
+- new ClassProperty (line 1597)
+- new ClassProperty (line 1598)
+- new ClassProperty (line 1599)
+- new ClassProperty (line 1607)
+- new Variable (line 1616)
+- new ClassProperty (line 1618)
+- new ClassProperty (line 1628)
+- new ErrorExceptionConstruct (line 1629)
+- new ExceptionConstruct (line 1631)
+- new ExceptionWakeup (line 1635)
+- new ExceptionGetMessage (line 1639)
+- new ExceptionGetCode (line 1640)
+- new ExceptionGetFile (line 1641)
+- new ExceptionGetLine (line 1642)
+- new ExceptionGetPrevious (line 1643)
+- new ExceptionGetTrace (line 1644)
+- new ExceptionGetTraceAsString (line 1645)
+- new ExceptionToString (line 1646)
+- new ErrorExceptionGetSeverity (line 1653)
+- new ClassEntry (line 1662)
+- new ClassEntry (line 1669)
+- new FiberConstruct (line 1673)
+- new FiberStart (line 1678)
+- new FiberResume (line 1679)
+- new FiberThrow (line 1680)
+- new FiberSuspend (line 1681)
+- new FiberGetCurrent (line 1682)
+- new FiberIsStarted (line 1683)
+- new FiberIsSuspended (line 1684)
+- new FiberIsRunning (line 1685)
+- new FiberIsTerminated (line 1686)
+- new FiberGetReturn (line 1687)
+- new FiberGetTrace (line 1688)
+- new FiberGetTraceAsString (line 1689)
- 19 class method(s)
### `lib/VM/BuiltinExceptionSupport.php`
@@ -50509,38 +50525,38 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/VM/ReflectionSupport.php`
**Warnings** (review for bootstrap subset):
-- new ReflectionException (line 206)
-- new AttributeEntry (line 216)
-- new Variable (line 235)
-- new ObjectEntry (line 242)
-- new Variable (line 247)
-- new Variable (line 260)
-- new Variable (line 264)
-- new Variable (line 267)
-- new Variable (line 288)
-- new Variable (line 324)
-- new Variable (line 335)
-- new Error (line 361)
-- new Error (line 365)
-- new ObjectEntry (line 367)
-- new Variable (line 368)
-- new Variable (line 379)
-- new Error (line 397)
-- new Variable (line 403)
-- new Error (line 409)
-- new Error (line 427)
-- new Variable (line 429)
-- new Variable (line 548)
-- new AttributeEntry (line 1532)
-- new Variable (line 2541)
-- new ObjectEntry (line 2675)
-- new ObjectEntry (line 2767)
-- new ObjectEntry (line 2780)
-- new Variable (line 2860)
-- new ObjectEntry (line 2965)
-- new ObjectEntry (line 2985)
-- new Variable (line 3159)
-- new Variable (line 3344)
+- new ReflectionException (line 209)
+- new AttributeEntry (line 219)
+- new Variable (line 239)
+- new ObjectEntry (line 246)
+- new Variable (line 252)
+- new Variable (line 265)
+- new Variable (line 269)
+- new Variable (line 272)
+- new Variable (line 293)
+- new Variable (line 329)
+- new Variable (line 340)
+- new Error (line 366)
+- new Error (line 370)
+- new ObjectEntry (line 372)
+- new Variable (line 373)
+- new Variable (line 384)
+- new Error (line 402)
+- new Variable (line 408)
+- new Error (line 414)
+- new Error (line 432)
+- new Variable (line 434)
+- new Variable (line 553)
+- new AttributeEntry (line 1537)
+- new Variable (line 2546)
+- new ObjectEntry (line 2680)
+- new ObjectEntry (line 2772)
+- new ObjectEntry (line 2785)
+- new Variable (line 2865)
+- new ObjectEntry (line 2970)
+- new ObjectEntry (line 2990)
+- new Variable (line 3164)
+- new Variable (line 3349)
- 192 class method(s)
- 2 closure(s)
@@ -50683,10 +50699,10 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag
### `lib/VM/TypedPropertyCheck.php`
**Warnings** (review for bootstrap subset):
-- new Error (line 105)
-- new TypedPropertyReadSignal (line 107)
-- new Error (line 124)
-- new TypedPropertyReadSignal (line 126)
+- new Error (line 108)
+- new TypedPropertyReadSignal (line 110)
+- new Error (line 127)
+- new TypedPropertyReadSignal (line 129)
- 10 class method(s)
### `lib/VM/UndefinedGlobalVariableJitHelper.php`
diff --git a/docs/bootstrap-selfhost.md b/docs/bootstrap-selfhost.md
index 318c1a99814..00270ea5f5b 100644
--- a/docs/bootstrap-selfhost.md
+++ b/docs/bootstrap-selfhost.md
@@ -2,7 +2,7 @@
**Gen-0 without Zend:** `BOOTSTRAP_M5_NO_ZEND=1 make bootstrap-selfhost-link` installs `prelinked/bootstrap-gen0/bin-compile-aot` and links `compiler_minimal` without `php bin/compile.php` ([#3053](https://github.com/PurHur/php-compiler/issues/3053)). **M5 lib spine compile:** `BOOTSTRAP_NO_ZEND_FALLBACK=1 make bootstrap-selfhost-lib-spine-smoke` (default in link script) refuses host `php bin/compile.php` on the spine emit path ([#8716](https://github.com/PurHur/php-compiler/issues/8716)). **Contributor workflow:** [bootstrap-dev-workflow.md](bootstrap-dev-workflow.md) (tiered gen-1+ path, spine checklist, CI).
-**Project north star:** The **compiler fully compiles itself** — native AOT from `lib/` (no `vendor/` at cold boot), then compiles PHP and rebuilds the next compiler revision without Zend. **M2 spine:** **6319** / **6319** Phase A inventory (`php script/bootstrap-spine-count.php`; `check-selfhost-spine-coverage-sync.php`). **M5 daily gate:** `make north-star5-verify-fast` (~1–2 min) ✅; **`--strict`** (~1h) pre-merge only. Committed `prelinked/bootstrap-gen0/` sidecars + vendor **3/3** cold boot. **Hot loop:** VM driver execute probe ~**20ms**; full spine relink only with `BOOTSTRAP_VM_DRIVER_EXECUTE_PROBE_FULL_LINK=1` ([#2201](https://github.com/PurHur/php-compiler/issues/2201)). **Living tracker:** [#1492](https://github.com/PurHur/php-compiler/issues/1492) (was [#1056](https://github.com/PurHur/php-compiler/issues/1056)) · **re-root doc:** [self-host-target.md](self-host-target.md) · **generation ladder:** [bootstrap-generations.md](bootstrap-generations.md) · **M5 fast path:** [bootstrap-m5-fast-path.md](bootstrap-m5-fast-path.md) · public status: [development-status § North star](https://purhur.github.io/php-compiler/development-status.html#north-star-self-host). Parent tracking: [#78](https://github.com/PurHur/php-compiler/issues/78) (roadmap), [#212](https://github.com/PurHur/php-compiler/issues/212) (closed umbrella).
+**Project north star:** The **compiler fully compiles itself** — native AOT from `lib/` (no `vendor/` at cold boot), then compiles PHP and rebuilds the next compiler revision without Zend. **M2 spine:** **6335** / **6335** Phase A inventory (`php script/bootstrap-spine-count.php`; `check-selfhost-spine-coverage-sync.php`). **M5 daily gate:** `make north-star5-verify-fast` (~1–2 min) ✅; **`--strict`** (~1h) pre-merge only. Committed `prelinked/bootstrap-gen0/` sidecars + vendor **3/3** cold boot. **Hot loop:** VM driver execute probe ~**20ms**; full spine relink only with `BOOTSTRAP_VM_DRIVER_EXECUTE_PROBE_FULL_LINK=1` ([#2201](https://github.com/PurHur/php-compiler/issues/2201)). **Living tracker:** [#1492](https://github.com/PurHur/php-compiler/issues/1492) (was [#1056](https://github.com/PurHur/php-compiler/issues/1056)) · **re-root doc:** [self-host-target.md](self-host-target.md) · **generation ladder:** [bootstrap-generations.md](bootstrap-generations.md) · **M5 fast path:** [bootstrap-m5-fast-path.md](bootstrap-m5-fast-path.md) · public status: [development-status § North star](https://purhur.github.io/php-compiler/development-status.html#north-star-self-host). Parent tracking: [#78](https://github.com/PurHur/php-compiler/issues/78) (roadmap), [#212](https://github.com/PurHur/php-compiler/issues/212) (closed umbrella).
## Current gates
@@ -10,9 +10,9 @@
|------|---------|--------|
| Phase A inventory | `make bootstrap-inventory-check` | ✅ vm.php-path inventory; **0** source blockers; M2 ratio SSOT: `Phase A inventory files` row in `docs/bootstrap-inventory.md` (no ratio-deferred paths — [#2543](https://github.com/PurHur/php-compiler/issues/2543)); `lib/JIT/Builtin/StringPregMatch.php` and `lib/AOT/Linker.php` **included** in spine |
| Spine PHPCfg parse | `php script/bootstrap-spine-php-cfg-parse-check.php` (`--minimal` for M0 bundle) | ✅ no unsupported php-cfg expr/stmt on spine ([#2575](https://github.com/PurHur/php-compiler/issues/2575)); `BOOTSTRAP_SPINE_PHPCFG_PARSE_GATE=1` in `ci-fast.sh` |
-| Phase B lib AOT lint | `php bin/compile.php -l lib/*.php` (with `script/php-env.sh`) | ✅ **6319/6319** top-level `lib/*.php` units ([#534](https://github.com/PurHur/php-compiler/pull/534)) |
+| Phase B lib AOT lint | `php bin/compile.php -l lib/*.php` (with `script/php-env.sh`) | ✅ **6335/6335** top-level `lib/*.php` units ([#534](https://github.com/PurHur/php-compiler/pull/534)) |
| Phase B fixture lint | `php script/bootstrap-aot-lint.php` | ✅ **13** procedural targets under `test/bootstrap-aot/` + `examples/000-HelloWorld` |
-| Phase C native run | `make bootstrap-aot-link` or `./script/bootstrap-aot-link.sh` | ✅ **6319/6319** link targets OK |
+| Phase C native run | `make bootstrap-aot-link` or `./script/bootstrap-aot-link.sh` | ✅ **6335/6335** link targets OK |
| Phase D `lib/` link | `make bootstrap-aot-link-lib` or `./script/bootstrap-aot-link-lib.sh` | ✅ `test/bootstrap-aot/lib_opcode/main.php` bundles `lib/OpCode.php` ([#540](https://github.com/PurHur/php-compiler/issues/540)) |
| Bundled `lib/Compiler.php` lint | `./script/bootstrap-selfhost-lint.sh` | ✅ `test/selfhost/compiler_minimal/main.php` + literal `require_once` units toward `bin/vm.php` (no `vendor/`) ([#559](https://github.com/PurHur/php-compiler/issues/559)) |
| Compiler compile smoke lint | `php bin/compile.php -l test/selfhost/compiler_compile_smoke/main.php` | ✅ `compiler_minimal` bundle + literal `require_once` of `test/bootstrap-aot/compiler_smoke.php` (named function CFG) |
diff --git a/docs/pages/development-status.md b/docs/pages/development-status.md
index d4859c0333c..e3583ce47b9 100644
--- a/docs/pages/development-status.md
+++ b/docs/pages/development-status.md
@@ -14,8 +14,8 @@ permalink: /development-status.html
| **What it is** | PHP → CFG → VM / LLVM JIT → AOT native binaries |
| **North star** | Compiler compiles itself without Zend ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |
| **v1.1.0 theme** | M5 fast-path stability; enum/property hooks; `preg_match` JIT; `spl_autoload*`; php-in-PHP JIT helpers ([#78](https://github.com/PurHur/php-compiler/issues/78)) |
-| **Wave 3** | Language **6319/6319** · Stdlib **6319/6319** on master ([#1380](https://github.com/PurHur/php-compiler/issues/1380)) |
-| **Spine SSOT** | `php script/bootstrap-spine-count.php` → **6319** / **6319** |
+| **Wave 3** | Language **6335/6335** · Stdlib **6335/6335** on master ([#1380](https://github.com/PurHur/php-compiler/issues/1380)) |
+| **Spine SSOT** | `php script/bootstrap-spine-count.php` → **6335** / **6335** |
| **Builtin matrix** | **1555** functions ([`docs/capabilities.md`](https://github.com/PurHur/php-compiler/blob/master/docs/capabilities.md)) |
| **Try it** | [`docs/GETTING-STARTED.md`](https://github.com/PurHur/php-compiler/blob/master/docs/GETTING-STARTED.md) |
@@ -33,7 +33,7 @@ permalink: /development-status.html
| M5 spine runtime + bootstrap | `fix/spine-aot-jit-blockers` | Native bundle-OK probe; inventory argv spine-lint fallback; gen-0 sidecars refreshed ([#8559](https://github.com/PurHur/php-compiler/issues/8559)) |
| VM driver execute probe | [9493e806d](https://github.com/PurHur/php-compiler/commit/9493e806d) | **~20ms** feedback loop — no full relink on stale SHA; `BOOTSTRAP_VM_DRIVER_EXECUTE_PROBE_FULL_LINK=1` for rebuild ([#2201](https://github.com/PurHur/php-compiler/issues/2201)) |
| M5 presenter | `make north-star5-verify-fast` | Daily PR gate (~1–2 min); `--strict` (~1h) pre-merge only ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) |
-| Gen-0 refresh | [a8cffaa0e](https://github.com/PurHur/php-compiler/commit/a8cffaa0e) | Spine runtime probe + gen-0 sidecars (**6319/6319**); inventory argv spine-lint fallback ([#8559](https://github.com/PurHur/php-compiler/issues/8559)) |
+| Gen-0 refresh | [a8cffaa0e](https://github.com/PurHur/php-compiler/commit/a8cffaa0e) | Spine runtime probe + gen-0 sidecars (**6335/6335**); inventory argv spine-lint fallback ([#8559](https://github.com/PurHur/php-compiler/issues/8559)) |
| Parallel compile jobs | [#10347](https://github.com/PurHur/php-compiler/pull/10347) | `PHP_COMPILER_COMPILE_JOBS` for vendor prelink + M3 sidecar warmup |
| Spine coverage | [#10356](https://github.com/PurHur/php-compiler/pull/10356) | `GeneratorYieldSourceMarker.php` in spine; inventory **3276** Phase A files |
| v1.1.0 docs sync | [#10369](https://github.com/PurHur/php-compiler/issues/10369) | README, development-status, examples README, capability matrix (**1555** builtins) |
@@ -50,7 +50,7 @@ permalink: /development-status.html
### Still open (high signal)
- **MCJIT execute** — `bin/jit.php -r` SIGSEGV ([#98](https://github.com/PurHur/php-compiler/issues/98))
-- **Literal spine ratio** — **6319/6319** ✅ (Jul 2026)
+- **Literal spine ratio** — **6335/6335** ✅ (Jul 2026)
- **Compile-spine stub retirement** — shrink `PHP_COMPILER_SELFHOST_AOT` on M3 allowlist ([#1402](https://github.com/PurHur/php-compiler/issues/1402))
- **007-ThrowsWeb AOT execute** — invalid POST segfault at runtime (link OK; slice `EXAMPLES_AOT_SMOKE_ONLY=007`)
- **LLVM 14+ upgrade** — experimental `script/install-llvm14.sh` ([#174](https://github.com/PurHur/php-compiler/issues/174))
@@ -62,7 +62,7 @@ permalink: /development-status.html
- **`phpc` CLI** — `run`, `serve`, `build`, `deploy`, `lint`, `test`, `init`, `doctor`
- **Examples 000–009** — VM and AOT link/execute for the curated web subset
- **Self-host M0** — `compiler_minimal bundle OK` ✅
-- **Self-host M2** — spine **6319/6319** ✅; native link + lint ✅
+- **Self-host M2** — spine **6335/6335** ✅; native link + lint ✅
- **Self-host M3** — HelloWorld strict `emit_path=native` ✅ ([#1493](https://github.com/PurHur/php-compiler/issues/1493)); inventory argv `bin/compile.php` ✅ ([#3024](https://github.com/PurHur/php-compiler/issues/3024) closed); compile-smoke strict native ✅ ([#1937](https://github.com/PurHur/php-compiler/issues/1937))
- **Self-host M4** — `make bootstrap-loop-probe` full ladder ✅; gen-2→gen-3 full-spine recompile ✅
- **Self-host M3–M5** — vendor prelink **3/3** ✅; **`make north-star5-verify-fast`** daily ✅; VM probe ~**20ms**. **`--strict` red** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) and **M3/M4 emit paths are prelinked blob COPIES, not native compiles** ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) — the byte-identical gen-0/gen-2/gen-3 result follows from copying and is not fixpoint evidence
@@ -92,7 +92,7 @@ See [`docs/bootstrap-selfhost.md`](https://github.com/PurHur/php-compiler/blob/m
|-----------|--------|
| **M0** — Small `lib/` bundle runs | ✅ |
| **M1** — Compiler-shaped bundle + compile-smoke | ✅ |
-| **M2** — Spine toward full inventory | ✅ **6319** / **6319** |
+| **M2** — Spine toward full inventory | ✅ **6335** / **6335** |
| **M3** — Native compiles PHP (no Zend emit) | ✅ Smoke + inventory argv driver strict native |
| **M4** — Bootstrap loop (next revision) | ✅ `bootstrap-loop-probe` full ladder |
| **M5** — Full self-host, no `vendor/` cold boot | ✅ Presenter strict + compiled-only empty `build/` cold boot ([#3053](https://github.com/PurHur/php-compiler/issues/3053)) |
diff --git a/docs/pages/index.html b/docs/pages/index.html
index 15f317f39e6..d5e5f2584a1 100644
--- a/docs/pages/index.html
+++ b/docs/pages/index.html
@@ -70,7 +70,7 @@ A compiler for PHP in PHP that compiles itself
VM + JIT + AOT
Closures · try/catch
321 builtins
- Spine **6319** / **6319**
+ Spine **6335** / **6335**
M5 strict ✅
M3 strict emit
MCJIT execute
@@ -391,7 +391,7 @@ Self-host progress
fix/spine-aot-jit-blockers @ a8cffaa0e (15 Jun 2026, LLVM 9).
- M2 spine SSOT: php script/bootstrap-spine-count.php → **6319** / **6319** Phase A inventory (literal coverage ✅).
+ M2 spine SSOT: php script/bootstrap-spine-count.php → **6335** / **6335** Phase A inventory (literal coverage ✅).
M4: make bootstrap-loop-probe full ladder ✅.
M5: make north-star5-verify-fast ✅ daily; --strict pre-merge; VM driver probe ~20ms in CI loops.
Remaining: MCJIT execute ([#98](https://github.com/PurHur/php-compiler/issues/98)); honest PHP main() in full spine AOT (native bundle-OK probe is bootstrap smoke).
@@ -416,7 +416,7 @@
M0–M1
✓
M2
- Spine **6319** / **6319** Phase A inventory — literal coverage ✅; native link + lint ✅
+
Spine **6335** / **6335** Phase A inventory — literal coverage ✅; native link + lint ✅
(#8559).
@@ -437,7 +437,7 @@ M4
✓
M5
Vendor prelink 3/3 ✅; committed .o cold boot ✅;
- north-star5-verify-fast ✅ daily; --strict pre-merge; spine **6319** / **6319**; prelinked gen-0 refreshed;
+ north-star5-verify-fast ✅ daily; --strict pre-merge; spine **6335** / **6335**; prelinked gen-0 refreshed;
fast VM execute probe (~20ms); compiled-only cold boot via BOOTSTRAP_M5_NO_ZEND=1 ✅
(#3053,
#8559,
@@ -494,7 +494,7 @@
Get involved
PHP compare ·
Getting started
-
+
diff --git a/docs/pages/missing-implementation.html b/docs/pages/missing-implementation.html
index f9c27c41123..a28b5f58789 100644
--- a/docs/pages/missing-implementation.html
+++ b/docs/pages/missing-implementation.html
@@ -75,12 +75,12 @@ North star — still open
| M4 bootstrap loop |
- Gen-2→gen-3 full spine recompile ✅ (make bootstrap-loop-gen2-recompile-spine, **6319/6319**). Full revision: inventory argv driver compiles bin/compile.php → gen-3 ✅ (make bootstrap-selfhost-full-revision-probe, [#2880](https://github.com/PurHur/php-compiler/issues/2880)) |
+ Gen-2→gen-3 full spine recompile ✅ (make bootstrap-loop-gen2-recompile-spine, **6335/6335**). Full revision: inventory argv driver compiles bin/compile.php → gen-3 ✅ (make bootstrap-selfhost-full-revision-probe, [#2880](https://github.com/PurHur/php-compiler/issues/2880)) |
#1492 |
| M5 full self-host |
- north-star5-verify-fast ✅ daily; --strict pre-merge; spine 6319/6319; vendor prelink 3/3 object_ok ✅; committed .o cold boot without vendor/ ✅; gen-0 sidecars refreshed ([#8559](https://github.com/PurHur/php-compiler/issues/8559)). Remaining: MCJIT execute ([#98](https://github.com/PurHur/php-compiler/issues/98)); honest full-spine PHP main() at runtime (native bundle-OK probe covers bootstrap smoke) |
+ north-star5-verify-fast ✅ daily; --strict pre-merge; spine 6335/6335; vendor prelink 3/3 object_ok ✅; committed .o cold boot without vendor/ ✅; gen-0 sidecars refreshed ([#8559](https://github.com/PurHur/php-compiler/issues/8559)). Remaining: MCJIT execute ([#98](https://github.com/PurHur/php-compiler/issues/98)); honest full-spine PHP main() at runtime (native bundle-OK probe covers bootstrap smoke) |
#1492 |
@@ -168,7 +168,7 @@ M3 LLVM 9 deny list (link-time)
M2 spine — shim / native-floor notes
- SSOT: script/bootstrap-spine-count.php — 6319/6319 Phase A files in compiler_lib_spine_smoke ([#8559](https://github.com/PurHur/php-compiler/issues/8559), [#2543](https://github.com/PurHur/php-compiler/issues/2543)). bin/vm.php is in the spine ([#2134](https://github.com/PurHur/php-compiler/issues/2134)); VM driver execute probe ~20ms ([#2201](https://github.com/PurHur/php-compiler/issues/2201)). Native bundle-OK probe at standalone main entry (bootstrap smoke; honest PHP main() still open).
+ SSOT: script/bootstrap-spine-count.php — 6335/6335 Phase A files in compiler_lib_spine_smoke ([#8559](https://github.com/PurHur/php-compiler/issues/8559), [#2543](https://github.com/PurHur/php-compiler/issues/2543)). bin/vm.php is in the spine ([#2134](https://github.com/PurHur/php-compiler/issues/2134)); VM driver execute probe ~20ms ([#2201](https://github.com/PurHur/php-compiler/issues/2201)). Native bundle-OK probe at standalone main entry (bootstrap smoke; honest PHP main() still open).
diff --git a/docs/roadmap-wave3.md b/docs/roadmap-wave3.md
index 79269250c2c..e93a5f35357 100644
--- a/docs/roadmap-wave3.md
+++ b/docs/roadmap-wave3.md
@@ -1,6 +1,6 @@
# Roadmap wave 3 tracker (#1354–#1379)
-> **Wave 3 complete on master (May 2026):** language **6319/6319** + stdlib **6319/6319** ([#1380](https://github.com/PurHur/php-compiler/issues/1380)). Phase-2 / JIT-only deferrals: [#1936](https://github.com/PurHur/php-compiler/issues/1936) (attributes reflection), [#1776](https://github.com/PurHur/php-compiler/issues/1776) (stdlib JIT audit), [#1238](https://github.com/PurHur/php-compiler/issues/1238).
+> **Wave 3 complete on master (May 2026):** language **6335/6335** + stdlib **6335/6335** ([#1380](https://github.com/PurHur/php-compiler/issues/1380)). Phase-2 / JIT-only deferrals: [#1936](https://github.com/PurHur/php-compiler/issues/1936) (attributes reflection), [#1776](https://github.com/PurHur/php-compiler/issues/1776) (stdlib JIT audit), [#1238](https://github.com/PurHur/php-compiler/issues/1238).
Living status for the **25 issues** filed May 2026 toward full PHP language + stdlib coverage. Umbrella: [#1380](https://github.com/PurHur/php-compiler/issues/1380). North stars: [#1044](https://github.com/PurHur/php-compiler/issues/1044), [#1492](https://github.com/PurHur/php-compiler/issues/1492) (self-host; was [#1056](https://github.com/PurHur/php-compiler/issues/1056)).
@@ -19,7 +19,7 @@ Regenerate capability truth: `php script/capability-matrix.php`, `php script/cap
Related merges outside this wave: `goto` ([#1228](https://github.com/PurHur/php-compiler/issues/1228) / [#1333](https://github.com/PurHur/php-compiler/pull/1333)), anonymous classes ([#1233](https://github.com/PurHur/php-compiler/issues/1233) / [#1386](https://github.com/PurHur/php-compiler/pull/1386)).
-**M2 spine:** **6319** / **6319** (`php script/bootstrap-spine-count.php`) — full Phase A inventory in `compiler_lib_spine_smoke`; coverage sync ✅ (`check-selfhost-spine-coverage-sync.php`). Native spine **link** + **lint** ✅ ([#2134](https://github.com/PurHur/php-compiler/issues/2134), [#8559](https://github.com/PurHur/php-compiler/issues/8559)). **M5 daily gate:** `make north-star5-verify-fast` + VM probe ~20ms ([#2201](https://github.com/PurHur/php-compiler/issues/2201)); `--strict` pre-merge only. M4 gen-2→gen-3 recompile ✅. Target doc: [self-host-target.md](self-host-target.md)
+**M2 spine:** **6335** / **6335** (`php script/bootstrap-spine-count.php`) — full Phase A inventory in `compiler_lib_spine_smoke`; coverage sync ✅ (`check-selfhost-spine-coverage-sync.php`). Native spine **link** + **lint** ✅ ([#2134](https://github.com/PurHur/php-compiler/issues/2134), [#8559](https://github.com/PurHur/php-compiler/issues/8559)). **M5 daily gate:** `make north-star5-verify-fast` + VM probe ~20ms ([#2201](https://github.com/PurHur/php-compiler/issues/2201)); `--strict` pre-merge only. M4 gen-2→gen-3 recompile ✅. Target doc: [self-host-target.md](self-host-target.md)
## Language (#1354–#1366)
@@ -69,4 +69,4 @@ Related merges outside this wave: `goto` ([#1228](https://github.com/PurHur/php-
---
-**Wave 3 close-out (May 2026):** language **6319/6319**, stdlib **6319/6319** on master. Do not reopen [#1354](https://github.com/PurHur/php-compiler/issues/1354)–[#1379](https://github.com/PurHur/php-compiler/issues/1379) for phase-1 gaps — use phase-2 trackers [#1936](https://github.com/PurHur/php-compiler/issues/1936) (attributes reflection), [#1776](https://github.com/PurHur/php-compiler/issues/1776) (stdlib JIT audit), [#1238](https://github.com/PurHur/php-compiler/issues/1238).
+**Wave 3 close-out (May 2026):** language **6335/6335**, stdlib **6335/6335** on master. Do not reopen [#1354](https://github.com/PurHur/php-compiler/issues/1354)–[#1379](https://github.com/PurHur/php-compiler/issues/1379) for phase-1 gaps — use phase-2 trackers [#1936](https://github.com/PurHur/php-compiler/issues/1936) (attributes reflection), [#1776](https://github.com/PurHur/php-compiler/issues/1776) (stdlib JIT audit), [#1238](https://github.com/PurHur/php-compiler/issues/1238).
diff --git a/docs/self-host-target.md b/docs/self-host-target.md
index c0ed10aab84..e0804814846 100644
--- a/docs/self-host-target.md
+++ b/docs/self-host-target.md
@@ -34,8 +34,8 @@ That is **M5**. Everything below is the honest path from today’s bootstrap to
| Layer | Today | Target |
|-------|-------|--------|
| **Bootstrap driver** | Prelinked gen-0 refreshed via honest inventory argv emit; native `build/bin-compile-aot-inventory` for M4/M5 | Compiled `bin/compile.php` only |
-| **Bundle size** | **6319/6319** literal Phase A inventory in spine smoke | Full vm.php closure |
-| **Inventory coverage** | **6319** / **6319** ✅ | Full closure |
+| **Bundle size** | **6335/6335** literal Phase A inventory in spine smoke | Full vm.php closure |
+| **Inventory coverage** | **6335** / **6335** ✅ | Full closure |
| **HelloWorld** | 🚧 probe reports `emit_path=native-prelinked-sidecar` — a committed blob **COPY**, not a native emit ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) | Native compile for arbitrary PHP |
| **Bootstrap loop (M4)** | `make bootstrap-loop-probe` full ladder ✅ — gen-1→gen-2, gen-2→gen-3 full spine, full-revision argv | Native full revision rebuild |
| **Vendor** | **3/3** vendor `object_ok`; committed `.o` cold boot without `vendor/` ✅; `make north-star5-verify-fast` daily ✅; `--strict` ❌ **red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)) | No Zend `vendor/autoload.php` at bootstrap |
@@ -56,8 +56,8 @@ That is **M5**. Everything below is the honest path from today’s bootstrap to
| M4 `make bootstrap-selfhost-full-revision-probe` | ✅ gen-2 inventory argv → gen-3 + fixture smoke ([#2880](https://github.com/PurHur/php-compiler/issues/2880)) |
| M4 `make bootstrap-loop-gen2-recompile-spine` | ✅ gen-2→gen-3 full spine native argv |
| M4 `make bootstrap-loop-probe` | 🚧 **DEGRADED** — gen-1→gen-2 is a prelinked sidecar COPY, not a native compile ([#21860](https://github.com/PurHur/php-compiler/issues/21860)); gen-2→gen-3 + full-revision then run on that copy, so byte-comparing gen-0/gen-2/gen-3 proves nothing. Require a real emit: `BOOTSTRAP_M4_REQUIRE_NATIVE_EMIT=1` ([#1498](https://github.com/PurHur/php-compiler/issues/1498)) |
-| `make bootstrap-aot-link` | ✅ **6319/6319** |
-| `make bootstrap-inventory-check` | ✅ **6319/6319** Phase A files, **0** source blockers |
+| `make bootstrap-aot-link` | ✅ **6335/6335** |
+| `make bootstrap-inventory-check` | ✅ **6335/6335** Phase A files, **0** source blockers |
| `make north-star5-verify-fast` | ✅ daily M5 PR gate (~1–2 min) |
| `make north-star5-verify ARGS=--strict` | ❌ **red on master** — step 4a2 `bootstrap-selfhost-driver-smoke`: standalone AOT emit leaves the LLVM builder detached ([#21417](https://github.com/PurHur/php-compiler/issues/21417)). Steps 1–4a pass. Was masked by a 4096M OOM ([#21104](https://github.com/PurHur/php-compiler/issues/21104)) and a `trigger_error` `ValueError` ([#21400](https://github.com/PurHur/php-compiler/issues/21400)), both now fixed |
@@ -69,7 +69,7 @@ That is **M5**. Everything below is the honest path from today’s bootstrap to
|-----------|----------------|--------|-----|
| **M0** | AOT can link a **small** honest `lib/` subset | ✅ | 100% |
| **M1** | Bundle is **compiler-shaped** (lint + compile-smoke) | ✅ | 100% |
-| **M2** | Spine grows toward full `bin/vm.php` inventory | ✅ **6319** / **6319** | **100%** |
+| **M2** | Spine grows toward full `bin/vm.php` inventory | ✅ **6335** / **6335** | **100%** |
| **M3** | Self-host binary **compiles external PHP** (HelloWorld) without Zend emit | 🚧 probe output is a blob COPY ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) | **~60%** |
| **M4** | Self-host binary **rebuilds** the next compiler tree | 🚧 ladder runs but gen-1→gen-2 is a COPY ([#21860](https://github.com/PurHur/php-compiler/issues/21860)) | **~60%** |
| **M5** | Full self-host; Zend retired from loop | 🚧 `north-star5-verify-fast` daily ✅; **`--strict` red at step 4a2** ([#21417](https://github.com/PurHur/php-compiler/issues/21417)); `BOOTSTRAP_M5_NO_ZEND=1` empty `build/` ([#3053](https://github.com/PurHur/php-compiler/issues/3053)) | **~75%** |
@@ -80,7 +80,7 @@ That is **M5**. Everything below is the honest path from today’s bootstrap to
| Indicator | Formula | Jul 2026 |
|-----------|---------|----------|
-| **M2 spine progress** | `require_once` units in `compiler_lib_spine_smoke` ÷ Phase A inventory file count | **6319** / **6319** (`php script/bootstrap-spine-count.php`) |
+| **M2 spine progress** | `require_once` units in `compiler_lib_spine_smoke` ÷ Phase A inventory file count | **6335** / **6335** (`php script/bootstrap-spine-count.php`) |
| **Public “Self-host” row** | Same M2 ratio until M3–M5 gates add weight ([`development-status.md`](pages/development-status.md)) | **~97%** |
| **M5 vendor prelink** | `object_ok` packages ÷ 3 | **3 / 3** (cfg, types, llvm) |
| **Composite (internal)** | Milestone weights in table above (M0–M1 = 100%, M2 = spine %, M3–M5 = gate %) | **~65%** |
@@ -134,7 +134,7 @@ Parallel batches ([#1419](https://github.com/PurHur/php-compiler/issues/1419), [
| Entry | Units | Role |
|-------|------:|------|
| `test/selfhost/compiler_minimal/main.php` | **108** | M0 core |
-| `test/selfhost/compiler_lib_spine_smoke/main.php` | **6319/6319** Phase A | M2 complete ([#8559](https://github.com/PurHur/php-compiler/issues/8559)) |
+| `test/selfhost/compiler_lib_spine_smoke/main.php` | **6335/6335** Phase A | M2 complete ([#8559](https://github.com/PurHur/php-compiler/issues/8559)) |
| `test/selfhost/compiler_helloworld_smoke/` | — | M3 probe + compile driver |
| `test/selfhost/bootstrap_loop_smoke/` | — | M4 scaffold (gen-1→gen-2→gen-3 loop; [#1498](https://github.com/PurHur/php-compiler/issues/1498)) |
diff --git a/lib/JIT/Builtin/ReflectionSetup.php b/lib/JIT/Builtin/ReflectionSetup.php
index 730441622a2..9beb23c2038 100644
--- a/lib/JIT/Builtin/ReflectionSetup.php
+++ b/lib/JIT/Builtin/ReflectionSetup.php
@@ -151,6 +151,24 @@ public static function emitSetStringPropertyFromVar(
);
}
+ /** Store a native long into an object property slot (#22044 ReflectionAttribute::$target). */
+ public static function emitSetIntegerProperty(
+ Context $context,
+ Value $obj,
+ string $className,
+ string $propName,
+ int $value
+ ): void {
+ $longVar = new Variable(
+ $context,
+ Variable::TYPE_NATIVE_LONG,
+ Variable::KIND_VALUE,
+ $context->constantFromInteger($value)
+ );
+ $slot = $context->type->object->propertySlotFor($obj, $className, $propName);
+ $context->type->object->propertyStore($slot, $longVar, Variable::TYPE_NATIVE_LONG);
+ }
+
/**
* @return array{0: Value, 1: Value} cstr pointer and byte length (size_t)
*/
diff --git a/lib/JIT/Call/ReflectionAttributeGetTarget.php b/lib/JIT/Call/ReflectionAttributeGetTarget.php
new file mode 100644
index 00000000000..1296ac043fd
--- /dev/null
+++ b/lib/JIT/Call/ReflectionAttributeGetTarget.php
@@ -0,0 +1,34 @@
+builder->pointerCast($namePtr, $i8p),
$nameLen
);
+ ReflectionSetup::emitSetIntegerProperty(
+ $context,
+ $attrObj,
+ 'ReflectionAttribute',
+ ReflectionSupport::PROP_ATTR_TARGET,
+ AttributeSupport::TARGET_CLASS
+ );
$argsHt = $context->builder->call(
$context->lookupFunction('__compiler_attr_class_args_hashtable'),
$classSafe,
diff --git a/lib/JIT/Call/ReflectionConstantGetAttributes.php b/lib/JIT/Call/ReflectionConstantGetAttributes.php
index 51eeaefca83..7dfc2f1cd1a 100644
--- a/lib/JIT/Call/ReflectionConstantGetAttributes.php
+++ b/lib/JIT/Call/ReflectionConstantGetAttributes.php
@@ -12,6 +12,8 @@
use PHPCompiler\JIT\Context;
use PHPCompiler\JIT\HashTableHelper;
use PHPCompiler\JIT\Variable;
+use PHPCompiler\VM\AttributeSupport;
+use PHPCompiler\VM\ReflectionSupport;
use PHPLLVM\Builder;
use PHPLLVM\Value;
@@ -74,6 +76,13 @@ public function call(Context $context, Variable ...$args): Value
$context->builder->pointerCast($namePtr, $i8p),
$nameLen
);
+ ReflectionSetup::emitSetIntegerProperty(
+ $context,
+ $attrObj,
+ 'ReflectionAttribute',
+ ReflectionSupport::PROP_ATTR_TARGET,
+ AttributeSupport::TARGET_CLASS_CONSTANT
+ );
HashTableHelper::setAtIndex(
$context,
$ht,
diff --git a/lib/JIT/Call/ReflectionMethodGetAttributes.php b/lib/JIT/Call/ReflectionMethodGetAttributes.php
index 6b00d25e778..3bca9ded470 100644
--- a/lib/JIT/Call/ReflectionMethodGetAttributes.php
+++ b/lib/JIT/Call/ReflectionMethodGetAttributes.php
@@ -12,6 +12,8 @@
use PHPCompiler\JIT\Context;
use PHPCompiler\JIT\HashTableHelper;
use PHPCompiler\JIT\Variable;
+use PHPCompiler\VM\AttributeSupport;
+use PHPCompiler\VM\ReflectionSupport;
use PHPLLVM\Builder;
use PHPLLVM\Value;
@@ -73,6 +75,13 @@ public function call(Context $context, Variable ...$args): Value
$context->builder->pointerCast($namePtr, $i8p),
$nameLen
);
+ ReflectionSetup::emitSetIntegerProperty(
+ $context,
+ $attrObj,
+ 'ReflectionAttribute',
+ ReflectionSupport::PROP_ATTR_TARGET,
+ AttributeSupport::TARGET_METHOD
+ );
HashTableHelper::setAtIndex(
$context,
$ht,
diff --git a/lib/JIT/Call/ReflectionPropertyGetAttributes.php b/lib/JIT/Call/ReflectionPropertyGetAttributes.php
index b8e1cdb36a5..8806418c49b 100644
--- a/lib/JIT/Call/ReflectionPropertyGetAttributes.php
+++ b/lib/JIT/Call/ReflectionPropertyGetAttributes.php
@@ -12,6 +12,8 @@
use PHPCompiler\JIT\Context;
use PHPCompiler\JIT\HashTableHelper;
use PHPCompiler\JIT\Variable;
+use PHPCompiler\VM\AttributeSupport;
+use PHPCompiler\VM\ReflectionSupport;
use PHPLLVM\Builder;
use PHPLLVM\Value;
@@ -74,6 +76,13 @@ public function call(Context $context, Variable ...$args): Value
$context->builder->pointerCast($namePtr, $i8p),
$nameLen
);
+ ReflectionSetup::emitSetIntegerProperty(
+ $context,
+ $attrObj,
+ 'ReflectionAttribute',
+ ReflectionSupport::PROP_ATTR_TARGET,
+ AttributeSupport::TARGET_PROPERTY
+ );
HashTableHelper::setAtIndex(
$context,
$ht,
diff --git a/lib/JIT/Context.php b/lib/JIT/Context.php
index 869dff98a4d..8b47a746dde 100755
--- a/lib/JIT/Context.php
+++ b/lib/JIT/Context.php
@@ -952,6 +952,7 @@ private function defineBuiltins(int $loadType): void {
$this->functionProxies['reflectionmethod::getnamedarguments'] = new Call\ReflectionMethodGetNamedArguments();
}
$this->functionProxies['reflectionattribute::getname'] = new Call\ReflectionAttributeGetName();
+ $this->functionProxies['reflectionattribute::gettarget'] = new Call\ReflectionAttributeGetTarget();
$this->functionProxies['reflectionattribute::newinstance'] = new Call\ReflectionAttributeNewInstance();
$this->functionProxies['reflectionenum::__construct'] = new Call\ReflectionEnumConstruct();
$this->functionProxies['reflectionenum::getname'] = new Call\ReflectionEnumGetName();
diff --git a/lib/VM/AttributeRegistry.php b/lib/VM/AttributeRegistry.php
index 5724bf42b63..a0a84aa4829 100644
--- a/lib/VM/AttributeRegistry.php
+++ b/lib/VM/AttributeRegistry.php
@@ -21,14 +21,16 @@ public static function classAttributes(Frame $frame, ClassEntry $entry, ?string
if (null === $ctx) {
throw new \LogicException('AttributeRegistry requires active VM context');
}
+ $target = AttributeSupport::TARGET_CLASS;
$entries = ReflectionSupport::filterEntriesByName($ctx, $entry->attributeEntries, $filter, $flags);
if ([] !== $entries) {
- return ReflectionSupport::attributesArrayFromEntries($frame, $entries);
+ return ReflectionSupport::attributesArrayFromEntries($frame, $entries, $target);
}
return ReflectionSupport::attributesArray(
$frame,
- ReflectionSupport::filterByName($ctx, $entry->attributeNames, $filter, $flags)
+ ReflectionSupport::filterByName($ctx, $entry->attributeNames, $filter, $flags),
+ $target
);
}
@@ -43,17 +45,19 @@ public static function methodAttributes(
if (null === $ctx) {
throw new \LogicException('AttributeRegistry requires active VM context');
}
+ $target = AttributeSupport::TARGET_METHOD;
$allEntries = $entry->methodAttributeEntries[$methodLc] ?? [];
$entries = ReflectionSupport::filterEntriesByName($ctx, $allEntries, $filter, $flags);
if ([] !== $entries) {
- return ReflectionSupport::attributesArrayFromEntries($frame, $entries);
+ return ReflectionSupport::attributesArrayFromEntries($frame, $entries, $target);
}
$all = $entry->methodAttributeNames[$methodLc] ?? [];
return ReflectionSupport::attributesArray(
$frame,
- ReflectionSupport::filterByName($ctx, $all, $filter, $flags)
+ ReflectionSupport::filterByName($ctx, $all, $filter, $flags),
+ $target
);
}
@@ -68,17 +72,19 @@ public static function propertyAttributes(
if (null === $ctx) {
throw new \LogicException('AttributeRegistry requires active VM context');
}
+ $target = AttributeSupport::TARGET_PROPERTY;
$allEntries = $entry->propertyAttributeEntries[$propLc] ?? [];
$entries = ReflectionSupport::filterEntriesByName($ctx, $allEntries, $filter, $flags);
if ([] !== $entries) {
- return ReflectionSupport::attributesArrayFromEntries($frame, $entries);
+ return ReflectionSupport::attributesArrayFromEntries($frame, $entries, $target);
}
$all = $entry->propertyAttributeNames[$propLc] ?? [];
return ReflectionSupport::attributesArray(
$frame,
- ReflectionSupport::filterByName($ctx, $all, $filter, $flags)
+ ReflectionSupport::filterByName($ctx, $all, $filter, $flags),
+ $target
);
}
@@ -93,17 +99,19 @@ public static function constantAttributes(
if (null === $ctx) {
throw new \LogicException('AttributeRegistry requires active VM context');
}
+ $target = AttributeSupport::TARGET_CLASS_CONSTANT;
$allEntries = $entry->constAttributeEntries[$constLc] ?? [];
$entries = ReflectionSupport::filterEntriesByName($ctx, $allEntries, $filter, $flags);
if ([] !== $entries) {
- return ReflectionSupport::attributesArrayFromEntries($frame, $entries);
+ return ReflectionSupport::attributesArrayFromEntries($frame, $entries, $target);
}
$all = $entry->constAttributeNames[$constLc] ?? [];
return ReflectionSupport::attributesArray(
$frame,
- ReflectionSupport::filterByName($ctx, $all, $filter, $flags)
+ ReflectionSupport::filterByName($ctx, $all, $filter, $flags),
+ $target
);
}
@@ -122,7 +130,8 @@ public static function enumCaseAttributes(
return ReflectionSupport::attributesArrayFromEntries(
$frame,
- ReflectionSupport::filterEntriesByName($ctx, $entries, $filter, $flags)
+ ReflectionSupport::filterEntriesByName($ctx, $entries, $filter, $flags),
+ AttributeSupport::TARGET_CLASS_CONSTANT
);
}
@@ -136,21 +145,23 @@ public static function functionAttributes(
if (null === $ctx) {
throw new \LogicException('AttributeRegistry requires active VM context');
}
+ $target = AttributeSupport::TARGET_FUNCTION;
if ($reflection->reflectionIsInternalFunction ?? false) {
- return ReflectionSupport::attributesArray($frame, []);
+ return ReflectionSupport::attributesArray($frame, [], $target);
}
$func = ReflectionSupport::resolveFunctionFromReflection($ctx, $reflection);
if (!$func instanceof \PHPCompiler\Func\PHP) {
- return ReflectionSupport::attributesArray($frame, []);
+ return ReflectionSupport::attributesArray($frame, [], $target);
}
$entries = ReflectionSupport::filterEntriesByName($ctx, $func->attributeEntries, $filter, $flags);
if ([] !== $entries) {
- return ReflectionSupport::attributesArrayFromEntries($frame, $entries);
+ return ReflectionSupport::attributesArrayFromEntries($frame, $entries, $target);
}
return ReflectionSupport::attributesArray(
$frame,
- ReflectionSupport::filterByName($ctx, $func->attributeNames, $filter, $flags)
+ ReflectionSupport::filterByName($ctx, $func->attributeNames, $filter, $flags),
+ $target
);
}
}
diff --git a/lib/VM/Builtin/ReflectionAttributeGetTarget.php b/lib/VM/Builtin/ReflectionAttributeGetTarget.php
new file mode 100644
index 00000000000..7aa2892f760
--- /dev/null
+++ b/lib/VM/Builtin/ReflectionAttributeGetTarget.php
@@ -0,0 +1,36 @@
+calledArgs[0]);
+ $targetVar = $receiver->getProperty(ReflectionSupport::PROP_ATTR_TARGET)->resolveIndirect();
+ if (null !== $frame->returnVar) {
+ if (Variable::TYPE_INTEGER === $targetVar->type) {
+ $frame->returnVar->int($targetVar->toInt());
+ } else {
+ $frame->returnVar->int(0);
+ }
+ }
+ }
+}
diff --git a/lib/VM/Builtin/ReflectionParameterGetAttributes.php b/lib/VM/Builtin/ReflectionParameterGetAttributes.php
index 39898d77b6d..9bd4c3abf46 100644
--- a/lib/VM/Builtin/ReflectionParameterGetAttributes.php
+++ b/lib/VM/Builtin/ReflectionParameterGetAttributes.php
@@ -28,7 +28,13 @@ public function execute(Frame $frame): void
$flags
);
if (null !== $frame->returnVar) {
- $frame->returnVar->copyFrom(ReflectionSupport::attributesArrayFromEntries($frame, $entries));
+ $frame->returnVar->copyFrom(
+ ReflectionSupport::attributesArrayFromEntries(
+ $frame,
+ $entries,
+ \PHPCompiler\VM\AttributeSupport::TARGET_PARAMETER
+ )
+ );
}
}
}
diff --git a/lib/VM/BuiltinClasses.php b/lib/VM/BuiltinClasses.php
index acc2cbe9cfc..74986ce23e2 100644
--- a/lib/VM/BuiltinClasses.php
+++ b/lib/VM/BuiltinClasses.php
@@ -86,6 +86,7 @@
use PHPCompiler\VM\Builtin\ReflectionPropertyIsAccessible;
use PHPCompiler\VM\Builtin\ReflectionPropertySetAccessible;
use PHPCompiler\VM\Builtin\ReflectionAttributeGetName;
+use PHPCompiler\VM\Builtin\ReflectionAttributeGetTarget;
use PHPCompiler\VM\Builtin\ReflectionAttributeIsRepeated;
use PHPCompiler\VM\Builtin\ReflectionAttributeNewInstance;
use PHPCompiler\VM\Builtin\ReflectionClassConstantGetDeprecatedMessage;
@@ -584,12 +585,15 @@ private static function registerReflection(Context $ctx): void
$attr->properties[] = new ClassProperty(ReflectionSupport::PROP_ATTR_NAME, null, $strProto);
$attr->properties[] = new ClassProperty(ReflectionSupport::PROP_ATTR_ARGS, null, $arrayProto);
$attr->properties[] = new ClassProperty(ReflectionSupport::PROP_ATTR_IS_REPEATED, null, $boolProto);
+ $attr->properties[] = new ClassProperty(ReflectionSupport::PROP_ATTR_TARGET, null, $intProto);
$attr->methods['getname'] = new ReflectionAttributeGetName();
$attr->methodVisibility['getname'] = $pub;
$attr->methods['getarguments'] = new ReflectionAttributeGetArguments();
$attr->methodVisibility['getarguments'] = $pub;
$attr->methods['isrepeated'] = new ReflectionAttributeIsRepeated();
$attr->methodVisibility['isrepeated'] = $pub;
+ $attr->methods['gettarget'] = new ReflectionAttributeGetTarget();
+ $attr->methodVisibility['gettarget'] = $pub;
$attr->methods['newinstance'] = new ReflectionAttributeNewInstance();
$attr->methodVisibility['newinstance'] = $pub;
$ctx->classes[ReflectionSupport::REFLECTION_ATTRIBUTE] = $attr;
diff --git a/lib/VM/ReflectionSupport.php b/lib/VM/ReflectionSupport.php
index 28f1506b4c9..deb83870bd0 100644
--- a/lib/VM/ReflectionSupport.php
+++ b/lib/VM/ReflectionSupport.php
@@ -114,6 +114,9 @@ final class ReflectionSupport
/** Whether this attribute name is duplicated on the target (#6912). */
public const PROP_ATTR_IS_REPEATED = 'isRepeated';
+ /** Attribute::TARGET_* bitmask for the declaration site (#22044). */
+ public const PROP_ATTR_TARGET = 'target';
+
public const PROP_EXTENSION_NAME = 'extension';
/** Internal enum class name on ReflectionEnumUnitCase / ReflectionEnumBackedCase (#10000). */
@@ -209,20 +212,21 @@ public static function throwReflectionException(string $message): void
/**
* @param list $names
*/
- public static function attributesArray(Frame $frame, array $names): Variable
+ public static function attributesArray(Frame $frame, array $names, int $target = 0): Variable
{
$entries = [];
foreach ($names as $name) {
$entries[] = new AttributeEntry($name);
}
- return self::attributesArrayFromEntries($frame, $entries);
+ return self::attributesArrayFromEntries($frame, $entries, $target);
}
/**
* @param list $entries
+ * @param int $target Attribute::TARGET_* for the declaration site (#22044)
*/
- public static function attributesArrayFromEntries(Frame $frame, array $entries): Variable
+ public static function attributesArrayFromEntries(Frame $frame, array $entries, int $target = 0): Variable
{
$ctx = $frame->vmContext;
if (null === $ctx) {
@@ -244,6 +248,7 @@ public static function attributesArrayFromEntries(Frame $frame, array $entries):
$obj->getProperty(self::PROP_ATTR_NAME)->string($entry->name);
$obj->getProperty(self::PROP_ATTR_ARGS)->copyFrom(self::argsToVariable($entry->args, $ctx));
$obj->getProperty(self::PROP_ATTR_IS_REPEATED)->bool($entry->isRepeated);
+ $obj->getProperty(self::PROP_ATTR_TARGET)->int($target);
$slot = new Variable(Variable::TYPE_OBJECT);
$slot->object($obj);
$ht->append($slot);
diff --git a/prelinked/bootstrap-gen0/.m3_compiler_lib_sidecar.sha b/prelinked/bootstrap-gen0/.m3_compiler_lib_sidecar.sha
index 977f9dd5cd8..9eb2540ae7b 100755
--- a/prelinked/bootstrap-gen0/.m3_compiler_lib_sidecar.sha
+++ b/prelinked/bootstrap-gen0/.m3_compiler_lib_sidecar.sha
@@ -1 +1 @@
-6940994948e7e5de4bf32865288adac53b903a01
\ No newline at end of file
+a3fc548286c85d7698d653d3239127e46bdef574
\ No newline at end of file
diff --git a/test/compliance/cases/stdlib/reflection/reflection_attribute_get_target.phpt b/test/compliance/cases/stdlib/reflection/reflection_attribute_get_target.phpt
new file mode 100644
index 00000000000..6d40c47246d
--- /dev/null
+++ b/test/compliance/cases/stdlib/reflection/reflection_attribute_get_target.phpt
@@ -0,0 +1,50 @@
+--TEST--
+Stdlib: ReflectionAttribute::getTarget() returns Attribute::TARGET_* bitmask (#22044)
+--FILE--
+getAttributes()[0]->getTarget(), "\n";
+echo (new ReflectionMethod(M::class, 'm'))->getAttributes()[0]->getTarget(), "\n";
+echo (new ReflectionProperty(M::class, 'p'))->getAttributes()[0]->getTarget(), "\n";
+echo (new ReflectionClassConstant(M::class, 'C'))->getAttributes()[0]->getTarget(), "\n";
+echo (new ReflectionMethod(M::class, 'q'))->getParameters()[0]->getAttributes()[0]->getTarget(), "\n";
+echo (new ReflectionFunction('f'))->getAttributes()[0]->getTarget(), "\n";
+--EXPECT--
+1
+4
+8
+16
+32
+2
diff --git a/test/repro/maintainer_gap_reflection_attribute_get_target.php b/test/repro/maintainer_gap_reflection_attribute_get_target.php
new file mode 100644
index 00000000000..e9c0e8e1444
--- /dev/null
+++ b/test/repro/maintainer_gap_reflection_attribute_get_target.php
@@ -0,0 +1,50 @@
+getAttributes()[0]->getTarget(), "\n";
+echo 'method=', (new ReflectionMethod(M::class, 'm'))->getAttributes()[0]->getTarget(), "\n";
+echo 'prop=', (new ReflectionProperty(M::class, 'p'))->getAttributes()[0]->getTarget(), "\n";
+echo 'const=', (new ReflectionClassConstant(M::class, 'C'))->getAttributes()[0]->getTarget(), "\n";
+echo 'param=', (new ReflectionMethod(M::class, 'q'))->getParameters()[0]->getAttributes()[0]->getTarget(), "\n";
+echo 'func=', (new ReflectionFunction('f'))->getAttributes()[0]->getTarget(), "\n";
+echo 'TARGET_CLASS=', Attribute::TARGET_CLASS, "\n";
+echo 'TARGET_FUNCTION=', Attribute::TARGET_FUNCTION, "\n";
+echo 'TARGET_METHOD=', Attribute::TARGET_METHOD, "\n";
+echo 'TARGET_PROPERTY=', Attribute::TARGET_PROPERTY, "\n";
+echo 'TARGET_CLASS_CONSTANT=', Attribute::TARGET_CLASS_CONSTANT, "\n";
+echo 'TARGET_PARAMETER=', Attribute::TARGET_PARAMETER, "\n";
diff --git a/test/selfhost/compiler_lib_spine_smoke/main.php b/test/selfhost/compiler_lib_spine_smoke/main.php
index 1823d110b15..7ce63122006 100644
--- a/test/selfhost/compiler_lib_spine_smoke/main.php
+++ b/test/selfhost/compiler_lib_spine_smoke/main.php
@@ -5182,6 +5182,7 @@
require_once __DIR__.'/../../../lib/JIT/Call/RandomizerGetBytesFromString.php';
require_once __DIR__.'/../../../lib/JIT/Call/RandomizerMt19937Construct.php';
require_once __DIR__.'/../../../lib/JIT/Call/ReflectionAttributeGetName.php';
+require_once __DIR__.'/../../../lib/JIT/Call/ReflectionAttributeGetTarget.php';
require_once __DIR__.'/../../../lib/JIT/Call/ReflectionAttributeNewInstance.php';
require_once __DIR__.'/../../../lib/JIT/Call/ReflectionClassConstruct.php';
require_once __DIR__.'/../../../lib/JIT/Call/ReflectionClassCreateLazyGhost.php';
@@ -5549,6 +5550,7 @@
require_once __DIR__.'/../../../lib/VM/Builtin/PharRunning.php';
require_once __DIR__.'/../../../lib/VM/Builtin/ReflectionAttributeGetArguments.php';
require_once __DIR__.'/../../../lib/VM/Builtin/ReflectionAttributeGetName.php';
+require_once __DIR__.'/../../../lib/VM/Builtin/ReflectionAttributeGetTarget.php';
require_once __DIR__.'/../../../lib/VM/Builtin/ReflectionAttributeIsRepeated.php';
require_once __DIR__.'/../../../lib/VM/Builtin/ReflectionAttributeNewInstance.php';
require_once __DIR__.'/../../../lib/VM/Builtin/ReflectionClassConstantGetDeprecatedMessage.php';
diff --git a/test/unit/BootstrapSelfhostBundleTest.php b/test/unit/BootstrapSelfhostBundleTest.php
index 7b2b4096b4d..1dbd49e7096 100644
--- a/test/unit/BootstrapSelfhostBundleTest.php
+++ b/test/unit/BootstrapSelfhostBundleTest.php
@@ -535,7 +535,7 @@ public function testCompilerLibSpineSmokeBundleUnitCountAndKeyUnits(): void
$this->assertFileExists($entry);
$contents = (string) file_get_contents($entry);
$count = bootstrap_spine_counts(self::$root)['spine'];
- $this->assertSame(6319, $count, 'M2 spine require_once units track Phase A inventory (#8559, #9234, #11629, #18550)');
+ $this->assertSame(6335, $count, 'M2 spine require_once units track Phase A inventory (#8559, #9234, #11629, #18550)');
foreach (self::LIB_SPINE_SMOKE_NEW_UNITS as $unit) {
$this->assertStringContainsString(
"require_once __DIR__.'/../../../{$unit}';",