From 12fc09a12419fad5ef83d48a94f47a9f45bb1735 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 9 Nov 2018 07:45:19 -0800 Subject: [PATCH] Add a flag to remove the wasm name section This commit adds a `--remove-name-section` flag to the `wasm-bindgen` command which will remove the `name` section of the wasm file, used to indicate the names of functions typically used in debugging. This flag is off-by-default and will primarily be controlled by wasm-pack, typically being passed by default with `wasm-pack build --release`. Closes #1021 --- crates/cli-support/src/js/mod.rs | 10 +++++++++- crates/cli-support/src/lib.rs | 7 +++++++ crates/cli/src/bin/wasm-bindgen.rs | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs index f5349db33cd..b86a5461392 100644 --- a/crates/cli-support/src/js/mod.rs +++ b/crates/cli-support/src/js/mod.rs @@ -116,6 +116,7 @@ impl<'a> Context<'a> { } pub fn finalize(&mut self, module_name: &str) -> Result<(String, String), Error> { + self.parse_wasm_names(); self.write_classes()?; self.bind("__wbindgen_object_clone_ref", &|me| { @@ -1689,7 +1690,6 @@ impl<'a> Context<'a> { } fn gc(&mut self) { - self.parse_wasm_names(); gc::Config::new() .demangle(self.config.demangle) .keep_debug(self.config.keep_debug || self.config.debug) @@ -1700,6 +1700,14 @@ impl<'a> Context<'a> { let module = mem::replace(self.module, Module::default()); let module = module.parse_names().unwrap_or_else(|p| p.1); *self.module = module; + if self.config.remove_name_section { + self.module.sections_mut().retain(|s| { + match s { + Section::Name(_) => false, + _ => true, + } + }); + } } fn describe(&mut self, name: &str) -> Option { diff --git a/crates/cli-support/src/lib.rs b/crates/cli-support/src/lib.rs index 72ee7eba714..23cc9393ce6 100644 --- a/crates/cli-support/src/lib.rs +++ b/crates/cli-support/src/lib.rs @@ -35,6 +35,7 @@ pub struct Bindgen { typescript: bool, demangle: bool, keep_debug: bool, + remove_name_section: bool, // Experimental support for `WeakRefGroup`, an upcoming ECMAScript feature. // Currently only enable-able through an env var. weak_refs: bool, @@ -62,6 +63,7 @@ impl Bindgen { typescript: false, demangle: true, keep_debug: false, + remove_name_section: false, weak_refs: env::var("WASM_BINDGEN_WEAKREF").is_ok(), threads: threads_config(), } @@ -124,6 +126,11 @@ impl Bindgen { self } + pub fn remove_name_section(&mut self, remove: bool) -> &mut Bindgen { + self.remove_name_section = remove; + self + } + pub fn generate>(&mut self, path: P) -> Result<(), Error> { self._generate(path.as_ref()) } diff --git a/crates/cli/src/bin/wasm-bindgen.rs b/crates/cli/src/bin/wasm-bindgen.rs index cc162db885a..d3ffdfedde4 100644 --- a/crates/cli/src/bin/wasm-bindgen.rs +++ b/crates/cli/src/bin/wasm-bindgen.rs @@ -37,6 +37,7 @@ Options: --debug Include otherwise-extraneous debug checks in output --no-demangle Don't demangle Rust symbol names --keep-debug Keep debug sections in wasm files + --remove-name-section Remove the debugging `name` section of the file -V --version Print the version number of wasm-bindgen "; @@ -52,6 +53,7 @@ struct Args { flag_version: bool, flag_no_demangle: bool, flag_no_modules_global: Option, + flag_remove_name_section: bool, flag_keep_debug: bool, arg_input: Option, } @@ -92,6 +94,7 @@ fn rmain(args: &Args) -> Result<(), Error> { .debug(args.flag_debug) .demangle(!args.flag_no_demangle) .keep_debug(args.flag_keep_debug) + .remove_name_section(args.flag_remove_name_section) .typescript(typescript); if let Some(ref name) = args.flag_no_modules_global { b.no_modules_global(name);