Switch all imports to structural by default

This commit switches all imports of JS methods to `structural` by
default. Proposed in [RFC 5] this should increase the performance of
bindings today while also providing future-proofing for possible
confusion with the recent addition of the `Deref` trait for all imported
types by default as well.

A new attribute, `host_binding`, is introduced in this PR as well to
recover the old behavior of binding directly to an imported function
which will one day be the precise function on the prototype. Eventually
`web-sys` will switcsh over entirely to being driven via `host_binding`
methods, but for now it's been measured to be not quite as fast so we're
not making that switch yet.

Note that `host_binding` differs from the proposed name of `final` due
to the controversy, and its hoped that `host_binding` is a good
middle-ground!

[RFC 5]: https://rustwasm.github.io/rfcs/005-structural-and-deref.html
This commit is contained in:
Alex Crichton
2018-11-08 13:18:58 -08:00
parent 6093fd29d1
commit 4c42aba007
8 changed files with 232 additions and 16 deletions

View File

@@ -0,0 +1,25 @@
const assert = require('assert');
exports.MyType = class {
static foo(y) {
assert.equal(y, 'x');
return y + 'y';
}
constructor(x) {
assert.equal(x, 2);
this._a = 1;
}
bar(x) {
assert.equal(x, true);
return 3.2;
}
get a() {
return this._a;
}
set a(v) {
this._a = v;
}
};