
# Avancerat

Interna detaljer. Om du bäddar in Phasis kan du hoppa över det här avsnittet. Om du ändrar motorn är varje sida här grundläggande.

## Sidor

- **[Arkitektur](https://phasis.inline0.dev/sv/docs/advanced/architecture)** — hur källkod blir till exekvering: lexer → parser → AST → bytekodskompilering → bytekod-VM med trädtolkarreservväg. Modulhanterare, kontexter och `Phasis\Engine`s roll som gräns mellan kontexter.
- **[Bytekod-VM](https://phasis.inline0.dev/sv/docs/advanced/bytecode-vm)** — uppsättningen opkoder, dispatchloopen, inline-cacherna, snabbvägen för källkodstranspilering med JsToPhp, heuristiken canSkipEnvAlloc för funktionsformer samt när anrop går via bytekodsvägen respektive trädtolkaren.
- **[Bänktester](https://phasis.inline0.dev/sv/docs/advanced/benchmarks)** — aktuella `bench/`-siffror, hur de ska tolkas, varför ~100× V8 är den stabila övre gränsen för trädtolkare och vad som skulle minska gapet.
- **[Testning](https://phasis.inline0.dev/sv/docs/advanced/testing)** — orakelmodellen. Varje ändring verifieras mot tre oberoende orakel: Node.js (specifikationens facit för V8), test262 och sviten som kontrollerar byte-för-byte-likhet med populära bibliotek.

## Bidragsriktlinjer

- **Rör inte kärnmotorn utan starka skäl.** Allt under `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` ligger på den test262 kritiska sökvägen. Att röra den utan motsvarande verifiering test262 är ett säkert recept på regressioner. Inbyggda funktioner (`src/BuiltIn/`) är säkrare eftersom test262 delsviterna för varje inbyggd funktion fångar upp problem lokalt.
- **Använd traits för organisering, inte klasser.** När en fil överstiger ~2K rader, dela upp den i trait-filer i en syskonsökväg (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` osv.) i stället för att bryta ut nya klasser — det håller `self::`-sökningar fungerande och undviker att bryta ytan för privata metoder API.
- **Kör `bin/verify-all` lokalt före push.** Det kör PHPStan, PHPCS, varje PHPUnit-svit (unit, oracle, popular, wpt) och oracle-regressionstestet. CI kör WPT- och popular-sviterna vid ändringar i `src/`; den fullständiga test262-matrisen startas manuellt, så testa berörda test262-kategorier lokalt.
- **Lägg till en WPT-fixture för varje tillägg till Web API.** Lägg `.any.js` från `tests/Wpt/upstream/<area>/` i `tests/Wpt/fixtures/<category>/` så hittar köraren den.

## Se även

- [Kompatibilitet](https://phasis.inline0.dev/sv/docs/compatibility) — hur oracle-resultaten mäts.
- [CLI-referens](https://phasis.inline0.dev/sv/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
