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
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > > > >
> >> > > > > >> > > > > > >
> >> > > > > >> > > > > > >
> >> > > > > >> > > > >
> >> > > > > >> > > > >
> >> > > > > >> > >
> >> > > > > >> > >
> >> > > > > >>
> >> > > > > >>
> >> > > > >
> >> > > > >
> >> > >
> >> > >
> >> >
> >                                       
> 
                                          

Reply via email to