Skip to main content

pascal/
wasm.rs

1//! WebAssembly code generation stub (WAT output).
2//!
3//! Full WASM backend is future work; this emits a minimal module skeleton.
4
5use crate::ast::Program;
6use anyhow::Result;
7
8/// Generate WebAssembly Text Format (WAT) skeleton from a Pascal program.
9pub fn compile_to_wat(program: &Program) -> Result<String> {
10    Ok(format!(
11        "(module\n  ;; Generated from Pascal program '{}'\n  (func $main (export \"main\")\n    ;; TODO: translate statements\n  )\n)\n",
12        program.name
13    ))
14}
15
16/// Generate WAT from Pascal source.
17pub fn compile_source_to_wat(source: &str) -> Result<String> {
18    let mut parser = crate::parser::Parser::new(source);
19    let program = parser.parse_program()?;
20    compile_to_wat(&program)
21}
22
23#[cfg(test)]
24mod tests {
25    use super::*;
26
27    #[test]
28    fn test_compile_to_wat_skeleton() {
29        let src = "program Hello;\nbegin\nend.";
30        let wat = compile_source_to_wat(src).unwrap();
31        assert!(wat.contains("module"));
32        assert!(wat.contains("Hello"));
33    }
34}