summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock123
-rw-r--r--Cargo.toml6
-rw-r--r--crates/cli/src/engine_flags.rs2
-rw-r--r--crates/cli/src/load.rs6
-rw-r--r--crates/cli/src/value_parse.rs4
-rw-r--r--crates/cli/src/wast_runner.rs41
-rw-r--r--crates/tinywasm/tests/generated/wasm-custom-page-sizes.csv2
-rw-r--r--crates/tinywasm/tests/test-wast.rs2
8 files changed, 111 insertions, 75 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 71eca9f..6e262dd 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -99,15 +99,15 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "bitflags"
-version = "2.13.0"
+version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
+checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da"
[[package]]
name = "bstr"
-version = "1.12.3"
+version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79"
+checksum = "1f7dc094d718f2e1c1559ad110e27eeaae14a5465d3d56dd6dbd793079fbd530"
dependencies = [
"memchr",
"regex-automata",
@@ -128,9 +128,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
[[package]]
name = "cc"
-version = "1.2.67"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38"
+checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -171,9 +171,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.6.1"
+version = "4.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51"
+checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7"
dependencies = [
"clap_builder",
"clap_derive",
@@ -181,9 +181,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.6.0"
+version = "4.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f"
+checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b"
dependencies = [
"anstream",
"anstyle",
@@ -202,14 +202,14 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.6.1"
+version = "4.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9"
+checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061"
dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn",
+ "syn 3.0.3",
]
[[package]]
@@ -363,9 +363,9 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "2.4.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
+checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223"
[[package]]
name = "find-msvc-tools"
@@ -503,9 +503,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "libc"
-version = "0.2.186"
+version = "0.2.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66"
+checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
[[package]]
name = "libm"
@@ -634,18 +634,18 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.106"
+version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
+checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.46"
+version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368"
+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
@@ -678,9 +678,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.13.0"
+version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2"
+checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d"
dependencies = [
"aho-corasick",
"memchr",
@@ -690,9 +690,9 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.4.15"
+version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db"
+checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad"
dependencies = [
"aho-corasick",
"memchr",
@@ -735,9 +735,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
[[package]]
name = "serde"
-version = "1.0.228"
+version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
+checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
dependencies = [
"serde_core",
"serde_derive",
@@ -745,29 +745,29 @@ dependencies = [
[[package]]
name = "serde_core"
-version = "1.0.228"
+version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
+checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.228"
+version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
+checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 3.0.3",
]
[[package]]
name = "serde_json"
-version = "1.0.150"
+version = "1.0.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9"
+checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
dependencies = [
"itoa",
"memchr",
@@ -790,9 +790,20 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
[[package]]
name = "syn"
-version = "2.0.118"
+version = "2.0.119"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422"
+checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
dependencies = [
"proc-macro2",
"quote",
@@ -829,22 +840,22 @@ checksum = "8f50febec83f5ee1df3015341d8bd429f2d1cc62bcba7ea2076759d315084683"
[[package]]
name = "thiserror"
-version = "2.0.18"
+version = "2.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
+checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "2.0.18"
+version = "2.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
+checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 3.0.3",
]
[[package]]
@@ -961,9 +972,9 @@ dependencies = [
[[package]]
name = "wasm-encoder"
-version = "0.253.0"
+version = "0.254.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59972d6cd272259de647b7c1f1912e45e289c75ffd4be04e10695507cd7e1b59"
+checksum = "09480d646178e5fdd12bb06e812d0af9a3a191dbc9cd697fdc86687beade7393"
dependencies = [
"leb128fmt",
"wasmparser",
@@ -971,9 +982,9 @@ dependencies = [
[[package]]
name = "wasm-testsuite"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e6dc75ed48aabddafbb334a698e6d9105cef4d1d3d39e89c4e95561ee0b86ed"
+checksum = "20b0505f4e3b470f17244fcf0459c1f82a63e5fe093bed5196351998ffe28091"
dependencies = [
"include_dir",
"wast",
@@ -981,9 +992,9 @@ dependencies = [
[[package]]
name = "wasmparser"
-version = "0.253.0"
+version = "0.254.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19db11f87d2486580e1e8b6f494c54df7e0566b87d0b599db843c24019667339"
+checksum = "d5769a29f799fbab136aaf65b4fe5384cd7d93fe6fc9ba0dcb6c8382a1f16e27"
dependencies = [
"bitflags",
"indexmap",
@@ -992,9 +1003,9 @@ dependencies = [
[[package]]
name = "wast"
-version = "253.0.0"
+version = "254.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3264542f8965c5d84fb1085d924bfba9a6314bb228eff13a2de14d7627664d0"
+checksum = "e7ed4dfc8f6b9fc38b231065e2cdfbf7359af5ab945990abf09658dcc63c3e32"
dependencies = [
"bumpalo",
"leb128fmt",
@@ -1005,9 +1016,9 @@ dependencies = [
[[package]]
name = "wat"
-version = "1.253.0"
+version = "1.254.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bfc5ce906144200c972ec617470aa35bd847472e170b26dde3e80541c674055"
+checksum = "7127f7f9b8f127c879991cecd35f494e4628bae1b0874c681414d8d8831e952c"
dependencies = [
"wast",
]
@@ -1060,22 +1071,22 @@ dependencies = [
[[package]]
name = "zerocopy"
-version = "0.8.54"
+version = "0.8.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19"
+checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.54"
+version = "0.8.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5"
+checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.119",
]
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 149ccd0..5496a01 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,9 +18,9 @@ pretty_env_logger="0.5"
serde_json={version="1.0"}
serde={version="1.0", features=["derive"]}
wasm-testsuite={version="0.7"}
-wasmparser={version="0.253", default-features=false}
-wast="253"
-wat="1.253"
+wasmparser={version="0.254", default-features=false}
+wast="254"
+wat="1.254"
[workspace.package]
version="0.9.1"
diff --git a/crates/cli/src/engine_flags.rs b/crates/cli/src/engine_flags.rs
index 2965a3e..c8df1fe 100644
--- a/crates/cli/src/engine_flags.rs
+++ b/crates/cli/src/engine_flags.rs
@@ -91,7 +91,7 @@ impl EngineFlags {
MemoryBackendArg::Vec => tinywasm::MemoryBackend::vec(),
MemoryBackendArg::Paged => {
if self.memory_page_chunk_size == 0 {
- bail!("--memory-page-chunk-size must be greater than zero")
+ bail!("--memory-page-chunk-size must be greater than zero");
}
tinywasm::MemoryBackend::paged(self.memory_page_chunk_size)
}
diff --git a/crates/cli/src/load.rs b/crates/cli/src/load.rs
index d16469b..7e6fc09 100644
--- a/crates/cli/src/load.rs
+++ b/crates/cli/src/load.rs
@@ -25,14 +25,14 @@ pub fn load_module(input: &str) -> Result<LoadedModule> {
pub fn load_compilable_module(input: &str) -> Result<Module> {
let loaded = load_module(input)?;
if loaded.format == InputFormat::Twasm {
- bail!("input is already a twasm archive; use `run`, `dump`, or `inspect` instead")
+ bail!("input is already a twasm archive; use `run`, `dump`, or `inspect` instead");
}
Ok(loaded.module)
}
pub fn default_twasm_output_path(input: &str) -> Result<String> {
if input == "-" {
- bail!("--output is required when compiling from stdin")
+ bail!("--output is required when compiling from stdin");
}
let path = Path::new(input);
@@ -50,7 +50,7 @@ pub fn write_output_bytes(output: &str, bytes: &[u8], force: bool) -> Result<()>
let path = Path::new(output);
if path.exists() && !force {
- bail!("output file already exists: {output}; pass --force to overwrite")
+ bail!("output file already exists: {output}; pass --force to overwrite");
}
std::fs::write(path, bytes).with_context(|| format!("failed to write output file `{output}`"))?;
diff --git a/crates/cli/src/value_parse.rs b/crates/cli/src/value_parse.rs
index f9ffbbb..92c0363 100644
--- a/crates/cli/src/value_parse.rs
+++ b/crates/cli/src/value_parse.rs
@@ -5,7 +5,7 @@ use crate::output::format_wasm_type;
pub fn parse_invocation_args(ty: &FuncType, args: &[String]) -> Result<Vec<WasmValue>> {
if args.len() != ty.params().len() {
- bail!("wrong number of arguments: expected {}, got {}", ty.params().len(), args.len())
+ bail!("wrong number of arguments: expected {}, got {}", ty.params().len(), args.len());
}
ty.params().iter().enumerate().map(|(idx, param_ty)| parse_arg(idx, *param_ty, &args[idx])).collect()
@@ -26,7 +26,7 @@ fn parse_arg(index: usize, ty: WasmType, value: &str) -> Result<WasmValue> {
"unsupported CLI argument type at position {}: {}; use the embedding API for reference values",
index + 1,
format_wasm_type(ty)
- )
+ );
}
};
diff --git a/crates/cli/src/wast_runner.rs b/crates/cli/src/wast_runner.rs
index 3c0a1cd..99f1efe 100644
--- a/crates/cli/src/wast_runner.rs
+++ b/crates/cli/src/wast_runner.rs
@@ -219,7 +219,7 @@ impl WastRunner {
let span = directive.span();
use wast::WastDirective::{
AssertExhaustion, AssertInvalid, AssertMalformed, AssertReturn, AssertTrap, AssertUnlinkable, Invoke,
- Module as Wat, Register,
+ Module as Wat, ModuleDefinition, Register,
};
match directive {
@@ -253,6 +253,17 @@ impl WastRunner {
test_group.add_result(&format!("Wat({i})"), span.linecol_in(wast_raw), result.map(|_| ()));
}
+ ModuleDefinition(module) => {
+ let result = catch_unwind_silent(|| {
+ let (_, bytes) = encode_quote_wat(module);
+ parse_module_bytes(&bytes)
+ })
+ .map_err(|err| eyre!("failed to parse module definition: {}", try_downcast_panic(err)))
+ .and_then(|result| result)
+ .map(|_| ());
+
+ test_group.add_result(&format!("ModuleDefinition({i})"), span.linecol_in(wast_raw), result);
+ }
AssertMalformed { span, mut module, message } => {
let Ok(encoded) = module.encode() else {
test_group.add_result(&format!("AssertMalformed({i})"), span.linecol_in(wast_raw), Ok(()));
@@ -742,7 +753,9 @@ fn convert_wastret<'a>(args: impl Iterator<Item = wast::WastRet<'a>>) -> Result<
}
fn wastarg2tinywasmvalue(arg: wast::WastArg) -> Result<WasmValue> {
- let wast::WastArg::Core(arg) = arg else { bail!("unsupported arg type: Component") };
+ let wast::WastArg::Core(arg) = arg else {
+ bail!("unsupported arg type: Component");
+ };
use wast::core::WastArgCore::*;
Ok(match arg {
F32(f) => WasmValue::F32(f32::from_bits(f.bits)),
@@ -758,9 +771,13 @@ fn wastarg2tinywasmvalue(arg: wast::WastArg) -> Result<WasmValue> {
wast::core::HeapType::Abstract { shared: false, ty: AbstractHeapType::Extern } => {
WasmValue::RefExtern(ExternRef::null())
}
- _ => bail!("unsupported arg type: refnull: {:?}", t),
+ _ => {
+ bail!("unsupported arg type: refnull: {:?}", t);
+ }
},
- RefHost(_) => bail!("unsupported arg type: RefHost"),
+ RefHost(_) => {
+ bail!("unsupported arg type: RefHost");
+ }
})
}
@@ -781,7 +798,9 @@ fn wast_v128_to_bytes(i: wast::core::V128Pattern) -> [u8; 16] {
}
fn wastret2tinywasmvalues(ret: wast::WastRet) -> Result<Vec<WasmValue>> {
- let wast::WastRet::Core(ret) = ret else { bail!("unsupported arg type") };
+ let wast::WastRet::Core(ret) = ret else {
+ bail!("unsupported arg type");
+ };
match ret {
wast::core::WastRetCore::Either(options) => {
options.into_iter().map(wastretcore2tinywasmvalue).collect::<Result<Vec<_>>>()
@@ -805,14 +824,20 @@ fn wastretcore2tinywasmvalue(ret: wast::core::WastRetCore) -> Result<WasmValue>
Some(wast::core::HeapType::Abstract { shared: false, ty: AbstractHeapType::Extern }) => {
WasmValue::RefExtern(ExternRef::null())
}
- _ => bail!("unsupported arg type: refnull: {:?}", t),
+ _ => {
+ bail!("unsupported arg type: refnull: {:?}", t);
+ }
},
RefExtern(v) => WasmValue::RefExtern(ExternRef::new(v)),
RefFunc(v) => WasmValue::RefFunc(FuncRef::new(match v {
Some(wast::token::Index::Num(n, _)) => Some(n),
- _ => bail!("unsupported arg type: reffunc: {:?}", v),
+ _ => {
+ bail!("unsupported arg type: reffunc: {:?}", v);
+ }
})),
- a => bail!("unsupported arg type {:?}", a),
+ a => {
+ bail!("unsupported arg type {:?}", a);
+ }
})
}
diff --git a/crates/tinywasm/tests/generated/wasm-custom-page-sizes.csv b/crates/tinywasm/tests/generated/wasm-custom-page-sizes.csv
index f8a62b1..fe02c72 100644
--- a/crates/tinywasm/tests/generated/wasm-custom-page-sizes.csv
+++ b/crates/tinywasm/tests/generated/wasm-custom-page-sizes.csv
@@ -1,3 +1,3 @@
0.8.0,57,0,[{"name":"custom-page-sizes-invalid.wast","passed":22,"failed":0},{"name":"custom-page-sizes.wast","passed":35,"failed":0}]
0.9.0,211,0,[{"name":"binary.wast","passed":127,"failed":0},{"name":"custom-page-sizes-invalid.wast","passed":23,"failed":0},{"name":"custom-page-sizes.wast","passed":45,"failed":0},{"name":"memory_max.wast","passed":8,"failed":0},{"name":"memory_max_i64.wast","passed":8,"failed":0}]
-0.9.1,211,0,[{"name":"binary.wast","passed":127,"failed":0},{"name":"custom-page-sizes-invalid.wast","passed":23,"failed":0},{"name":"custom-page-sizes.wast","passed":45,"failed":0},{"name":"memory_max.wast","passed":8,"failed":0},{"name":"memory_max_i64.wast","passed":8,"failed":0}]
+0.9.1,207,0,[{"name":"binary.wast","passed":127,"failed":0},{"name":"custom-page-sizes-invalid.wast","passed":23,"failed":0},{"name":"custom-page-sizes.wast","passed":45,"failed":0},{"name":"memory_max.wast","passed":6,"failed":0},{"name":"memory_max_i64.wast","passed":6,"failed":0}]
diff --git a/crates/tinywasm/tests/test-wast.rs b/crates/tinywasm/tests/test-wast.rs
index 663a5fb..92fcbd2 100644
--- a/crates/tinywasm/tests/test-wast.rs
+++ b/crates/tinywasm/tests/test-wast.rs
@@ -6,7 +6,7 @@ use tinywasm_cli::wast_runner::WastRunner;
fn main() -> Result<()> {
let args = std::env::args().collect::<Vec<_>>();
if args.len() < 2 {
- bail!("usage: cargo test-wast <wast-file>")
+ bail!("usage: cargo test-wast <wast-file>");
};
let mut cwd = std::env::current_dir()?;