Skip to content

Commit d2a480d

Browse files
committed
Move to using walrus
This also makes it feasible to replace calls to snipped functions with `unreachable`, which we did not used to do. Also everything is rayon-ified.
1 parent 6267dfe commit d2a480d

13 files changed

+253
-269
lines changed

Diff for: .gitignore

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
/tests/no_alloc_actual.wasm
2-
/tests/no_fmt_actual.wasm
3-
/tests/no_panicking_actual.wasm
4-
/tests/snipped.wasm
1+
/tests/*.actual
52
/target/
63
**/*.rs.bk
74
Cargo.lock

Diff for: Cargo.toml

+9-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
authors = ["Nick Fitzgerald <[email protected]>"]
33
categories = ["wasm"]
44
description = "Replace a wasm function with an `unreachable`."
5+
edition = "2018"
56
keywords = [
67
"symbol",
78
"webassembly",
@@ -22,14 +23,18 @@ path = "src/bin/wasm-snip.rs"
2223
required-features = ["exe"]
2324

2425
[dependencies]
25-
failure = "0.1.1"
26-
parity-wasm = "0.37.0"
27-
regex = "1.0.1"
26+
failure = "0.1.5"
27+
walrus = "0.3.0"
28+
regex = "1.1.0"
29+
rayon = "1.0.3"
2830

2931
[dependencies.clap]
3032
optional = true
31-
version = "2.29.0"
33+
version = "2.32.0"
3234

3335
[features]
3436
default = ["exe"]
3537
exe = ["clap"]
38+
39+
[dev-dependencies]
40+
assert_cmd = "0.11.0"

Diff for: src/bin/wasm-snip.rs

+15-11
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
1-
extern crate clap;
2-
extern crate failure;
3-
extern crate parity_wasm;
4-
extern crate wasm_snip;
5-
6-
use parity_wasm::elements::{self, Serialize};
7-
use std::io;
1+
use failure::ResultExt;
2+
use std::io::{self, Write};
83
use std::path;
94
use std::process;
105

116
fn main() {
127
if let Err(e) = try_main() {
138
eprintln!("error: {}", e);
14-
for c in e.causes().skip(1) {
9+
for c in e.iter_chain().skip(1) {
1510
eprintln!(" caused by {}", c);
1611
}
1712
eprintln!("{}", e.backtrace());
@@ -44,14 +39,23 @@ fn try_main() -> Result<(), failure::Error> {
4439
opts.snip_rust_panicking_code = true;
4540
}
4641

47-
let module = wasm_snip::snip(opts)?;
42+
let module = wasm_snip::snip(opts).context("failed to snip functions from wasm module")?;
4843

4944
if let Some(output) = matches.value_of("output") {
50-
elements::serialize_to_file(output, module)?;
45+
module
46+
.emit_wasm_file(output)
47+
.with_context(|_| format!("failed to emit snipped wasm to {}", output))?;
5148
} else {
49+
let wasm = module
50+
.emit_wasm()
51+
.context("failed to re-compile snipped module to wasm")?;
52+
5253
let stdout = io::stdout();
5354
let mut stdout = stdout.lock();
54-
module.serialize(&mut stdout)?;
55+
56+
stdout
57+
.write_all(&wasm)
58+
.context("failed to write wasm to stdout")?;
5559
}
5660

5761
Ok(())

0 commit comments

Comments
 (0)