Skip to content

Commit

Permalink
Be sure to GC our imports as well as the module
Browse files Browse the repository at this point in the history
After a module goes through its primary GC pass we need to look over the
set of remaining imports and use that to prune the set of imports that
we're binding.

Closes #1613
  • Loading branch information
alexcrichton committed Jun 23, 2019
1 parent a1fc270 commit 2e03961
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
12 changes: 11 additions & 1 deletion crates/cli-support/src/js/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,18 @@ impl<'a> Context<'a> {
// After all we've done, especially
// `unexport_unused_internal_exports()`, we probably have a bunch of
// garbage in the module that's no longer necessary, so delete
// everything that we don't actually need.
// everything that we don't actually need. Afterwards make sure we don't
// try to emit bindings for now-nonexistent imports by pruning our
// `wasm_import_definitions` set.
walrus::passes::gc::run(self.module);
let remaining_imports = self
.module
.imports
.iter()
.map(|i| i.id())
.collect::<HashSet<_>>();
self.wasm_import_definitions
.retain(|id, _| remaining_imports.contains(id));

// Cause any future calls to `should_write_global` to panic, making sure
// we don't ask for items which we can no longer emit.
Expand Down
15 changes: 15 additions & 0 deletions crates/cli/tests/wasm-bindgen/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,18 @@ fn works_on_empty_project() {
}

mod npm;

#[test]
fn one_export_works() {
let (mut cmd, _out_dir) = Project::new("one_export_works")
.file(
"src/lib.rs",
r#"
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn foo() {}
"#,
)
.wasm_bindgen("");
cmd.assert().success();
}

0 comments on commit 2e03961

Please sign in to comment.