mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-04-21 12:12:13 +00:00
Update parity-wasm
Bring in some support for bulk-memory-operations instructions
This commit is contained in:
parent
995aefa87e
commit
a4a2ec605d
@ -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' }
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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"
|
||||||
|
@ -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"
|
||||||
|
@ -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) {
|
||||||
|
@ -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"
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user