mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-06-14 05:21:24 +00:00
Remove the need for a ConstructorToken
This commit removes the need for an injected `ConstructorToken` type and also cleans up the story we have for generating constructors a bit. After this commit a `constructor()` is omitted entirely if we're in non-debug mode and there's no actual listed constructor. Additionally we don't deal with splat arguments and rerouting constructors, Nick was kind enough to enlighten me about `Object.create` which is creating an instance without running the constructor! Instances of an exported type are now created through one of two methods: * If `#[wasm_bindgen(constructor)]` is present, then a `constructor` is generated with the appropriate signature. If a constructor is not present and we're in debug mode, a throwing constructor is generated. If we're in release mode and there's no constructor, no constructor is generated. * Otherwise if a binding returns an instance of a type (or otherwise needs to manfuacture an instance, then it will cause an internal `__wrap` function to be generated. This function will use `Object.create` to create an instance without running the constructor. This should ideally clean up our generated JS for classes quite a bit, making it much more lean-and-mean!
This commit is contained in:
@ -34,11 +34,9 @@ pub struct Export {
|
||||
pub class: Option<Ident>,
|
||||
/// The type of `self` (either `self`, `&self`, or `&mut self`)
|
||||
pub method_self: Option<MethodSelf>,
|
||||
/// The name of the constructor function (e.g. new).
|
||||
///
|
||||
/// This allows javascript to expose an `Object` interface, where calling
|
||||
/// the constructor maps correctly to rust.
|
||||
pub constructor: Option<String>,
|
||||
/// Whether or not this export is flagged as a constructor, returning an
|
||||
/// instance of the `impl` type
|
||||
pub is_constructor: bool,
|
||||
/// The rust function
|
||||
pub function: Function,
|
||||
/// Comments extracted from the rust source.
|
||||
@ -317,7 +315,7 @@ impl Export {
|
||||
class: self.class.as_ref().map(|s| s.to_string()),
|
||||
method,
|
||||
consumed,
|
||||
constructor: self.constructor.clone(),
|
||||
is_constructor: self.is_constructor,
|
||||
function: self.function.shared(),
|
||||
comments: self.comments.clone(),
|
||||
}
|
||||
|
Reference in New Issue
Block a user