Fix #14
This commit is contained in:
parent
a0354816cf
commit
7aefbc3a2e
@ -6,7 +6,7 @@ use std::{
|
|||||||
use wasm_ast::module::{Module, TypeInfo};
|
use wasm_ast::module::{Module, TypeInfo};
|
||||||
use wast::{
|
use wast::{
|
||||||
core::{Expression, Instruction},
|
core::{Expression, Instruction},
|
||||||
AssertExpression, WastExecute, WastInvoke,
|
AssertExpression, WastExecute, WastInvoke, Wat,
|
||||||
};
|
};
|
||||||
|
|
||||||
use target::{get_name_from_id, Target};
|
use target::{get_name_from_id, Target};
|
||||||
@ -72,7 +72,7 @@ impl Target for LuaJIT {
|
|||||||
writeln!(w)
|
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 {
|
match data {
|
||||||
WastExecute::Invoke(data) => {
|
WastExecute::Invoke(data) => {
|
||||||
Self::write_call_of("assert_trap", data, w)?;
|
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"#)?;
|
write!(w, r#"loaded["{name}"].global_list["{global}"].value"#)?;
|
||||||
writeln!(w, ", nil)")
|
writeln!(w, ", nil)")
|
||||||
}
|
}
|
||||||
WastExecute::Wat(_) => {
|
WastExecute::Wat(data) => {
|
||||||
// FIXME: Assert the `start` function
|
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(
|
fn write_assert_return(
|
||||||
data: &WastExecute,
|
data: &mut WastExecute,
|
||||||
result: &[AssertExpression],
|
result: &[AssertExpression],
|
||||||
w: &mut dyn Write,
|
w: &mut dyn Write,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
@ -6,7 +6,7 @@ use std::{
|
|||||||
use wasm_ast::module::{Module, TypeInfo};
|
use wasm_ast::module::{Module, TypeInfo};
|
||||||
use wast::{
|
use wast::{
|
||||||
core::{Expression, Instruction},
|
core::{Expression, Instruction},
|
||||||
AssertExpression, WastExecute, WastInvoke,
|
AssertExpression, WastExecute, WastInvoke, Wat,
|
||||||
};
|
};
|
||||||
|
|
||||||
use target::{get_name_from_id, Target};
|
use target::{get_name_from_id, Target};
|
||||||
@ -85,7 +85,7 @@ impl Target for Luau {
|
|||||||
writeln!(w)
|
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 {
|
match data {
|
||||||
WastExecute::Invoke(data) => {
|
WastExecute::Invoke(data) => {
|
||||||
Self::write_call_of("assert_trap", data, w)?;
|
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"#)?;
|
write!(w, r#"loaded["{name}"].global_list["{global}"].value"#)?;
|
||||||
writeln!(w, ", nil)")
|
writeln!(w, ", nil)")
|
||||||
}
|
}
|
||||||
WastExecute::Wat(_) => {
|
WastExecute::Wat(data) => {
|
||||||
// FIXME: Assert the `start` function
|
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(
|
fn write_assert_return(
|
||||||
data: &WastExecute,
|
data: &mut WastExecute,
|
||||||
result: &[AssertExpression],
|
result: &[AssertExpression],
|
||||||
w: &mut dyn Write,
|
w: &mut dyn Write,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
@ -61,10 +61,10 @@ pub trait Target: Sized {
|
|||||||
|
|
||||||
fn write_invoke(data: &WastInvoke, w: &mut dyn Write) -> Result<()>;
|
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(
|
fn write_assert_return(
|
||||||
data: &WastExecute,
|
data: &mut WastExecute,
|
||||||
result: &[AssertExpression],
|
result: &[AssertExpression],
|
||||||
w: &mut dyn Write,
|
w: &mut dyn Write,
|
||||||
) -> Result<()>;
|
) -> Result<()>;
|
||||||
@ -94,11 +94,13 @@ pub trait Target: Sized {
|
|||||||
WastDirective::Invoke(data) => {
|
WastDirective::Invoke(data) => {
|
||||||
Self::write_invoke(&data, w)?;
|
Self::write_invoke(&data, w)?;
|
||||||
}
|
}
|
||||||
WastDirective::AssertTrap { exec, .. } => {
|
WastDirective::AssertTrap { mut exec, .. } => {
|
||||||
Self::write_assert_trap(&exec, w)?;
|
Self::write_assert_trap(&mut exec, w)?;
|
||||||
}
|
}
|
||||||
WastDirective::AssertReturn { exec, results, .. } => {
|
WastDirective::AssertReturn {
|
||||||
Self::write_assert_return(&exec, &results, w)?;
|
mut exec, results, ..
|
||||||
|
} => {
|
||||||
|
Self::write_assert_return(&mut exec, &results, w)?;
|
||||||
}
|
}
|
||||||
WastDirective::AssertExhaustion { call, .. } => {
|
WastDirective::AssertExhaustion { call, .. } => {
|
||||||
Self::write_assert_exhaustion(&call, w)?;
|
Self::write_assert_exhaustion(&call, w)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user