//! Virtuelle Maschine für Terminal Basic (TBVM). //! //! Eigene Stack-basierte Bytecode-VM (Entscheidung siehe PLAN.md, Abschnitt //! „VM-/Runtime-Optionen"). Kernanforderungen: //! - Serialisierbares Bytecode-Format (`.tbc`) als Compiler-Ziel //! - Unterbrechbar/wiederaufnehmbar für Debugger (Einzelschritt, Breakpoints) //! und für die ereignisgesteuerte Forms-Hauptschleife //! - BASIC-Fehlersemantik (`ON ERROR GOTO`, `RESUME`, `ERR`/`ERL`) //! - `GOSUB`/`RETURN` neben regulären Prozeduraufrufen pub mod bytecode; pub mod codegen; pub mod interp; use tb_frontend::Diagnostic; /// Komplette Übersetzung: Quelltext → Bytecode-Modul. /// Bei Diagnosen (Compile-Fehlern) wird kein Kompilat erzeugt. pub fn compile_source( module_name: &str, source: &str, ) -> Result> { let analysis = tb_frontend::analyze_source(module_name, source); if !analysis.diagnostics.is_empty() { return Err(analysis.diagnostics); } let hir = analysis.hir.expect("diagnose-frei, aber kein HIR"); Ok(codegen::compile(&hir)) }