From bfb900f0443aa56c85f31ff32294ba66be337e9e Mon Sep 17 00:00:00 2001 From: Rerumu Date: Wed, 27 Apr 2022 04:33:47 -0400 Subject: [PATCH] Fix main program --- wasm-synth/src/main.rs | 44 ++++++++++++------------------------------ 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/wasm-synth/src/main.rs b/wasm-synth/src/main.rs index 5c1dc6d..c61f0b6 100644 --- a/wasm-synth/src/main.rs +++ b/wasm-synth/src/main.rs @@ -1,8 +1,9 @@ -use parity_wasm::{deserialize_file, elements::Module}; +use std::io::{Result, Write}; -use codegen_luajit::gen::Generator as LuaJIT; -use codegen_luau::gen::Generator as Luau; -use wasm_ast::writer::Transpiler; +use parity_wasm::{deserialize_file, elements::Module}; +use wasm_ast::builder::TypeInfo; + +type Translator = fn(&Module, &TypeInfo, &mut dyn Write) -> Result<()>; fn parse_module(name: &str) -> Module { let wasm = deserialize_file(name).expect("Failed to parse Wasm file"); @@ -10,42 +11,26 @@ fn parse_module(name: &str) -> Module { wasm.parse_names().unwrap_or_else(|v| v.1) } -fn run_translator<'a, T: Transpiler<'a>>(wasm: &'a Module) { - let module = T::new(wasm); - let output = std::io::stdout(); +fn run_translator(wasm: &Module, runtime: &str, translator: Translator) { + let mut pipe = std::io::stdout().lock(); + let type_info = TypeInfo::from_module(wasm); - module - .transpile(&mut output.lock()) - .expect("Failed to transpile"); -} - -fn run_runtime<'a, T: Transpiler<'a>>() { - let output = std::io::stdout(); - - T::runtime(&mut output.lock()).expect("Failed to fetch runtime"); + write!(pipe, "local rt = (function() {runtime} end)() ").unwrap(); + translator(wasm, &type_info, &mut pipe).unwrap(); } fn do_translate(name: &str, file: &str) { let wasm = &parse_module(file); match name.to_lowercase().as_str() { - "luajit" => run_translator::(wasm), - "luau" => run_translator::(wasm), + "luajit" => run_translator(wasm, codegen_luajit::RUNTIME, codegen_luajit::translate), + "luau" => run_translator(wasm, codegen_luau::RUNTIME, codegen_luau::translate), _ => panic!("Bad language: {name}"), } } -fn do_runtime(name: &str) { - match name.to_lowercase().as_str() { - "luajit" => run_runtime::(), - "luau" => run_runtime::(), - _ => panic!("Bad runtime: {name}"), - } -} - fn do_help() { println!("usage: program translate "); - println!(" or: program runtime "); println!(" or: program help"); } @@ -54,11 +39,6 @@ fn main() { match args.next().as_deref().unwrap_or("help") { "help" => do_help(), - "runtime" => { - let lang = args.next().expect("No runtime specified"); - - do_runtime(&lang); - } "translate" => { let lang = args.next().expect("No language specified"); let file = args.next().expect("No file specified");