> ES6 polyfills from babel ? Can you explain exactly what this means?
BTW your link didn't show up. Mike On Thu, May 28, 2015 at 11:37 AM, Frédéric THOMAS <webdoubl...@hotmail.com> wrote: > Hmm, so at this point, why not emiting ES6 syntax and use ES6 polyfills > from babel ? > > For example, for module, from [1] : > > > Frédéric THOMAS > > > From: aha...@adobe.com > > To: dev@flex.apache.org > > Subject: [FalconJX][FlexJS] Do we still want to use Google Closure > Library? (was Re: [FalconJX] JXEmitter accessors) > > Date: Thu, 28 May 2015 15:22:39 +0000 > > > > Starting a new thread: > > > > We are basically using Closure Library based on Erik’s recommendation, > but > > at the time I still wanted to support IE8. We are now making the minimum > > IE9 because we want decent SVG support and Object.defineProperties. So, > > now is a good time to revisit how much of Closure Library we need. IIRC, > > we are using > > > > -goog.events: This gets us a decent event model on non-DOM objects. > > -goog.provide/require: This gets us a way to order the loading of > multiple > > JS files which I find useful when debugging JS code during development. > > -goog.inherits: This provides a way to set up inheritance and call base > > class methods. > > > > I might be forgetting something. Hopefully Erik as time to offer his > > thoughts. > > > > For older browsers I am currently recommending deploying a SWF on those > > browsers since they almost all have Flash Player in them. Then we don’t > > have to worry so much about polyfills. > > > > -Alex > > > > On 5/28/15, 8:11 AM, "Frédéric THOMAS" <webdoubl...@hotmail.com> wrote: > > > > >> I suspect Closure is trying to be more backwards compatible. I think > > >> Object. create() was added in ES5, and maybe they're aiming for ES3 > > >>there. > > > > > >Correct, using Closure we guaranty compatibility < ES5 but I wonder if > we > > >are good to do so, the reason was that companies were very stricks and > > >allow only one browser and update rarely, my experience tells me it less > > >true and most of the broswer are now autoupdated, (eg. Chrome, Firefox > > >and even Opera now, ok, maybe not IE), what others have as experience > now > > >days ? > > > > > >A lot of work has been done with the Closure API already, not sure it > has > > >been discussed before but another option would have been to write for > ES5 > > >browsers and have a bootstrap to load ES5 polyfills if the Application > > >runs under an older browser, doing so, we could have emit the nice, out > > >of the box more powerfull ES5 code and I might be wrong but also faster > > >than using Closure and eventually emulate extra JS higher level > functions > > >like what Alex said about the C -> B -> A issue when B doesn't override > a > > >A accessor and we want to access it from C. > > > > > >But maybe also, I don't see the all picture why we didn't do that. > > > > > >Frédéric THOMAS > > > > > >> Date: Thu, 28 May 2015 07:46:10 -0700 > > >> Subject: Re: [FalconJX] JXEmitter accessors > > >> From: joshtynj...@gmail.com > > >> To: dev@flex.apache.org > > >> > > >> I suspect Closure is trying to be more backwards compatible. I think > > >> Object. create() was added in ES5, and maybe they're aiming for ES3 > > >>there. > > >> > > >> - Josh > > >> On May 28, 2015 7:11 AM, "Michael Schmalle" < > teotigraphix...@gmail.com> > > >> wrote: > > >> > > >> > See this is where I am clueless, is this a difference between > backward > > >> > compatibility or something? > > >> > > > >> > Like Object.create() not all older browsers support? > > >> > > > >> > Mike > > >> > > > >> > On Thu, May 28, 2015 at 10:06 AM, Frédéric THOMAS > > >><webdoubl...@hotmail.com > > >> > > > > >> > wrote: > > >> > > > >> > > Btw, this is the diff between Closure and Babel: > > >> > > > > >> > > goog.inherits = function (childCtor, parentCtor) { > > >> > > /** @constructor */ > > >> > > function tempCtor() { > > >> > > }; > > >> > > tempCtor.prototype = parentCtor.prototype; > > >> > > childCtor.superClass_ = parentCtor.prototype; > > >> > > childCtor.prototype = new tempCtor(); > > >> > > /** @override */ > > >> > > childCtor.prototype.constructor = childCtor; > > >> > > }; > > >> > > > > >> > > function _inherits(subClass, superClass) { > > >> > > if (typeof superClass !== "function" && superClass !== null) { > > >> > > throw new TypeError("Super expression must either be null > > >>or a > > >> > > function, not " + typeof superClass); > > >> > > } > > >> > > subClass.prototype = Object.create(superClass && > > >> > superClass.prototype, > > >> > > { > > >> > > constructor: { > > >> > > value: subClass, > > >> > > enumerable: false, > > >> > > writable: true, > > >> > > configurable: true > > >> > > } > > >> > > }); > > >> > > if (superClass) subClass.__proto__ = superClass; > > >> > > } > > >> > > > > >> > > > > >> > > Frédéric THOMAS > > >> > > > > >> > > > Date: Thu, 28 May 2015 09:36:50 -0400 > > >> > > > Subject: Re: [FalconJX] JXEmitter accessors > > >> > > > From: teotigraphix...@gmail.com > > >> > > > To: dev@flex.apache.org > > >> > > > > > >> > > > So Alex, you are saying try what Bable produces for get/set and > > >>make > > >> > > sure I > > >> > > > make it swappable and not coupled in the emitter right? > > >> > > > > > >> > > > What are you doing for nested function scopes? Just creating > local > > >> > > > variables outside the function and referencing the current > scope? > > >> > > > > > >> > > > Mike > > >> > > > > > >> > > > On Thu, May 28, 2015 at 9:33 AM, Alex Harui <aha...@adobe.com> > > >>wrote: > > >> > > > > > >> > > > > FWIW, I did not test goog.inherit against > > >>Object.getPrototypeOf. It > > >> > > might > > >> > > > > not work as some libraries may not use vanilla prototype > > >>inheritance. > > >> > > So > > >> > > > > abstracting that piece will provide more flexibility. > > >> > > > > > > >> > > > > -Alex > > >> > > > > > > >> > > > > On 5/28/15, 6:25 AM, "Michael Schmalle" > > >><teotigraphix...@gmail.com> > > >> > > wrote: > > >> > > > > > > >> > > > > >Fred, > > >> > > > > > > > >> > > > > >I said TS only because Josh said it looked nice, the came > Josh > > >>with > > >> > > Bable > > >> > > > > >and Joa said Babel. > > >> > > > > > > > >> > > > > >Right now it's the whole class structure that needs a > template. > > >> > > > > > > > >> > > > > >> Yes but given I'm more than busy, would be nice if you > write > > >>it > > >> > > first in > > >> > > > > >AS :) > > >> > > > > > > > >> > > > > >I meant copy and paste, I didn't mean write it. Don't worry > > >>about > > >> > it. > > >> > > > > > > > >> > > > > >I'm still confused as usual so I guess I will wait until > > >>things sink > > >> > > in > > >> > > > > >more. I have done this a couple times and what I learned is I > > >>need a > > >> > > spec > > >> > > > > >first before I start writing the code. > > >> > > > > > > > >> > > > > >I'm setting aside about 3 hours a day to work on this, so I > > >>guess I > > >> > > will > > >> > > > > >start with the basic tests in expression and start to fiddle > > >>form > > >> > > there. > > >> > > > > > > > >> > > > > >Alex, Josh any thoughts? > > >> > > > > > > > >> > > > > >Mike > > >> > > > > > > > >> > > > > > > > >> > > > > >On Thu, May 28, 2015 at 9:14 AM, Frédéric THOMAS < > > >> > > webdoubl...@hotmail.com > > >> > > > > > > > >> > > > > >wrote: > > >> > > > > > > > >> > > > > >> > You mean if AS3 and ES6 inherit the same way correct? I > > >>wouldn't > > >> > > know > > >> > > > > >>the > > >> > > > > >> > answer to this I guess all we can do is try it right? :) > > >> > > > > >> > > >> > > > > >> Nope, I meant Babel and TS because you said you will base > > >>your > > >> > > tests on > > >> > > > > >> the TS ones, so, if you emit a such utility function, be > sure > > >> > first > > >> > > we > > >> > > > > >> extend classes in the same way than Babel hoping TS does > the > > >>same. > > >> > > > > >> > > >> > > > > >> > I guess one of the other questions is how it > > >>handles/outputs > > >> > > anonymous > > >> > > > > >> > function call scope, you want to do a test with that? > Like > > >>three > > >> > > or so > > >> > > > > >> > levels nested. > > >> > > > > >> > > >> > > > > >> Yes but given I'm more than busy, would be nice if you > write > > >>it > > >> > > first in > > >> > > > > >> AS :) > > >> > > > > >> > > >> > > > > >> Thanks > > >> > > > > >> Frédéric THOMAS > > >> > > > > >> > > >> > > > > >> > Date: Thu, 28 May 2015 08:51:20 -0400 > > >> > > > > >> > Subject: Re: [FalconJX] JXEmitter accessors > > >> > > > > >> > From: teotigraphix...@gmail.com > > >> > > > > >> > To: dev@flex.apache.org > > >> > > > > >> > > > >> > > > > >> > On Thu, May 28, 2015 at 8:41 AM, Frédéric THOMAS < > > >> > > > > >> webdoubl...@hotmail.com> > > >> > > > > >> > wrote: > > >> > > > > >> > > > >> > > > > >> > > > So what is different about this? > > >> > > > > >> > > > > > >> > > > > >> > > > The only thing I can think of is that we introduce > > >>utility > > >> > > > > >>functions > > >> > > > > >> to > > >> > > > > >> > > do > > >> > > > > >> > > > the work > > >> > > > > >> > > > > >> > > > > >> > > Yes, that, I guess both of the language inherit in the > > >>same > > >> > > way, if > > >> > > > > >> yes, > > >> > > > > >> > > this function is re-usable IMO > > >> > > > > >> > > > > >> > > > > >> > > > >> > > > > >> > > > >> > > > > >> > You mean if AS3 and ES6 inherit the same way correct? I > > >>wouldn't > > >> > > know > > >> > > > > >>the > > >> > > > > >> > answer to this I guess all we can do is try it right? :) > > >> > > > > >> > > > >> > > > > >> > I'm going to create a branch in falcon jxemitter and > start > > >> > > working on > > >> > > > > >>it. > > >> > > > > >> > > > >> > > > > >> > I guess one of the other questions is how it > > >>handles/outputs > > >> > > anonymous > > >> > > > > >> > function call scope, you want to do a test with that? > Like > > >>three > > >> > > or so > > >> > > > > >> > levels nested. > > >> > > > > >> > > > >> > > > > >> > Mike > > >> > > > > >> > > > >> > > > > >> > > > >> > > > > >> > > > >> > > > > >> > > > > >> > > > > >> > > Frédéric THOMAS > > >> > > > > >> > > > > >> > > > > >> > > > Date: Thu, 28 May 2015 08:38:16 -0400 > > >> > > > > >> > > > Subject: Re: [FalconJX] JXEmitter accessors > > >> > > > > >> > > > From: teotigraphix...@gmail.com > > >> > > > > >> > > > To: dev@flex.apache.org > > >> > > > > >> > > > > > >> > > > > >> > > > Well yes, I follow the logic. I don't understand if > > >>this is > > >> > a > > >> > > > > >> solution, > > >> > > > > >> > > why > > >> > > > > >> > > > TypeScript doesn't use the same algorithm. > > >> > > > > >> > > > > > >> > > > > >> > > > I read what the developers said and they said they > had > > >> > talked > > >> > > > > >>about > > >> > > > > >> it in > > >> > > > > >> > > > length when the project first started and came to the > > >> > > conclusion > > >> > > > > >> there > > >> > > > > >> > > > really is no solution. > > >> > > > > >> > > > > > >> > > > > >> > > > So what is different about this? > > >> > > > > >> > > > > > >> > > > > >> > > > The only thing I can think of is that we introduce > > >>utility > > >> > > > > >>functions > > >> > > > > >> to > > >> > > > > >> > > do > > >> > > > > >> > > > the work and they didn't want to do that, I did get > > >>this > > >> > from > > >> > > the > > >> > > > > >> > > > conversation, they stated they wanted it to be plain > > >> > > javascript, > > >> > > > > >>the > > >> > > > > >> only > > >> > > > > >> > > > helper they use is _extends function they write out > for > > >> > > > > >>inheritance. > > >> > > > > >> > > > > > >> > > > > >> > > > I was thinking about TypeScript, other than the > > >>language > > >> > > > > >>difference, > > >> > > > > >> > > there > > >> > > > > >> > > > is really NO difference in our compiler and what they > > >>do. > > >> > > Which is > > >> > > > > >> cool > > >> > > > > >> > > > because all the usecases that they have will apply to > > >>this > > >> > > > > >>emitter. > > >> > > > > >> > > > > > >> > > > > >> > > > Plus we have libraries and IDE support and possible > > >>MXML in > > >> > > the > > >> > > > > >> future. > > >> > > > > >> > > > > > >> > > > > >> > > > Mike > > >> > > > > >> > > > > > >> > > > > >> > > > On Thu, May 28, 2015 at 8:27 AM, Frédéric THOMAS < > > >> > > > > >> > > webdoubl...@hotmail.com> > > >> > > > > >> > > > wrote: > > >> > > > > >> > > > > > >> > > > > >> > > > > I'm not a javascript guru either, but it was easy > to > > >> > create > > >> > > ES6 > > >> > > > > >> classes > > >> > > > > >> > > > > (left pane) and see the output (right pane), so, > for > > >>the > > >> > > > > >>setter, it > > >> > > > > >> > > creates: > > >> > > > > >> > > > > > > >> > > > > >> > > > > For class A (simple): > > >> > > > > >> > > > > > > >> > > > > >> > > > > get: function () { > > >> > > > > >> > > > > return this._property; > > >> > > > > >> > > > > }, > > >> > > > > >> > > > > set: function (value) { > > >> > > > > >> > > > > this._property = value; > > >> > > > > >> > > > > } > > >> > > > > >> > > > > > > >> > > > > >> > > > > For class B: > > >> > > > > >> > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > set: function (value) { > > >> > > > > >> > > > > > _set(Object.getPrototypeOf(B.prototype), > > >> > > "property", > > >> > > > > >> value, > > >> > > > > >> > > > > this); > > >> > > > > >> > > > > } > > >> > > > > >> > > > > > > >> > > > > >> > > > > Which calls: > > >> > > > > >> > > > > > > >> > > > > >> > > > > var _set = function set(object, property, value, > > >> > receiver) { > > >> > > > > >> > > > > var desc = > > >>Object.getOwnPropertyDescriptor(object, > > >> > > > > >>property); > > >> > > > > >> // > > >> > > > > >> > > Get > > >> > > > > >> > > > > the property on B > > >> > > > > >> > > > > if (desc === undefined) { // If not overrided, > > >>will > > >> > set > > >> > > the > > >> > > > > >> parent > > >> > > > > >> > > > > recursively if the parent doesn't override the > > >>property > > >> > > either. > > >> > > > > >> > > > > var parent = Object.getPrototypeOf(object); > > >> > > > > >> > > > > if (parent !== null) { > > >> > > > > >> > > > > set(parent, property, value, receiver); > > >> > > > > >> > > > > } > > >> > > > > >> > > > > } else if ("value" in desc && desc.writable) { > // > > >> > > didn't get > > >> > > > > >> this > > >> > > > > >> > > part > > >> > > > > >> > > > > desc.value = value; > > >> > > > > >> > > > > } else { // Else call the setterv of this > Object > > >> > > > > >> > > > > var setter = desc.set; > > >> > > > > >> > > > > if (setter !== undefined) { > > >> > > > > >> > > > > setter.call(receiver, value); > > >> > > > > >> > > > > } > > >> > > > > >> > > > > } > > >> > > > > >> > > > > return value; > > >> > > > > >> > > > > }; > > >> > > > > >> > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > get: function () { > > >> > > > > >> > > > > return > > >> > _get(Object.getPrototypeOf(B.prototype), > > >> > > > > >> "property", > > >> > > > > >> > > > > this); > > >> > > > > >> > > > > }, > > >> > > > > >> > > > > > > >> > > > > >> > > > > Which calls: > > >> > > > > >> > > > > > > >> > > > > >> > > > > this for the getter, do recursive call to the > > >>prototype to > > >> > > check > > >> > > > > >> if the > > >> > > > > >> > > > > property has been overriden, if Yes, get the value. > > >> > > > > >> > > > > > > >> > > > > >> > > > > var _get = function get(_x, _x2, _x3) { > > >> > > > > >> > > > > var _again = true; > > >> > > > > >> > > > > _function: while (_again) { > > >> > > > > >> > > > > var object = _x, property = _x2, receiver = > > >>_x3; > > >> > > > > >> > > > > desc = parent = getter = undefined; > > >> > > > > >> > > > > _again = false; > > >> > > > > >> > > > > var desc = > > >>Object.getOwnPropertyDescriptor(object, > > >> > > > > >> property); > > >> > > > > >> > > > > if (desc === undefined) { > > >> > > > > >> > > > > var parent = > > >>Object.getPrototypeOf(object); > > >> > > > > >> > > > > if (parent === null) { > > >> > > > > >> > > > > return undefined; > > >> > > > > >> > > > > } else { > > >> > > > > >> > > > > _x = parent; > > >> > > > > >> > > > > _x2 = property; > > >> > > > > >> > > > > _x3 = receiver; > > >> > > > > >> > > > > _again = true; > > >> > > > > >> > > > > continue _function; > > >> > > > > >> > > > > } > > >> > > > > >> > > > > } else if ("value" in desc) { > > >> > > > > >> > > > > return desc.value; > > >> > > > > >> > > > > } else { > > >> > > > > >> > > > > var getter = desc.get; > > >> > > > > >> > > > > if (getter === undefined) { > > >> > > > > >> > > > > return undefined; > > >> > > > > >> > > > > } > > >> > > > > >> > > > > return getter.call(receiver); > > >> > > > > >> > > > > } > > >> > > > > >> > > > > } > > >> > > > > >> > > > > }; > > >> > > > > >> > > > > > > >> > > > > >> > > > > Does it do the trick ? > > >> > > > > >> > > > > > > >> > > > > >> > > > > Frédéric THOMAS > > >> > > > > >> > > > > > > >> > > > > >> > > > > > Date: Thu, 28 May 2015 07:47:45 -0400 > > >> > > > > >> > > > > > Subject: Re: [FalconJX] JXEmitter accessors > > >> > > > > >> > > > > > From: teotigraphix...@gmail.com > > >> > > > > >> > > > > > To: dev@flex.apache.org > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > Interesting Fred, I am no javascript guru so I > need > > >> > > people to > > >> > > > > >> "tell" > > >> > > > > >> > > me > > >> > > > > >> > > > > > what I should have output. > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > So let me get this straight, the left pane is ES6 > > >>and it > > >> > > > > >> converted > > >> > > > > >> > > it to > > >> > > > > >> > > > > > ES5 in the right pane? > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > Mike > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > On Thu, May 28, 2015 at 7:19 AM, Frédéric THOMAS > < > > >> > > > > >> > > > > webdoubl...@hotmail.com> > > >> > > > > >> > > > > > wrote: > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > I just tried in babel, see what it generates: > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > >> > > > > >> > > >> > > > > >> > > >> > > > > > > >> > > > > >> > > > >> > http://babeljs.io/repl/#?experimental=true&evaluate=true&loose=false&spec > > >> > > > > > > >> > > > > >> > > > > >>>>=false&code=class%20A%20{%0A%09constructor%28%29%20{%0A%09%20%20this._p > > >>>>ro > > >> > > > > > > >> > > > > >> > > > > >>>>perty%20%3D%20%22init%22%3B%0A%09}%0A%09get%20property%28%29%3Astring%2 > > >>>>0{ > > >> > > > > > > >> > > > > >> > > > > >>>>%0A%09%09return%20this._property%3B%0A%09}%0A%09%0A%09set%20property%28 > > >>>>va > > >> > > > > > > >> > > > > >> > > > > >>>>lue%3Astring%29%20{%0A%09%09this._property%20%3D%20value%3B%0A%09}%20%0 > > >>>>A% > > >> > > > > > > >> > > > > >> > > > > >>>>09%0A%09showMyValue%28%29%20{%0A%09%09alert%28this._property%29%3B%0A%0 > > >>>>9} > > >> > > > > > > >> > > > > >> > > > > >>>>%0A%0A}%0A%0Aclass%20B%20extends%20A%20{%0A%09get%20property%28%29%3Ast > > >>>>ri > > >> > > > > > > >> > > > > >> > > > > >>>>ng%20{%0A%09%09return%20super.property%3B%0A%09}%0A%09%0A%09set%20prope > > >>>>rt > > >> > > > > > > >> > > > > >> > > > > >>>>y%28value%3Astring%29%20{%0A%09%09super.property%20%3D%20value%3B%0A%09 > > >>>>}% > > >> > > > > >>0A} > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > Frédéric THOMAS > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > > Date: Thu, 28 May 2015 06:54:31 -0400 > > >> > > > > >> > > > > > > > Subject: Re: [FalconJX] JXEmitter accessors > > >> > > > > >> > > > > > > > From: teotigraphix...@gmail.com > > >> > > > > >> > > > > > > > To: dev@flex.apache.org > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > > I’m still surprised that in 2015, TS hasn’t > > >>been > > >> > > forced > > >> > > > > >>to > > >> > > > > >> > > handle > > >> > > > > >> > > > > > > super. > > >> > > > > >> > > > > > > > Are people not using inheritance much in TS? > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > They tell them to use standard getValue(), > > >> > setValue() > > >> > > in > > >> > > > > >>the > > >> > > > > >> > > > > property if > > >> > > > > >> > > > > > > > they need inheritance overrides. > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > I'm kind of bummed about this whole thing, I > > >>stuck > > >> > my > > >> > > > > >>foot in > > >> > > > > >> > > mouth > > >> > > > > >> > > > > here, > > >> > > > > >> > > > > > > > since I totally forgot about this stuff. > Since > > >>I > > >> > > really > > >> > > > > >> wanted > > >> > > > > >> > > to do > > >> > > > > >> > > > > this > > >> > > > > >> > > > > > > > for Josh's POC, I am interested in what he > > >>"needs" > > >> > to > > >> > > get > > >> > > > > >>his > > >> > > > > >> > > project > > >> > > > > >> > > > > > > > working, Josh? > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > Mike > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > On Wed, May 27, 2015 at 7:51 PM, Alex Harui < > > >> > > > > >> aha...@adobe.com> > > >> > > > > >> > > > > wrote: > > >> > > > > >> > > > > > > > > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > On 5/27/15, 4:16 PM, "Michael Schmalle" < > > >> > > > > >> > > teotigraphix...@gmail.com > > >> > > > > >> > > > > > > > >> > > > > >> > > > > > > wrote: > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > >Ok, This needs to be clear to me before I > > >>go off > > >> > > to OZ. > > >> > > > > >> > > > > > > > > > > > >> > > > > >> > > > > > > > > >In Flex JS you have; > > >> > > > > >> > > > > > > > > > > > >> > > > > >> > > > > > > > > >Object.defineProperties(Base.prototype, > /** > > >> > @lends > > >> > > > > >> > > > > {Base.prototype} > > >> > > > > >> > > > > > > */ { > > >> > > > > >> > > > > > > > > >/** @expose */ > > >> > > > > >> > > > > > > > > >text: { > > >> > > > > >> > > > > > > > > >get: /** @this {Base} */ function() { > > >> > > > > >> > > > > > > > > > return "A" + > > >> > > > > >> > > org_apache_flex_utils_Language.superGetter(Base, > > >> > > > > >> > > > > this, > > >> > > > > >> > > > > > > > > >'text'); > > >> > > > > >> > > > > > > > > >}, > > >> > > > > >> > > > > > > > > >set: /** @this {Base} */ function(value) { > > >> > > > > >> > > > > > > > > > if (value != > > >> > > > > >> > > org_apache_flex_utils_Language.superGetter(Base, > > >> > > > > >> > > > > this, > > >> > > > > >> > > > > > > > > >'text')) { > > >> > > > > >> > > > > > > > > > > > >> > > org_apache_flex_utils_Language.superSetter(Base, > > >> > > > > >>this, > > >> > > > > >> > > 'text', > > >> > > > > >> > > > > > > "B" + > > >> > > > > >> > > > > > > > > >value); > > >> > > > > >> > > > > > > > > > } > > >> > > > > >> > > > > > > > > >}}} > > >> > > > > >> > > > > > > > > >); > > >> > > > > >> > > > > > > > > > > > >> > > > > >> > > > > > > > > >I must use this obviously since hardly any > > >> > > actionscript > > >> > > > > >> could > > >> > > > > >> > > be > > >> > > > > >> > > > > cross > > >> > > > > >> > > > > > > > > >compiled if you can't call super > accessors. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > I’m still surprised that in 2015, TS hasn’t > > >>been > > >> > > forced > > >> > > > > >>to > > >> > > > > >> > > handle > > >> > > > > >> > > > > > > super. > > >> > > > > >> > > > > > > > > Are people not using inheritance much in > TS? > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > > > > >> > > > > >> > > > > > > > > >Alex, when you have time, can you explain > > >>what > > >> > > this is > > >> > > > > >> doing > > >> > > > > >> > > so I > > >> > > > > >> > > > > can > > >> > > > > >> > > > > > > > > >implement it. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > I have not read the spec, but > > >> > > Object.defineProperties > > >> > > > > >> appears > > >> > > > > >> > > to > > >> > > > > >> > > > > > > associate > > >> > > > > >> > > > > > > > > a data structure with a “class”. When > asked > > >>to > > >> > > > > >> > > interpret/execute > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > Someinstance.someprop > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > the JS runtime appears to check this data > > >> > structure > > >> > > > > >>first, > > >> > > > > >> and > > >> > > > > >> > > > > call the > > >> > > > > >> > > > > > > > > get or set as needed. As I see it, there > is > > >>no > > >> > way > > >> > > to > > >> > > > > >> switch > > >> > > > > >> > > from > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > SomeSubClass.someProp > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > back to > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > SomeBaseClass.someProp > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > and retain the ‘this’ pointer and scope. > If > > >>you > > >> > > had a > > >> > > > > >> variable > > >> > > > > >> > > > > called > > >> > > > > >> > > > > > > > > super it would still point to the same > > >>instance so > > >> > > > > >> > > super.someProp > > >> > > > > >> > > > > would > > >> > > > > >> > > > > > > > > just cause the runtime to find the > subclass’s > > >> > > property > > >> > > > > >>map. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > In looking around the internet, the > solutions > > >> > > seemed to: > > >> > > > > >> > > > > > > > > 1) get the superclass > > >> > > > > >> > > > > > > > > 2) get the property map of defined > properties > > >> > > > > >> > > > > > > > > 3) get the getter or setter from the data > > >> > structure > > >> > > > > >> > > > > > > > > 4) call it with the right ‘this’ pointer. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > So that’s what is in the current > > >>JSFlexJSEmitter, > > >> > > but it > > >> > > > > >> > > assumes > > >> > > > > >> > > > > > > > > goog.inherit is going to leave references > to > > >>the > > >> > > base > > >> > > > > >> class in > > >> > > > > >> > > a > > >> > > > > >> > > > > > > > > particular way. TS probably leaves > > >>references to > > >> > > base > > >> > > > > >> classes > > >> > > > > >> > > some > > >> > > > > >> > > > > > > how so > > >> > > > > >> > > > > > > > > some abstraction around step 1 is probably > > >> > > required, but > > >> > > > > >> steps > > >> > > > > >> > > 2 > > >> > > > > >> > > > > > > through 4 > > >> > > > > >> > > > > > > > > can be the same. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > It is step 4 that re-introduces > “re-writing” > > >>that > > >> > > you > > >> > > > > >>may > > >> > > > > >> be > > >> > > > > >> > > > > referring > > >> > > > > >> > > > > > > to > > >> > > > > >> > > > > > > > > as hell. The super setter again becomes a > > >> > function > > >> > > > > >>call, > > >> > > > > >> so > > >> > > > > >> > > the > > >> > > > > >> > > > > AST > > >> > > > > >> > > > > > > walk > > >> > > > > >> > > > > > > > > needs to know that and walk the tree > > >>differently, > > >> > > > > >>saving a > > >> > > > > >> > > whole > > >> > > > > >> > > > > > > branch to > > >> > > > > >> > > > > > > > > be evaluated as the parameter to the > function > > >> > call. > > >> > > > > >>IOW, a > > >> > > > > >> > > binary > > >> > > > > >> > > > > > > > > operator becomes a function call. I’ll bet > > >>there > > >> > > are > > >> > > > > >>still > > >> > > > > >> > > bugs > > >> > > > > >> > > > > in the > > >> > > > > >> > > > > > > > > current JSFlexJSEmitter. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > And I think I still haven’t fixed the > > >>scenario > > >> > where > > >> > > > > >>only a > > >> > > > > >> > > getter > > >> > > > > >> > > > > or > > >> > > > > >> > > > > > > > > setter is overridden. The generated code > > >>must > > >> > > > > >>propagate a > > >> > > > > >> > > “pass > > >> > > > > >> > > > > > > through” > > >> > > > > >> > > > > > > > > for the missing getter or setter to the > > >>subclass’s > > >> > > data > > >> > > > > >> > > structure > > >> > > > > >> > > > > > > > > otherwise the runtime will not find the > > >>setter or > > >> > > getter > > >> > > > > >> and > > >> > > > > >> > > think > > >> > > > > >> > > > > the > > >> > > > > >> > > > > > > > > property is now read-only or write-only. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > > > > >> > > > > >> > > > > > > > > >So correct me if I am wrong but, since > > >>there is > > >> > > really > > >> > > > > >>no > > >> > > > > >> > > solution > > >> > > > > >> > > > > > > without > > >> > > > > >> > > > > > > > > >an external utility to call a super > > >>accessor, we > > >> > > can't > > >> > > > > >> really > > >> > > > > >> > > say > > >> > > > > >> > > > > that > > >> > > > > >> > > > > > > > > >this > > >> > > > > >> > > > > > > > > >transpiler is producing vanilla > javascript. > > >> > > Chicken egg > > >> > > > > >> thing. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > Technically, you could inline everything in > > >>the > > >> > > utility > > >> > > > > >> > > function > > >> > > > > >> > > > > and > > >> > > > > >> > > > > > > still > > >> > > > > >> > > > > > > > > called it vanilla. But it would be > high-fat > > >> > > vanilla. > > >> > > > > >>;-) > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > A question for Josh is whether it would be > > >>ok to > > >> > > have a > > >> > > > > >> Google > > >> > > > > >> > > > > Closure > > >> > > > > >> > > > > > > > > Library dependency. These libraries exist > to > > >> > > > > >>encapsulate > > >> > > > > >> some > > >> > > > > >> > > of > > >> > > > > >> > > > > these > > >> > > > > >> > > > > > > > > object oriented patterns like finding the > > >>base > > >> > > class and > > >> > > > > >> > > loading > > >> > > > > >> > > > > > > > > dependency definitions in a particular > > >>order. It > > >> > > seems > > >> > > > > >>to > > >> > > > > >> be > > >> > > > > >> > > > > somewhat > > >> > > > > >> > > > > > > > > pay-as-you-go. If no inheritance, then > > >>almost no > > >> > > > > >>“goog”. > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > -Alex > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > >> > > >> > > > > >> > > >> > > > > > > >> > > > > > > >> > > > > >> > > > > >> > > > > > > > >