//! 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;

pub mod project;
pub mod project_io;
pub use project::compile_project;
use tb_frontend::{source::SourceUnit, Diagnostic};

/// Einmodul-API auf derselben Pipeline wie vollständige Projekte.
pub fn compile_source(
    module_name: &str,
    source: &str,
) -> Result<bytecode::CompiledModule, Vec<Diagnostic>> {
    compile_source_with_forms(
        module_name,
        source,
        &tb_frontend::forms::FormCatalog::default(),
    )
}

pub fn compile_source_with_forms(
    module_name: &str,
    source: &str,
    forms: &tb_frontend::forms::FormCatalog,
) -> Result<bytecode::CompiledModule, Vec<Diagnostic>> {
    compile_project(
        module_name,
        &[SourceUnit::new(module_name, module_name, source)],
        forms,
        &[],
    )
}
