From a4a2ec605d648fa38d15e9a94bd1e94bb5b2df65 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 16 Oct 2018 13:53:17 -0700 Subject: [PATCH] Update parity-wasm Bring in some support for bulk-memory-operations instructions --- crates/cli-support/Cargo.toml | 2 +- crates/cli-support/src/js/closures.rs | 9 +++++---- crates/cli/Cargo.toml | 2 +- crates/gc/Cargo.toml | 2 +- crates/gc/src/lib.rs | 20 ++++++++++++++------ crates/wasm-interpreter/Cargo.toml | 2 +- crates/wasm-interpreter/src/lib.rs | 5 ++++- 7 files changed, 27 insertions(+), 15 deletions(-) diff --git a/crates/cli-support/Cargo.toml b/crates/cli-support/Cargo.toml index 249b9caf..49f20722 100644 --- a/crates/cli-support/Cargo.toml +++ b/crates/cli-support/Cargo.toml @@ -13,7 +13,7 @@ Shared support for the wasm-bindgen-cli package, an internal dependency [dependencies] base64 = "0.9" failure = "0.1.2" -parity-wasm = "0.34" +parity-wasm = "0.35" tempfile = "3.0" wasm-bindgen-shared = { path = "../shared", version = '=0.2.25' } wasm-bindgen-wasm-interpreter = { path = "../wasm-interpreter", version = '=0.2.25' } diff --git a/crates/cli-support/src/js/closures.rs b/crates/cli-support/src/js/closures.rs index 358889df..f5969980 100644 --- a/crates/cli-support/src/js/closures.rs +++ b/crates/cli-support/src/js/closures.rs @@ -153,8 +153,9 @@ impl ClosureDescriptors { let to_remove = remove.get(&i).unwrap_or(&empty); let mut current = Vec::new(); - assert_eq!(entry.offset().code().len(), 2); - let mut offset = match entry.offset().code()[0] { + let offset = entry.offset().as_ref().unwrap(); + assert_eq!(offset.code().len(), 2); + let mut offset = match offset.code()[0] { Instruction::I32Const(x) => x, _ => unreachable!(), }; @@ -172,7 +173,7 @@ impl ClosureDescriptors { let members = mem::replace(&mut current, Vec::new()); let offset = InitExpr::new(vec![Instruction::I32Const(offset), Instruction::End]); - let new_entry = ElementSegment::new(0, offset, members); + let new_entry = ElementSegment::new(0, Some(offset), members, false); elements.entries_mut().push(new_entry); } offset = next_offset; @@ -180,7 +181,7 @@ impl ClosureDescriptors { // Any remaining function table entries get pushed at the end. if current.len() > 0 { let offset = InitExpr::new(vec![Instruction::I32Const(offset), Instruction::End]); - let new_entry = ElementSegment::new(0, offset, current); + let new_entry = ElementSegment::new(0, Some(offset), current, false); elements.entries_mut().push(new_entry); } } diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 7d5b5d81..03ea847d 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -18,7 +18,7 @@ docopt = "1.0" env_logger = "0.5" failure = "0.1.2" log = "0.4" -parity-wasm = "0.34" +parity-wasm = "0.35" rouille = { version = "2.1.0", default-features = false } serde = "1.0" serde_derive = "1.0" diff --git a/crates/gc/Cargo.toml b/crates/gc/Cargo.toml index c77658fa..cd088a1f 100644 --- a/crates/gc/Cargo.toml +++ b/crates/gc/Cargo.toml @@ -11,6 +11,6 @@ Support for removing unused items from a wasm executable """ [dependencies] -parity-wasm = "0.34" +parity-wasm = "0.35" log = "0.4" rustc-demangle = "0.1.9" diff --git a/crates/gc/src/lib.rs b/crates/gc/src/lib.rs index 4c7ea0b2..2dde3002 100644 --- a/crates/gc/src/lib.rs +++ b/crates/gc/src/lib.rs @@ -417,16 +417,20 @@ impl<'a> LiveContext<'a> { } fn add_data_segment(&mut self, data: &DataSegment) { - self.add_memory(data.index()); - self.add_init_expr(data.offset()); + if let Some(offset) = data.offset() { + self.add_memory(data.index()); + self.add_init_expr(offset); + } } fn add_element_segment(&mut self, seg: &ElementSegment) { for member in seg.members() { self.add_function(*member); } - self.add_table(seg.index()); - self.add_init_expr(seg.offset()); + if let Some(offset) = seg.offset() { + self.add_table(seg.index()); + self.add_init_expr(offset); + } } } @@ -673,7 +677,9 @@ impl<'a> RemapContext<'a> { for m in s.members_mut() { self.remap_function_idx(m); } - self.remap_init_expr(s.offset_mut()); + if let Some(offset) = s.offset_mut() { + self.remap_init_expr(offset); + } } fn remap_code_section(&self, s: &mut CodeSection) -> bool { @@ -725,7 +731,9 @@ impl<'a> RemapContext<'a> { let mut i = segment.index(); self.remap_memory_idx(&mut i); assert_eq!(segment.index(), i); - self.remap_init_expr(segment.offset_mut()); + if let Some(offset) = segment.offset_mut() { + self.remap_init_expr(offset); + } } fn remap_type_idx(&self, i: &mut u32) { diff --git a/crates/wasm-interpreter/Cargo.toml b/crates/wasm-interpreter/Cargo.toml index 1033bd63..ab6008b5 100644 --- a/crates/wasm-interpreter/Cargo.toml +++ b/crates/wasm-interpreter/Cargo.toml @@ -11,7 +11,7 @@ Micro-interpreter optimized for wasm-bindgen's use case """ [dependencies] -parity-wasm = "0.34" +parity-wasm = "0.35" [dev-dependencies] tempfile = "3" diff --git a/crates/wasm-interpreter/src/lib.rs b/crates/wasm-interpreter/src/lib.rs index 375215ec..6a8627e0 100644 --- a/crates/wasm-interpreter/src/lib.rs +++ b/crates/wasm-interpreter/src/lib.rs @@ -248,7 +248,10 @@ impl Interpreter { .iter() .enumerate() .filter_map(|(i, entry)| { - let code = entry.offset().code(); + let code = match entry.offset() { + Some(offset) => offset.code(), + None => return None, + }; if code.len() != 2 { return None; }