I recall that I ran into the super getters and setters issue in TypeScript
pretty quickly. I would like to see them working in ActionScript.

- Josh
On May 28, 2015 3:54 AM, "Michael Schmalle" <teotigraphix...@gmail.com>
wrote:

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