This commit is contained in:
Rerumu 2022-06-25 17:41:03 -04:00
parent a0354816cf
commit 7aefbc3a2e
3 changed files with 32 additions and 18 deletions

View File

@ -6,7 +6,7 @@ use std::{
use wasm_ast::module::{Module, TypeInfo};
use wast::{
core::{Expression, Instruction},
AssertExpression, WastExecute, WastInvoke,
AssertExpression, WastExecute, WastInvoke, Wat,
};
use target::{get_name_from_id, Target};
@ -72,7 +72,7 @@ impl Target for LuaJIT {
writeln!(w)
}
fn write_assert_trap(data: &WastExecute, w: &mut dyn Write) -> Result<()> {
fn write_assert_trap(data: &mut WastExecute, w: &mut dyn Write) -> Result<()> {
match data {
WastExecute::Invoke(data) => {
Self::write_call_of("assert_trap", data, w)?;
@ -85,16 +85,22 @@ impl Target for LuaJIT {
write!(w, r#"loaded["{name}"].global_list["{global}"].value"#)?;
writeln!(w, ", nil)")
}
WastExecute::Wat(_) => {
// FIXME: Assert the `start` function
WastExecute::Wat(data) => {
let bytes = match data {
Wat::Module(ast) => ast.encode().unwrap(),
Wat::Component(_) => unimplemented!(),
};
let data = Module::from_data(&bytes);
Ok(())
write!(w, "assert_trap((function() ")?;
codegen_luajit::from_module_untyped(&data, w)?;
writeln!(w, " end)(), linked)")
}
}
}
fn write_assert_return(
data: &WastExecute,
data: &mut WastExecute,
result: &[AssertExpression],
w: &mut dyn Write,
) -> Result<()> {

View File

@ -6,7 +6,7 @@ use std::{
use wasm_ast::module::{Module, TypeInfo};
use wast::{
core::{Expression, Instruction},
AssertExpression, WastExecute, WastInvoke,
AssertExpression, WastExecute, WastInvoke, Wat,
};
use target::{get_name_from_id, Target};
@ -85,7 +85,7 @@ impl Target for Luau {
writeln!(w)
}
fn write_assert_trap(data: &WastExecute, w: &mut dyn Write) -> Result<()> {
fn write_assert_trap(data: &mut WastExecute, w: &mut dyn Write) -> Result<()> {
match data {
WastExecute::Invoke(data) => {
Self::write_call_of("assert_trap", data, w)?;
@ -98,16 +98,22 @@ impl Target for Luau {
write!(w, r#"loaded["{name}"].global_list["{global}"].value"#)?;
writeln!(w, ", nil)")
}
WastExecute::Wat(_) => {
// FIXME: Assert the `start` function
WastExecute::Wat(data) => {
let bytes = match data {
Wat::Module(ast) => ast.encode().unwrap(),
Wat::Component(_) => unimplemented!(),
};
let data = Module::from_data(&bytes);
Ok(())
write!(w, "assert_trap((function() ")?;
codegen_luau::from_module_untyped(&data, w)?;
writeln!(w, " end)(), linked)")
}
}
}
fn write_assert_return(
data: &WastExecute,
data: &mut WastExecute,
result: &[AssertExpression],
w: &mut dyn Write,
) -> Result<()> {

View File

@ -61,10 +61,10 @@ pub trait Target: Sized {
fn write_invoke(data: &WastInvoke, w: &mut dyn Write) -> Result<()>;
fn write_assert_trap(data: &WastExecute, w: &mut dyn Write) -> Result<()>;
fn write_assert_trap(data: &mut WastExecute, w: &mut dyn Write) -> Result<()>;
fn write_assert_return(
data: &WastExecute,
data: &mut WastExecute,
result: &[AssertExpression],
w: &mut dyn Write,
) -> Result<()>;
@ -94,11 +94,13 @@ pub trait Target: Sized {
WastDirective::Invoke(data) => {
Self::write_invoke(&data, w)?;
}
WastDirective::AssertTrap { exec, .. } => {
Self::write_assert_trap(&exec, w)?;
WastDirective::AssertTrap { mut exec, .. } => {
Self::write_assert_trap(&mut exec, w)?;
}
WastDirective::AssertReturn { exec, results, .. } => {
Self::write_assert_return(&exec, &results, w)?;
WastDirective::AssertReturn {
mut exec, results, ..
} => {
Self::write_assert_return(&mut exec, &results, w)?;
}
WastDirective::AssertExhaustion { call, .. } => {
Self::write_assert_exhaustion(&call, w)?;