Unify tool error handling

This commit is contained in:
Rerumu 2022-04-27 13:22:05 -04:00
parent e4dc725ec0
commit aa293ed7e1

View File

@ -3,7 +3,7 @@ use std::io::{Result, Write};
use parity_wasm::{deserialize_file, elements::Module}; use parity_wasm::{deserialize_file, elements::Module};
use wasm_ast::builder::TypeInfo; use wasm_ast::builder::TypeInfo;
type Translator = fn(&Module, &TypeInfo, &mut dyn Write) -> Result<()>; type Translate = fn(&Module, &TypeInfo, &mut dyn Write) -> Result<()>;
fn parse_module(name: &str) -> Module { fn parse_module(name: &str) -> Module {
let wasm = deserialize_file(name).expect("Failed to parse Wasm file"); let wasm = deserialize_file(name).expect("Failed to parse Wasm file");
@ -11,23 +11,24 @@ fn parse_module(name: &str) -> Module {
wasm.parse_names().unwrap_or_else(|v| v.1) wasm.parse_names().unwrap_or_else(|v| v.1)
} }
fn run_translator(wasm: &Module, runtime: &str, translator: Translator) { fn run_translator(wasm: &Module, runtime: &str, translate: Translate) -> Result<()> {
let pipe = std::io::stdout(); let pipe = std::io::stdout();
let lock = &mut pipe.lock(); let lock = &mut pipe.lock();
let type_info = TypeInfo::from_module(wasm); let type_info = TypeInfo::from_module(wasm);
write!(lock, "local rt = (function() {runtime} end)() ").unwrap(); write!(lock, "local rt = (function() {runtime} end)() ")?;
translator(wasm, &type_info, lock).unwrap(); translate(wasm, &type_info, lock)
} }
fn do_translate(name: &str, file: &str) { fn do_translate(name: &str, file: &str) {
let wasm = &parse_module(file); let wasm = &parse_module(file);
let result = match name.to_lowercase().as_str() {
match name.to_lowercase().as_str() {
"luajit" => run_translator(wasm, codegen_luajit::RUNTIME, codegen_luajit::translate), "luajit" => run_translator(wasm, codegen_luajit::RUNTIME, codegen_luajit::translate),
"luau" => run_translator(wasm, codegen_luau::RUNTIME, codegen_luau::translate), "luau" => run_translator(wasm, codegen_luau::RUNTIME, codegen_luau::translate),
_ => panic!("Bad language: {name}"), _ => panic!("Bad language: {name}"),
} };
result.expect("Failed to translate file");
} }
fn do_help() { fn do_help() {