Fix #14
This commit is contained in:
parent
a0354816cf
commit
7aefbc3a2e
@ -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<()> {
|
||||
|
@ -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<()> {
|
||||
|
@ -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)?;
|
||||
|
Loading…
x
Reference in New Issue
Block a user