Update wasmparser dependency (#912)
* Update wasmparser dependency Closes #905 * Fix lightbeam compilation
This commit is contained in:
36
Cargo.lock
generated
36
Cargo.lock
generated
@@ -896,7 +896,7 @@ dependencies = [
|
|||||||
"smallvec",
|
"smallvec",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"typemap",
|
"typemap",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wat",
|
"wat",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1859,12 +1859,6 @@ version = "0.39.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c702914acda5feeeffbc29e4d953e5b9ce79d8b98da4dbf18a77086e116c5470"
|
checksum = "c702914acda5feeeffbc29e4d953e5b9ce79d8b98da4dbf18a77086e116c5470"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "wasmparser"
|
|
||||||
version = "0.42.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1527c84a5bd585215f29c06b0e2a5274e478ad4dfc970d26ffad66fdc6cb311d"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmparser"
|
name = "wasmparser"
|
||||||
version = "0.47.0"
|
version = "0.47.0"
|
||||||
@@ -1872,13 +1866,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "1add8db5a53a2f64f13418b241982c4ab533d7a9e1e8a5dcadccce633d8d393b"
|
checksum = "1add8db5a53a2f64f13418b241982c4ab533d7a9e1e8a5dcadccce633d8d393b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasmprinter"
|
name = "wasmparser"
|
||||||
version = "0.2.0"
|
version = "0.51.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "89101d1890503f4d87cc0512ff2568c00d6c13ed9de3880569e5c9c21556c06c"
|
checksum = "6860a452de64c9f5fb5af92a630b3894c0414a5f6a113f184ad2376d7a39fb40"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasmprinter"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8bd423d45b95fcee11775472bfdce66c63c45ada23c1b338e0a63d623a6c475b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"wasmparser 0.42.1",
|
"wasmparser 0.51.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1897,7 +1897,7 @@ dependencies = [
|
|||||||
"rustc-demangle",
|
"rustc-demangle",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"wasi-common",
|
"wasi-common",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wasmtime-environ",
|
"wasmtime-environ",
|
||||||
"wasmtime-jit",
|
"wasmtime-jit",
|
||||||
"wasmtime-runtime",
|
"wasmtime-runtime",
|
||||||
@@ -1951,7 +1951,7 @@ dependencies = [
|
|||||||
"more-asserts",
|
"more-asserts",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wasmtime-environ",
|
"wasmtime-environ",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1985,7 +1985,7 @@ dependencies = [
|
|||||||
"tempfile",
|
"tempfile",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"toml",
|
"toml",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"winapi",
|
"winapi",
|
||||||
"zstd",
|
"zstd",
|
||||||
]
|
]
|
||||||
@@ -2009,7 +2009,7 @@ dependencies = [
|
|||||||
"binaryen",
|
"binaryen",
|
||||||
"env_logger 0.7.1",
|
"env_logger 0.7.1",
|
||||||
"log",
|
"log",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wasmprinter",
|
"wasmprinter",
|
||||||
"wasmtime",
|
"wasmtime",
|
||||||
"wat",
|
"wat",
|
||||||
@@ -2022,7 +2022,7 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"walrus",
|
"walrus",
|
||||||
"wasm-webidl-bindings",
|
"wasm-webidl-bindings",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wasmtime",
|
"wasmtime",
|
||||||
"wasmtime-environ",
|
"wasmtime-environ",
|
||||||
"wasmtime-jit",
|
"wasmtime-jit",
|
||||||
@@ -2045,7 +2045,7 @@ dependencies = [
|
|||||||
"region",
|
"region",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wasmtime-debug",
|
"wasmtime-debug",
|
||||||
"wasmtime-environ",
|
"wasmtime-environ",
|
||||||
"wasmtime-runtime",
|
"wasmtime-runtime",
|
||||||
@@ -2070,7 +2070,7 @@ dependencies = [
|
|||||||
"pyo3",
|
"pyo3",
|
||||||
"region",
|
"region",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
"wasmparser 0.47.0",
|
"wasmparser 0.51.0",
|
||||||
"wasmtime",
|
"wasmtime",
|
||||||
"wasmtime-interface-types",
|
"wasmtime-interface-types",
|
||||||
"wasmtime-wasi",
|
"wasmtime-wasi",
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ edition = "2018"
|
|||||||
wasmtime-runtime = { path = "../runtime", version = "0.9.0" }
|
wasmtime-runtime = { path = "../runtime", version = "0.9.0" }
|
||||||
wasmtime-environ = { path = "../environ", version = "0.9.0" }
|
wasmtime-environ = { path = "../environ", version = "0.9.0" }
|
||||||
wasmtime-jit = { path = "../jit", version = "0.9.0" }
|
wasmtime-jit = { path = "../jit", version = "0.9.0" }
|
||||||
wasmparser = { version = "0.47.0", default-features = false }
|
wasmparser = "0.51.0"
|
||||||
target-lexicon = { version = "0.10.0", default-features = false }
|
target-lexicon = { version = "0.10.0", default-features = false }
|
||||||
anyhow = "1.0.19"
|
anyhow = "1.0.19"
|
||||||
region = "2.0.0"
|
region = "2.0.0"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
gimli = "0.19.0"
|
gimli = "0.19.0"
|
||||||
wasmparser = "0.47.0"
|
wasmparser = "0.51.0"
|
||||||
faerie = "0.14.0"
|
faerie = "0.14.0"
|
||||||
wasmtime-environ = { path = "../environ", version = "0.9.0" }
|
wasmtime-environ = { path = "../environ", version = "0.9.0" }
|
||||||
target-lexicon = { version = "0.10.0", default-features = false }
|
target-lexicon = { version = "0.10.0", default-features = false }
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ anyhow = "1.0"
|
|||||||
cranelift-codegen = { version = "0.56", features = ["enable-serde"] }
|
cranelift-codegen = { version = "0.56", features = ["enable-serde"] }
|
||||||
cranelift-entity = { version = "0.56", features = ["enable-serde"] }
|
cranelift-entity = { version = "0.56", features = ["enable-serde"] }
|
||||||
cranelift-wasm = { version = "0.56", features = ["enable-serde"] }
|
cranelift-wasm = { version = "0.56", features = ["enable-serde"] }
|
||||||
wasmparser = "0.47.0"
|
wasmparser = "0.51.0"
|
||||||
lightbeam = { path = "../lightbeam", optional = true, version = "0.9.0" }
|
lightbeam = { path = "../lightbeam", optional = true, version = "0.9.0" }
|
||||||
indexmap = "1.0.2"
|
indexmap = "1.0.2"
|
||||||
rayon = "1.2.1"
|
rayon = "1.2.1"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ arbitrary = { version = "0.3.2", features = ["derive"] }
|
|||||||
binaryen = "0.8.2"
|
binaryen = "0.8.2"
|
||||||
env_logger = { version = "0.7.1", optional = true }
|
env_logger = { version = "0.7.1", optional = true }
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
wasmparser = "0.47.0"
|
wasmparser = "0.51.0"
|
||||||
wasmprinter = "0.2.0"
|
wasmprinter = "0.2.0"
|
||||||
wasmtime = { path = "../api", version = "0.9.0" }
|
wasmtime = { path = "../api", version = "0.9.0" }
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ edition = "2018"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow = "1.0.19"
|
anyhow = "1.0.19"
|
||||||
walrus = "0.13"
|
walrus = "0.13"
|
||||||
wasmparser = { version = "0.47.0", default-features = false }
|
wasmparser = "0.51.0"
|
||||||
wasm-webidl-bindings = "0.6"
|
wasm-webidl-bindings = "0.6"
|
||||||
wasmtime = { path = "../api", version = "0.9.0" }
|
wasmtime = { path = "../api", version = "0.9.0" }
|
||||||
wasmtime-jit = { path = "../jit", version = "0.9.0" }
|
wasmtime-jit = { path = "../jit", version = "0.9.0" }
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ wasmtime-debug = { path = "../debug", version = "0.9.0" }
|
|||||||
region = "2.0.0"
|
region = "2.0.0"
|
||||||
thiserror = "1.0.4"
|
thiserror = "1.0.4"
|
||||||
target-lexicon = { version = "0.10.0", default-features = false }
|
target-lexicon = { version = "0.10.0", default-features = false }
|
||||||
wasmparser = { version = "0.47.0", default-features = false }
|
wasmparser = "0.51.0"
|
||||||
more-asserts = "0.2.1"
|
more-asserts = "0.2.1"
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
cfg-if = "0.1.9"
|
cfg-if = "0.1.9"
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ edition = "2018"
|
|||||||
smallvec = "1.0.0"
|
smallvec = "1.0.0"
|
||||||
dynasm = "0.5.2"
|
dynasm = "0.5.2"
|
||||||
dynasmrt = "0.5.2"
|
dynasmrt = "0.5.2"
|
||||||
wasmparser = "0.47.0"
|
wasmparser = "0.51.0"
|
||||||
memoffset = "0.5.3"
|
memoffset = "0.5.3"
|
||||||
itertools = "0.8.2"
|
itertools = "0.8.2"
|
||||||
capstone = "0.6.0"
|
capstone = "0.6.0"
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ pub enum Error {
|
|||||||
|
|
||||||
impl From<BinaryReaderError> for Error {
|
impl From<BinaryReaderError> for Error {
|
||||||
fn from(e: BinaryReaderError) -> Self {
|
fn from(e: BinaryReaderError) -> Self {
|
||||||
let BinaryReaderError { message, offset } = e;
|
Error::Input(format!("At wasm offset {}: {}", e.offset(), e.message()))
|
||||||
Error::Input(format!("At wasm offset {}: {}", offset, message))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,10 +73,7 @@ where
|
|||||||
|
|
||||||
let mut body = Vec::new();
|
let mut body = Vec::new();
|
||||||
for i in microwasm_conv {
|
for i in microwasm_conv {
|
||||||
match i {
|
body.extend(i?);
|
||||||
Ok(v) => body.extend(v),
|
|
||||||
Err(e) => return Err(Error::Microwasm(e.message.to_string())),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
translate(session, reloc_sink, func_idx, body)?;
|
translate(session, reloc_sink, func_idx, body)?;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use std::{
|
|||||||
ops::RangeInclusive,
|
ops::RangeInclusive,
|
||||||
};
|
};
|
||||||
use wasmparser::{
|
use wasmparser::{
|
||||||
BinaryReaderError, FunctionBody, Ieee32 as WasmIeee32, Ieee64 as WasmIeee64,
|
FunctionBody, Ieee32 as WasmIeee32, Ieee64 as WasmIeee64,
|
||||||
MemoryImmediate as WasmMemoryImmediate, Operator as WasmOperator, OperatorsReader,
|
MemoryImmediate as WasmMemoryImmediate, Operator as WasmOperator, OperatorsReader,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ pub const SF32: SignfulType = Type::Float(Size::_32);
|
|||||||
pub const SF64: SignfulType = Type::Float(Size::_64);
|
pub const SF64: SignfulType = Type::Float(Size::_64);
|
||||||
|
|
||||||
impl SignlessType {
|
impl SignlessType {
|
||||||
pub fn from_wasm(other: wasmparser::Type) -> Result<Self, BinaryReaderError> {
|
pub fn from_wasm(other: wasmparser::Type) -> Result<Self, Error> {
|
||||||
use wasmparser::Type;
|
use wasmparser::Type;
|
||||||
|
|
||||||
match other {
|
match other {
|
||||||
@@ -283,27 +283,22 @@ impl SignlessType {
|
|||||||
Type::I64 => Ok(I64),
|
Type::I64 => Ok(I64),
|
||||||
Type::F32 => Ok(F32),
|
Type::F32 => Ok(F32),
|
||||||
Type::F64 => Ok(F64),
|
Type::F64 => Ok(F64),
|
||||||
Type::EmptyBlockType => Err(BinaryReaderError {
|
Type::EmptyBlockType => Err(Error::Microwasm(
|
||||||
message: "SignlessType with EmptyBlockType",
|
"SignlessType with EmptyBlockType".to_string(),
|
||||||
offset: -1isize as usize,
|
)),
|
||||||
}),
|
_ => Err(Error::Microwasm("SignlessType unimplemented".to_string())),
|
||||||
_ => Err(BinaryReaderError {
|
|
||||||
message: "SignlessType unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_returns_from_wasm_type(
|
fn create_returns_from_wasm_type(
|
||||||
ty: wasmparser::TypeOrFuncType,
|
ty: wasmparser::TypeOrFuncType,
|
||||||
) -> Result<Vec<SignlessType>, BinaryReaderError> {
|
) -> Result<Vec<SignlessType>, Error> {
|
||||||
match ty {
|
match ty {
|
||||||
wasmparser::TypeOrFuncType::Type(ty) => Ok(Vec::from_iter(Type::from_wasm(ty))),
|
wasmparser::TypeOrFuncType::Type(ty) => Ok(Vec::from_iter(Type::from_wasm(ty))),
|
||||||
wasmparser::TypeOrFuncType::FuncType(_) => Err(BinaryReaderError {
|
wasmparser::TypeOrFuncType::FuncType(_) => {
|
||||||
message: "Unsupported func type",
|
Err(Error::Microwasm("Unsupported func type".to_string()))
|
||||||
offset: -1isize as usize,
|
}
|
||||||
}),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1106,7 +1101,7 @@ where
|
|||||||
Ok(out)
|
Ok(out)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn op_sig(&self, op: &WasmOperator) -> Result<OpSig, BinaryReaderError> {
|
fn op_sig(&self, op: &WasmOperator) -> Result<OpSig, Error> {
|
||||||
use self::SigT::T;
|
use self::SigT::T;
|
||||||
use std::iter::{empty as none, once};
|
use std::iter::{empty as none, once};
|
||||||
|
|
||||||
@@ -1237,16 +1232,10 @@ where
|
|||||||
WasmOperator::F64Const { .. } => sig!(() -> (F64)),
|
WasmOperator::F64Const { .. } => sig!(() -> (F64)),
|
||||||
|
|
||||||
WasmOperator::RefNull => {
|
WasmOperator::RefNull => {
|
||||||
return Err(BinaryReaderError {
|
return Err(Error::Microwasm("RefNull unimplemented".to_string()))
|
||||||
message: "RefNull unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
WasmOperator::RefIsNull => {
|
WasmOperator::RefIsNull => {
|
||||||
return Err(BinaryReaderError {
|
return Err(Error::Microwasm("RefIsNull unimplemented".to_string()))
|
||||||
message: "RefIsNull unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// All comparison operators remove 2 elements and push 1
|
// All comparison operators remove 2 elements and push 1
|
||||||
@@ -1382,12 +1371,7 @@ where
|
|||||||
WasmOperator::I64Extend16S => sig!((I32) -> (I64)),
|
WasmOperator::I64Extend16S => sig!((I32) -> (I64)),
|
||||||
WasmOperator::I64Extend32S => sig!((I32) -> (I64)),
|
WasmOperator::I64Extend32S => sig!((I32) -> (I64)),
|
||||||
|
|
||||||
_ => {
|
_ => return Err(Error::Microwasm("Opcode Unimplemented".to_string())),
|
||||||
return Err(BinaryReaderError {
|
|
||||||
message: "Opcode Unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
Ok(o)
|
Ok(o)
|
||||||
}
|
}
|
||||||
@@ -1414,18 +1398,13 @@ where
|
|||||||
self.stack.len() as i32 - 1 - idx as i32
|
self.stack.len() as i32 - 1 - idx as i32
|
||||||
}
|
}
|
||||||
|
|
||||||
fn apply_op(&mut self, sig: OpSig) -> Result<(), BinaryReaderError> {
|
fn apply_op(&mut self, sig: OpSig) -> Result<(), Error> {
|
||||||
let mut ty_param = None;
|
let mut ty_param = None;
|
||||||
|
|
||||||
for p in sig.input.iter().rev() {
|
for p in sig.input.iter().rev() {
|
||||||
let stack_ty = match self.stack.pop() {
|
let stack_ty = match self.stack.pop() {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => return Err(Error::Microwasm("Stack is empty".to_string())),
|
||||||
return Err(BinaryReaderError {
|
|
||||||
message: "Stack is empty",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let ty = match p {
|
let ty = match p {
|
||||||
@@ -1447,12 +1426,7 @@ where
|
|||||||
let ty = match p {
|
let ty = match p {
|
||||||
SigT::T => match ty_param {
|
SigT::T => match ty_param {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => return Err(Error::Microwasm("Type parameter was not set".to_string())),
|
||||||
return Err(BinaryReaderError {
|
|
||||||
message: "Type parameter was not set",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
SigT::Concrete(ty) => ty,
|
SigT::Concrete(ty) => ty,
|
||||||
};
|
};
|
||||||
@@ -1468,7 +1442,7 @@ where
|
|||||||
fn block_params_with_wasm_type(
|
fn block_params_with_wasm_type(
|
||||||
&self,
|
&self,
|
||||||
ty: wasmparser::TypeOrFuncType,
|
ty: wasmparser::TypeOrFuncType,
|
||||||
) -> Result<Vec<SignlessType>, BinaryReaderError> {
|
) -> Result<Vec<SignlessType>, Error> {
|
||||||
let mut out = self.block_params();
|
let mut out = self.block_params();
|
||||||
let return_wasm_type = create_returns_from_wasm_type(ty)?;
|
let return_wasm_type = create_returns_from_wasm_type(ty)?;
|
||||||
out.extend(return_wasm_type);
|
out.extend(return_wasm_type);
|
||||||
@@ -1480,9 +1454,9 @@ impl<'a, 'b, M: ModuleContext> Iterator for MicrowasmConv<'a, 'b, M>
|
|||||||
where
|
where
|
||||||
for<'any> &'any M::Signature: Into<OpSig>,
|
for<'any> &'any M::Signature: Into<OpSig>,
|
||||||
{
|
{
|
||||||
type Item = wasmparser::Result<SmallVec<[OperatorFromWasm; 1]>>;
|
type Item = Result<SmallVec<[OperatorFromWasm; 1]>, Error>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<wasmparser::Result<SmallVec<[OperatorFromWasm; 1]>>> {
|
fn next(&mut self) -> Option<Result<SmallVec<[OperatorFromWasm; 1]>, Error>> {
|
||||||
macro_rules! to_drop {
|
macro_rules! to_drop {
|
||||||
($block:expr) => {{
|
($block:expr) => {{
|
||||||
let block = &$block;
|
let block = &$block;
|
||||||
@@ -1521,7 +1495,7 @@ where
|
|||||||
// the removal of uncalled blocks to the backend.
|
// the removal of uncalled blocks to the backend.
|
||||||
return Some(Ok(loop {
|
return Some(Ok(loop {
|
||||||
let op = match self.internal.read() {
|
let op = match self.internal.read() {
|
||||||
Err(e) => return Some(Err(e)),
|
Err(e) => return Some(Err(e.into())),
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
};
|
};
|
||||||
match op {
|
match op {
|
||||||
@@ -1535,10 +1509,9 @@ where
|
|||||||
let block = match self.control_frames.last_mut() {
|
let block = match self.control_frames.last_mut() {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "unreachable Block else Failed",
|
"unreachable Block else Failed".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1556,10 +1529,9 @@ where
|
|||||||
let block = match self.control_frames.pop() {
|
let block = match self.control_frames.pop() {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "unreachable Block end Failed",
|
"unreachable Block end Failed".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1597,7 +1569,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
let op = match self.internal.read() {
|
let op = match self.internal.read() {
|
||||||
Err(e) => return Some(Err(e)),
|
Err(e) => return Some(Err(e.into())),
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1699,22 +1671,12 @@ where
|
|||||||
// We don't pop it since we're still in the second block.
|
// We don't pop it since we're still in the second block.
|
||||||
let block = match self.control_frames.last() {
|
let block = match self.control_frames.last() {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => return Some(Err(Error::Microwasm("Block else Failed".to_string()))),
|
||||||
return Some(Err(BinaryReaderError {
|
|
||||||
message: "Block else Failed",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
let to_drop = to_drop!(block);
|
let to_drop = to_drop!(block);
|
||||||
let block = match self.control_frames.last_mut() {
|
let block = match self.control_frames.last_mut() {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => return Some(Err(Error::Microwasm("Block else Failed".to_string()))),
|
||||||
return Some(Err(BinaryReaderError {
|
|
||||||
message: "Block else Failed",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if let ControlFrameKind::If { has_else, .. } = &mut block.kind {
|
if let ControlFrameKind::If { has_else, .. } = &mut block.kind {
|
||||||
@@ -1738,12 +1700,7 @@ where
|
|||||||
WasmOperator::End => {
|
WasmOperator::End => {
|
||||||
let block = match self.control_frames.pop() {
|
let block = match self.control_frames.pop() {
|
||||||
Some(e) => e,
|
Some(e) => e,
|
||||||
None => {
|
None => return Some(Err(Error::Microwasm("Block End Failed".to_string()))),
|
||||||
return Some(Err(BinaryReaderError {
|
|
||||||
message: "Block End Failed",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let to_drop = to_drop!(block);
|
let to_drop = to_drop!(block);
|
||||||
@@ -1838,7 +1795,7 @@ where
|
|||||||
self.unreachable = true;
|
self.unreachable = true;
|
||||||
let (entries, default) = match table.read_table() {
|
let (entries, default) = match table.read_table() {
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
Err(e) => return Some(Err(e)),
|
Err(e) => return Some(Err(e.into())),
|
||||||
};
|
};
|
||||||
let targets = entries
|
let targets = entries
|
||||||
.iter()
|
.iter()
|
||||||
@@ -1893,10 +1850,9 @@ where
|
|||||||
let depth = match depth.try_into() {
|
let depth = match depth.try_into() {
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "LocalGet - Local out of range",
|
"LocalGet - Local out of range".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
smallvec![Operator::Pick(depth)]
|
smallvec![Operator::Pick(depth)]
|
||||||
@@ -1907,10 +1863,9 @@ where
|
|||||||
let depth = match depth.try_into() {
|
let depth = match depth.try_into() {
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "LocalSet - Local out of range",
|
"LocalSet - Local out of range".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
smallvec![Operator::Swap(depth), Operator::Drop(0..=0)]
|
smallvec![Operator::Swap(depth), Operator::Drop(0..=0)]
|
||||||
@@ -1921,10 +1876,9 @@ where
|
|||||||
let depth = match depth.try_into() {
|
let depth = match depth.try_into() {
|
||||||
Ok(o) => o,
|
Ok(o) => o,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "LocalTee - Local out of range",
|
"LocalTee - Local out of range".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
smallvec![
|
smallvec![
|
||||||
@@ -2044,16 +1998,10 @@ where
|
|||||||
smallvec![Operator::Const(Value::F64(value.into()))]
|
smallvec![Operator::Const(Value::F64(value.into()))]
|
||||||
}
|
}
|
||||||
WasmOperator::RefNull => {
|
WasmOperator::RefNull => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm("RefNull unimplemented".to_string())))
|
||||||
message: "RefNull unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::RefIsNull => {
|
WasmOperator::RefIsNull => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm("RefIsNull unimplemented".to_string())))
|
||||||
message: "RefIsNull unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I32Eqz => smallvec![Operator::Eqz(Size::_32)],
|
WasmOperator::I32Eqz => smallvec![Operator::Eqz(Size::_32)],
|
||||||
WasmOperator::I32Eq => smallvec![Operator::Eq(I32)],
|
WasmOperator::I32Eq => smallvec![Operator::Eq(I32)],
|
||||||
@@ -2236,93 +2184,75 @@ where
|
|||||||
WasmOperator::F32ReinterpretI32 => smallvec![Operator::F32ReinterpretFromI32],
|
WasmOperator::F32ReinterpretI32 => smallvec![Operator::F32ReinterpretFromI32],
|
||||||
WasmOperator::F64ReinterpretI64 => smallvec![Operator::F64ReinterpretFromI64],
|
WasmOperator::F64ReinterpretI64 => smallvec![Operator::F64ReinterpretFromI64],
|
||||||
WasmOperator::I32Extend8S => {
|
WasmOperator::I32Extend8S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I32Extend8S unimplemented",
|
"I32Extend8S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I32Extend16S => {
|
WasmOperator::I32Extend16S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I32Extend16S unimplemented",
|
"I32Extend16S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64Extend8S => {
|
WasmOperator::I64Extend8S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64Extend8S unimplemented",
|
"I64Extend8S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64Extend16S => {
|
WasmOperator::I64Extend16S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64Extend16S unimplemented",
|
"I64Extend16S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64Extend32S => {
|
WasmOperator::I64Extend32S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64Extend32S unimplemented",
|
"I64Extend32S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0xFC operators
|
// 0xFC operators
|
||||||
// Non-trapping Float-to-int Conversions
|
// Non-trapping Float-to-int Conversions
|
||||||
WasmOperator::I32TruncSatF32S => {
|
WasmOperator::I32TruncSatF32S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I32TruncSatF32S unimplemented",
|
"I32TruncSatF32S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I32TruncSatF32U => {
|
WasmOperator::I32TruncSatF32U => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I32TruncSatF32U unimplemented",
|
"I32TruncSatF32U unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I32TruncSatF64S => {
|
WasmOperator::I32TruncSatF64S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I32TruncSatF64S unimplemented",
|
"I32TruncSatF64S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I32TruncSatF64U => {
|
WasmOperator::I32TruncSatF64U => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I32TruncSatF64U unimplemented",
|
"I32TruncSatF64U unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64TruncSatF32S => {
|
WasmOperator::I64TruncSatF32S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64TruncSatF32S unimplemented",
|
"I64TruncSatF32S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64TruncSatF32U => {
|
WasmOperator::I64TruncSatF32U => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64TruncSatF32U unimplemented",
|
"I64TruncSatF32U unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64TruncSatF64S => {
|
WasmOperator::I64TruncSatF64S => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64TruncSatF64S unimplemented",
|
"I64TruncSatF64S unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
WasmOperator::I64TruncSatF64U => {
|
WasmOperator::I64TruncSatF64U => {
|
||||||
return Some(Err(BinaryReaderError {
|
return Some(Err(Error::Microwasm(
|
||||||
message: "I64TruncSatF64U unimplemented",
|
"I64TruncSatF64U unimplemented".to_string(),
|
||||||
offset: -1isize as usize,
|
)))
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_other => {
|
_other => return Some(Err(Error::Microwasm("Opcode unimplemented".to_string()))),
|
||||||
return Some(Err(BinaryReaderError {
|
|
||||||
message: "Opcode unimplemented",
|
|
||||||
offset: -1isize as usize,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ wasmtime-wasi = { path = "../../wasi", version = "0.9.0" }
|
|||||||
target-lexicon = { version = "0.10.0", default-features = false }
|
target-lexicon = { version = "0.10.0", default-features = false }
|
||||||
anyhow = "1.0.19"
|
anyhow = "1.0.19"
|
||||||
region = "2.0.0"
|
region = "2.0.0"
|
||||||
wasmparser = "0.47.0"
|
wasmparser = "0.51.0"
|
||||||
pyo3 = { version = "0.8.0", features = ["extension-module"] }
|
pyo3 = { version = "0.8.0", features = ["extension-module"] }
|
||||||
|
|
||||||
[badges]
|
[badges]
|
||||||
|
|||||||
Reference in New Issue
Block a user