summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/parser/Cargo.toml5
-rw-r--r--crates/parser/src/lib.rs8
-rw-r--r--crates/parser/src/visit.rs22
3 files changed, 25 insertions, 10 deletions
diff --git a/crates/parser/Cargo.toml b/crates/parser/Cargo.toml
index 6057c30..7d726d4 100644
--- a/crates/parser/Cargo.toml
+++ b/crates/parser/Cargo.toml
@@ -8,12 +8,11 @@ authors.workspace=true
repository.workspace=true
[dependencies]
-# fork of wasmparser with no_std support, see https://github.com/bytecodealliance/wasmtime/issues/3495
-wasmparser={version="0.202.0", package="tinywasm-wasmparser", default-features=false}
+wasmparser={version="0.206", default-features=false}
log={version="0.4", optional=true}
tinywasm-types={version="0.6.0", path="../types", default-features=false}
[features]
default=["std", "logging"]
logging=["log"]
-std=["tinywasm-types/std"]
+std=["tinywasm-types/std", "wasmparser/std"]
diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs
index 5fb3c48..dd10f4d 100644
--- a/crates/parser/src/lib.rs
+++ b/crates/parser/src/lib.rs
@@ -35,7 +35,7 @@ use alloc::{string::ToString, vec::Vec};
pub use error::*;
use module::ModuleReader;
use tinywasm_types::WasmFunction;
-use wasmparser::{Validator, WasmFeatures};
+use wasmparser::{Validator, WasmFeaturesInflated};
pub use tinywasm_types::TinyWasmModule;
@@ -50,7 +50,7 @@ impl Parser {
}
fn create_validator(&self) -> Validator {
- let features = WasmFeatures {
+ let features = WasmFeaturesInflated {
bulk_memory: true,
floats: true,
multi_value: true,
@@ -73,8 +73,10 @@ impl Parser {
tail_call: false,
threads: false,
multi_memory: false, // should be working mostly
+ custom_page_sizes: false,
+ shared_everything_threads: false,
};
- Validator::new_with_features(features)
+ Validator::new_with_features(features.into())
}
/// Parse a [`TinyWasmModule`] from bytes
diff --git a/crates/parser/src/visit.rs b/crates/parser/src/visit.rs
index c5743b8..80dc789 100644
--- a/crates/parser/src/visit.rs
+++ b/crates/parser/src/visit.rs
@@ -117,12 +117,26 @@ impl FunctionBuilder {
}
}
+macro_rules! impl_visit_operator {
+ ($(@$proposal:ident $op:ident $({ $($arg:ident: $argty:ty),* })? => $visit:ident)*) => {
+ $(impl_visit_operator!(@@$proposal $op $({ $($arg: $argty),* })? => $visit);)*
+ };
+
+ (@@mvp $($rest:tt)* ) => {};
+ (@@reference_types $($rest:tt)* ) => {};
+ (@@sign_extension $($rest:tt)* ) => {};
+ (@@saturating_float_to_int $($rest:tt)* ) => {};
+ (@@bulk_memory $($rest:tt)* ) => {};
+ (@@$proposal:ident $op:ident $({ $($arg:ident: $argty:ty),* })? => $visit:ident) => {
+ fn $visit(&mut self $($(,$arg: $argty)*)?) -> Result<()>{
+ self.unsupported(stringify!($visit))
+ }
+ };
+}
+
impl<'a> wasmparser::VisitOperator<'a> for FunctionBuilder {
type Output = Result<()>;
-
- fn visit_default(&mut self, op: &str) -> Self::Output {
- self.unsupported(op)
- }
+ wasmparser::for_each_operator!(impl_visit_operator);
define_primitive_operands! {
visit_br, Instruction::Br, u32,