From 407f546426d33150dcf869ea6724b996a31ec09c Mon Sep 17 00:00:00 2001 From: PurHur Date: Sun, 24 May 2026 22:12:35 +0000 Subject: [PATCH] M2 spine: grow compiler_lib_spine_smoke to 567 units toward North Star 2 (#1056) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add ext/standard inventory wrappers and Vm* helpers to the self-host spine bundle (435→567, ~97% of vm.php inventory). Fix AOT-lint blockers: union types, variadic spreads, PHPDoc type noise, match→switch, and JIT @return docblocks. Explicitly deferred from bundle lint (still registered in Module): VmString, VmSplAutoload, VmPregReplaceCallback, spl_autoload_register, sort/usort/uasort, array_pop/shift/search/combine/multisort, shell_exec. Closes #1056 Co-authored-by: Cursor --- docs/bootstrap-selfhost.md | 2 +- docs/pages/development-status.md | 8 +- docs/roadmap-wave3.md | 2 +- docs/self-host-target.md | 10 +- ext/standard/JitChdir.php | 3 +- ext/standard/JitChmod.php | 3 +- ext/standard/JitCopy.php | 3 +- ext/standard/JitDeployPath.php | 2 +- ext/standard/JitEnumExists.php | 117 ++-- ext/standard/JitEnv.php | 3 +- ext/standard/JitFclose.php | 3 +- ext/standard/JitFeof.php | 3 +- ext/standard/JitFgetc.php | 3 +- ext/standard/JitFgetcsv.php | 3 +- ext/standard/JitFgets.php | 3 +- ext/standard/JitFopen.php | 3 +- ext/standard/JitFpassthru.php | 3 +- ext/standard/JitFputcsv.php | 3 +- ext/standard/JitFread.php | 3 +- ext/standard/JitFseek.php | 3 +- ext/standard/JitFuncArgs.php | 2 +- ext/standard/JitHttpResponseCode.php | 2 +- ext/standard/JitPregLastError.php | 3 +- ext/standard/JitPregMatchAll.php | 3 +- ext/standard/JitPregReplaceCallback.php | 3 +- ext/standard/JitPregSplit.php | 3 +- ext/standard/JitSessionId.php | 2 +- ext/standard/JitSessionName.php | 2 +- ext/standard/JitTempnam.php | 3 +- ext/standard/VmFilter.php | 4 +- ext/standard/VmFs.php | 58 +- ext/standard/VmHash.php | 6 +- ext/standard/VmIni.php | 144 ++--- ext/standard/VmPack.php | 34 +- ext/standard/VmPassword.php | 3 +- ext/standard/VmPreg.php | 10 +- ext/standard/VmPregReplaceCallback.php | 2 +- ext/standard/VmSession.php | 12 +- ext/standard/VmSleep.php | 3 +- ext/standard/VmSplAutoload.php | 16 +- ext/standard/VmString.php | 99 +-- ext/standard/compact_.php | 88 +-- ext/standard/date.php | 2 +- ext/standard/file_put_contents.php | 2 +- ext/standard/gmdate.php | 2 +- ext/standard/http_response_code.php | 2 +- ext/standard/pack.php | 2 +- ext/standard/session_id_.php | 2 +- ext/standard/session_name.php | 2 +- lib/JIT/ArrayBuiltinHelper.php | 12 +- lib/JIT/ScopeBuiltinHelper.php | 3 +- .../compiler_lib_spine_smoke/main.php | 606 +++++++++++------- .../compiler_lib_spine_smoke/main.php.master | 449 +++++++++++++ test/unit/BootstrapSelfhostBundleTest.php | 16 +- 54 files changed, 1200 insertions(+), 585 deletions(-) create mode 100644 test/selfhost/compiler_lib_spine_smoke/main.php.master diff --git a/docs/bootstrap-selfhost.md b/docs/bootstrap-selfhost.md index 2aca9963912..005c5ee8b94 100644 --- a/docs/bootstrap-selfhost.md +++ b/docs/bootstrap-selfhost.md @@ -20,7 +20,7 @@ | Self-host probe in full CI | `./script/ci-local.sh` (LLVM tail) | ✅ default-on when LLVM 9 present; `BOOTSTRAP_SELFHOST_PROBE_GATE=0` to skip ([#829](https://github.com/PurHur/php-compiler/issues/829)) | | Wave gate in full CI | `./script/ci-local.sh` (LLVM tail) | ✅ default-on when LLVM 9 present; `BOOTSTRAP_WAVE_CHECK=0` to skip; `./script/bootstrap-wave-check.sh --fail-fast` | | Self-host native link | `./script/bootstrap-selfhost-link.sh` | ✅ `build/selfhost` prints `compiler_minimal bundle OK` ([#557](https://github.com/PurHur/php-compiler/issues/557), [#913](https://github.com/PurHur/php-compiler/issues/913)) | -| M2 lib spine smoke lint | `php bin/compile.php -l test/selfhost/compiler_lib_spine_smoke/main.php` | ✅ **435** units (`compiler_minimal` **109** + **327** M2 spine; [#1056](https://github.com/PurHur/php-compiler/issues/1056), [#1419](https://github.com/PurHur/php-compiler/issues/1419), [#1497](https://github.com/PurHur/php-compiler/issues/1497), [#1746](https://github.com/PurHur/php-compiler/issues/1746)) | +| M2 lib spine smoke lint | `php bin/compile.php -l test/selfhost/compiler_lib_spine_smoke/main.php` | ✅ **567** units (`compiler_minimal` **109** + **459** M2 spine; [#1056](https://github.com/PurHur/php-compiler/issues/1056), [#1419](https://github.com/PurHur/php-compiler/issues/1419), [#1497](https://github.com/PurHur/php-compiler/issues/1497)) | | M2 lib spine smoke native run | `./script/bootstrap-selfhost-lib-spine-smoke-link.sh` or `BOOTSTRAP_LIB_SPINE_SMOKE=1 make bootstrap-selfhost-lib-spine-smoke` | ✅ `build/selfhost-lib-spine-smoke` prints `compiler_lib_spine_smoke bundle OK` | | M3 HelloWorld self-host probe lint | `php bin/compile.php -l test/selfhost/compiler_helloworld_smoke/main.php` | ✅ `compiler_compile_smoke` spine + `helloworld_compile_smoke` driver (linkable) | | M3 HelloWorld compile driver lint | `php bin/compile.php -l test/selfhost/compiler_helloworld_smoke/compile_driver.php` | ✅ `Runtime::parseAndCompile` + mode-file dispatch (native link opt-in) | diff --git a/docs/pages/development-status.md b/docs/pages/development-status.md index 763577778d9..4f7a32fa2a2 100644 --- a/docs/pages/development-status.md +++ b/docs/pages/development-status.md @@ -51,7 +51,7 @@ Indicative composite toward a **web-capable, self-hosting** compiler (not line-c | **Stdlib** | ~58% | Wave-3 batch ([#1367](https://github.com/PurHur/php-compiler/issues/1367)–[#1379](https://github.com/PurHur/php-compiler/issues/1379)): 12/13 closed; `debug_backtrace` ([#1378](https://github.com/PurHur/php-compiler/issues/1378)) in [#1404](https://github.com/PurHur/php-compiler/pull/1404) | | **Web AOT** (build, deploy) | ~65% | Project link ✅; home-route execute ✅; PATH_INFO / layout chain 🚧 | | **Reference app** (MiniWebApp) | ~55% | VM ✅; AOT link ✅; AOT execute **partial** | -| **Self-host** (North Star 2, M0–M5) | ~74% | M0–M1 ✅; M2 spine **435/586**; M3 partial (native run ✅, Zend emit); M4–M5 ⬜ — [self-host-target.md](https://github.com/PurHur/php-compiler/blob/master/docs/self-host-target.md) | +| **Self-host** (North Star 2, M0–M5) | ~97% | M0–M1 ✅; M2 spine **567/586**; M3 partial (native run ✅, Zend emit); M4–M5 ⬜ — [self-host-target.md](https://github.com/PurHur/php-compiler/blob/master/docs/self-host-target.md) | **Overall (indicative): ~52%** toward the stated north stars below. @@ -200,7 +200,7 @@ Zend PHP still runs `bin/compile.php` during bootstrap. The output is a **curate |-----------|---------|--------| | **M0 — Bundled subset runs** | ~109 literal `require_once` units in `test/selfhost/compiler_minimal/main.php` → `build/selfhost` prints `compiler_minimal bundle OK` | ✅ [#557](https://github.com/PurHur/php-compiler/issues/557), [#913](https://github.com/PurHur/php-compiler/issues/913) | | **M1 — Compiler-shaped bundle** | Bundled `Compiler.php` AOT lint; compile-smoke native link + AOT echo (`compiler smoke`); driver smoke toward `bin/compile.php` | ✅ [#1025](https://github.com/PurHur/php-compiler/issues/1025), [#1095](https://github.com/PurHur/php-compiler/issues/1095) | -| **M2 — Lib spine growth** | `compiler_lib_spine_smoke` bundle toward full `bin/vm.php` inventory (**586** files) | 🚧 **435** / 586 units (~74%; [#1056](https://github.com/PurHur/php-compiler/issues/1056), [#1497](https://github.com/PurHur/php-compiler/issues/1497), [#1746](https://github.com/PurHur/php-compiler/issues/1746)) | +| **M2 — Lib spine growth** | `compiler_lib_spine_smoke` bundle toward full `bin/vm.php` inventory (**586** files) | 🚧 **567** / 586 units (~97%; [#1056](https://github.com/PurHur/php-compiler/issues/1056), [#1497](https://github.com/PurHur/php-compiler/issues/1497)) | | **M3 — Native compiles PHP** | Self-hosted bundle links; HelloWorld AOT **runs** natively; **emit still uses Zend** `bin/compile.php` fallback | 🚧 partial ([#1056](https://github.com/PurHur/php-compiler/issues/1056)) | | **M4 — Bootstrap loop** | Native toolchain rebuilds the **next** compiler sources (same tree, new revision) | ⬜ | | **M5 — Full self-host** | Real `bin/vm.php` / `bin/compile.php` path on full inventory; **no Zend bootstrap** | ⬜ **north star** ([#1056](https://github.com/PurHur/php-compiler/issues/1056)) | @@ -210,7 +210,7 @@ Zend PHP still runs `bin/compile.php` during bootstrap. The output is a **curate | Set | ~Files | Notes | |-----|--------|-------| | `compiler_minimal` bundle (M0) | **109** | Literal `require_once` closure | -| `compiler_lib_spine_smoke` (M2) | **435** | vm.php-path lib/ + ext/standard growth bundle | +| `compiler_lib_spine_smoke` (M2) | **567** | vm.php-path lib/ + ext/standard growth bundle | | Top-level `lib/*.php` | **14** | Per-file AOT lint ✅ | | Full vm.php inventory | **586** | Phase A inventory (`php script/bootstrap-inventory.php`) | @@ -245,7 +245,7 @@ Details: [self-host-target.md](https://github.com/PurHur/php-compiler/blob/maste | Native link + run | `./script/bootstrap-selfhost-link.sh` | ✅ M0 | | Compile smoke link | `make bootstrap-selfhost-compile-smoke` | ✅ M1 | | Compile smoke AOT echo | `make bootstrap-selfhost-compile-smoke-run` | ✅ M1 | -| M2 spine native link | `BOOTSTRAP_LIB_SPINE_SMOKE=1 make bootstrap-selfhost-lib-spine-smoke` | ✅ `compiler_lib_spine_smoke bundle OK` (**435** units) | +| M2 spine native link | `BOOTSTRAP_LIB_SPINE_SMOKE=1 make bootstrap-selfhost-lib-spine-smoke` | ✅ `compiler_lib_spine_smoke bundle OK` (**567** units) | | M3 HelloWorld probe | `make bootstrap-selfhost-helloworld` | 🚧 partial — native **run** ✅; emit Zend fallback | | Wave gate | `./script/bootstrap-wave-check.sh` | ✅ locally / Docker; GHA workflow disabled | | Next includes probe | `php script/bootstrap-selfhost-next-includes.php` | 🚧 bundle growth | diff --git a/docs/roadmap-wave3.md b/docs/roadmap-wave3.md index f4d8021f23c..38125496f0e 100644 --- a/docs/roadmap-wave3.md +++ b/docs/roadmap-wave3.md @@ -17,7 +17,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:** **435** / **586** inventory (`compiler_lib_spine_smoke` native link ✅; [#1056](https://github.com/PurHur/php-compiler/issues/1056), M2 batches [#1419](https://github.com/PurHur/php-compiler/issues/1419), [#1497](https://github.com/PurHur/php-compiler/issues/1497)). Target doc: [self-host-target.md](self-host-target.md). +**M2 spine:** **567** / **586** inventory (`compiler_lib_spine_smoke` native link ✅; [#1056](https://github.com/PurHur/php-compiler/issues/1056), M2 batches [#1419](https://github.com/PurHur/php-compiler/issues/1419), [#1497](https://github.com/PurHur/php-compiler/issues/1497)). Target doc: [self-host-target.md](self-host-target.md). ## Language (#1354–#1366) diff --git a/docs/self-host-target.md b/docs/self-host-target.md index 34d17ea23cb..c568ff4c276 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** | Zend runs `php bin/compile.php` | Compiled `bin/compile.php` | -| **Bundle size** | **435** curated `require_once` in spine smoke (108 minimal overlap + **327** M2-only) | **586** inventory files | -| **Inventory coverage** | **~74%** of vm.php path in spine smoke (**435/586**) | **100%** | +| **Bundle size** | **567** curated `require_once` in spine smoke (108 minimal overlap + **459** M2-only) | **586** inventory files | +| **Inventory coverage** | **~97%** of vm.php path in spine smoke (**567/586**) | **100%** | | **HelloWorld** | Native **run** ✅; **emit** still Zend fallback | Native compile + emit | | **Bootstrap loop (M4)** | Gen-1 link + gen-2 Zend partial | Native gen-2 emit + full tree rebuild | | **Vendor** | `composer install` + patches on host | Prelinked artifacts only | @@ -61,7 +61,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 | 🚧 **435/586** units | **~74%** | +| **M2** | Spine grows toward full `bin/vm.php` inventory | 🚧 **567/586** units | **~97%** | | **M3** | Self-host binary **compiles external PHP** (HelloWorld) without Zend emit | 🚧 partial | **~45%** | | **M4** | Self-host binary **rebuilds** the next compiler tree | ⬜ | 0% | | **M5** | Full self-host; Zend retired from loop | ⬜ north star | 0% | @@ -72,7 +72,7 @@ That is **M5**. Everything below is the honest path from today’s bootstrap to | Indicator | Formula | May 2026 | |-----------|---------|----------| -| **M2 spine progress** | `require_once` units in `compiler_lib_spine_smoke` ÷ Phase A inventory file count | **435 / 586 ≈ 74%** | +| **M2 spine progress** | `require_once` units in `compiler_lib_spine_smoke` ÷ Phase A inventory file count | **567 / 586 ≈ 97%** | | **Public “Self-host” row** | Same M2 ratio until M3–M5 gates add weight ([`development-status.md`](pages/development-status.md)) | **~61%** | | **Composite (internal)** | Milestone weights in table above (M0–M1 = 100%, M2 = spine %, M3–M5 = gate %) | **~54%** | @@ -124,7 +124,7 @@ Parallel batches ([#1419](https://github.com/PurHur/php-compiler/issues/1419), [ | Entry | Units | Role | |-------|------:|------| | `test/selfhost/compiler_minimal/main.php` | **109** | M0 core | -| `test/selfhost/compiler_lib_spine_smoke/main.php` | **435** | M2 growth ([#1746](https://github.com/PurHur/php-compiler/issues/1746) yay-php8-compat) | +| `test/selfhost/compiler_lib_spine_smoke/main.php` | **567** | M2 growth (ext/standard + Vm* spine batch) | | `test/selfhost/compiler_helloworld_smoke/` | — | M3 probe + compile driver | | `test/selfhost/bootstrap_loop_smoke/` | — | M4 scaffold (gen-1→gen-2 loop probe; [#1498](https://github.com/PurHur/php-compiler/issues/1498)) | diff --git a/ext/standard/JitChdir.php b/ext/standard/JitChdir.php index c5f18130503..de8b3344b13 100644 --- a/ext/standard/JitChdir.php +++ b/ext/standard/JitChdir.php @@ -11,7 +11,8 @@ /** LLVM lowering for chdir() via libc chdir(2). */ final class JitChdir { - /** @return Value i1 — true when chdir(2) returns 0 */ + /** @return Value + * true when chdir(2) returns 0 */ public static function invoke(Context $context, Value $pathStr): Value { $map = $context->structFieldMap['__string__']; diff --git a/ext/standard/JitChmod.php b/ext/standard/JitChmod.php index 88ba53b1c77..10acccbeb1d 100644 --- a/ext/standard/JitChmod.php +++ b/ext/standard/JitChmod.php @@ -11,7 +11,8 @@ /** LLVM lowering for chmod() via libc chmod(2). */ final class JitChmod { - /** @return Value i1 — true when chmod(2) returns 0 */ + /** @return Value + * true when chmod(2) returns 0 */ public static function invoke(Context $context, Value $pathStr, Value $modeI32): Value { $map = $context->structFieldMap['__string__']; diff --git a/ext/standard/JitCopy.php b/ext/standard/JitCopy.php index ac6327e2750..57ba1f36a0b 100644 --- a/ext/standard/JitCopy.php +++ b/ext/standard/JitCopy.php @@ -11,7 +11,8 @@ /** LLVM lowering for copy() via __compiler_copy (native fread/fwrite). */ final class JitCopy { - /** @return Value i1 — true when __compiler_copy returns 1 */ + /** @return Value + * true when __compiler_copy returns 1 */ public static function invoke(Context $context, Value $fromStr, Value $toStr): Value { $i32 = $context->getTypeFromString('int32'); diff --git a/ext/standard/JitDeployPath.php b/ext/standard/JitDeployPath.php index 04097c2f04f..4a7d7a9077c 100644 --- a/ext/standard/JitDeployPath.php +++ b/ext/standard/JitDeployPath.php @@ -10,7 +10,7 @@ /** LLVM lowering for phpc_deploy_path() via {@see \PHPCompiler\JIT\Builtin\StringDeployPath}. */ final class JitDeployPath { - /** @return Value __string__* */ + /** @return Value */ public static function invoke(Context $context, Value $rel, Value $fallback): Value { return $context->builder->call( diff --git a/ext/standard/JitEnumExists.php b/ext/standard/JitEnumExists.php index 6919c1ffbb6..d70e9c4dab8 100644 --- a/ext/standard/JitEnumExists.php +++ b/ext/standard/JitEnumExists.php @@ -1,58 +1,59 @@ -getTypeFromString('int1'); - $i32 = $context->getTypeFromString('int32'); - $exists = $i1->constInt(0, false); - $strcasecmpFn = $context->lookupFunction('strcasecmp'); - $nameData = self::stringDataPtr($context, $nameStr); - - $candidates = $context->type->object->allDeclaredEnumLowerNames(); - if (null !== $context->runtime->vmContext) { - $candidates = array_values(array_unique(array_merge( - $candidates, - array_keys($context->runtime->vmContext->enums) - ))); - } - - foreach ($candidates as $lc) { - $candidate = $context->builder->load($context->constantStringFromString($lc)); - $candidateData = self::stringDataPtr($context, $candidate); - $cmp = $context->builder->call($strcasecmpFn, $nameData, $candidateData); - $match = $context->builder->icmp(Builder::INT_EQ, $cmp, $i32->constInt(0, false)); - $exists = $context->builder->or($exists, $match); - } - - return $exists; - } - - private static function stringDataPtr(Context $context, Value $strPtr): Value - { - $structName = $strPtr->typeOf()->getElementType()->getName(); - $off = $context->structFieldMap[$structName]['value']; - - return $context->builder->structGep($strPtr, $off); - } -} +getTypeFromString('int1'); + $i32 = $context->getTypeFromString('int32'); + $exists = $i1->constInt(0, false); + $strcasecmpFn = $context->lookupFunction('strcasecmp'); + $nameData = self::stringDataPtr($context, $nameStr); + + $candidates = $context->type->object->allDeclaredEnumLowerNames(); + if (null !== $context->runtime->vmContext) { + $candidates = array_values(array_unique(array_merge( + $candidates, + array_keys($context->runtime->vmContext->enums) + ))); + } + + foreach ($candidates as $lc) { + $candidate = $context->builder->load($context->constantStringFromString($lc)); + $candidateData = self::stringDataPtr($context, $candidate); + $cmp = $context->builder->call($strcasecmpFn, $nameData, $candidateData); + $match = $context->builder->icmp(Builder::INT_EQ, $cmp, $i32->constInt(0, false)); + $exists = $context->builder->or($exists, $match); + } + + return $exists; + } + + private static function stringDataPtr(Context $context, Value $strPtr): Value + { + $structName = $strPtr->typeOf()->getElementType()->getName(); + $off = $context->structFieldMap[$structName]['value']; + + return $context->builder->structGep($strPtr, $off); + } +} diff --git a/ext/standard/JitEnv.php b/ext/standard/JitEnv.php index bdfd5ba8598..aac8b8bf6b5 100644 --- a/ext/standard/JitEnv.php +++ b/ext/standard/JitEnv.php @@ -16,7 +16,8 @@ final class JitEnv { /** - * @return Value __value__* (string on success, boolean false when unset) + * @return Value + * (string on success, boolean false when unset) */ public static function getenv(Context $context, Value $nameStr): Value { diff --git a/ext/standard/JitFclose.php b/ext/standard/JitFclose.php index 1bca4fa839a..03ebc328db2 100644 --- a/ext/standard/JitFclose.php +++ b/ext/standard/JitFclose.php @@ -11,7 +11,8 @@ /** LLVM lowering for fclose() via __compiler_fclose (issue #1117). */ final class JitFclose { - /** @return Value i1 — true when fclose succeeds */ + /** @return Value + * true when fclose succeeds */ public static function invoke(Context $context, Value $handleLong): Value { $ret = $context->builder->call($context->lookupFunction('__compiler_fclose'), $handleLong); diff --git a/ext/standard/JitFeof.php b/ext/standard/JitFeof.php index 34798cc906c..0cdb5348c0a 100644 --- a/ext/standard/JitFeof.php +++ b/ext/standard/JitFeof.php @@ -11,7 +11,8 @@ /** LLVM lowering for feof() via __compiler_feof (issue #1188). */ final class JitFeof { - /** @return Value i1 — true at end-of-file */ + /** @return Value + * true at end-of-file */ public static function invoke(Context $context, Value $handleLong): Value { $ret = $context->builder->call($context->lookupFunction('__compiler_feof'), $handleLong); diff --git a/ext/standard/JitFgetc.php b/ext/standard/JitFgetc.php index 5fc2459c3d8..9d3035a9e88 100644 --- a/ext/standard/JitFgetc.php +++ b/ext/standard/JitFgetc.php @@ -13,7 +13,8 @@ /** LLVM lowering for fgetc() via __compiler_fgetc (issue #1195). */ final class JitFgetc { - /** @return Value __value__* (single-character string, empty string at EOF, or boolean false on failure) */ + /** @return Value + * (single-character string, empty string at EOF, or boolean false on failure) */ public static function invoke(Context $context, Value $handleLong): Value { $contents = $context->builder->call( diff --git a/ext/standard/JitFgetcsv.php b/ext/standard/JitFgetcsv.php index efb650cb2df..b12bd46a204 100644 --- a/ext/standard/JitFgetcsv.php +++ b/ext/standard/JitFgetcsv.php @@ -13,7 +13,8 @@ /** LLVM lowering for fgetcsv() via __compiler_fgetcsv (issue #1192). */ final class JitFgetcsv { - /** @return Value __value__* (array row, or boolean false on failure/EOF) */ + /** @return Value + * (array row, or boolean false on failure/EOF) */ public static function invoke( Context $context, Value $handleLong, diff --git a/ext/standard/JitFgets.php b/ext/standard/JitFgets.php index 1508d16175d..40d52d815bb 100644 --- a/ext/standard/JitFgets.php +++ b/ext/standard/JitFgets.php @@ -13,7 +13,8 @@ /** LLVM lowering for fgets() via __compiler_fgets (issue #1187). */ final class JitFgets { - /** @return Value __value__* (line string, or boolean false on failure/EOF) */ + /** @return Value + * (line string, or boolean false on failure/EOF) */ public static function invoke(Context $context, Value $handleLong, Value $lengthLong): Value { $contents = $context->builder->call( diff --git a/ext/standard/JitFopen.php b/ext/standard/JitFopen.php index 0b143856907..332bbc1ba9f 100644 --- a/ext/standard/JitFopen.php +++ b/ext/standard/JitFopen.php @@ -13,7 +13,8 @@ /** LLVM lowering for fopen() via __compiler_fopen (issue #1117). */ final class JitFopen { - /** @return Value __value__* (int handle, or boolean false on failure) */ + /** @return Value + * (int handle, or boolean false on failure) */ public static function invoke(Context $context, Value $pathStr, Value $modeStr): Value { $handle = $context->builder->call( diff --git a/ext/standard/JitFpassthru.php b/ext/standard/JitFpassthru.php index 536c837066d..b997e18279c 100644 --- a/ext/standard/JitFpassthru.php +++ b/ext/standard/JitFpassthru.php @@ -13,7 +13,8 @@ /** LLVM lowering for fpassthru() via __compiler_fpassthru (issue #1194). */ final class JitFpassthru { - /** @return Value __value__* (int bytes written, or boolean false on failure) */ + /** @return Value + * (int bytes written, or boolean false on failure) */ public static function invoke(Context $context, Value $handleLong): Value { $bytes = $context->builder->call( diff --git a/ext/standard/JitFputcsv.php b/ext/standard/JitFputcsv.php index ef2f259894f..e19b2883e67 100644 --- a/ext/standard/JitFputcsv.php +++ b/ext/standard/JitFputcsv.php @@ -13,7 +13,8 @@ /** LLVM lowering for fputcsv() via implode + __compiler_fwrite (issue #1193). */ final class JitFputcsv { - /** @return Value __value__* (int bytes written, or boolean false on failure) */ + /** @return Value + * (int bytes written, or boolean false on failure) */ public static function invoke( Context $context, Value $handleLong, diff --git a/ext/standard/JitFread.php b/ext/standard/JitFread.php index 84e52cfb9a7..9eba4030902 100644 --- a/ext/standard/JitFread.php +++ b/ext/standard/JitFread.php @@ -13,7 +13,8 @@ /** LLVM lowering for fread() via __compiler_fread (issue #1117). */ final class JitFread { - /** @return Value __value__* (string data, or boolean false on failure) */ + /** @return Value + * (string data, or boolean false on failure) */ public static function invoke(Context $context, Value $handleLong, Value $lengthLong): Value { $contents = $context->builder->call( diff --git a/ext/standard/JitFseek.php b/ext/standard/JitFseek.php index 1db129366a1..d006055567b 100644 --- a/ext/standard/JitFseek.php +++ b/ext/standard/JitFseek.php @@ -11,7 +11,8 @@ /** LLVM lowering for fseek() via __compiler_fseek (issue #1191). */ final class JitFseek { - /** @return Value __value__* (0 on success, -1 on failure) */ + /** @return Value + * (0 on success, -1 on failure) */ public static function invoke(Context $context, Value $handleLong, Value $offsetLong, Value $whenceLong): Value { $result = $context->builder->call( diff --git a/ext/standard/JitFuncArgs.php b/ext/standard/JitFuncArgs.php index 3e9e38fd823..21cc66bfeca 100644 --- a/ext/standard/JitFuncArgs.php +++ b/ext/standard/JitFuncArgs.php @@ -42,7 +42,7 @@ public static function getArgs(Context $context): JITVariable return self::callArgvHashtable($context); } - /** @return Value __value__* */ + /** @return Value */ public static function numArgs(Context $context): Value { self::requireEnclosing($context); diff --git a/ext/standard/JitHttpResponseCode.php b/ext/standard/JitHttpResponseCode.php index 5227d6d4209..9f1767701d8 100644 --- a/ext/standard/JitHttpResponseCode.php +++ b/ext/standard/JitHttpResponseCode.php @@ -16,7 +16,7 @@ final class JitHttpResponseCode { - /** @return Value __value__* */ + /** @return Value */ public static function invoke(Context $context, JITVariable ...$args): Value { $argc = count($args); diff --git a/ext/standard/JitPregLastError.php b/ext/standard/JitPregLastError.php index 8c23ea4bca5..6cbedfedde0 100644 --- a/ext/standard/JitPregLastError.php +++ b/ext/standard/JitPregLastError.php @@ -11,7 +11,8 @@ /** LLVM lowering for preg_last_error() via __compiler_preg_last_error (issue #1181). */ final class JitPregLastError { - /** @return Value __value__* (native long error code) */ + /** @return Value + * (native long error code) */ public static function invoke(Context $context): Value { $code = $context->builder->call($context->lookupFunction('__compiler_preg_last_error')); diff --git a/ext/standard/JitPregMatchAll.php b/ext/standard/JitPregMatchAll.php index 35f91202ea5..5cc584decde 100644 --- a/ext/standard/JitPregMatchAll.php +++ b/ext/standard/JitPregMatchAll.php @@ -16,7 +16,8 @@ final class JitPregMatchAll { private static int $blockSerial = 0; - /** @return Value __value__* (native long count, or boolean false on error) */ + /** @return Value + * (native long count, or boolean false on error) */ public static function invoke(Context $context, Value $pattern, Value $subject): Value { StringPregMatch::ensureLinked($context); diff --git a/ext/standard/JitPregReplaceCallback.php b/ext/standard/JitPregReplaceCallback.php index d4f55670ab9..d11e5098114 100644 --- a/ext/standard/JitPregReplaceCallback.php +++ b/ext/standard/JitPregReplaceCallback.php @@ -24,7 +24,8 @@ final class JitPregReplaceCallback /** @var array per-module preg callback shims */ private static array $callbackShims = []; - /** @return Value __value__* (string result, or boolean false on PCRE error) */ + /** @return Value + * (string result, or boolean false on PCRE error) */ public static function invoke( Context $context, Value $pattern, diff --git a/ext/standard/JitPregSplit.php b/ext/standard/JitPregSplit.php index 7bb8083ce29..22fb45dba51 100644 --- a/ext/standard/JitPregSplit.php +++ b/ext/standard/JitPregSplit.php @@ -16,7 +16,8 @@ final class JitPregSplit { private static int $blockSerial = 0; - /** @return Value __value__* (string list array, or boolean false on PCRE error) */ + /** @return Value + * (string list array, or boolean false on PCRE error) */ public static function invoke(Context $context, Value $pattern, Value $subject): Value { StringPregMatch::ensureLinked($context); diff --git a/ext/standard/JitSessionId.php b/ext/standard/JitSessionId.php index e34b1f0183a..3fb58afe152 100644 --- a/ext/standard/JitSessionId.php +++ b/ext/standard/JitSessionId.php @@ -16,7 +16,7 @@ final class JitSessionId { - /** @return Value __value__* */ + /** @return Value */ public static function invoke(Context $context, JITVariable ...$args): Value { $argc = \count($args); diff --git a/ext/standard/JitSessionName.php b/ext/standard/JitSessionName.php index 37c0365860b..fa5c052943a 100644 --- a/ext/standard/JitSessionName.php +++ b/ext/standard/JitSessionName.php @@ -16,7 +16,7 @@ final class JitSessionName { - /** @return Value __value__* */ + /** @return Value */ public static function invoke(Context $context, JITVariable ...$args): Value { $argc = \count($args); diff --git a/ext/standard/JitTempnam.php b/ext/standard/JitTempnam.php index f78ad7c0570..9eae6d5c27f 100644 --- a/ext/standard/JitTempnam.php +++ b/ext/standard/JitTempnam.php @@ -13,7 +13,8 @@ /** LLVM lowering for tempnam() via __compiler_tempnam (issue #1201). */ final class JitTempnam { - /** @return Value __value__* (path string, or boolean false on failure) */ + /** @return Value + * (path string, or boolean false on failure) */ public static function invoke(Context $context, Value $dirStr, Value $prefixStr): Value { $path = $context->builder->call( diff --git a/ext/standard/VmFilter.php b/ext/standard/VmFilter.php index 21e9dcf7fc6..d7b4836b80c 100644 --- a/ext/standard/VmFilter.php +++ b/ext/standard/VmFilter.php @@ -150,12 +150,12 @@ public static function isValidEmailSubset(string $s): bool private static function isEmailLocalPart(string $local): bool { - return self::charsMatch($local, self::isEmailLocalChar(...)); + return self::charsMatch($local, [self::class, 'isEmailLocalChar']); } private static function isEmailDomainPart(string $domain): bool { - return self::charsMatch($domain, self::isEmailDomainChar(...)); + return self::charsMatch($domain, [self::class, 'isEmailDomainChar']); } private static function charsMatch(string $s, callable $predicate): bool diff --git a/ext/standard/VmFs.php b/ext/standard/VmFs.php index 0ee023a79e2..5ca2222bcfc 100644 --- a/ext/standard/VmFs.php +++ b/ext/standard/VmFs.php @@ -30,8 +30,7 @@ public static function stringListToArray(array $names): HashTable return $ht; } - public static function fileSize(string $path): int|false - { + public static function fileSize(string $path) { $stat = @stat($path); if (false === $stat) { return false; @@ -40,8 +39,7 @@ public static function fileSize(string $path): int|false return (int) $stat['size']; } - public static function fileMtime(string $path): int|false - { + public static function fileMtime(string $path) { $stat = @stat($path); if (false === $stat) { return false; @@ -50,8 +48,7 @@ public static function fileMtime(string $path): int|false return (int) $stat['mtime']; } - public static function filePerms(string $path): int|false - { + public static function filePerms(string $path) { $stat = @stat($path); if (false === $stat) { return false; @@ -60,8 +57,7 @@ public static function filePerms(string $path): int|false return (int) ($stat['mode'] ?? 0); } - public static function fileType(string $path): string|false - { + public static function fileType(string $path) { $stat = @lstat($path); if (false === $stat) { return false; @@ -75,8 +71,7 @@ public static function fileType(string $path): string|false * * @return HashTable|false */ - public static function statInfo(string $path, bool $lstat = false): HashTable|false - { + public static function statInfo(string $path, bool $lstat = false) { $raw = $lstat ? @lstat($path) : @stat($path); if (false === $raw) { return false; @@ -105,8 +100,7 @@ private static function phpStatArrayToHashTable(array $stat): HashTable return $ht; } - public static function readlink(string $path): string|false - { + public static function readlink(string $path) { $target = @readlink($path); if (false === $target) { return false; @@ -170,8 +164,7 @@ private static function modeToFiletype(int $mode): string }; } - public static function fileGetContents(string $path): string|false - { + public static function fileGetContents(string $path) { if ('php://input' === $path) { return false; } @@ -183,8 +176,7 @@ public static function fileGetContents(string $path): string|false return $data; } - public static function readfile(string $path): int|false - { + public static function readfile(string $path) { $fp = @fopen($path, 'rb'); if (false === $fp) { return false; @@ -216,8 +208,7 @@ public static function readfile(string $path): int|false /** * @param string|list $data */ - public static function filePutContents(string $path, string|array $data, int $flags = 0): int|false - { + public static function filePutContents(string $path, $data, int $flags = 0) { if (\is_array($data)) { $data = implode('', $data); } @@ -229,8 +220,7 @@ public static function filePutContents(string $path, string|array $data, int $fl return $written; } - public static function fopen(string $path, string $mode): int|false - { + public static function fopen(string $path, string $mode) { $fp = @fopen($path, $mode); if (false === $fp) { return false; @@ -241,8 +231,7 @@ public static function fopen(string $path, string $mode): int|false return $id; } - public static function fread(int $handle, int $length): string|false - { + public static function fread(int $handle, int $length) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -254,8 +243,7 @@ public static function fread(int $handle, int $length): string|false return @fread($fp, $length); } - public static function fpassthru(int $handle): int|false - { + public static function fpassthru(int $handle) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -279,8 +267,7 @@ public static function fpassthru(int $handle): int|false return $total; } - public static function fwrite(int $handle, string $data, ?int $length = null): int|false - { + public static function fwrite(int $handle, string $data, ?int $length = null) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -328,8 +315,7 @@ public static function fflush(int $handle): bool return @\fflush($fp); } - public static function ftell(int $handle): int|false - { + public static function ftell(int $handle) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -342,8 +328,7 @@ public static function ftell(int $handle): int|false return (int) $pos; } - public static function fgetc(int $handle): string|false - { + public static function fgetc(int $handle) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -360,8 +345,7 @@ public static function fgetc(int $handle): string|false return $byte; } - public static function fgets(int $handle, ?int $length = null): string|false - { + public static function fgets(int $handle, ?int $length = null) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -390,7 +374,7 @@ public static function fputcsv( string $separator = ',', string $enclosure = '"', string $escape = '\\', - ): int|false { + ) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -412,7 +396,7 @@ public static function fgetcsv( string $separator = ',', string $enclosure = '"', string $escape = '\\', - ): array|false { + ) { $fp = self::lookup($handle); if (null === $fp) { return false; @@ -442,8 +426,7 @@ public static function fseek(int $handle, int $offset, int $whence = \SEEK_SET): return 0 === @\fseek($fp, $offset, $whence) ? 0 : -1; } - public static function tempnam(string $directory, string $prefix): string|false - { + public static function tempnam(string $directory, string $prefix) { $path = @\tempnam($directory, $prefix); if (false === $path) { return false; @@ -462,8 +445,7 @@ public static function tempDir(): string return \sys_get_temp_dir(); } - public static function getcwd(): string|false - { + public static function getcwd() { $cwd = @\getcwd(); if (false === $cwd) { return false; diff --git a/ext/standard/VmHash.php b/ext/standard/VmHash.php index 91b95a1cafb..7d778901b97 100644 --- a/ext/standard/VmHash.php +++ b/ext/standard/VmHash.php @@ -11,8 +11,7 @@ final class VmHash { private const SUPPORTED = ['sha256', 'sha1', 'md5']; - public static function hash(string $algo, string $data, bool $raw = false): string|false - { + public static function hash(string $algo, string $data, bool $raw = false) { $algo = strtolower($algo); if (!\in_array($algo, self::SUPPORTED, true)) { return false; @@ -21,8 +20,7 @@ public static function hash(string $algo, string $data, bool $raw = false): stri return \hash($algo, $data, $raw); } - public static function hashHmac(string $algo, string $data, string $key, bool $raw = false): string|false - { + public static function hashHmac(string $algo, string $data, string $key, bool $raw = false) { $algo = strtolower($algo); if (!\in_array($algo, self::SUPPORTED, true)) { return false; diff --git a/ext/standard/VmIni.php b/ext/standard/VmIni.php index 0206d307ebb..819687775eb 100644 --- a/ext/standard/VmIni.php +++ b/ext/standard/VmIni.php @@ -1,72 +1,72 @@ - */ - public const SUPPORTED_KEYS = ['error_reporting', 'display_errors', 'memory_limit']; - - public static function set(Context $ctx, string $option, string $newValue): string|false - { - $key = strtolower($option); - if (!in_array($key, self::SUPPORTED_KEYS, true)) { - return false; - } - - return match ($key) { - 'error_reporting' => self::setErrorReporting($ctx, $newValue), - 'display_errors' => self::setDisplayErrors($ctx, $newValue), - 'memory_limit' => self::setMemoryLimit($newValue), - default => false, - }; - } - - private static function setErrorReporting(Context $ctx, string $newValue): string|false - { - $old = (string) $ctx->errors->getErrorReporting(); - $ctx->errors->setErrorReporting(self::parseErrorReporting($newValue)); - - return $old; - } - - private static function setDisplayErrors(Context $ctx, string $newValue): string|false - { - $old = $ctx->errors->getDisplayErrors() ? '1' : '0'; - $ctx->errors->setDisplayErrors(self::parseBoolIni($newValue)); - - return $old; - } - - private static function setMemoryLimit(string $newValue): string|false - { - if ('-1' === $newValue) { - return false; - } - $old = ini_get('memory_limit'); - if (false === ini_set('memory_limit', $newValue)) { - return false; - } - - return false !== $old ? $old : ''; - } - - public static function parseErrorReporting(string $value): int - { - $trimmed = trim($value); - - return '' === $trimmed ? 0 : (int) $trimmed; - } - - public static function parseBoolIni(string $value): bool - { - $trimmed = strtolower(trim($value)); - - return !('' === $trimmed || '0' === $trimmed || 'off' === $trimmed || 'false' === $trimmed); - } -} + */ + public const SUPPORTED_KEYS = ['error_reporting', 'display_errors', 'memory_limit']; + + public static function set(Context $ctx, string $option, string $newValue) { + $key = strtolower($option); + if (!in_array($key, self::SUPPORTED_KEYS, true)) { + return false; + } + + switch ($key) { + case 'error_reporting': + return self::setErrorReporting($ctx, $newValue); + case 'display_errors': + return self::setDisplayErrors($ctx, $newValue); + case 'memory_limit': + return self::setMemoryLimit($newValue); + default: + return false; + } + } + + private static function setErrorReporting(Context $ctx, string $newValue) { + $old = (string) $ctx->errors->getErrorReporting(); + $ctx->errors->setErrorReporting(self::parseErrorReporting($newValue)); + + return $old; + } + + private static function setDisplayErrors(Context $ctx, string $newValue) { + $old = $ctx->errors->getDisplayErrors() ? '1' : '0'; + $ctx->errors->setDisplayErrors(self::parseBoolIni($newValue)); + + return $old; + } + + private static function setMemoryLimit(string $newValue) { + if ('-1' === $newValue) { + return false; + } + $old = ini_get('memory_limit'); + if (false === ini_set('memory_limit', $newValue)) { + return false; + } + + return false !== $old ? $old : ''; + } + + public static function parseErrorReporting(string $value): int + { + $trimmed = trim($value); + + return '' === $trimmed ? 0 : (int) $trimmed; + } + + public static function parseBoolIni(string $value): bool + { + $trimmed = strtolower(trim($value)); + + return !('' === $trimmed || '0' === $trimmed || 'off' === $trimmed || 'false' === $trimmed); + } +} diff --git a/ext/standard/VmPack.php b/ext/standard/VmPack.php index 72233ca762c..cbfa1ded1a4 100644 --- a/ext/standard/VmPack.php +++ b/ext/standard/VmPack.php @@ -1,17 +1,17 @@ - $args values after format string - */ - public static function pack(string $format, array $args): string - { - return \pack($format, ...$args); - } -} + $args values after format string + */ + public static function pack(string $format, array $args): string + { + return \call_user_func_array('pack', array_merge([$format], $args)); + } +} diff --git a/ext/standard/VmPassword.php b/ext/standard/VmPassword.php index bb5cf251ec1..142df9ecf54 100644 --- a/ext/standard/VmPassword.php +++ b/ext/standard/VmPassword.php @@ -13,8 +13,7 @@ final class VmPassword public const PASSWORD_DEFAULT = 1; - public static function hash(string $password, int $algo, array $options = []): string|false - { + public static function hash(string $password, int $algo, array $options = []) { if ($algo !== self::PASSWORD_BCRYPT && $algo !== self::PASSWORD_DEFAULT) { return false; } diff --git a/ext/standard/VmPreg.php b/ext/standard/VmPreg.php index 117efd90402..89606795139 100644 --- a/ext/standard/VmPreg.php +++ b/ext/standard/VmPreg.php @@ -22,7 +22,7 @@ public static function pregMatch( ?array &$matches = null, int $flags = 0, int $offset = 0 - ): int|false { + ) { if (strlen($pattern) > self::MAX_PATTERN_BYTES) { return false; } @@ -45,7 +45,7 @@ public static function pregMatchAll( ?array &$matches = null, int $flags = 0, int $offset = 0 - ): int|false { + ) { if (strlen($pattern) > self::MAX_PATTERN_BYTES) { return false; } @@ -59,8 +59,7 @@ public static function pregMatchAll( return \preg_match_all($pattern, $subject, $matches); } - public static function pregReplace(string $pattern, string $replacement, string $subject): string|false - { + public static function pregReplace(string $pattern, string $replacement, string $subject) { if (strlen($pattern) > self::MAX_PATTERN_BYTES) { return false; } @@ -99,8 +98,7 @@ public static function stripMatchOffsets(array $offsetMatches): array /** * @return list|false */ - public static function pregSplit(string $pattern, string $subject): array|false - { + public static function pregSplit(string $pattern, string $subject) { if (strlen($pattern) > self::MAX_PATTERN_BYTES) { return false; } diff --git a/ext/standard/VmPregReplaceCallback.php b/ext/standard/VmPregReplaceCallback.php index 83414011471..5f70b23ff84 100644 --- a/ext/standard/VmPregReplaceCallback.php +++ b/ext/standard/VmPregReplaceCallback.php @@ -18,7 +18,7 @@ public static function invoke( string $pattern, Func\PHP $callback, string $subject - ): string|false { + ) { if (strlen($pattern) > VmPreg::MAX_PATTERN_BYTES) { return false; } diff --git a/ext/standard/VmSession.php b/ext/standard/VmSession.php index ed400dd0fd7..5a034542c0e 100644 --- a/ext/standard/VmSession.php +++ b/ext/standard/VmSession.php @@ -40,10 +40,10 @@ public static function getName(): string } /** - * @return string|false previous name, or false when session is active + * @return string|false + * previous name, or false when session is active */ - public static function setName(string $name): string|false - { + public static function setName(string $name) { if (self::$active) { return false; } @@ -62,10 +62,10 @@ public static function getId(): string } /** - * @return string|false previous id, or false when $id is empty + * @return string|false + * previous id, or false when $id is empty */ - public static function setId(string $id): string|false - { + public static function setId(string $id) { $sanitized = self::sanitizeId($id); if ('' === $sanitized) { return false; diff --git a/ext/standard/VmSleep.php b/ext/standard/VmSleep.php index ddce2dfdf12..cfb6364f295 100644 --- a/ext/standard/VmSleep.php +++ b/ext/standard/VmSleep.php @@ -7,8 +7,7 @@ /** VM sleep/usleep via host PHP (parity with PHP 8.2). */ final class VmSleep { - public static function sleep(int $seconds): int|false - { + public static function sleep(int $seconds) { return \sleep($seconds); } diff --git a/ext/standard/VmSplAutoload.php b/ext/standard/VmSplAutoload.php index 45f8398196e..1407238aae7 100644 --- a/ext/standard/VmSplAutoload.php +++ b/ext/standard/VmSplAutoload.php @@ -50,9 +50,9 @@ public static function runStack(Context $ctx, string $className): bool } /** - * @return callable(Context, string): void + * @return callable */ - private static function bindCallback(Context $ctx, Variable $callback): callable + private static function bindCallback(Context $ctx, Variable $callback) { $callback = $callback->resolveIndirect(); if (Variable::TYPE_STRING === $callback->type) { @@ -72,9 +72,9 @@ private static function bindCallback(Context $ctx, Variable $callback): callable } /** - * @return callable(Context, string): void + * @return callable */ - private static function bindFunction(Context $ctx, string $name): callable + private static function bindFunction(Context $ctx, string $name) { $func = VmUserCall::resolveStringCallback($ctx, $name); @@ -84,9 +84,9 @@ private static function bindFunction(Context $ctx, string $name): callable } /** - * @return callable(Context, string): void + * @return callable */ - private static function bindStaticName(Context $ctx, string $callable): callable + private static function bindStaticName(Context $ctx, string $callable) { [$className, $methodName] = explode('::', $callable, 2); $func = self::resolveStaticMethod($ctx, $className, $methodName); @@ -97,9 +97,9 @@ private static function bindStaticName(Context $ctx, string $callable): callable } /** - * @return callable(Context, string): void + * @return callable */ - private static function bindArrayCallable(Context $ctx, Variable $callable): callable + private static function bindArrayCallable(Context $ctx, Variable $callable) { $table = $callable->toArray(); $idx0 = new Variable(Variable::TYPE_INTEGER); diff --git a/ext/standard/VmString.php b/ext/standard/VmString.php index d620f16a817..4710181ee17 100644 --- a/ext/standard/VmString.php +++ b/ext/standard/VmString.php @@ -363,8 +363,7 @@ public static function strcspn(string $str, string $mask): int return $count; } - public static function strpbrk(string $str, string $mask): string|false - { + public static function strpbrk(string $str, string $mask) { if ('' === $mask) { throw new \ValueError('strpbrk(): Argument #2 ($characters) must not be empty'); } @@ -405,8 +404,7 @@ public static function bin2hex(string $data): string } /** Decode a hex string to binary (PHP hex2bin subset; false on invalid input). */ - public static function hex2bin(string $data): string|false - { + public static function hex2bin(string $data) { $len = self::byteLength($data); if (0 === $len) { return ''; @@ -427,6 +425,11 @@ public static function hex2bin(string $data): string|false return $out; } + private const BASE64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + + /** @var array|null */ + private static ?array $base64DecodeTable = null; + /** RFC 4648 base64 encode (standard alphabet, padding). */ public static function base64_encode(string $data): string { @@ -434,7 +437,7 @@ public static function base64_encode(string $data): string if (0 === $len) { return ''; } - static $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + $alphabet = self::BASE64_ALPHABET; $out = ''; for ($i = 0; $i < $len; $i += 3) { $b0 = self::byteOrd($data[$i]); @@ -461,22 +464,23 @@ public static function base64_encode(string $data): string /** * RFC 4648 base64 decode (non-strict: ignore bytes outside the alphabet). * - * @return string|false decoded bytes, or false when padding or input is invalid + * @return string|false + * decoded bytes, or false when padding or input is invalid */ - public static function base64_decode(string $data): string|false - { + public static function base64_decode(string $data) { $len = self::byteLength($data); if (0 === $len) { return ''; } - static $decode = null; - if (null === $decode) { + if (null === self::$base64DecodeTable) { $decode = array_fill(0, 256, -1); - $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + $alphabet = self::BASE64_ALPHABET; for ($i = 0; $i < 64; ++$i) { $decode[self::byteOrd($alphabet[$i])] = $i; } + self::$base64DecodeTable = $decode; } + $decode = self::$base64DecodeTable; $out = ''; $val = 0; $bits = 0; @@ -572,7 +576,7 @@ public static function randomBytes(int $length): string /** * Minimal parse_url() for routing (http/https, path, query, host). * - * @return array|string|null + * @return array|string|null */ public static function parseUrl(string $url, int $component = -1) { @@ -592,7 +596,7 @@ public static function parseUrl(string $url, int $component = -1) $slash = strpos($rest, '/'); $q = strpos($rest, '?'); $hash = strpos($rest, '#'); - $end = self::minPositive($slash, $q, $hash); + $end = self::minPositive([$slash, $q, $hash]); $authority = false === $end ? $rest : substr($rest, 0, $end); $rest = false === $end ? '' : substr($rest, $end); if (str_contains($authority, '@')) { @@ -626,21 +630,32 @@ public static function parseUrl(string $url, int $component = -1) ]; if (-1 === $component) { - return array_filter( - $parts, - static fn ($v) => null !== $v && '' !== $v - ); + $filtered = []; + foreach ($parts as $key => $value) { + if (null !== $value && '' !== $value) { + $filtered[$key] = $value; + } + } + + return $filtered; } - return match ($component) { - \PHP_URL_SCHEME => $scheme, - \PHP_URL_HOST => $host, - \PHP_URL_PORT => $port, - \PHP_URL_PATH => $path, - \PHP_URL_QUERY => $query, - \PHP_URL_FRAGMENT => $fragment, - default => throw new \LogicException('parse_url() component not supported in this compiler build'), - }; + switch ($component) { + case \PHP_URL_SCHEME: + return $scheme; + case \PHP_URL_HOST: + return $host; + case \PHP_URL_PORT: + return $port; + case \PHP_URL_PATH: + return $path; + case \PHP_URL_QUERY: + return $query; + case \PHP_URL_FRAGMENT: + return $fragment; + default: + throw new \LogicException('parse_url() component not supported in this compiler build'); + } } private static function percentEncode(string $data, bool $formEncoding): string @@ -708,9 +723,9 @@ private static function hexDigit(int $ord): ?int } /** - * @param int|false ...$candidates + * @param list $candidates */ - private static function minPositive(...$candidates): int|false + private static function minPositive(array $candidates) { $min = false; foreach ($candidates as $c) { @@ -1653,8 +1668,7 @@ public static function basename(string $path): string /** * @return string|false */ - public static function realpath(string $path): string|false - { + public static function realpath(string $path) { if ('' === $path) { return false; } @@ -1704,7 +1718,7 @@ public static function normalizePath(string $path): string } /** - * @return array|string + * @return array|string */ public static function pathinfo(string $path, int $flags = 15) { @@ -1722,15 +1736,20 @@ public static function pathinfo(string $path, int $flags = 15) ]; } - return match ($flags) { - 1 => $dirname, - 2 => $basename, - 4 => $extension, - 8 => $filename, - default => throw new \LogicException( - 'pathinfo() flags not supported in this compiler build (use 1, 2, 4, 8, or 15)' - ), - }; + switch ($flags) { + case 1: + return $dirname; + case 2: + return $basename; + case 4: + return $extension; + case 8: + return $filename; + default: + throw new \LogicException( + 'pathinfo() flags not supported in this compiler build (use 1, 2, 4, 8, or 15)' + ); + } } public static function pathExtension(string $path): string diff --git a/ext/standard/compact_.php b/ext/standard/compact_.php index fcb5cd49ef6..4384d53ed83 100644 --- a/ext/standard/compact_.php +++ b/ext/standard/compact_.php @@ -1,48 +1,48 @@ -calledArgs)) { - throw new \LogicException('compact() requires at least one argument in this compiler build'); - } - if (null === $frame->returnVar) { - VmScope::compact($frame); - - return; - } - $frame->returnVar->array(VmScope::compact($frame)); - } - - public function call(Context $context, JITVariable ...$args): Value - { - if (0 === \count($args)) { - throw new \LogicException('compact() requires at least one argument in this compiler build'); - } - +calledArgs)) { + throw new \LogicException('compact() requires at least one argument in this compiler build'); + } + if (null === $frame->returnVar) { + VmScope::compact($frame); + + return; + } + $frame->returnVar->array(VmScope::compact($frame)); + } + + public function call(Context $context, JITVariable ...$args): Value + { + if (0 === \count($args)) { + throw new \LogicException('compact() requires at least one argument in this compiler build'); + } + foreach ($args as $i => $arg) { if (JITVariable::TYPE_STRING === $arg->type || JITVariable::TYPE_VALUE === $arg->type) { $this->jitString($context, $arg, 'compact() variable name #'.((int) $i + 1)); } - } - return ScopeBuiltinHelper::compact($context, ...$args); - } -} + } + return \call_user_func_array([ScopeBuiltinHelper::class, 'compact'], array_merge([$context], $args)); + } +} diff --git a/ext/standard/date.php b/ext/standard/date.php index 0bd185a3a87..d291da696e5 100644 --- a/ext/standard/date.php +++ b/ext/standard/date.php @@ -42,6 +42,6 @@ public function execute(Frame $frame): void public function call(Context $context, JITVariable ...$args): Value { $this->jitString($context, $args[0], 'date() argument #1'); - return JitDate::formatDate($context, false, ...$args); + return \call_user_func_array([JitDate::class, 'formatDate'], array_merge([$context, false], $args)); } } diff --git a/ext/standard/file_put_contents.php b/ext/standard/file_put_contents.php index bd1578e1906..1121e64c6ce 100644 --- a/ext/standard/file_put_contents.php +++ b/ext/standard/file_put_contents.php @@ -81,7 +81,7 @@ public function call(Context $context, JITVariable ...$args): Value /** * @return string|list */ - private static function coerceData(Variable $var): string|array + private static function coerceData(Variable $var) { $var = $var->resolveIndirect(); if (Variable::TYPE_STRING === $var->type) { diff --git a/ext/standard/gmdate.php b/ext/standard/gmdate.php index ba12f7fb4ce..6f2352cd559 100644 --- a/ext/standard/gmdate.php +++ b/ext/standard/gmdate.php @@ -42,6 +42,6 @@ public function execute(Frame $frame): void public function call(Context $context, JITVariable ...$args): Value { $this->jitString($context, $args[0], 'gmdate() argument #1'); - return JitDate::formatDate($context, true, ...$args); + return \call_user_func_array([JitDate::class, 'formatDate'], array_merge([$context, true], $args)); } } diff --git a/ext/standard/http_response_code.php b/ext/standard/http_response_code.php index b9d771e6010..3d73815b8fa 100644 --- a/ext/standard/http_response_code.php +++ b/ext/standard/http_response_code.php @@ -66,6 +66,6 @@ public function call(Context $context, JITVariable ...$args): Value JitLongArg::lower($context, $args[0], 'http_response_code() code'); } - return JitHttpResponseCode::invoke($context, ...$args); + return \call_user_func_array([JitHttpResponseCode::class, 'invoke'], array_merge([$context], $args)); } } diff --git a/ext/standard/pack.php b/ext/standard/pack.php index 190398ed484..e93c9539d12 100644 --- a/ext/standard/pack.php +++ b/ext/standard/pack.php @@ -36,6 +36,6 @@ public function execute(Frame $frame): void public function call(Context $context, JITVariable ...$args): Value { - return JitPack::pack($context, ...$args); + return \call_user_func_array([JitPack::class, 'pack'], array_merge([$context], $args)); } } diff --git a/ext/standard/session_id_.php b/ext/standard/session_id_.php index ba146baebc2..30e47f36af6 100644 --- a/ext/standard/session_id_.php +++ b/ext/standard/session_id_.php @@ -57,6 +57,6 @@ public function call(Context $context, JITVariable ...$args): Value throw new \LogicException('session_id() accepts at most one argument in this compiler build'); } - return JitSessionId::invoke($context, ...$args); + return \call_user_func_array([JitSessionId::class, 'invoke'], array_merge([$context], $args)); } } diff --git a/ext/standard/session_name.php b/ext/standard/session_name.php index ce39ff06f46..57d94ddfc6d 100644 --- a/ext/standard/session_name.php +++ b/ext/standard/session_name.php @@ -57,6 +57,6 @@ public function call(Context $context, JITVariable ...$args): Value throw new \LogicException('session_name() accepts at most one argument in this compiler build'); } - return JitSessionName::invoke($context, ...$args); + return \call_user_func_array([JitSessionName::class, 'invoke'], array_merge([$context], $args)); } } diff --git a/lib/JIT/ArrayBuiltinHelper.php b/lib/JIT/ArrayBuiltinHelper.php index f32061759c7..f2f5d296b2c 100644 --- a/lib/JIT/ArrayBuiltinHelper.php +++ b/lib/JIT/ArrayBuiltinHelper.php @@ -193,7 +193,8 @@ public static function unshift(Context $context, Variable $array, Variable ...$v } /** - * @return Value __value__* (null when the array is empty) + * @return Value + * (null when the array is empty) */ public static function popLast(Context $context, Variable $array): Value { @@ -437,7 +438,8 @@ private static function copyValueEntrySlot(Context $context, Value $fromEntry, V } /** - * @return Value __value__* (null when the array is empty) + * @return Value + * (null when the array is empty) */ public static function shiftFirst(Context $context, Variable $array): Value { @@ -3333,7 +3335,8 @@ public static function merge(Context $context, Variable ...$arrays): Value /** * array_combine() for packed list arrays (subset of PHP; returns __value__*). * - * @return Value __value__* (hashtable on success, boolean false when lengths differ) + * @return Value + * (hashtable on success, boolean false when lengths differ) */ public static function combine(Context $context, Variable $keys, Variable $values): Value { @@ -4110,7 +4113,8 @@ public static function inArray( /** * array_search() for packed lists and string-keyed assoc arrays (subset of PHP). * - * @return Value __value__* (key as long/string, or boolean false) + * @return Value + * (key as long/string, or boolean false) */ public static function arraySearch( Context $context, diff --git a/lib/JIT/ScopeBuiltinHelper.php b/lib/JIT/ScopeBuiltinHelper.php index cfcc025339c..b07a3f7c5ce 100644 --- a/lib/JIT/ScopeBuiltinHelper.php +++ b/lib/JIT/ScopeBuiltinHelper.php @@ -44,7 +44,8 @@ public static function findVariableByName(Context $context, string $name): ?Vari } /** - * @return Value int64 import count + * @return Value + * int64 import count */ public static function extract(Context $context, Variable $array, ?Variable $flagsArg = null): Value { diff --git a/test/selfhost/compiler_lib_spine_smoke/main.php b/test/selfhost/compiler_lib_spine_smoke/main.php index b2164496a33..689dd72e472 100644 --- a/test/selfhost/compiler_lib_spine_smoke/main.php +++ b/test/selfhost/compiler_lib_spine_smoke/main.php @@ -8,225 +8,267 @@ * Native: ./script/bootstrap-selfhost-lib-spine-smoke-link.sh */ -require_once __DIR__.'/../../../lib/OpCode.php'; +require_once __DIR__.'/../../../lib/AOT/ProjectGraph.php'; require_once __DIR__.'/../../../lib/Block.php'; +require_once __DIR__.'/../../../lib/BuiltinParamNames.php'; +require_once __DIR__.'/../../../lib/Cli/InvokeCwd.php'; +require_once __DIR__.'/../../../lib/Cli/PhpcBuild.php'; +require_once __DIR__.'/../../../lib/Cli/PhpcInit.php'; +require_once __DIR__.'/../../../lib/Cli/PhpcRun.php'; +require_once __DIR__.'/../../../lib/Compiler.php'; +require_once __DIR__.'/../../../lib/Doctor.php'; require_once __DIR__.'/../../../lib/Frame.php'; require_once __DIR__.'/../../../lib/Func.php'; -require_once __DIR__.'/../../../lib/Func/PHP.php'; -require_once __DIR__.'/../../../lib/VM/ClassProperty.php'; -require_once __DIR__.'/../../../lib/VM/ScriptExit.php'; -require_once __DIR__.'/../../../lib/JIT/OperandName.php'; -require_once __DIR__.'/../../../lib/Printer.php'; -require_once __DIR__.'/../../../lib/NullSafeLivenessDetector.php'; -require_once __DIR__.'/../../../lib/Runtime.php'; -require_once __DIR__.'/../../../lib/Web/ConstStringFolder.php'; -require_once __DIR__.'/../../../lib/Web/IncludePathResolver.php'; -require_once __DIR__.'/../../../lib/Web/LiteralIncludeDiscovery.php'; -require_once __DIR__.'/../../../lib/OpCodeNames.php'; -require_once __DIR__.'/../../../lib/VM/Variable.php'; -require_once __DIR__.'/../../../lib/Web/Params.php'; -require_once __DIR__.'/../../../lib/Web/DeployRoot.php'; -require_once __DIR__.'/../../../lib/Web/ProjectManifest.php'; -require_once __DIR__.'/../../../lib/Web/ManifestValidator.php'; -require_once __DIR__.'/../../../lib/Web/ProjectAutoload.php'; -require_once __DIR__.'/../../../lib/Web/ProjectBootstrap.php'; -require_once __DIR__.'/../../../lib/Web/ResponseContext.php'; -require_once __DIR__.'/../../../lib/Web/DevServer.php'; -require_once __DIR__.'/../../../lib/Web/SourceBundler.php'; -require_once __DIR__.'/../../../lib/Module.php'; -require_once __DIR__.'/../../../lib/ModuleAbstract.php'; -require_once __DIR__.'/../../../lib/VM/Refcount.php'; -require_once __DIR__.'/../../../lib/VM/ErrorReporter.php'; -require_once __DIR__.'/../../../lib/VM/ScriptStack.php'; -require_once __DIR__.'/../../../lib/VM/HashTable.php'; -require_once __DIR__.'/../../../lib/VM/ClassEntry.php'; -require_once __DIR__.'/../../../lib/VM/ObjectEntry.php'; -require_once __DIR__.'/../../../lib/VM/TypeCheck.php'; -require_once __DIR__.'/../../../lib/VM/NamedArgs.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/VmClassMethod.php'; -require_once __DIR__.'/../../../lib/VM/WeakRefSupport.php'; -require_once __DIR__.'/../../../lib/VM/InterfaceCheck.php'; -require_once __DIR__.'/../../../lib/VM/ClassReadonly.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapConstruct.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapCount.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetExists.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetGet.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetSet.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetUnset.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakReferenceConstruct.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakReferenceCreate.php'; -require_once __DIR__.'/../../../lib/VM/Builtin/WeakReferenceGet.php'; -require_once __DIR__.'/../../../lib/VM/BuiltinClasses.php'; -require_once __DIR__.'/../../../lib/VM/Optimizer/AssignOp.php'; -require_once __DIR__.'/../../../lib/VM/Optimizer.php'; -require_once __DIR__.'/../../../lib/VM/Context.php'; -require_once __DIR__.'/../../../lib/Handler.php'; -require_once __DIR__.'/../../../lib/JIT/Call.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin.php'; -require_once __DIR__.'/../../../lib/JIT/Result.php'; require_once __DIR__.'/../../../lib/Func/Internal.php'; require_once __DIR__.'/../../../lib/Func/JIT.php'; -require_once __DIR__.'/../../../lib/JIT/Variable.php'; -require_once __DIR__.'/../../../lib/JIT/IssetHelper.php'; -require_once __DIR__.'/../../../lib/Web/Superglobals.php'; -require_once __DIR__.'/../../../lib/JIT/Scope.php'; +require_once __DIR__.'/../../../lib/Func/PHP.php'; +require_once __DIR__.'/../../../lib/Handler.php'; +require_once __DIR__.'/../../../lib/JIT.php'; require_once __DIR__.'/../../../lib/JIT/Analyzer.php'; -require_once __DIR__.'/../../../lib/JIT/BasicBlockHelper.php'; -require_once __DIR__.'/../../../lib/JIT/JitValueBox.php'; -require_once __DIR__.'/../../../lib/JIT/SelfHostBuiltinPolicy.php'; +require_once __DIR__.'/../../../lib/JIT/ArrayBuiltinHelper.php'; require_once __DIR__.'/../../../lib/JIT/ArrayMapCallbackPolicy.php'; require_once __DIR__.'/../../../lib/JIT/ArrayReduceCallbackPolicy.php'; -require_once __DIR__.'/../../../lib/JIT/PregReplaceCallbackPolicy.php'; -require_once __DIR__.'/../../../lib/JIT/UsortCallbackPolicy.php'; -require_once __DIR__.'/../../../lib/JIT/CoalesceHelper.php'; -require_once __DIR__.'/../../../lib/JIT/IncludeHelper.php'; -require_once __DIR__.'/../../../lib/JIT/ScopeBuiltinHelper.php'; -require_once __DIR__.'/../../../lib/JIT/NullsafeHelper.php'; -require_once __DIR__.'/../../../lib/JIT/Progress.php'; -require_once __DIR__.'/../../../lib/JIT/RuntimeInitVmContext.php'; -require_once __DIR__.'/../../../lib/JIT/Call/Native.php'; -require_once __DIR__.'/../../../lib/JIT/Call/ExternalMethod.php'; -require_once __DIR__.'/../../../lib/JIT/Call/SplObjectStorageMethod.php'; -require_once __DIR__.'/../../../lib/JIT/Call/Vararg.php'; -require_once __DIR__.'/../../../lib/JIT/JitNativeString.php'; -require_once __DIR__.'/../../../lib/JIT/JitStringArg.php'; -require_once __DIR__.'/../../../lib/JIT/JitLongArg.php'; -require_once __DIR__.'/../../../lib/JIT/JitBoolArg.php'; -require_once __DIR__.'/../../../lib/JIT/SuperglobalInit.php'; +require_once __DIR__.'/../../../lib/JIT/BasicBlockHelper.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/CallArgv.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/ErrorHandler.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/HttpResponseCode.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/IniSet.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Internal.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/IsNullFn.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/MemoryManager.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/MemoryManager/Native.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/MemoryManager/PHP.php'; -require_once __DIR__.'/../../../lib/JIT/IteratorHelper.php'; -require_once __DIR__.'/../../../lib/JIT/JitStringCompare.php'; -require_once __DIR__.'/../../../lib/JIT/JitValueCompare.php'; -require_once __DIR__.'/../../../lib/JIT/StringOffsetHelper.php'; -require_once __DIR__.'/../../../lib/JIT/ValueEchoHelper.php'; -require_once __DIR__.'/../../../lib/JIT/ScriptMagic.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Refcount.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/Output.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/ErrorHandler.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/ScriptExit.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/IsNullFn.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/PendingHeaders.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/HttpResponseCode.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/CallArgv.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/IniSet.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringJsonEncode.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringGetenv.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Refcount.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/ScriptExit.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/SessionId.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/SessionName.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringQuotemeta.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringNl2br.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringStripslashes.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringAddslashes.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringUcwords.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringPregQuote.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringRandomBytes.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringFileGetContents.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringDeployPath.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringReadfile.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringHtmlspecialchars.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringDateTime.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringWordwrap.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringUrlencode.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringUrldecode.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringDeployPath.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringFileGetContents.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringFilePutContents.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringFunctionExists.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringGetenv.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringHtmlspecialchars.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringHttpBuildQuery.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringSerialize.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringSuperglobalName.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringJsonEncode.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringNl2br.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringParseStr.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringPregMatch.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringPregQuote.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringQuotemeta.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringRandomBytes.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringReadfile.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringSerialize.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringStripslashes.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringSuperglobalName.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringUcwords.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/StringUnserialize.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/StringFilePutContents.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Type/Value.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Type/NativeArray.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Type/MaskedArray.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringUrldecode.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringUrlencode.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/StringWordwrap.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Type.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/Type/HashTable.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Type/MaskedArray.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Type/NativeArray.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/Type/Object_.php'; -require_once __DIR__.'/../../../lib/BuiltinParamNames.php'; -require_once __DIR__.'/../../../lib/MethodVisibility.php'; -require_once __DIR__.'/../../../lib/JIT/Helper.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Internal.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Type/String_.php'; +require_once __DIR__.'/../../../lib/JIT/Builtin/Type/Value.php'; require_once __DIR__.'/../../../lib/JIT/Builtin/VarArg.php'; +require_once __DIR__.'/../../../lib/JIT/Call.php'; +require_once __DIR__.'/../../../lib/JIT/Call/ExternalMethod.php'; +require_once __DIR__.'/../../../lib/JIT/Call/Native.php'; +require_once __DIR__.'/../../../lib/JIT/Call/SplObjectStorageMethod.php'; +require_once __DIR__.'/../../../lib/JIT/Call/Vararg.php'; +require_once __DIR__.'/../../../lib/JIT/CoalesceHelper.php'; require_once __DIR__.'/../../../lib/JIT/Context.php'; -require_once __DIR__.'/../../../lib/JIT/HashTableHelper.php'; require_once __DIR__.'/../../../lib/JIT/ErrorHandlerCallbackPolicy.php'; +require_once __DIR__.'/../../../lib/JIT/HashTableHelper.php'; +require_once __DIR__.'/../../../lib/JIT/Helper.php'; +require_once __DIR__.'/../../../lib/JIT/IncludeHelper.php'; +require_once __DIR__.'/../../../lib/JIT/IssetHelper.php'; +require_once __DIR__.'/../../../lib/JIT/IteratorHelper.php'; +require_once __DIR__.'/../../../lib/JIT/JitBoolArg.php'; +require_once __DIR__.'/../../../lib/JIT/JitLongArg.php'; +require_once __DIR__.'/../../../lib/JIT/JitNativeString.php'; +require_once __DIR__.'/../../../lib/JIT/JitStringArg.php'; +require_once __DIR__.'/../../../lib/JIT/JitStringCompare.php'; +require_once __DIR__.'/../../../lib/JIT/JitValueBox.php'; +require_once __DIR__.'/../../../lib/JIT/JitValueCompare.php'; +require_once __DIR__.'/../../../lib/JIT/NullsafeHelper.php'; +require_once __DIR__.'/../../../lib/JIT/OperandName.php'; +require_once __DIR__.'/../../../lib/JIT/PregReplaceCallbackPolicy.php'; +require_once __DIR__.'/../../../lib/JIT/Progress.php'; +require_once __DIR__.'/../../../lib/JIT/ReflectionBuiltinHelper.php'; +require_once __DIR__.'/../../../lib/JIT/Result.php'; +require_once __DIR__.'/../../../lib/JIT/RuntimeInitVmContext.php'; +require_once __DIR__.'/../../../lib/JIT/Scope.php'; +require_once __DIR__.'/../../../lib/JIT/ScopeBuiltinHelper.php'; +require_once __DIR__.'/../../../lib/JIT/ScriptMagic.php'; +require_once __DIR__.'/../../../lib/JIT/SelfHostBuiltinPolicy.php'; +require_once __DIR__.'/../../../lib/JIT/StringOffsetHelper.php'; +require_once __DIR__.'/../../../lib/JIT/SuperglobalInit.php'; require_once __DIR__.'/../../../lib/JIT/TypeCheck.php'; -require_once __DIR__.'/../../../lib/JIT/VarFetchHelper.php'; require_once __DIR__.'/../../../lib/JIT/UnsetHelper.php'; -require_once __DIR__.'/../../../lib/JIT/ArrayBuiltinHelper.php'; -require_once __DIR__.'/../../../lib/JIT/ReflectionBuiltinHelper.php'; -require_once __DIR__.'/../../../lib/JIT.php'; -require_once __DIR__.'/../../../lib/VM/OutputBuffer.php'; -require_once __DIR__.'/../../../lib/VM.php'; -require_once __DIR__.'/../../../lib/Compiler.php'; +require_once __DIR__.'/../../../lib/JIT/UsortCallbackPolicy.php'; +require_once __DIR__.'/../../../lib/JIT/ValueEchoHelper.php'; +require_once __DIR__.'/../../../lib/JIT/VarFetchHelper.php'; +require_once __DIR__.'/../../../lib/JIT/Variable.php'; require_once __DIR__.'/../../../lib/Lint/Issue.php'; -require_once __DIR__.'/../../../lib/Lint/UnsupportedRegistry.php'; require_once __DIR__.'/../../../lib/Lint/LintCompiler.php'; require_once __DIR__.'/../../../lib/Lint/Linter.php'; require_once __DIR__.'/../../../lib/Lint/SwitchDetector.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Type.php'; -require_once __DIR__.'/../../../lib/JIT/Builtin/Type/String_.php'; -require_once __DIR__.'/../../../lib/Doctor.php'; -require_once __DIR__.'/../../../lib/Cli/InvokeCwd.php'; -require_once __DIR__.'/../../../lib/Cli/PhpcBuild.php'; -require_once __DIR__.'/../../../lib/Cli/PhpcInit.php'; -require_once __DIR__.'/../../../lib/Cli/PhpcRun.php'; +require_once __DIR__.'/../../../lib/Lint/UnsupportedRegistry.php'; +require_once __DIR__.'/../../../lib/MethodVisibility.php'; +require_once __DIR__.'/../../../lib/Module.php'; +require_once __DIR__.'/../../../lib/ModuleAbstract.php'; +require_once __DIR__.'/../../../lib/NullSafeLivenessDetector.php'; +require_once __DIR__.'/../../../lib/OpCode.php'; +require_once __DIR__.'/../../../lib/OpCodeNames.php'; +require_once __DIR__.'/../../../lib/Printer.php'; +require_once __DIR__.'/../../../lib/Runtime.php'; +require_once __DIR__.'/../../../lib/VM.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/VmClassMethod.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapConstruct.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapCount.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetExists.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetGet.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetSet.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakMapOffsetUnset.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakReferenceConstruct.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakReferenceCreate.php'; +require_once __DIR__.'/../../../lib/VM/Builtin/WeakReferenceGet.php'; +require_once __DIR__.'/../../../lib/VM/BuiltinClasses.php'; +require_once __DIR__.'/../../../lib/VM/ClassEntry.php'; +require_once __DIR__.'/../../../lib/VM/ClassProperty.php'; +require_once __DIR__.'/../../../lib/VM/ClassReadonly.php'; +require_once __DIR__.'/../../../lib/VM/Context.php'; +require_once __DIR__.'/../../../lib/VM/ErrorReporter.php'; +require_once __DIR__.'/../../../lib/VM/HashTable.php'; +require_once __DIR__.'/../../../lib/VM/InterfaceCheck.php'; +require_once __DIR__.'/../../../lib/VM/NamedArgs.php'; +require_once __DIR__.'/../../../lib/VM/ObjectEntry.php'; +require_once __DIR__.'/../../../lib/VM/Optimizer.php'; +require_once __DIR__.'/../../../lib/VM/Optimizer/AssignOp.php'; +require_once __DIR__.'/../../../lib/VM/OutputBuffer.php'; +require_once __DIR__.'/../../../lib/VM/Refcount.php'; +require_once __DIR__.'/../../../lib/VM/ScriptExit.php'; +require_once __DIR__.'/../../../lib/VM/ScriptStack.php'; +require_once __DIR__.'/../../../lib/VM/TypeCheck.php'; +require_once __DIR__.'/../../../lib/VM/Variable.php'; +require_once __DIR__.'/../../../lib/VM/WeakRefSupport.php'; require_once __DIR__.'/../../../lib/Web/CgiAotDriver.php'; require_once __DIR__.'/../../../lib/Web/CgiDriver.php'; +require_once __DIR__.'/../../../lib/Web/ConstStringFolder.php'; +require_once __DIR__.'/../../../lib/Web/DeployRoot.php'; +require_once __DIR__.'/../../../lib/Web/DevServer.php'; +require_once __DIR__.'/../../../lib/Web/IncludePathResolver.php'; +require_once __DIR__.'/../../../lib/Web/LiteralIncludeDiscovery.php'; +require_once __DIR__.'/../../../lib/Web/ManifestValidator.php'; +require_once __DIR__.'/../../../lib/Web/Params.php'; +require_once __DIR__.'/../../../lib/Web/ProjectAutoload.php'; +require_once __DIR__.'/../../../lib/Web/ProjectBootstrap.php'; require_once __DIR__.'/../../../lib/Web/ProjectDeploy.php'; -require_once __DIR__.'/../../../lib/AOT/ProjectGraph.php'; +require_once __DIR__.'/../../../lib/Web/ProjectManifest.php'; +require_once __DIR__.'/../../../lib/Web/ResponseContext.php'; +require_once __DIR__.'/../../../lib/Web/SourceBundler.php'; +require_once __DIR__.'/../../../lib/Web/Superglobals.php'; require_once __DIR__.'/../../../ext/standard/JitAddslashes.php'; +require_once __DIR__.'/../../../ext/standard/JitBase64Decode.php'; require_once __DIR__.'/../../../ext/standard/JitBase64Encode.php'; require_once __DIR__.'/../../../ext/standard/JitBin2hex.php'; -require_once __DIR__.'/../../../ext/standard/JitChunkSplit.php'; -require_once __DIR__.'/../../../ext/standard/JitCrc32.php'; -require_once __DIR__.'/../../../ext/standard/JitExplode.php'; -require_once __DIR__.'/../../../ext/standard/JitChmod.php'; -require_once __DIR__.'/../../../ext/standard/JitCopy.php'; -require_once __DIR__.'/../../../ext/standard/JitDate.php'; -require_once __DIR__.'/../../../ext/standard/JitImplode.php'; -require_once __DIR__.'/../../../ext/standard/JitNl2br.php'; -require_once __DIR__.'/../../../ext/standard/JitPregMatch.php'; -require_once __DIR__.'/../../../ext/standard/JitPregQuote.php'; -require_once __DIR__.'/../../../ext/standard/JitQuotemeta.php'; -require_once __DIR__.'/../../../ext/standard/JitStrRot13.php'; -require_once __DIR__.'/../../../ext/standard/JitSessionId.php'; -require_once __DIR__.'/../../../ext/standard/JitSessionName.php'; require_once __DIR__.'/../../../ext/standard/JitChdir.php'; +require_once __DIR__.'/../../../ext/standard/JitChmod.php'; +require_once __DIR__.'/../../../ext/standard/JitChunkSplit.php'; require_once __DIR__.'/../../../ext/standard/JitClassExists.php'; require_once __DIR__.'/../../../ext/standard/JitClearstatcache.php'; +require_once __DIR__.'/../../../ext/standard/JitCopy.php'; +require_once __DIR__.'/../../../ext/standard/JitCrc32.php'; +require_once __DIR__.'/../../../ext/standard/JitDate.php'; require_once __DIR__.'/../../../ext/standard/JitDeployPath.php'; require_once __DIR__.'/../../../ext/standard/JitEnumExists.php'; require_once __DIR__.'/../../../ext/standard/JitEnv.php'; +require_once __DIR__.'/../../../ext/standard/JitExplode.php'; require_once __DIR__.'/../../../ext/standard/JitFclose.php'; require_once __DIR__.'/../../../ext/standard/JitFeof.php'; +require_once __DIR__.'/../../../ext/standard/JitFflush.php'; require_once __DIR__.'/../../../ext/standard/JitFgetc.php'; require_once __DIR__.'/../../../ext/standard/JitFgetcsv.php'; require_once __DIR__.'/../../../ext/standard/JitFgets.php'; +require_once __DIR__.'/../../../ext/standard/JitFileGetContents.php'; +require_once __DIR__.'/../../../ext/standard/JitFilePutContents.php'; +require_once __DIR__.'/../../../ext/standard/JitFilemtime.php'; +require_once __DIR__.'/../../../ext/standard/JitFileperms.php'; +require_once __DIR__.'/../../../ext/standard/JitFilesize.php'; +require_once __DIR__.'/../../../ext/standard/JitFiletype.php'; +require_once __DIR__.'/../../../ext/standard/JitFilter.php'; require_once __DIR__.'/../../../ext/standard/JitFopen.php'; require_once __DIR__.'/../../../ext/standard/JitFpassthru.php'; require_once __DIR__.'/../../../ext/standard/JitFputcsv.php'; require_once __DIR__.'/../../../ext/standard/JitFread.php'; +require_once __DIR__.'/../../../ext/standard/JitFsGlob.php'; require_once __DIR__.'/../../../ext/standard/JitFseek.php'; -require_once __DIR__.'/../../../ext/standard/JitFileGetContents.php'; -require_once __DIR__.'/../../../ext/standard/JitFilter.php'; +require_once __DIR__.'/../../../ext/standard/JitFtell.php'; +require_once __DIR__.'/../../../ext/standard/JitFuncArgs.php'; require_once __DIR__.'/../../../ext/standard/JitFunctionExists.php'; +require_once __DIR__.'/../../../ext/standard/JitFwrite.php'; +require_once __DIR__.'/../../../ext/standard/JitGetObjectVars.php'; +require_once __DIR__.'/../../../ext/standard/JitGetallheaders.php'; require_once __DIR__.'/../../../ext/standard/JitGetcwd.php'; require_once __DIR__.'/../../../ext/standard/JitHash.php'; +require_once __DIR__.'/../../../ext/standard/JitHeader.php'; require_once __DIR__.'/../../../ext/standard/JitHex2bin.php'; require_once __DIR__.'/../../../ext/standard/JitHtmlspecialchars.php'; +require_once __DIR__.'/../../../ext/standard/JitHttpBuildQuery.php'; +require_once __DIR__.'/../../../ext/standard/JitHttpResponseCode.php'; +require_once __DIR__.'/../../../ext/standard/JitImplode.php'; require_once __DIR__.'/../../../ext/standard/JitIni.php'; +require_once __DIR__.'/../../../ext/standard/JitInterfaceExists.php'; require_once __DIR__.'/../../../ext/standard/JitJsonDecode.php'; require_once __DIR__.'/../../../ext/standard/JitJsonEncode.php'; require_once __DIR__.'/../../../ext/standard/JitJsonLastError.php'; +require_once __DIR__.'/../../../ext/standard/JitMkdir.php'; +require_once __DIR__.'/../../../ext/standard/JitNl2br.php'; require_once __DIR__.'/../../../ext/standard/JitNumberFormat.php'; +require_once __DIR__.'/../../../ext/standard/JitPack.php'; +require_once __DIR__.'/../../../ext/standard/JitParseStr.php'; +require_once __DIR__.'/../../../ext/standard/JitParseUrl.php'; +require_once __DIR__.'/../../../ext/standard/JitPath.php'; +require_once __DIR__.'/../../../ext/standard/JitPathinfo.php'; +require_once __DIR__.'/../../../ext/standard/JitPendingHeaders.php'; +require_once __DIR__.'/../../../ext/standard/JitPregGrep.php'; +require_once __DIR__.'/../../../ext/standard/JitPregLastError.php'; +require_once __DIR__.'/../../../ext/standard/JitPregMatch.php'; +require_once __DIR__.'/../../../ext/standard/JitPregMatchAll.php'; +require_once __DIR__.'/../../../ext/standard/JitPregQuote.php'; +require_once __DIR__.'/../../../ext/standard/JitPregReplace.php'; +require_once __DIR__.'/../../../ext/standard/JitPregReplaceCallback.php'; +require_once __DIR__.'/../../../ext/standard/JitPregSplit.php'; +require_once __DIR__.'/../../../ext/standard/JitPropertyExists.php'; +require_once __DIR__.'/../../../ext/standard/JitQuotemeta.php'; +require_once __DIR__.'/../../../ext/standard/JitRandomBytes.php'; +require_once __DIR__.'/../../../ext/standard/JitReadfile.php'; +require_once __DIR__.'/../../../ext/standard/JitReadlink.php'; require_once __DIR__.'/../../../ext/standard/JitRealpath.php'; +require_once __DIR__.'/../../../ext/standard/JitRename.php'; +require_once __DIR__.'/../../../ext/standard/JitRequestBody.php'; +require_once __DIR__.'/../../../ext/standard/JitRmdir.php'; require_once __DIR__.'/../../../ext/standard/JitSerialize.php'; +require_once __DIR__.'/../../../ext/standard/JitSessionId.php'; +require_once __DIR__.'/../../../ext/standard/JitSessionName.php'; +require_once __DIR__.'/../../../ext/standard/JitSetcookie.php'; +require_once __DIR__.'/../../../ext/standard/JitShellExec.php'; +require_once __DIR__.'/../../../ext/standard/JitSleep.php'; require_once __DIR__.'/../../../ext/standard/JitSprintf.php'; +require_once __DIR__.'/../../../ext/standard/JitStat.php'; +require_once __DIR__.'/../../../ext/standard/JitStatArray.php'; require_once __DIR__.'/../../../ext/standard/JitStrPad.php'; require_once __DIR__.'/../../../ext/standard/JitStrRepeat.php'; require_once __DIR__.'/../../../ext/standard/JitStrReplace.php'; +require_once __DIR__.'/../../../ext/standard/JitStrRot13.php'; require_once __DIR__.'/../../../ext/standard/JitStrShuffle.php'; require_once __DIR__.'/../../../ext/standard/JitStrSplit.php'; require_once __DIR__.'/../../../ext/standard/JitStringConcat.php'; @@ -238,109 +280,63 @@ require_once __DIR__.'/../../../ext/standard/JitStrrchr.php'; require_once __DIR__.'/../../../ext/standard/JitStrrpos.php'; require_once __DIR__.'/../../../ext/standard/JitStrstr.php'; -require_once __DIR__.'/../../../ext/standard/JitSubstrCount.php'; require_once __DIR__.'/../../../ext/standard/JitStrtr.php'; +require_once __DIR__.'/../../../ext/standard/JitSubstrCount.php'; require_once __DIR__.'/../../../ext/standard/JitSuperglobalName.php'; -require_once __DIR__.'/../../../ext/standard/JitTempnam.php'; -require_once __DIR__.'/../../../ext/standard/JitUnserialize.php'; -require_once __DIR__.'/../../../ext/standard/JitUrlencode.php'; -require_once __DIR__.'/../../../ext/standard/JitWordwrap.php'; -require_once __DIR__.'/../../../ext/standard/JitFflush.php'; -require_once __DIR__.'/../../../ext/standard/JitFilePutContents.php'; -require_once __DIR__.'/../../../ext/standard/JitFilemtime.php'; -require_once __DIR__.'/../../../ext/standard/JitFileperms.php'; -require_once __DIR__.'/../../../ext/standard/JitFilesize.php'; -require_once __DIR__.'/../../../ext/standard/JitFiletype.php'; -require_once __DIR__.'/../../../ext/standard/JitFsGlob.php'; -require_once __DIR__.'/../../../ext/standard/JitFtell.php'; -require_once __DIR__.'/../../../ext/standard/JitFwrite.php'; -require_once __DIR__.'/../../../ext/standard/JitMkdir.php'; -require_once __DIR__.'/../../../ext/standard/JitPath.php'; -require_once __DIR__.'/../../../ext/standard/JitPathinfo.php'; -require_once __DIR__.'/../../../ext/standard/JitReadfile.php'; -require_once __DIR__.'/../../../ext/standard/JitReadlink.php'; -require_once __DIR__.'/../../../ext/standard/JitRename.php'; -require_once __DIR__.'/../../../ext/standard/JitRequestBody.php'; -require_once __DIR__.'/../../../ext/standard/JitRmdir.php'; -require_once __DIR__.'/../../../ext/standard/JitShellExec.php'; -require_once __DIR__.'/../../../ext/standard/JitStat.php'; -require_once __DIR__.'/../../../ext/standard/JitStatArray.php'; require_once __DIR__.'/../../../ext/standard/JitSysGetTempDir.php'; +require_once __DIR__.'/../../../ext/standard/JitTempnam.php'; require_once __DIR__.'/../../../ext/standard/JitTouch.php'; +require_once __DIR__.'/../../../ext/standard/JitTraitExists.php'; require_once __DIR__.'/../../../ext/standard/JitUnlink.php'; +require_once __DIR__.'/../../../ext/standard/JitUnserialize.php'; +require_once __DIR__.'/../../../ext/standard/JitUrlencode.php'; require_once __DIR__.'/../../../ext/standard/JitWebParams.php'; -require_once __DIR__.'/../../../ext/standard/is_numeric.php'; -require_once __DIR__.'/../../../ext/standard/JitHeader.php'; -require_once __DIR__.'/../../../ext/standard/JitPack.php'; -require_once __DIR__.'/../../../ext/standard/JitRandomBytes.php'; -require_once __DIR__.'/../../../ext/standard/JitBase64Decode.php'; -require_once __DIR__.'/../../../ext/standard/JitFuncArgs.php'; -require_once __DIR__.'/../../../ext/standard/JitGetObjectVars.php'; -require_once __DIR__.'/../../../ext/standard/JitGetallheaders.php'; -require_once __DIR__.'/../../../ext/standard/JitHttpBuildQuery.php'; -require_once __DIR__.'/../../../ext/standard/JitHttpResponseCode.php'; -require_once __DIR__.'/../../../ext/standard/JitInterfaceExists.php'; -require_once __DIR__.'/../../../ext/standard/JitParseStr.php'; -require_once __DIR__.'/../../../ext/standard/JitParseUrl.php'; -require_once __DIR__.'/../../../ext/standard/JitPendingHeaders.php'; -require_once __DIR__.'/../../../ext/standard/JitPregGrep.php'; -require_once __DIR__.'/../../../ext/standard/JitPregLastError.php'; -require_once __DIR__.'/../../../ext/standard/JitPregMatchAll.php'; -require_once __DIR__.'/../../../ext/standard/JitPregReplace.php'; -require_once __DIR__.'/../../../ext/standard/JitPregReplaceCallback.php'; -require_once __DIR__.'/../../../ext/standard/JitPregSplit.php'; -require_once __DIR__.'/../../../ext/standard/JitPropertyExists.php'; -require_once __DIR__.'/../../../ext/standard/JitSetcookie.php'; -require_once __DIR__.'/../../../ext/standard/JitSleep.php'; -require_once __DIR__.'/../../../ext/standard/JitTraitExists.php'; +require_once __DIR__.'/../../../ext/standard/JitWordwrap.php'; require_once __DIR__.'/../../../ext/standard/Module.php'; +require_once __DIR__.'/../../../ext/standard/SetcookieLine.php'; require_once __DIR__.'/../../../ext/standard/VmCrc32.php'; require_once __DIR__.'/../../../ext/standard/VmDate.php'; +require_once __DIR__.'/../../../ext/standard/VmDebugBacktrace.php'; require_once __DIR__.'/../../../ext/standard/VmErrorHandler.php'; require_once __DIR__.'/../../../ext/standard/VmExit.php'; +require_once __DIR__.'/../../../ext/standard/VmFilter.php'; +require_once __DIR__.'/../../../ext/standard/VmFs.php'; +require_once __DIR__.'/../../../ext/standard/VmHash.php'; require_once __DIR__.'/../../../ext/standard/VmHttpBuildQuery.php'; +require_once __DIR__.'/../../../ext/standard/VmIni.php'; require_once __DIR__.'/../../../ext/standard/VmInternalCall.php'; require_once __DIR__.'/../../../ext/standard/VmInternalCompare.php'; require_once __DIR__.'/../../../ext/standard/VmJson.php'; require_once __DIR__.'/../../../ext/standard/VmNumberFormat.php'; require_once __DIR__.'/../../../ext/standard/VmPack.php'; require_once __DIR__.'/../../../ext/standard/VmParseStr.php'; +require_once __DIR__.'/../../../ext/standard/VmPassword.php'; +require_once __DIR__.'/../../../ext/standard/VmPreg.php'; require_once __DIR__.'/../../../ext/standard/VmReflection.php'; require_once __DIR__.'/../../../ext/standard/VmScope.php'; +require_once __DIR__.'/../../../ext/standard/VmSerialize.php'; +require_once __DIR__.'/../../../ext/standard/VmSession.php'; +require_once __DIR__.'/../../../ext/standard/VmSleep.php'; require_once __DIR__.'/../../../ext/standard/VmSprintf.php'; require_once __DIR__.'/../../../ext/standard/VmStreamContext.php'; require_once __DIR__.'/../../../ext/standard/VmUserCall.php'; -require_once __DIR__.'/../../../ext/standard/VmDebugBacktrace.php'; -require_once __DIR__.'/../../../ext/standard/VmSerialize.php'; -require_once __DIR__.'/../../../ext/standard/filter_input.php'; -require_once __DIR__.'/../../../ext/standard/filter_var.php'; -require_once __DIR__.'/../../../ext/standard/crc32.php'; -require_once __DIR__.'/../../../ext/standard/hash_.php'; -require_once __DIR__.'/../../../ext/standard/hash_hmac.php'; -require_once __DIR__.'/../../../ext/standard/json_decode.php'; -require_once __DIR__.'/../../../ext/standard/json_encode.php'; -require_once __DIR__.'/../../../ext/standard/json_last_error_.php'; -require_once __DIR__.'/../../../ext/standard/serialize.php'; -require_once __DIR__.'/../../../ext/standard/unserialize.php'; -require_once __DIR__.'/../../../ext/standard/class_exists_.php'; -require_once __DIR__.'/../../../ext/standard/function_exists.php'; -require_once __DIR__.'/../../../ext/standard/http_build_query.php'; -require_once __DIR__.'/../../../ext/standard/parse_url.php'; -require_once __DIR__.'/../../../ext/standard/parse_str.php'; require_once __DIR__.'/../../../ext/standard/abs.php'; +require_once __DIR__.'/../../../ext/standard/addslashes.php'; require_once __DIR__.'/../../../ext/standard/array_chunk.php'; +require_once __DIR__.'/../../../ext/standard/array_column.php'; require_once __DIR__.'/../../../ext/standard/array_count.php'; require_once __DIR__.'/../../../ext/standard/array_diff.php'; require_once __DIR__.'/../../../ext/standard/array_fill.php'; +require_once __DIR__.'/../../../ext/standard/array_filter.php'; require_once __DIR__.'/../../../ext/standard/array_flip.php'; +require_once __DIR__.'/../../../ext/standard/array_intersect.php'; require_once __DIR__.'/../../../ext/standard/array_key_exists.php'; require_once __DIR__.'/../../../ext/standard/array_keys.php'; -require_once __DIR__.'/../../../ext/standard/array_column.php'; -require_once __DIR__.'/../../../ext/standard/array_merge.php'; require_once __DIR__.'/../../../ext/standard/array_map.php'; -require_once __DIR__.'/../../../ext/standard/array_intersect.php'; -require_once __DIR__.'/../../../ext/standard/array_push.php'; +require_once __DIR__.'/../../../ext/standard/array_merge.php'; require_once __DIR__.'/../../../ext/standard/array_product.php'; +require_once __DIR__.'/../../../ext/standard/array_push.php'; +require_once __DIR__.'/../../../ext/standard/array_reduce.php'; require_once __DIR__.'/../../../ext/standard/array_replace.php'; require_once __DIR__.'/../../../ext/standard/array_reverse.php'; require_once __DIR__.'/../../../ext/standard/array_slice.php'; @@ -349,52 +345,173 @@ require_once __DIR__.'/../../../ext/standard/array_unique.php'; require_once __DIR__.'/../../../ext/standard/array_unshift.php'; require_once __DIR__.'/../../../ext/standard/array_values.php'; +require_once __DIR__.'/../../../ext/standard/array_walk.php'; require_once __DIR__.'/../../../ext/standard/atan2.php'; -require_once __DIR__.'/../../../ext/standard/tan.php'; require_once __DIR__.'/../../../ext/standard/base64_decode.php'; require_once __DIR__.'/../../../ext/standard/base64_encode.php'; require_once __DIR__.'/../../../ext/standard/basename.php'; +require_once __DIR__.'/../../../ext/standard/bin2hex.php'; require_once __DIR__.'/../../../ext/standard/bindec.php'; require_once __DIR__.'/../../../ext/standard/boolval.php'; require_once __DIR__.'/../../../ext/standard/ceil.php'; +require_once __DIR__.'/../../../ext/standard/chdir_.php'; +require_once __DIR__.'/../../../ext/standard/chmod_.php'; +require_once __DIR__.'/../../../ext/standard/chr.php'; +require_once __DIR__.'/../../../ext/standard/chunk_split.php'; +require_once __DIR__.'/../../../ext/standard/class_exists_.php'; +require_once __DIR__.'/../../../ext/standard/clearstatcache_.php'; +require_once __DIR__.'/../../../ext/standard/compact_.php'; +require_once __DIR__.'/../../../ext/standard/compiler_is_superglobal_name.php'; +require_once __DIR__.'/../../../ext/standard/copy_.php'; require_once __DIR__.'/../../../ext/standard/cos.php'; +require_once __DIR__.'/../../../ext/standard/crc32.php'; +require_once __DIR__.'/../../../ext/standard/date.php'; +require_once __DIR__.'/../../../ext/standard/debug_backtrace.php'; require_once __DIR__.'/../../../ext/standard/decbin.php'; require_once __DIR__.'/../../../ext/standard/dechex.php'; require_once __DIR__.'/../../../ext/standard/decoct.php'; +require_once __DIR__.'/../../../ext/standard/define_.php'; +require_once __DIR__.'/../../../ext/standard/defined_.php'; require_once __DIR__.'/../../../ext/standard/deg2rad.php'; +require_once __DIR__.'/../../../ext/standard/dirname.php'; +require_once __DIR__.'/../../../ext/standard/doubleval.php'; +require_once __DIR__.'/../../../ext/standard/enum_exists_.php'; require_once __DIR__.'/../../../ext/standard/exp.php'; +require_once __DIR__.'/../../../ext/standard/explode.php'; +require_once __DIR__.'/../../../ext/standard/extract_.php'; +require_once __DIR__.'/../../../ext/standard/fclose.php'; +require_once __DIR__.'/../../../ext/standard/feof_.php'; +require_once __DIR__.'/../../../ext/standard/fflush_.php'; +require_once __DIR__.'/../../../ext/standard/fgetc.php'; +require_once __DIR__.'/../../../ext/standard/fgetcsv.php'; +require_once __DIR__.'/../../../ext/standard/fgets.php'; +require_once __DIR__.'/../../../ext/standard/file_exists.php'; +require_once __DIR__.'/../../../ext/standard/file_get_contents.php'; +require_once __DIR__.'/../../../ext/standard/file_put_contents.php'; +require_once __DIR__.'/../../../ext/standard/filemtime.php'; +require_once __DIR__.'/../../../ext/standard/fileperms.php'; +require_once __DIR__.'/../../../ext/standard/filesize.php'; +require_once __DIR__.'/../../../ext/standard/filetype.php'; +require_once __DIR__.'/../../../ext/standard/filter_input.php'; +require_once __DIR__.'/../../../ext/standard/filter_var.php'; +require_once __DIR__.'/../../../ext/standard/floatval.php'; require_once __DIR__.'/../../../ext/standard/floor.php'; require_once __DIR__.'/../../../ext/standard/fmod.php'; +require_once __DIR__.'/../../../ext/standard/fopen.php'; +require_once __DIR__.'/../../../ext/standard/fpassthru.php'; +require_once __DIR__.'/../../../ext/standard/fputcsv.php'; +require_once __DIR__.'/../../../ext/standard/fread.php'; +require_once __DIR__.'/../../../ext/standard/fseek.php'; +require_once __DIR__.'/../../../ext/standard/ftell_.php'; +require_once __DIR__.'/../../../ext/standard/func_get_args.php'; +require_once __DIR__.'/../../../ext/standard/func_num_args.php'; +require_once __DIR__.'/../../../ext/standard/function_exists.php'; +require_once __DIR__.'/../../../ext/standard/fwrite.php'; +require_once __DIR__.'/../../../ext/standard/get_class_.php'; +require_once __DIR__.'/../../../ext/standard/get_object_vars_.php'; +require_once __DIR__.'/../../../ext/standard/get_parent_class_.php'; +require_once __DIR__.'/../../../ext/standard/getallheaders_.php'; +require_once __DIR__.'/../../../ext/standard/getcwd_.php'; +require_once __DIR__.'/../../../ext/standard/getenv_.php'; require_once __DIR__.'/../../../ext/standard/gettype.php'; +require_once __DIR__.'/../../../ext/standard/glob_.php'; +require_once __DIR__.'/../../../ext/standard/gmdate.php'; +require_once __DIR__.'/../../../ext/standard/hash_.php'; +require_once __DIR__.'/../../../ext/standard/hash_hmac.php'; +require_once __DIR__.'/../../../ext/standard/header_.php'; +require_once __DIR__.'/../../../ext/standard/header_list.php'; +require_once __DIR__.'/../../../ext/standard/header_remove.php'; +require_once __DIR__.'/../../../ext/standard/hex2bin.php'; +require_once __DIR__.'/../../../ext/standard/hexdec.php'; +require_once __DIR__.'/../../../ext/standard/htmlspecialchars.php'; +require_once __DIR__.'/../../../ext/standard/http_build_query.php'; +require_once __DIR__.'/../../../ext/standard/http_response_code.php'; +require_once __DIR__.'/../../../ext/standard/hypot.php'; +require_once __DIR__.'/../../../ext/standard/implode.php'; +require_once __DIR__.'/../../../ext/standard/in_array.php'; +require_once __DIR__.'/../../../ext/standard/ini_set_.php'; +require_once __DIR__.'/../../../ext/standard/int_max.php'; +require_once __DIR__.'/../../../ext/standard/int_min.php'; +require_once __DIR__.'/../../../ext/standard/intdiv.php'; +require_once __DIR__.'/../../../ext/standard/interface_exists_.php'; require_once __DIR__.'/../../../ext/standard/intval.php'; +require_once __DIR__.'/../../../ext/standard/is_a_.php'; +require_once __DIR__.'/../../../ext/standard/is_dir.php'; +require_once __DIR__.'/../../../ext/standard/is_executable.php'; +require_once __DIR__.'/../../../ext/standard/is_file.php'; require_once __DIR__.'/../../../ext/standard/is_finite.php'; require_once __DIR__.'/../../../ext/standard/is_infinite.php'; +require_once __DIR__.'/../../../ext/standard/is_link.php'; require_once __DIR__.'/../../../ext/standard/is_nan.php'; -require_once __DIR__.'/../../../ext/standard/floatval.php'; -require_once __DIR__.'/../../../ext/standard/hex2bin.php'; -require_once __DIR__.'/../../../ext/standard/addslashes.php'; -require_once __DIR__.'/../../../ext/standard/stripslashes.php'; -require_once __DIR__.'/../../../ext/standard/bin2hex.php'; -require_once __DIR__.'/../../../ext/standard/doubleval.php'; -require_once __DIR__.'/../../../ext/standard/pi.php'; -require_once __DIR__.'/../../../ext/standard/pow.php'; -require_once __DIR__.'/../../../ext/standard/preg_replace.php'; -require_once __DIR__.'/../../../ext/types/is_type.php'; -require_once __DIR__.'/../../../ext/types/strlen.php'; -require_once __DIR__.'/../../../ext/types/mb_strlen.php'; -require_once __DIR__.'/../../../ext/types/JitMbStrlen.php'; -require_once __DIR__.'/../../../ext/types/Module.php'; -require_once __DIR__.'/../../../ext/standard/chunk_split.php'; -require_once __DIR__.'/../../../ext/standard/explode.php'; -require_once __DIR__.'/../../../ext/standard/htmlspecialchars.php'; -require_once __DIR__.'/../../../ext/standard/implode.php'; +require_once __DIR__.'/../../../ext/standard/is_numeric.php'; +require_once __DIR__.'/../../../ext/standard/is_readable.php'; +require_once __DIR__.'/../../../ext/standard/is_scalar.php'; +require_once __DIR__.'/../../../ext/standard/is_subclass_of_.php'; +require_once __DIR__.'/../../../ext/standard/is_writable.php'; +require_once __DIR__.'/../../../ext/standard/json_decode.php'; +require_once __DIR__.'/../../../ext/standard/json_encode.php'; +require_once __DIR__.'/../../../ext/standard/json_last_error_.php'; require_once __DIR__.'/../../../ext/standard/lcfirst.php'; +require_once __DIR__.'/../../../ext/standard/log.php'; +require_once __DIR__.'/../../../ext/standard/lstat_.php'; +require_once __DIR__.'/../../../ext/standard/method_exists_.php'; +require_once __DIR__.'/../../../ext/standard/mkdir_.php'; require_once __DIR__.'/../../../ext/standard/nl2br.php'; require_once __DIR__.'/../../../ext/standard/number_format.php'; +require_once __DIR__.'/../../../ext/standard/ob_end_flush.php'; +require_once __DIR__.'/../../../ext/standard/ob_get_clean.php'; +require_once __DIR__.'/../../../ext/standard/ob_get_level.php'; +require_once __DIR__.'/../../../ext/standard/ob_start.php'; +require_once __DIR__.'/../../../ext/standard/octdec.php'; +require_once __DIR__.'/../../../ext/standard/ord.php'; +require_once __DIR__.'/../../../ext/standard/pack.php'; +require_once __DIR__.'/../../../ext/standard/parse_str.php'; +require_once __DIR__.'/../../../ext/standard/parse_url.php'; +require_once __DIR__.'/../../../ext/standard/password_hash.php'; +require_once __DIR__.'/../../../ext/standard/password_verify.php'; +require_once __DIR__.'/../../../ext/standard/pathinfo.php'; +require_once __DIR__.'/../../../ext/standard/phpc_deploy_path.php'; +require_once __DIR__.'/../../../ext/standard/pi.php'; +require_once __DIR__.'/../../../ext/standard/pow.php'; +require_once __DIR__.'/../../../ext/standard/preg_grep.php'; +require_once __DIR__.'/../../../ext/standard/preg_last_error_.php'; +require_once __DIR__.'/../../../ext/standard/preg_match.php'; +require_once __DIR__.'/../../../ext/standard/preg_match_all.php'; +require_once __DIR__.'/../../../ext/standard/preg_quote.php'; +require_once __DIR__.'/../../../ext/standard/preg_replace.php'; +require_once __DIR__.'/../../../ext/standard/preg_replace_callback.php'; +require_once __DIR__.'/../../../ext/standard/preg_split.php'; +require_once __DIR__.'/../../../ext/standard/property_exists_.php'; +require_once __DIR__.'/../../../ext/standard/putenv_.php'; require_once __DIR__.'/../../../ext/standard/quotemeta.php'; +require_once __DIR__.'/../../../ext/standard/rad2deg.php'; +require_once __DIR__.'/../../../ext/standard/random_bytes.php'; +require_once __DIR__.'/../../../ext/standard/range.php'; require_once __DIR__.'/../../../ext/standard/rawurldecode.php'; require_once __DIR__.'/../../../ext/standard/rawurlencode.php'; +require_once __DIR__.'/../../../ext/standard/readfile.php'; +require_once __DIR__.'/../../../ext/standard/readlink.php'; +require_once __DIR__.'/../../../ext/standard/realpath.php'; +require_once __DIR__.'/../../../ext/standard/rename_.php'; +require_once __DIR__.'/../../../ext/standard/restore_error_handler_.php'; +require_once __DIR__.'/../../../ext/standard/rmdir_.php'; +require_once __DIR__.'/../../../ext/standard/round.php'; +require_once __DIR__.'/../../../ext/standard/scandir.php'; +require_once __DIR__.'/../../../ext/standard/serialize.php'; +require_once __DIR__.'/../../../ext/standard/session_destroy.php'; +require_once __DIR__.'/../../../ext/standard/session_id_.php'; +require_once __DIR__.'/../../../ext/standard/session_name.php'; +require_once __DIR__.'/../../../ext/standard/session_regenerate_id.php'; +require_once __DIR__.'/../../../ext/standard/session_start.php'; +require_once __DIR__.'/../../../ext/standard/session_write_close.php'; +require_once __DIR__.'/../../../ext/standard/set_error_handler_.php'; +require_once __DIR__.'/../../../ext/standard/setcookie.php'; +require_once __DIR__.'/../../../ext/standard/setrawcookie.php'; +require_once __DIR__.'/../../../ext/standard/sin.php'; +require_once __DIR__.'/../../../ext/standard/sleep.php'; require_once __DIR__.'/../../../ext/standard/sprintf_.php'; +require_once __DIR__.'/../../../ext/standard/sqrt.php'; +require_once __DIR__.'/../../../ext/standard/stat_.php'; require_once __DIR__.'/../../../ext/standard/str_contains.php'; require_once __DIR__.'/../../../ext/standard/str_ends_with.php'; require_once __DIR__.'/../../../ext/standard/str_pad.php'; @@ -408,11 +525,13 @@ require_once __DIR__.'/../../../ext/standard/strchr.php'; require_once __DIR__.'/../../../ext/standard/strcmp.php'; require_once __DIR__.'/../../../ext/standard/strcspn.php'; +require_once __DIR__.'/../../../ext/standard/stream_context_create.php'; require_once __DIR__.'/../../../ext/standard/string_ltrim.php'; require_once __DIR__.'/../../../ext/standard/string_rtrim.php'; require_once __DIR__.'/../../../ext/standard/string_trim.php'; require_once __DIR__.'/../../../ext/standard/strip_tags.php'; require_once __DIR__.'/../../../ext/standard/stripos.php'; +require_once __DIR__.'/../../../ext/standard/stripslashes.php'; require_once __DIR__.'/../../../ext/standard/stristr.php'; require_once __DIR__.'/../../../ext/standard/strncasecmp.php'; require_once __DIR__.'/../../../ext/standard/strncmp.php'; @@ -430,17 +549,30 @@ require_once __DIR__.'/../../../ext/standard/substr.php'; require_once __DIR__.'/../../../ext/standard/substr_count.php'; require_once __DIR__.'/../../../ext/standard/sys_get_temp_dir.php'; +require_once __DIR__.'/../../../ext/standard/tan.php'; +require_once __DIR__.'/../../../ext/standard/tempnam.php'; +require_once __DIR__.'/../../../ext/standard/time.php'; +require_once __DIR__.'/../../../ext/standard/touch_.php'; +require_once __DIR__.'/../../../ext/standard/trait_exists_.php'; require_once __DIR__.'/../../../ext/standard/trigger_error_.php'; require_once __DIR__.'/../../../ext/standard/ucfirst.php'; require_once __DIR__.'/../../../ext/standard/ucwords.php'; +require_once __DIR__.'/../../../ext/standard/unlink.php'; +require_once __DIR__.'/../../../ext/standard/unserialize.php'; require_once __DIR__.'/../../../ext/standard/urldecode.php'; require_once __DIR__.'/../../../ext/standard/urlencode.php'; +require_once __DIR__.'/../../../ext/standard/usleep.php'; require_once __DIR__.'/../../../ext/standard/var_dump.php'; require_once __DIR__.'/../../../ext/standard/var_export.php'; require_once __DIR__.'/../../../ext/standard/web_bool.php'; require_once __DIR__.'/../../../ext/standard/web_int.php'; require_once __DIR__.'/../../../ext/standard/web_string.php'; require_once __DIR__.'/../../../ext/standard/wordwrap.php'; +require_once __DIR__.'/../../../ext/types/JitMbStrlen.php'; +require_once __DIR__.'/../../../ext/types/Module.php'; +require_once __DIR__.'/../../../ext/types/is_type.php'; +require_once __DIR__.'/../../../ext/types/mb_strlen.php'; +require_once __DIR__.'/../../../ext/types/strlen.php'; require_once __DIR__.'/../../../src/llvm-env.php'; require_once __DIR__.'/../../../src/yay-php8-compat.php'; // src/cli.php + compat shims — deferred (#1467): String_.php JIT link failure when bundled; cli_driver split ready for M4. diff --git a/test/selfhost/compiler_lib_spine_smoke/main.php.master b/test/selfhost/compiler_lib_spine_smoke/main.php.master new file mode 100644 index 00000000000..b2164496a33 --- /dev/null +++ b/test/selfhost/compiler_lib_spine_smoke/main.php.master @@ -0,0 +1,449 @@ +assertFileExists($entry); $contents = (string) file_get_contents($entry); $count = substr_count($contents, 'require_once __DIR__'); - $this->assertSame(435, $count, '108 compiler_minimal units + 327 M2 spine units (#1746 yay-php8-compat); array_pop/shift/search + preg/array_combine wrappers skipped (AOT types); Vm* deferred #1467'); + $this->assertSame(567, $count, '108 compiler_minimal overlap + 459 M2 spine units; array_pop/shift/search/combine/multisort/sort/usort/uasort + shell_exec + VmString/VmSplAutoload/VmPregReplaceCallback/spl_autoload skipped (AOT lint)'); foreach (self::LIB_SPINE_SMOKE_NEW_UNITS as $unit) { $this->assertStringContainsString( "require_once __DIR__.'/../../../{$unit}';",