
# Täpsem teave

Sisemised üksikasjad. Kui manustate Phasis, võite selle jaotise vahele jätta. Kui muudate mootorit, on kõik siinsed lehed olulised.

## Lehed

- **[Arhitektuur](https://phasis.inline0.dev/et/docs/advanced/architecture)** — kuidas lähtekoodist saab täitmine: leksikaalne analüüs → parser → AST → baidikoodi kompileerimine → baidikoodi virtuaalmasin koos puupõhise interpretaatori varuteega. Moodulilaadija, käituskeskkonnad ja `Phasis\Engine` roll käituskeskkonna piirina.
- **[Baidikoodi virtuaalmasin](https://phasis.inline0.dev/et/docs/advanced/bytecode-vm)** — opkoodide hulk, väljakutsesilmus, inline-vahemälud, JsToPhpi lähtekoodi transpileerimise kiirtee, funktsiooni kuju heuristik canSkipEnvAlloc ning millal liiguvad kutsed baidikoodi teed ja millal puupõhisesse interpretaatorisse.
- **[Võrdlustestid](https://phasis.inline0.dev/et/docs/advanced/benchmarks)** — praegused `bench/` näitajad, nende tõlgendamine, miks ~100× V8 on puupõhiste interpretaatorite püsiv jõudluspiir ja kuidas vahet vähendada.
- **[Testimine](https://phasis.inline0.dev/et/docs/advanced/testing)** — võrdlusmudel. Iga muudatust kontrollitakse kolme sõltumatu võrdlusallikaga: Node.js (V8 spetsifikatsiooni tõeväärtus), test262 ja populaarsete teekide baiditäpsuse komplekt.

## Kaastöö tegemise tavad

- **Ära muuda mootori tuuma ilma mõjuva põhjuseta.** Kõik asukohas `src/Runtime/`, `src/Bytecode/`, `src/Lexer/`, `src/Parser/`, `src/Regex/` kuulub test262 kriitilisele rajale. Selle muutmine ilma vastava test262 kontrollita toob tõenäoliselt kaasa regressioone. Sisseehitatud funktsioonid (`src/BuiltIn/`) on ohutumad, sest iga funktsiooni test262 alamkomplekt tuvastab rikked kohapeal.
- **Kasuta korraldamiseks trait'e, mitte klasse.** Kui fail ületab umbes 2K rida, jaga see kõrvalkataloogi trait-failideks (`src/BuiltIn/Temporal/`, `src/Runtime/Parts/` jne), selle asemel et luua uusi klasse — nii töötavad `self::` otsingud edasi ja privaatmeetodi API liides ei katke.
- **Käivita `bin/verify-all` enne koodi üleslaadimist lokaalselt.** See käivitab PHPStan, PHPCS, kõik PHPUnit komplektid (unit, oracle, popular, wpt) ja võrdlusregressiooni. CI käivitab WPT ja popular-komplektid muudatuste korral asukohas `src/`; täielik test262 maatriks käivitatakse käsitsi, seega vali mõjutatud test262 kategooriad ja käivita need lokaalselt.
- **Iga Web API lisamise jaoks lisa WPT testjuht.** Tõsta `.any.js` asukohast `tests/Wpt/upstream/<area>/` asukohta `tests/Wpt/fixtures/<category>/` ning käitaja leiab selle automaatselt.

## Vt ka

- [Ühilduvus](https://phasis.inline0.dev/et/docs/compatibility) — kuidas võrdlusväljundeid mõõdetakse.
- [CLI viide](https://phasis.inline0.dev/et/docs/cli) — `bin/phasis`, `bin/test262`, `bin/wpt`.
