From 64a624196005eb1e2b321a558cac8a79dba94254 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Thu, 8 Nov 2018 11:50:34 -0800 Subject: [PATCH] Fix tagging static methods as `structural` --- crates/cli-support/src/js/mod.rs | 9 ++++++--- tests/wasm/import_class.js | 6 ++++++ tests/wasm/import_class.rs | 9 +++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/crates/cli-support/src/js/mod.rs b/crates/cli-support/src/js/mod.rs index f5349db3..872dc020 100644 --- a/crates/cli-support/src/js/mod.rs +++ b/crates/cli-support/src/js/mod.rs @@ -1979,17 +1979,20 @@ impl<'a, 'b> SubContext<'a, 'b> { match &op.kind { decode::OperationKind::Regular => { let nargs = descriptor.unwrap_function().arguments.len(); + let nargs = nargs - if op.is_static { 0 } else { 1 }; let mut s = format!("function("); - for i in 0..nargs - 1 { + for i in 0..nargs { if i > 0 { drop(write!(s, ", ")); } drop(write!(s, "x{}", i)); } - s.push_str(") { \nreturn this."); + s.push_str(") { \nreturn "); + s.push_str(&location); + s.push_str("."); s.push_str(&import.function.name); s.push_str("("); - for i in 0..nargs - 1 { + for i in 0..nargs { if i > 0 { drop(write!(s, ", ")); } diff --git a/tests/wasm/import_class.js b/tests/wasm/import_class.js index fa60847c..ebc29759 100644 --- a/tests/wasm/import_class.js +++ b/tests/wasm/import_class.js @@ -131,3 +131,9 @@ exports.CatchConstructors = class { } } }; + +exports.StaticStructural = class { + static static_structural(x) { + return x + 3; + } +}; diff --git a/tests/wasm/import_class.rs b/tests/wasm/import_class.rs index 60b5181c..906147b1 100644 --- a/tests/wasm/import_class.rs +++ b/tests/wasm/import_class.rs @@ -84,6 +84,10 @@ extern "C" { type CatchConstructors; #[wasm_bindgen(constructor, catch)] fn new(x: u32) -> Result; + + type StaticStructural; + #[wasm_bindgen(static_method_of = StaticStructural, structural)] + fn static_structural(a: u32) -> u32; } #[wasm_bindgen] @@ -213,3 +217,8 @@ fn catch_constructors() { assert!(CatchConstructors::new(0).is_err()); assert!(CatchConstructors::new(1).is_ok()); } + +#[wasm_bindgen_test] +fn static_structural() { + assert_eq!(StaticStructural::static_structural(30), 33); +}