diff --git a/DESIGN.md b/DESIGN.md index 44276f97..aba2e513 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -538,22 +538,14 @@ code for this we'll see: ```js import * as wasm from './js_hello_world_bg'; +export class Foo { + static __construct(ptr) { + return new Foo(ptr); + } -class ConstructorToken { constructor(ptr) { this.ptr = ptr; } -} - -export class Foo { - - constructor(...args) { - if (args.length === 1 && args[0] instanceof ConstructorToken) { - this.ptr = args[0].ptr; - return; - } - throw new Error('you cannot invoke `new` directly without having a method annotated a constructor'); - } free() { const ptr = this.ptr; @@ -563,7 +555,7 @@ export class Foo { static new(arg0) { const ret = wasm.foo_new(arg0); - return new Foo(new ConstructorToken(ret)); + return Foo.__construct(ret) } get() { diff --git a/crates/cli-support/src/lib.rs b/crates/cli-support/src/lib.rs index a4f0fb3e..ab1ec572 100644 --- a/crates/cli-support/src/lib.rs +++ b/crates/cli-support/src/lib.rs @@ -110,7 +110,7 @@ impl Bindgen { // execute a shim function which informs us about its type so we can // then generate the appropriate bindings. let instance = wasmi::Module::from_parity_wasm_module(module.clone())?; - let instance = wasmi::ModuleInstance::new(&imodule, &MyResolver)?; + let instance = wasmi::ModuleInstance::new(&instance, &MyResolver)?; let instance = instance.not_started_instance(); let (js, ts) = { @@ -128,7 +128,7 @@ impl Bindgen { function_table_needed: false, run_descriptor: &|name| { let mut v = MyExternals(Vec::new()); - let ret = imodulei + let ret = instance .invoke_export(name, &[], &mut v) .expect("failed to run export"); assert!(ret.is_none());