1use crate::ast::Program;
6use anyhow::Result;
7
8pub 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
16pub 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}