Add runtime to Transpiler
This commit is contained in:
parent
25e2730a0c
commit
822465cd70
@ -5,9 +5,6 @@ mod analyzer;
|
|||||||
mod ast;
|
mod ast;
|
||||||
mod writer;
|
mod writer;
|
||||||
|
|
||||||
static LUAJIT_RUNTIME: &str = include_str!("../runtime/luajit.lua");
|
|
||||||
static LUAU_RUNTIME: &str = include_str!("../runtime/luau.lua");
|
|
||||||
|
|
||||||
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");
|
||||||
|
|
||||||
@ -26,6 +23,12 @@ fn run_translator<'a, T: Transpiler<'a>>(wasm: &'a Module) {
|
|||||||
.expect("Failed to transpile");
|
.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");
|
||||||
|
}
|
||||||
|
|
||||||
fn do_translate(name: &str, file: &str) {
|
fn do_translate(name: &str, file: &str) {
|
||||||
let wasm = &parse_module(file);
|
let wasm = &parse_module(file);
|
||||||
|
|
||||||
@ -38,8 +41,8 @@ fn do_translate(name: &str, file: &str) {
|
|||||||
|
|
||||||
fn do_runtime(name: &str) {
|
fn do_runtime(name: &str) {
|
||||||
match name.to_lowercase().as_str() {
|
match name.to_lowercase().as_str() {
|
||||||
"luajit" => println!("{}", LUAJIT_RUNTIME),
|
"luajit" => run_runtime::<LuaJIT>(),
|
||||||
"luau" => println!("{}", LUAU_RUNTIME),
|
"luau" => run_runtime::<Luau>(),
|
||||||
_ => panic!("Bad runtime: {}", name),
|
_ => panic!("Bad runtime: {}", name),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -720,6 +720,8 @@ fn write_list(name: &str, len: usize, w: Writer) -> Result<()> {
|
|||||||
write!(w, "local {} = table_new({}, {})", name, len, hash)
|
write!(w, "local {} = table_new({}, {})", name, len, hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LUAJIT_RUNTIME: &str = include_str!("../../runtime/luajit.lua");
|
||||||
|
|
||||||
impl<'a> Transpiler<'a> for LuaJIT<'a> {
|
impl<'a> Transpiler<'a> for LuaJIT<'a> {
|
||||||
fn new(wasm: &'a Module) -> Self {
|
fn new(wasm: &'a Module) -> Self {
|
||||||
let arity = Arities::new(wasm);
|
let arity = Arities::new(wasm);
|
||||||
@ -727,6 +729,10 @@ impl<'a> Transpiler<'a> for LuaJIT<'a> {
|
|||||||
Self { wasm, arity }
|
Self { wasm, arity }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn runtime(writer: Writer) -> Result<()> {
|
||||||
|
write!(writer, "{}", LUAJIT_RUNTIME)
|
||||||
|
}
|
||||||
|
|
||||||
fn transpile(&self, w: Writer) -> Result<()> {
|
fn transpile(&self, w: Writer) -> Result<()> {
|
||||||
write!(w, "local rt = require(\"luajit\")")?;
|
write!(w, "local rt = require(\"luajit\")")?;
|
||||||
|
|
||||||
|
@ -709,6 +709,8 @@ fn write_list(name: &str, len: usize, w: Writer) -> Result<()> {
|
|||||||
write!(w, "local {} = table.create({})", name, len)
|
write!(w, "local {} = table.create({})", name, len)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LUAU_RUNTIME: &str = include_str!("../../runtime/luau.lua");
|
||||||
|
|
||||||
impl<'a> Transpiler<'a> for Luau<'a> {
|
impl<'a> Transpiler<'a> for Luau<'a> {
|
||||||
fn new(wasm: &'a Module) -> Self {
|
fn new(wasm: &'a Module) -> Self {
|
||||||
let arity = Arities::new(wasm);
|
let arity = Arities::new(wasm);
|
||||||
@ -716,6 +718,10 @@ impl<'a> Transpiler<'a> for Luau<'a> {
|
|||||||
Self { wasm, arity }
|
Self { wasm, arity }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn runtime(writer: Writer) -> Result<()> {
|
||||||
|
write!(writer, "{}", LUAU_RUNTIME)
|
||||||
|
}
|
||||||
|
|
||||||
fn transpile(&self, w: Writer) -> Result<()> {
|
fn transpile(&self, w: Writer) -> Result<()> {
|
||||||
write!(w, "local rt = require(script.Runtime)")?;
|
write!(w, "local rt = require(script.Runtime)")?;
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ pub trait Transpiler<'a> {
|
|||||||
where
|
where
|
||||||
Self: Sized;
|
Self: Sized;
|
||||||
|
|
||||||
|
fn runtime(writer: Writer) -> Result<()>;
|
||||||
|
|
||||||
/// # Errors
|
/// # Errors
|
||||||
/// Returns `Err` if writing to `Writer` failed.
|
/// Returns `Err` if writing to `Writer` failed.
|
||||||
fn transpile(&self, writer: Writer) -> Result<()>;
|
fn transpile(&self, writer: Writer) -> Result<()>;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user