
# Pokročilé

Interné fungovanie. Ak vkladáte Phasis do iného prostredia, túto časť môžete preskočiť. Ak upravujete engine, každá stránka tu je kľúčová.

## Stránky

- **[Architektúra](https://phasis.inline0.dev/sk/docs/advanced/architecture)** — ako sa zdrojový kód mení na vykonávanie: lexer → parser → AST → kompilácia do bajtkódu → bajtkódový VM so záložným stromovým interpretom. Načítavač modulov, prostredia realm a úloha `Phasis\Engine` ako hranice realm.
- **[Bajtkódový VM](https://phasis.inline0.dev/sk/docs/advanced/bytecode-vm)** — množina opkódov, dispečovacia slučka, inline cache, rýchla cesta transpileru zdrojového kódu JsToPhp, heuristika canSkipEnvAlloc podľa tvaru funkcie a kedy volania využívajú bajtkódovú cestu namiesto stromového interpreta.
- **[Benchmarky](https://phasis.inline0.dev/sk/docs/advanced/benchmarks)** — aktuálne výsledky `bench/`, ako ich interpretovať, prečo je ~100× V8 ustáleným stropom stromových interpretov a čo by zmenšilo rozdiel.
- **[Testovanie](https://phasis.inline0.dev/sk/docs/advanced/testing)** — model oracle. Každá zmena sa overuje voči trom nezávislým oracle: Node.js (referenčná špecifikácia V8), test262 a testovacej sade populárnych knižníc na úrovni bajtov.

## Zásady prispievania

- **Nemeňte jadro enginu bez vážneho dôvodu.** Všetko v `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` leží na kritickej ceste test262. Úprava bez zodpovedajúceho overenia test262 môže viesť k regresiám. Vstavané funkcie (`src/BuiltIn/`) sú bezpečnejšie, pretože čiastkové testovacie sady test262 pre každú vstavanú funkciu zachytia problémy lokálne.
- **Na organizáciu používajte traits, nie triedy.** Keď súbor prekročí približne 2K riadkov, rozdeľte ho na súbory s traits v podriadenom adresári (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` atď.), namiesto vytvárania nových tried — zachováte funkčnosť vyhľadávania `self::` a neporušíte rozhranie privátnych metód API.
- **Pred odoslaním zmien spustite lokálne `bin/verify-all`.** Spustí PHPStan, PHPCS, všetky testovacie sady PHPUnit (unit, oracle, popular, wpt) a regresné testy oracle. CI spúšťa sady WPT a popular pri zmenách v `src/`; úplná matica test262 sa spúšťa manuálne, preto lokálne otestujte dotknuté kategórie test262.
- **Pri každom pridaní webového API pridajte fixture WPT.** Vložte `.any.js` z `tests/Wpt/upstream/<area>/` do `tests/Wpt/fixtures/<category>/` a runner ho automaticky nájde.

## Pozrite si aj

- [Kompatibilita](https://phasis.inline0.dev/sk/docs/compatibility) — ako sa merajú výstupy oracle.
- [CLI referencia](https://phasis.inline0.dev/sk/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
