5 partial · 4 gaps
+ 81 / 89 full (VM+JIT+AOT) +4 partial · 4 gaps
diff --git a/README.md b/README.md index 68561f49e4..6d51e3acfd 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 **3992** / **3995** · **852** builtins · M5 fast + strict ✅ · VM probe ~**20ms** +**Snapshot (Jul 2026, `master` — v1.1.0 prep):** VM + AOT for shipped examples ✅ · examples web smoke ✅ · self-host spine **4031** / **4031** · **852** builtins · M5 fast + strict ✅ · 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** | ✅ ~90% | M5 fast gate green; spine **3992** / **3995**; vendor prelink **3/3** ([#1492](https://github.com/PurHur/php-compiler/issues/1492)) | +| **Self-host north star** | ✅ ~90% | M5 fast gate green; spine **4031** / **4031**; 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** | ✅ **3992** / **3995** | Full Phase A inventory in spine smoke; native link + lint ✅ | +| **M2** | ✅ **4031** / **4031** | Full Phase A inventory in spine smoke; native link + lint ✅ | | **M3** | ✅ | HelloWorld strict native ✅; inventory argv `bin/compile.php` ✅ | | **M4** | ✅ | `make bootstrap-loop-probe` full ladder ✅ (gen-1→gen-2→gen-3 + full-revision) | | **M5** | ✅ | `make north-star5-verify-fast` (daily); `--strict` pre-merge ✅; vendor **3/3** ✅; gen-0 sidecars refreshed | @@ -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-june-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **3992** / **3995**; M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) + **`--strict`** pre-merge ✅ ([#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-june-2026) for the full M0–M5 ladder. Summary: M0–M5 bootstrap gates ✅; spine **4031** / **4031**; M3 strict native + inventory argv ✅; M4 full `bootstrap-loop-probe` ✅; M5 **`north-star5-verify-fast`** (daily) + **`--strict`** pre-merge ✅ ([#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-inventory.md b/docs/bootstrap-inventory.md index b06f10d0b7..eac4f47b60 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 | 4027 | -| Phase A inventory files (M2 ratio SSOT) | 4027 | +| PHP files on vm.php path | 4031 | +| Phase A inventory files (M2 ratio SSOT) | 4031 | | Phase A ratio-deferred paths | 0 | | Source constructs flagged (blockers) | 0 | -| Source constructs flagged (warnings) | 10861 | +| Source constructs flagged (warnings) | 10865 | ## Compiler CFG gaps (`lib/Compiler.php`) @@ -637,6 +637,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag | `ext/standard/ChmodJitHelper.php` | 0 | 1 | | `ext/standard/ChownJitHelper.php` | 0 | 1 | | `ext/standard/ChunkSplitJitHelper.php` | 0 | 1 | +| `ext/standard/ClassExistsJitHelper.php` | 0 | 1 | | `ext/standard/CliArgvJitHelper.php` | 0 | 2 | | `ext/standard/ClockGettimeJitHelper.php` | 0 | 1 | | `ext/standard/CloneWithJitHelper.php` | 0 | 1 | @@ -739,6 +740,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag | `ext/standard/IniIntrospectionJitHelper.php` | 0 | 1 | | `ext/standard/IniJitHelper.php` | 0 | 1 | | `ext/standard/IniParseQuantityJitHelper.php` | 0 | 1 | +| `ext/standard/InterfaceExistsJitHelper.php` | 0 | 1 | | `ext/standard/IsFiniteJitHelper.php` | 0 | 1 | | `ext/standard/IsInfiniteJitHelper.php` | 0 | 1 | | `ext/standard/IsNanJitHelper.php` | 0 | 1 | @@ -2998,6 +3000,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag | `lib/JIT/Builtin/StringCaseCompare.php` | 0 | 3 | | `lib/JIT/Builtin/StringChmod.php` | 0 | 1 | | `lib/JIT/Builtin/StringChunkSplit.php` | 0 | 3 | +| `lib/JIT/Builtin/StringClassExists.php` | 0 | 1 | | `lib/JIT/Builtin/StringClockGettime.php` | 0 | 1 | | `lib/JIT/Builtin/StringClockGettimeRuntime.php` | 0 | 2 | | `lib/JIT/Builtin/StringConvertUu.php` | 0 | 3 | @@ -3054,6 +3057,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag | `lib/JIT/Builtin/StringIdate.php` | 0 | 3 | | `lib/JIT/Builtin/StringImageTypeToExtension.php` | 0 | 3 | | `lib/JIT/Builtin/StringInfo.php` | 0 | 1 | +| `lib/JIT/Builtin/StringInterfaceExists.php` | 0 | 1 | | `lib/JIT/Builtin/StringJsonDecode.php` | 0 | 3 | | `lib/JIT/Builtin/StringJsonDecodeInventoryStubs.php` | 0 | 1 | | `lib/JIT/Builtin/StringJsonEncode.php` | 0 | 3 | @@ -5076,45 +5080,45 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag - new ObjectEntry (line 1450) - new DomNodeState (line 1455) - new Variable (line 1460) -- new ObjectEntry (line 1845) -- new DomNodeState (line 1847) -- new DOMException (line 1994) -- new DOMException (line 2020) -- new DOMException (line 2038) -- new DOMException (line 2041) -- new DOMException (line 2049) -- new DOMException (line 2075) -- new DOMException (line 2088) -- new DOMException (line 2243) -- new DOMException (line 2337) -- new DOMException (line 2341) +- new ObjectEntry (line 1934) +- new DomNodeState (line 1936) +- new DOMException (line 2083) +- new DOMException (line 2109) +- new DOMException (line 2127) +- new DOMException (line 2130) +- new DOMException (line 2138) +- new DOMException (line 2164) +- new DOMException (line 2177) +- new DOMException (line 2332) +- new DOMException (line 2426) - new DOMException (line 2430) -- new DOMException (line 2434) -- new DOMException (line 2492) -- new DOMException (line 2509) -- new DOMException (line 2538) -- new DOMException (line 2579) -- new DOMException (line 2604) -- new DOMException (line 3038) -- new Variable (line 3062) -- new DOMException (line 3252) -- new DOMException (line 3333) -- new DOMException (line 3375) -- new ObjectEntry (line 3452) -- new DomNodeState (line 3456) -- new Variable (line 3463) -- new DOMException (line 3528) -- new DOMException (line 3535) -- new DOMException (line 3542) -- new DOMException (line 3546) -- new DOMException (line 3549) -- new DOMException (line 3558) -- new Variable (line 4206) -- new Variable (line 4219) -- new DOMException (line 4297) -- new DOMException (line 4308) -- new DOMException (line 4374) -- 213 class method(s) +- new DOMException (line 2519) +- new DOMException (line 2523) +- new DOMException (line 2581) +- new DOMException (line 2598) +- new DOMException (line 2627) +- new DOMException (line 2668) +- new DOMException (line 2693) +- new DOMException (line 3167) +- new Variable (line 3191) +- new DOMException (line 3381) +- new DOMException (line 3462) +- new DOMException (line 3504) +- new ObjectEntry (line 3581) +- new DomNodeState (line 3585) +- new Variable (line 3592) +- new DOMException (line 3657) +- new DOMException (line 3664) +- new DOMException (line 3671) +- new DOMException (line 3675) +- new DOMException (line 3678) +- new DOMException (line 3687) +- new Variable (line 4335) +- new Variable (line 4348) +- new DOMException (line 4426) +- new DOMException (line 4437) +- new DOMException (line 4503) +- 217 class method(s) - 2 closure(s) ### `ext/filter/BuiltinEnums.php` @@ -8412,6 +8416,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag **Warnings** (review for bootstrap subset): - 1 class method(s) +### `ext/standard/ClassExistsJitHelper.php` + +**Warnings** (review for bootstrap subset): +- 1 class method(s) + ### `ext/standard/CliArgvJitHelper.php` **Warnings** (review for bootstrap subset): @@ -8949,6 +8958,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag **Warnings** (review for bootstrap subset): - 1 class method(s) +### `ext/standard/InterfaceExistsJitHelper.php` + +**Warnings** (review for bootstrap subset): +- 1 class method(s) + ### `ext/standard/IsFiniteJitHelper.php` **Warnings** (review for bootstrap subset): @@ -20241,7 +20255,7 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag ### `ext/xml/VmXml.php` **Warnings** (review for bootstrap subset): -- 13 class method(s) +- 14 class method(s) ### `ext/xml/xml_get_error_code.php` @@ -23729,6 +23743,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag - 7 class method(s) - 1 closure(s) +### `lib/JIT/Builtin/StringClassExists.php` + +**Warnings** (review for bootstrap subset): +- 4 class method(s) + ### `lib/JIT/Builtin/StringClockGettime.php` **Warnings** (review for bootstrap subset): @@ -24060,6 +24079,11 @@ Rank live CFG gaps across inventory files: `php script/bootstrap-inventory-triag **Warnings** (review for bootstrap subset): - 12 class method(s) +### `lib/JIT/Builtin/StringInterfaceExists.php` + +**Warnings** (review for bootstrap subset): +- 4 class method(s) + ### `lib/JIT/Builtin/StringJsonDecode.php` **Warnings** (review for bootstrap subset): diff --git a/docs/bootstrap-profile.json b/docs/bootstrap-profile.json index 3770cc9d1b..16b5edc9c4 100644 --- a/docs/bootstrap-profile.json +++ b/docs/bootstrap-profile.json @@ -145,6 +145,7 @@ "ext/dom/ElementGetElementsByTagNameNS.php", "ext/dom/ElementHasAttribute.php", "ext/dom/ElementHasAttributeNS.php", + "ext/dom/ElementInsertAdjacentHTML.php", "ext/dom/ElementRemoveAttribute.php", "ext/dom/ElementRemoveAttributeNS.php", "ext/dom/ElementRemoveAttributeNode.php", @@ -275,13 +276,17 @@ "ext/intl/IntlDateFormatterCreate.php", "ext/intl/IntlExtensionPolicy.php", "ext/intl/JitGrapheme.php", + "ext/intl/LocaleGetDefault.php", + "ext/intl/LocaleSetDefault.php", "ext/intl/Module.php", "ext/intl/UnicodeCanonical.php", "ext/intl/VmGrapheme.php", + "ext/intl/VmLocale.php", "ext/intl/grapheme_extract.php", "ext/intl/grapheme_levenshtein.php", "ext/intl/grapheme_str_contains.php", "ext/intl/grapheme_str_split.php", + "ext/intl/grapheme_strimwidth.php", "ext/intl/grapheme_stripos.php", "ext/intl/grapheme_stristr.php", "ext/intl/grapheme_strlen.php", @@ -290,6 +295,8 @@ "ext/intl/grapheme_strstr.php", "ext/intl/grapheme_substr.php", "ext/intl/intl_get_error_code.php", + "ext/intl/locale_get_default.php", + "ext/intl/locale_set_default.php", "ext/libxml/BuiltinClasses.php", "ext/libxml/LibxmlConstants.php", "ext/libxml/LibxmlFunction.php", @@ -636,6 +643,7 @@ "ext/standard/ArrayPopJitHelper.php", "ext/standard/ArrayProductJitHelper.php", "ext/standard/ArrayPushJitHelper.php", + "ext/standard/ArrayRandJitHelper.php", "ext/standard/ArrayReduceJitHelper.php", "ext/standard/ArrayReplaceJitHelper.php", "ext/standard/ArrayReplaceKeyJitHelper.php", @@ -662,6 +670,7 @@ "ext/standard/BuiltinAttributes.php", "ext/standard/BuiltinClasses.php", "ext/standard/BuiltinEnums.php", + "ext/standard/BuiltinIntrospectionPolicy.php", "ext/standard/BuiltinRegistry.php", "ext/standard/CaseCompareJitHelper.php", "ext/standard/CeilJitHelper.php", @@ -671,6 +680,7 @@ "ext/standard/ChmodJitHelper.php", "ext/standard/ChownJitHelper.php", "ext/standard/ChunkSplitJitHelper.php", + "ext/standard/ClassExistsJitHelper.php", "ext/standard/CliArgvJitHelper.php", "ext/standard/ClockGettimeJitHelper.php", "ext/standard/CloneWithJitHelper.php", @@ -695,6 +705,7 @@ "ext/standard/DirHandleJitHelper.php", "ext/standard/DirectoryBuiltin.php", "ext/standard/EmbedObJitHelper.php", + "ext/standard/EnumExistsJitHelper.php", "ext/standard/EnvLocalJitHelper.php", "ext/standard/ErrorHandlerJitHelper.php", "ext/standard/ErrorLastJitHelper.php", @@ -774,6 +785,7 @@ "ext/standard/IniIntrospectionJitHelper.php", "ext/standard/IniJitHelper.php", "ext/standard/IniParseQuantityJitHelper.php", + "ext/standard/InterfaceExistsJitHelper.php", "ext/standard/IsFiniteJitHelper.php", "ext/standard/IsInfiniteJitHelper.php", "ext/standard/IsNanJitHelper.php", @@ -787,7 +799,6 @@ "ext/standard/JitArrayMergeRecursive.php", "ext/standard/JitArrayPointer.php", "ext/standard/JitArrayPush.php", - "ext/standard/JitArrayRand.php", "ext/standard/JitAssert.php", "ext/standard/JitAssertOptions.php", "ext/standard/JitAttributeExists.php", @@ -1219,12 +1230,14 @@ "ext/standard/JitVfprintf.php", "ext/standard/JitVfscanf.php", "ext/standard/JitVsprintf.php", + "ext/standard/JitVsprintfArrayArg.php", "ext/standard/JitWebParams.php", "ext/standard/JitZendScalarCast.php", "ext/standard/JitZlib.php", "ext/standard/JsonDecodeJitHelper.php", "ext/standard/JsonEncodeJitHelper.php", "ext/standard/KeySortJitHelper.php", + "ext/standard/LcgJitHelper.php", "ext/standard/LdexpJitHelper.php", "ext/standard/LevenshteinJitHelper.php", "ext/standard/LinkJitHelper.php", @@ -1264,6 +1277,7 @@ "ext/standard/PackEngineEncode.php", "ext/standard/PackJitEngine.php", "ext/standard/PackJitHelper.php", + "ext/standard/ParamSensitiveJitHelper.php", "ext/standard/ParseIniEngine.php", "ext/standard/ParseStrEngine.php", "ext/standard/ParseStrJitHelper.php", @@ -1391,10 +1405,12 @@ "ext/standard/TimezoneFallbackData.php", "ext/standard/TimezoneLocationJitHelper.php", "ext/standard/TimezoneOffsetJitHelper.php", + "ext/standard/TraitExistsJitHelper.php", "ext/standard/TriggerErrorJitHelper.php", "ext/standard/UcwordsJitHelper.php", "ext/standard/UmaskJitHelper.php", "ext/standard/UniqidJitHelper.php", + "ext/standard/UnitEnumExistsJitHelper.php", "ext/standard/UnlinkJitHelper.php", "ext/standard/UnpackEngine.php", "ext/standard/UnpackJitHelper.php", @@ -1439,6 +1455,7 @@ "ext/standard/VmCliProcessTitlePure.php", "ext/standard/VmClockGettime.php", "ext/standard/VmClosureCall.php", + "ext/standard/VmCombinedLcg.php", "ext/standard/VmConnection.php", "ext/standard/VmConstants.php", "ext/standard/VmConvertCyrString.php", @@ -1609,6 +1626,7 @@ "ext/standard/VmPregBacktrackLimitException.php", "ext/standard/VmPregEngine.php", "ext/standard/VmPregFailure.php", + "ext/standard/VmPregJitStackLimitException.php", "ext/standard/VmPregLimits.php", "ext/standard/VmPregMatches.php", "ext/standard/VmPregNative.php", @@ -1717,6 +1735,7 @@ "ext/standard/VmZlibCore.php", "ext/standard/VmZlibLibzReference.php", "ext/standard/VmZlibStreamFilter.php", + "ext/standard/VsprintfJitHelper.php", "ext/standard/WeakRefRegistryJitHelper.php", "ext/standard/WordwrapJitHelper.php", "ext/standard/ZendSort.php", @@ -2147,6 +2166,7 @@ "ext/standard/krsort_.php", "ext/standard/ksort_.php", "ext/standard/lcfirst.php", + "ext/standard/lcg_value.php", "ext/standard/lchgrp_.php", "ext/standard/lchown_.php", "ext/standard/ldexp.php", @@ -2175,6 +2195,7 @@ "ext/standard/mktime.php", "ext/standard/modf.php", "ext/standard/move_uploaded_file.php", + "ext/standard/mt_rand.php", "ext/standard/mt_srand.php", "ext/standard/natcasesort_.php", "ext/standard/natsort_.php", @@ -2238,6 +2259,8 @@ "ext/standard/phpc_native_ht_set_string_key.php", "ext/standard/phpc_native_ht_set_string_key_ht.php", "ext/standard/phpc_run_command.php", + "ext/standard/phpc_weakref_null_slot.php", + "ext/standard/phpc_weakref_unset_map_key.php", "ext/standard/phpcredits.php", "ext/standard/phpinfo.php", "ext/standard/phpversion.php", @@ -2359,6 +2382,7 @@ "ext/standard/spl_object_id.php", "ext/standard/sprintf_.php", "ext/standard/sqrt.php", + "ext/standard/srand.php", "ext/standard/sscanf.php", "ext/standard/stat_.php", "ext/standard/str_contains.php", @@ -2732,6 +2756,7 @@ "lib/JIT/Builtin/ArrayPopRuntime.php", "lib/JIT/Builtin/ArrayProductRuntime.php", "lib/JIT/Builtin/ArrayPushRuntime.php", + "lib/JIT/Builtin/ArrayRandRuntime.php", "lib/JIT/Builtin/ArrayReduceRuntime.php", "lib/JIT/Builtin/ArrayReplaceKeyRuntime.php", "lib/JIT/Builtin/ArrayReplaceRecursiveRuntime.php", @@ -2846,6 +2871,7 @@ "lib/JIT/Builtin/LastErrorRuntime.php", "lib/JIT/Builtin/LateStaticBindingGlobals.php", "lib/JIT/Builtin/LateStaticBindingRuntime.php", + "lib/JIT/Builtin/Lcg.php", "lib/JIT/Builtin/ListUnpackRuntime.php", "lib/JIT/Builtin/MathAbs.php", "lib/JIT/Builtin/MathAcos.php", @@ -2911,6 +2937,8 @@ "lib/JIT/Builtin/PackArgvSerialize.php", "lib/JIT/Builtin/PackJitRuntime.php", "lib/JIT/Builtin/PadTypeJit.php", + "lib/JIT/Builtin/ParamSensitiveLookupRuntime.php", + "lib/JIT/Builtin/ParamSensitiveLowering.php", "lib/JIT/Builtin/ParseStrNativeOpsJit.php", "lib/JIT/Builtin/ParseStrRuntime.php", "lib/JIT/Builtin/ParseUrl.php", @@ -3032,6 +3060,7 @@ "lib/JIT/Builtin/StringCaseCompare.php", "lib/JIT/Builtin/StringChmod.php", "lib/JIT/Builtin/StringChunkSplit.php", + "lib/JIT/Builtin/StringClassExists.php", "lib/JIT/Builtin/StringClockGettime.php", "lib/JIT/Builtin/StringClockGettimeRuntime.php", "lib/JIT/Builtin/StringConvertUu.php", @@ -3042,6 +3071,7 @@ "lib/JIT/Builtin/StringDir.php", "lib/JIT/Builtin/StringDirJit.php", "lib/JIT/Builtin/StringDirRuntime.php", + "lib/JIT/Builtin/StringEnumExists.php", "lib/JIT/Builtin/StringErrorLog.php", "lib/JIT/Builtin/StringExplode.php", "lib/JIT/Builtin/StringFgetcsvJit.php", @@ -3087,6 +3117,7 @@ "lib/JIT/Builtin/StringIdate.php", "lib/JIT/Builtin/StringImageTypeToExtension.php", "lib/JIT/Builtin/StringInfo.php", + "lib/JIT/Builtin/StringInterfaceExists.php", "lib/JIT/Builtin/StringJsonDecode.php", "lib/JIT/Builtin/StringJsonDecodeInventoryStubs.php", "lib/JIT/Builtin/StringJsonEncode.php", @@ -3174,6 +3205,7 @@ "lib/JIT/Builtin/StringSysGetloadavg.php", "lib/JIT/Builtin/StringSyslog.php", "lib/JIT/Builtin/StringTempnam.php", + "lib/JIT/Builtin/StringTraitExists.php", "lib/JIT/Builtin/StringTriggerError.php", "lib/JIT/Builtin/StringTriggerErrorJit.php", "lib/JIT/Builtin/StringTrimMask.php", @@ -3181,6 +3213,7 @@ "lib/JIT/Builtin/StringUcwords.php", "lib/JIT/Builtin/StringUmask.php", "lib/JIT/Builtin/StringUniqid.php", + "lib/JIT/Builtin/StringUnitEnumExists.php", "lib/JIT/Builtin/StringUnlink.php", "lib/JIT/Builtin/StringUnpack.php", "lib/JIT/Builtin/StringUnserialize.php", @@ -3193,6 +3226,7 @@ "lib/JIT/Builtin/StringVersionCompare.php", "lib/JIT/Builtin/StringVersionCompareJit.php", "lib/JIT/Builtin/StringVfscanf.php", + "lib/JIT/Builtin/StringVsprintf.php", "lib/JIT/Builtin/StringWordwrap.php", "lib/JIT/Builtin/StringZlib.php", "lib/JIT/Builtin/StringZstd.php", @@ -3231,6 +3265,7 @@ "lib/JIT/Builtin/VarArg.php", "lib/JIT/Builtin/VarFetchRuntime.php", "lib/JIT/Builtin/WeakRefNative.php", + "lib/JIT/Builtin/WeakRefNativeOpsJit.php", "lib/JIT/Builtin/WeakRefRegistryRuntime.php", "lib/JIT/Builtin/WeakRefRuntime.php", "lib/JIT/Builtin/WeakRefSetup.php", @@ -3286,6 +3321,7 @@ "lib/JIT/Call/ReflectionEnumIsBacked.php", "lib/JIT/Call/ReflectionEnumUnitCaseGetName.php", "lib/JIT/Call/ReflectionMethodGetAttributes.php", + "lib/JIT/Call/ReflectionParameterIsSensitiveParameter.php", "lib/JIT/Call/ReflectionPropertyConstruct.php", "lib/JIT/Call/ReflectionPropertyGetAttributes.php", "lib/JIT/Call/RuntimeIndirectClosureCall.php", @@ -3736,6 +3772,7 @@ "lib/VM/Builtin/ReflectionParameterGetValue.php", "lib/VM/Builtin/ReflectionParameterIsDeprecated.php", "lib/VM/Builtin/ReflectionParameterIsSensitive.php", + "lib/VM/Builtin/ReflectionParameterIsSensitiveParameter.php", "lib/VM/Builtin/ReflectionPropertyAccessProbe.php", "lib/VM/Builtin/ReflectionPropertyAsymmetricProbe.php", "lib/VM/Builtin/ReflectionPropertyConstruct.php", @@ -4228,9 +4265,9 @@ "test/bootstrap-aot/lib_opcode/main.php" ], "totals": { - "inventory_files": 3994, + "inventory_files": 4031, "excluded": 0, - "eligible": 3994, + "eligible": 4031, "aot_lint_targets": 113, "aot_link_targets": 100, "aot_link_lib_targets": 1 diff --git a/docs/bootstrap-selfhost.md b/docs/bootstrap-selfhost.md index cdec748b83..7ee7ca3822 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:** **3992** / **3995** 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:** **4031** / **4031** 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 diff --git a/docs/pages/capability-comparison.html b/docs/pages/capability-comparison.html index 1e75230373..7f6513066c 100644 --- a/docs/pages/capability-comparison.html +++ b/docs/pages/capability-comparison.html @@ -59,12 +59,12 @@
5 partial · 4 gaps
+ 81 / 89 full (VM+JIT+AOT) +4 partial · 4 gaps
11 partial · 20 gaps
readonly classesreadonly properties (per-property)Property hooks (`get` / `set` on properties)PHP 8.4 asymmetric property visibility (private(set), protected(set), etc.)PHP 8.4 asymmetric property visibility (private(set), protected(set), etc.)User __destruct()PHP 8 attributes — `ReflectionClass` / `ReflectionMethod` metadataWeakReference / WeakMap`krsort``ksort``lcfirst``lcg_value``lchgrp``lchown``ldexp``levenshtein``link``linkinfo``locale_get_default``locale_set_default``localeconv``localtime``log``mktime``modf``move_uploaded_file``mt_rand``mt_srand``natcasesort``natsort``spl_object_id``sprintf``sqrt``srand``sscanf``stat``stats_covariance`
fix/spine-aot-jit-blockers @ a8cffaa0e (15 Jun 2026, LLVM 9).
- M2 spine SSOT: php script/bootstrap-spine-count.php → **3992** / **3995** Phase A inventory (literal coverage ✅).
+ M2 spine SSOT: php script/bootstrap-spine-count.php → **4031** / **4031** 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 @@
Spine **3992** / **3995** Phase A inventory — literal coverage ✅; native link + lint ✅ +
Spine **4031** / **4031** Phase A inventory — literal coverage ✅; native link + lint ✅ (#8559).
Vendor prelink 3/3 ✅; committed .o cold boot ✅;
- north-star5-verify-fast ✅ daily; --strict pre-merge; spine **3992** / **3995**; prelinked gen-0 refreshed;
+ north-star5-verify-fast ✅ daily; --strict pre-merge; spine **4031** / **4031**; 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 @@