From f02070a1b35a0bfbf8295c63c6b1ebafdb6a679d Mon Sep 17 00:00:00 2001 From: Rerumu Date: Sat, 21 May 2022 19:52:25 -0400 Subject: [PATCH] Add support for anonymous translation --- codegen-luajit/src/lib.rs | 2 +- codegen-luajit/src/translator.rs | 10 +++++++++- codegen-luau/src/lib.rs | 2 +- codegen-luau/src/translator.rs | 10 +++++++++- dev-test/fuzz_targets/luajit_translate.rs | 2 +- dev-test/fuzz_targets/luau_translate.rs | 2 +- wasm-synth/src/main.rs | 4 ++-- 7 files changed, 24 insertions(+), 8 deletions(-) diff --git a/codegen-luajit/src/lib.rs b/codegen-luajit/src/lib.rs index b28d6c0..4176ca5 100644 --- a/codegen-luajit/src/lib.rs +++ b/codegen-luajit/src/lib.rs @@ -1,6 +1,6 @@ pub static RUNTIME: &str = include_str!("../runtime/runtime.lua"); -pub use translator::translate; +pub use translator::{from_inst_list, from_module}; mod analyzer; mod backend; diff --git a/codegen-luajit/src/translator.rs b/codegen-luajit/src/translator.rs index 2f4618e..81ee5cb 100644 --- a/codegen-luajit/src/translator.rs +++ b/codegen-luajit/src/translator.rs @@ -321,7 +321,15 @@ fn write_module_start( /// # Errors /// Returns `Err` if writing to `Write` failed. -pub fn translate(wasm: &Module, type_info: &TypeInfo, w: &mut dyn Write) -> Result<()> { +pub fn from_inst_list(code: &[Instruction], type_info: &TypeInfo, w: &mut dyn Write) -> Result<()> { + Builder::new(type_info) + .with_anon(code) + .write(&mut Manager::default(), w) +} + +/// # Errors +/// Returns `Err` if writing to `Write` failed. +pub fn from_module(wasm: &Module, type_info: &TypeInfo, w: &mut dyn Write) -> Result<()> { let func_list = build_func_list(wasm, type_info); write_localize_used(&func_list, w)?; diff --git a/codegen-luau/src/lib.rs b/codegen-luau/src/lib.rs index ee3b5d9..c068708 100644 --- a/codegen-luau/src/lib.rs +++ b/codegen-luau/src/lib.rs @@ -5,7 +5,7 @@ pub static RUNTIME: &str = concat!( include_str!("../runtime/runtime.lua") ); -pub use translator::translate; +pub use translator::{from_inst_list, from_module}; mod analyzer; mod backend; diff --git a/codegen-luau/src/translator.rs b/codegen-luau/src/translator.rs index 2186719..8061ea1 100644 --- a/codegen-luau/src/translator.rs +++ b/codegen-luau/src/translator.rs @@ -321,7 +321,15 @@ fn write_module_start( /// # Errors /// Returns `Err` if writing to `Write` failed. -pub fn translate(wasm: &Module, type_info: &TypeInfo, w: &mut dyn Write) -> Result<()> { +pub fn from_inst_list(code: &[Instruction], type_info: &TypeInfo, w: &mut dyn Write) -> Result<()> { + Builder::new(type_info) + .with_anon(code) + .write(&mut Manager::default(), w) +} + +/// # Errors +/// Returns `Err` if writing to `Write` failed. +pub fn from_module(wasm: &Module, type_info: &TypeInfo, w: &mut dyn Write) -> Result<()> { let func_list = build_func_list(wasm, type_info); write_localize_used(&func_list, w)?; diff --git a/dev-test/fuzz_targets/luajit_translate.rs b/dev-test/fuzz_targets/luajit_translate.rs index 2d26570..9a98d0f 100644 --- a/dev-test/fuzz_targets/luajit_translate.rs +++ b/dev-test/fuzz_targets/luajit_translate.rs @@ -14,5 +14,5 @@ libfuzzer_sys::fuzz_target!(|module: Module| { let type_info = TypeInfo::from_module(&wasm); let sink = &mut std::io::sink(); - codegen_luajit::translate(&wasm, &type_info, sink).expect("LuaJIT should succeed"); + codegen_luajit::from_module(&wasm, &type_info, sink).expect("LuaJIT should succeed"); }); diff --git a/dev-test/fuzz_targets/luau_translate.rs b/dev-test/fuzz_targets/luau_translate.rs index 17c36f0..12a8dda 100644 --- a/dev-test/fuzz_targets/luau_translate.rs +++ b/dev-test/fuzz_targets/luau_translate.rs @@ -14,5 +14,5 @@ libfuzzer_sys::fuzz_target!(|module: Module| { let type_info = TypeInfo::from_module(&wasm); let sink = &mut std::io::sink(); - codegen_luau::translate(&wasm, &type_info, sink).expect("Luau should succeed"); + codegen_luau::from_module(&wasm, &type_info, sink).expect("Luau should succeed"); }); diff --git a/wasm-synth/src/main.rs b/wasm-synth/src/main.rs index 04402d6..83ed533 100644 --- a/wasm-synth/src/main.rs +++ b/wasm-synth/src/main.rs @@ -23,8 +23,8 @@ fn run_translator(wasm: &Module, runtime: &str, translate: Translate) -> Result< fn do_translate(name: &str, file: &str) { let wasm = &parse_module(file); let result = match name.to_lowercase().as_str() { - "luajit" => run_translator(wasm, codegen_luajit::RUNTIME, codegen_luajit::translate), - "luau" => run_translator(wasm, codegen_luau::RUNTIME, codegen_luau::translate), + "luajit" => run_translator(wasm, codegen_luajit::RUNTIME, codegen_luajit::from_module), + "luau" => run_translator(wasm, codegen_luau::RUNTIME, codegen_luau::from_module), _ => panic!("Bad language: {name}"), };