You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 70ca7bb
Browse filesBrowse the repository at this point in the historyBrowse files
The shared core built against PHP 8.5 headers loads on PHP 8.2 next to a
thin 8.2 extension; the shared-core gate reports identical shared code for
8.2 through 8.6. What 8.2 lacks or spells differently is routed through
pt_abi or pinned in abi.h:
- no engine C stack limit: Abi.cpp computes the bounds like 8.3 does and
keeps them across fresh-stack coroutines
- zend_fcall_info_cache.closure: 8.3's layout is declared on top of 8.2's
- the literal-name arginfo bit is translated to the plain name bit
- zend_zval_value_name() routes to zend_zval_type_name() on 8.2
- codegen pins for zend_string_*, smart_str_extract, ZEND_HASH_FILL_*
and ZEND_ASSUME
CI builds and tests 8.2 everywhere 8.3 is built; Alpine 3.24 has no php82
package, so the musl legs build it from the tarball.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0156KuUPxcWUY7jap6uxnA5h
| ZPP error codes / `Z_EXPECTED_*` numbering, parse slow paths (8.6) | neutral ZPP macros in `abi.h`, translated by `Abi.cpp`|
422
422
| functions whose signature or behaviour changed (`zend_create_closure`, `zend_dval_to_lval`, …) or that stopped being exported (`zend_call_known_function`, …) | function pointers in `pt_abi`, implemented in `Abi.cpp`|
423
+
|`EG(stack_base)` / `EG(stack_limit)` and `zend_call_stack.h` (8.3) |`pt_abi.eg_stack_*`; before 8.3, `Abi.cpp`'s own pair, determined like 8.3 does, and the two inline helpers spelled out in `abi.h`|
424
+
|`zend_fcall_info_cache.closure` (8.3 appended it) | 8.3's layout declared over the older headers' struct (`support.h`, `abi.h`); the older engines use the first four members, the shared code never reads `closure`|
425
+
| class names of internal arginfo (`_ZEND_TYPE_LITERAL_NAME_BIT`, 8.3) | pinned in `abi.h`, turned into the plain name bit by `Abi.cpp` before 8.3 |
426
+
|`zend_zval_value_name()` (8.3; 8.2's type errors use `zend_zval_type_name()`) |`pt_abi.zval_value_name`|
423
427
|`#if PHP_VERSION_ID` gates |`PT_ABI_SINCE(version, then, otherwise)`, decided at run time |
424
428
| helpers re-spelled without changing behaviour (macro → inline function) | one definition pinned in `abi.h` ("codegen pins") |
425
429
@@ -459,7 +463,7 @@ against them (the import library expected in `turbo-ext/`).
459
463
460
464
In CI (`.github/workflows/phar.yml`), `turbo-compile-core*` build one core
461
465
per platform — profile-guided, against `php-version` of its matrix (Windows:
462
-
against 8.3 with VS16, the oldest toolset, since PHP checks the toolset of
466
+
against 8.3 with VS16, the oldest toolset — 8.2's too — since PHP checks the toolset of
463
467
the DLL it loads, the extension, and a core linked with an older one runs on
464
468
any newer VC runtime) — and are what `turbo-origins` reuses from earlier
465
469
runs; `turbo-compile*` link each version's extension against them in a
0 commit comments