Update parity-wasm

Bring in some support for bulk-memory-operations instructions
This commit is contained in:
Alex Crichton 2018-10-16 13:53:17 -07:00
parent 995aefa87e
commit a4a2ec605d
7 changed files with 27 additions and 15 deletions

View File

@ -13,7 +13,7 @@ Shared support for the wasm-bindgen-cli package, an internal dependency
[dependencies] [dependencies]
base64 = "0.9" base64 = "0.9"
failure = "0.1.2" failure = "0.1.2"
parity-wasm = "0.34" parity-wasm = "0.35"
tempfile = "3.0" tempfile = "3.0"
wasm-bindgen-shared = { path = "../shared", version = '=0.2.25' } wasm-bindgen-shared = { path = "../shared", version = '=0.2.25' }
wasm-bindgen-wasm-interpreter = { path = "../wasm-interpreter", version = '=0.2.25' } wasm-bindgen-wasm-interpreter = { path = "../wasm-interpreter", version = '=0.2.25' }

View File

@ -153,8 +153,9 @@ impl ClosureDescriptors {
let to_remove = remove.get(&i).unwrap_or(&empty); let to_remove = remove.get(&i).unwrap_or(&empty);
let mut current = Vec::new(); let mut current = Vec::new();
assert_eq!(entry.offset().code().len(), 2); let offset = entry.offset().as_ref().unwrap();
let mut offset = match entry.offset().code()[0] { assert_eq!(offset.code().len(), 2);
let mut offset = match offset.code()[0] {
Instruction::I32Const(x) => x, Instruction::I32Const(x) => x,
_ => unreachable!(), _ => unreachable!(),
}; };
@ -172,7 +173,7 @@ impl ClosureDescriptors {
let members = mem::replace(&mut current, Vec::new()); let members = mem::replace(&mut current, Vec::new());
let offset = let offset =
InitExpr::new(vec![Instruction::I32Const(offset), Instruction::End]); 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); elements.entries_mut().push(new_entry);
} }
offset = next_offset; offset = next_offset;
@ -180,7 +181,7 @@ impl ClosureDescriptors {
// Any remaining function table entries get pushed at the end. // Any remaining function table entries get pushed at the end.
if current.len() > 0 { if current.len() > 0 {
let offset = InitExpr::new(vec![Instruction::I32Const(offset), Instruction::End]); 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); elements.entries_mut().push(new_entry);
} }
} }

View File

@ -18,7 +18,7 @@ docopt = "1.0"
env_logger = "0.5" env_logger = "0.5"
failure = "0.1.2" failure = "0.1.2"
log = "0.4" log = "0.4"
parity-wasm = "0.34" parity-wasm = "0.35"
rouille = { version = "2.1.0", default-features = false } rouille = { version = "2.1.0", default-features = false }
serde = "1.0" serde = "1.0"
serde_derive = "1.0" serde_derive = "1.0"

View File

@ -11,6 +11,6 @@ Support for removing unused items from a wasm executable
""" """
[dependencies] [dependencies]
parity-wasm = "0.34" parity-wasm = "0.35"
log = "0.4" log = "0.4"
rustc-demangle = "0.1.9" rustc-demangle = "0.1.9"

View File

@ -417,16 +417,20 @@ impl<'a> LiveContext<'a> {
} }
fn add_data_segment(&mut self, data: &DataSegment) { fn add_data_segment(&mut self, data: &DataSegment) {
if let Some(offset) = data.offset() {
self.add_memory(data.index()); self.add_memory(data.index());
self.add_init_expr(data.offset()); self.add_init_expr(offset);
}
} }
fn add_element_segment(&mut self, seg: &ElementSegment) { fn add_element_segment(&mut self, seg: &ElementSegment) {
for member in seg.members() { for member in seg.members() {
self.add_function(*member); self.add_function(*member);
} }
if let Some(offset) = seg.offset() {
self.add_table(seg.index()); self.add_table(seg.index());
self.add_init_expr(seg.offset()); self.add_init_expr(offset);
}
} }
} }
@ -673,7 +677,9 @@ impl<'a> RemapContext<'a> {
for m in s.members_mut() { for m in s.members_mut() {
self.remap_function_idx(m); 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 { fn remap_code_section(&self, s: &mut CodeSection) -> bool {
@ -725,7 +731,9 @@ impl<'a> RemapContext<'a> {
let mut i = segment.index(); let mut i = segment.index();
self.remap_memory_idx(&mut i); self.remap_memory_idx(&mut i);
assert_eq!(segment.index(), 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) { fn remap_type_idx(&self, i: &mut u32) {

View File

@ -11,7 +11,7 @@ Micro-interpreter optimized for wasm-bindgen's use case
""" """
[dependencies] [dependencies]
parity-wasm = "0.34" parity-wasm = "0.35"
[dev-dependencies] [dev-dependencies]
tempfile = "3" tempfile = "3"

View File

@ -248,7 +248,10 @@ impl Interpreter {
.iter() .iter()
.enumerate() .enumerate()
.filter_map(|(i, entry)| { .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 { if code.len() != 2 {
return None; return None;
} }