# Tasks — Phase 2: Bytecode und VM ## 1. Feindesign-Dokumentation (Eingangsaufgabe aus Phase 0) - [x] 1.1 Zahlenkonvertierungs-Matrix (implizite Casts, Banker's Rounding, Überlauf, `/` vs. `\`/`MOD`, logische Operatoren, CURRENCY, `^`-Regel, SINGLE/DOUBLE-Textdarstellung) als Tabelle in docs/tbvm-design.md schreiben; jede Zelle mit Fundstelle in der Original-Hilfe belegen, unklare Zellen als `TODO verify` markieren — verifizierbar: Abschnitt existiert, keine Zelle ohne Beleg oder TODO-Marke - [x] 1.2 Opcode-Satz vollständig in docs/tbvm-design.md ausformulieren (Gruppen, Encoding, Operanden) und `STOP`/`CONT`-Runner-Entscheidung sowie Fehlerbehandlungs-Scoping (design.md D4–D6) dort festhalten — verifizierbar: „Offene Punkte"-Abschnitt in tbvm-design.md ist leer ## 2. Frontend: Typisiertes HIR - [x] 2.1 HIR-Datenmodell in `tb-frontend` definieren (Slots, typisierte Ausdrücke, explizite Konvertierungsknoten, Prozedur-/Modulstruktur, Quellzeilen-Anker) — verifizierbar: `cargo check` und Doku-Kommentare je Knotentyp - [x] 2.2 Sema zum Lowering-Pass umbauen: `analyze_source` liefert zusätzlich HIR; Konstantenfaltung, `DEFtype`, implizite Konvertierungen materialisieren — verifizierbar: alle 33 bestehenden Frontend-Tests bleiben grün - [x] 2.3 HIR-Tests: diagnose-freie Korpusmodule liefern vollständiges HIR; Konvertierungsknoten-Szenario (`d# = i% + 1.5`) als Unit-Test — verifizierbar: neue Tests in `crates/tb-frontend/tests` grün ## 3. Bytecode und Serialisierung - [x] 3.1 Opcode-Definitionen und Modulstruktur (Konstantenpool, Typtabelle, modul-qualifizierte Prozedurtabelle, DATA-Segment, Zeilentabelle) in `tb-vm::bytecode` implementieren — verifizierbar: Unit-Tests für Encoding/Decoding einzelner Opcodes - [x] 3.2 `.tbc`-Writer/Reader (Magic, Formatversion, Abschnittstabelle) implementieren — verifizierbar: Roundtrip-Test (schreiben → laden → identisch) und Ablehnungstest für unbekannte Formatversion ## 4. Codegenerator - [x] 4.1 Ausdrucks-Codegen (Literale, Slots, Arithmetik, Vergleiche, logische Operatoren, Konvertierungsknoten, String-Konkatenation) — verifizierbar: Unit-Tests HIR-Ausdruck → erwartete Opcode-Folge - [x] 4.2 Kontrollfluss-Codegen (`IF`, `SELECT CASE`, `FOR`, `DO`, `WHILE`, `GOTO`/`GOSUB`/`ON GOTO`, `EXIT`, Labels/Zeilennummern) mit Fixup-Listen für Vorwärtsziele — verifizierbar: Unit-Tests je Konstrukt - [x] 4.3 Prozedur-Codegen (SUB/FUNCTION/`DEF FN`, BYREF-/BYVAL-Argumente, `STATIC`, Frames/Locals), `DIM`/Arrays/UDTs, `DATA`-Segment und Zeilentabelle emittieren — verifizierbar: Unit-Tests und `cargo test -p tb-vm` grün ## 5. Interpreter (TBVM) - [x] 5.1 VM-Grundgerüst: Werte-Modell, Operandenstack, Frames, `step()`-Schleife mit Tick-Flag-Wort an Anweisungsgrenzen — verifizierbar: Ausdrucks-Programme laufen in Unit-Tests - [x] 5.2 Kontrollfluss und `GOSUB`-Stack pro Frame inkl. Fehler 3 („RETURN without GOSUB") — verifizierbar: kontrollfluss.bas läuft im Capture-Host mit korrekter Ausgabe - [x] 5.3 Prozeduraufrufe (BYREF-Rückwirkung, Klammer-BYVAL, `STATIC`, Rekursion, `DEF FN` im Modulkontext) — verifizierbar: Unit-Tests der Spec-Szenarien aus vm-ausfuehrung - [x] 5.4 `DATA`/`READ`/`RESTORE` inkl. Fehler 4 und 13 — verifizierbar: Unit-Tests der Spec-Szenarien - [x] 5.5 Fehlerbehandlung: Handler-Zustand (modul-global + Frame-lokal), Unwinding, `RESUME`-Varianten, `ERR`/`ERL`, `ERROR n`, Fehler im Handler fatal — verifizierbar: alle Szenarien aus vm-fehlerbehandlung als Tests grün - [x] 5.6 Unterbrechbarkeit: Breakpoints auf (Modul, Zeile), Einzelschritt, Variableninspektion im Halt, Abbruchwunsch — verifizierbar: Unit-Tests treiben die VM per `step()` und prüfen Halt/Inspektion - [x] 5.7 Programmende: `END`/`SYSTEM`/Programmende vs. `STOP` mit Meldung und Exit-Code-Unterscheidung — verifizierbar: Runner-Test prüft Exit-Codes und Meldung ## 6. Konsolen-Basisbibliothek (`tb-runtime`-Scheibe) - [x] 6.1 `Host`-Trait definieren; Konsolen-Host und Capture-Host implementieren — verifizierbar: Unit-Test zeichnet Ausgabe byte-genau auf - [x] 6.2 Builtin-Dispatch-Tabelle + `CALL_BUILTIN`-ABI (Argumente auf dem Stack) in VM und Runtime verdrahten — verifizierbar: `LEN`-Aufruf läuft über die Tabelle (Spec-Szenario) - [x] 6.3 PRINT-Formatierung: Zahlendarstellung je Typ, Vorzeichenspalte, nachgestelltes Leerzeichen, `;`/`,`-Semantik, 14-Zeichen-Druckzonen — verifizierbar: printzahlen.bas und printzonen.bas byte-genau korrekt - [x] 6.4 Korpus-Stringfunktionen (`LEN`, `LEFT$`, `RIGHT$`, `MID$`, `INSTR`, `UCASE$`, `LCASE$`, `STRING$`, `SPACE$`, `CHR$`, `ASC`, `STR$`, `VAL`) mit Randfällen des Vorbilds — verifizierbar: strings.bas byte-genau korrekt plus Randfall-Unit-Tests (`VAL`-Präfixlesen, `STR$`-Leerzeichen, `ASC("")` → Fehler 5) ## 7. CLI und Test-Harness - [x] 7.1 `tbc run `: kompilieren, `.tbc` in Memory ausführen, Konsolen-Host; Diagnosen bei Compile-Fehler, Exit-Codes nach D6 — verifizierbar: `tbc run tests/compat/hello.bas` druckt `Hallo, Welt!` - [x] 7.2 Harness in `tests/`: alle `tests/compat/*.bas` kompilieren, im Capture-Host ausführen, byte-genau gegen `.out` vergleichen; bei Abweichung Datei/Zeile/Soll/Ist nennen — verifizierbar: `cargo test` führt den kompletten Korpus aus - [x] 7.3 Korpus erweitern: Konvertierungsmatrix-Programm, Fehlerbehandlung (`ON ERROR`/`RESUME`/`ERR`/`ERL`), BYREF/BYVAL-Programm mit dokumentierter Sollausgabe (Belege bzw. `TODO verify`-Konvention) — verifizierbar: neue `.bas`/`.out`-Paare laufen im Harness grün ## 8. Benchmarks und Abschluss - [x] 8.1 Compile-Budget-Harness früh aufsetzen: Generator für ~50k-Zeilen-Projekt + Criterion-Bench; Budgetvergleich (< 1 s Projekt, < 50 ms Modul) — verifizierbar: `cargo bench` weist die Zeiten aus - [x] 8.2 VM-Durchsatz-Benches (Schleifen, Strings); Ergebnisse und Benchmark-Stand in docs/tbvm-design.md „Performance" festhalten — verifizierbar: Abschnitt enthält Messwerte mit Datum - [x] 8.3 Meilenstein-Verifikation und Doku-Abschluss: kompletter Korpus grün via `cargo test`, docs/sprachreferenz.md um Phase-2-Festlegungen ergänzt (Rundung, `STOP`-Verhalten), PLAN.md-Phase-2-Haken gesetzt — verifizierbar: alle Checkboxen der Phase in PLAN.md abgehakt, Testsuite grün