It looks like you're not getting it ... Babel transpiler causes the issue and there's nothing "we" can do about it.
You cannot avoid __proto__ in certain cases, this is an ECMAScript documented fact. I don't have any issue otherwise, current mozjs has issues showing warnings it should not (indeed it's been resolved) ;-) On Sat, Apr 15, 2017 at 7:05 PM, <philip.chime...@gmail.com> wrote: > On Sat, Apr 15, 2017 at 1:41 AM Andrea Giammarchi < > andrea.giammar...@gmail.com> wrote: > >> > Do you know if that's because they optimized it, or they just gave up >> showing the message? >> >> The thing is that there are no ways to extend natives differently. >> >> Imagine you want a Constructor to be an Array, >> `Object.setPrototypeOf(Constructor, >> Array)` is the only way to go because you cannot `Object.create` a >> constructor. >> >> This is just an example of how pointless is that message, specially >> because it's Babel causing it and there's no way Babel should avoid using >> __proto__ where appropriate. >> >> TL;DR the __proto__ bails out optimizations around inferred types so that >> both the object and the code dealing with such object cannot be heavily >> optimized. >> >> At the same time ECMAScript 3rd Edition was already fast enough with >> functions, classes, and stuff that has never seen the light of JIT >> compilers. >> >> As summary, that was just an overly-agressive message that someone at >> Mozilla decided was good to show to developers, the only people that would >> notice, mostly the one incapable of fixing it 'cause coming from transpiled >> code that inevitably needs it. >> >> The race to close-to-mteal performance for a scripting language can take >> various unimaginable directions, showing warnings around ECMAScript >> specifications shouldn't be one of these ^_^ >> >> Apologies for the rant and thanks for your answer. >> > > I wonder if Symbol.hasInstance [1] would help you, which will be available > when we land mozjs 52? > > At least, for Lang.Class and GObject.Class I found I only needed to set > the prototype in order to get instanceof to work as expected. Everything > else worked without setting the prototype. > > In the meantime you could consider using __private_GjsConstructorProxy [2] > but be advised that I'm definitely going to remove that as soon as there's > a real ES6 way to achieve the same thing. > > [1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/ > Reference/Global_Objects/Symbol/hasInstance > [2] https://git.gnome.org/browse/gjs/tree/gjs/jsapi- > constructor-proxy.cpp?h=1.48.1#n35 > >
_______________________________________________ javascript-list mailing list javascript-list@gnome.org https://mail.gnome.org/mailman/listinfo/javascript-list