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}';",