Fix tagging static methods as structural

This commit is contained in:
Alex Crichton 2018-11-08 11:50:34 -08:00
parent b013ec6288
commit 64a6241960
3 changed files with 21 additions and 3 deletions

View File

@ -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, ", "));
}

View File

@ -131,3 +131,9 @@ exports.CatchConstructors = class {
}
}
};
exports.StaticStructural = class {
static static_structural(x) {
return x + 3;
}
};

View File

@ -84,6 +84,10 @@ extern "C" {
type CatchConstructors;
#[wasm_bindgen(constructor, catch)]
fn new(x: u32) -> Result<CatchConstructors, JsValue>;
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);
}