Making "super" work outside a literal?

Oliver Hunt oliver at apple.com
Sun Jun 26 10:49:12 PDT 2011


On Jun 26, 2011, at 9:29 AM, Brendan Eich wrote:

> On Jun 26, 2011, at 3:05 AM, Allen Wirfs-Brock wrote:
> 
>> What property name would be be used in such implicit super calls?  A function doesn't know what property name was used to access it.
> 
> In the languages and systems that have super()-only, a method always has a name.
> 
> So we could define "method that can use super" narrowly, as the new syntax in object initialiser, or in class body. IIRC you clarified that any nested function expression with such a method doesn't get the same super -- indeed gets undefined (I think; still some questions here related to |this| binding).
> 
> 
>> Using an implicit property name in a super call would require that every method call implicitly pass the name used to access the property.  This is just like the |here| problem.
> 
> No, not if the compiler sees the method name and burns it into the function object. Then it's just an internal property, analogous to static super. This is what engines do today with named function forms (definitions, named function expressions).

I don't follow what you're saying here --

SomePrototype.foo = function() { super() }

Where is the function name hardcoded?  Certainly JSC makes no distinction in behaviour of function expressions in any context.  The only time a function object created by a function expression will have a name, is when the optional name is provided.  That then raises what super() is in the case of

SomePrototype.foo = function bar() { super() }

When this thread initially started my thought was "yes that sounds great!" but i very rapidly came to the conclusion that non-lexical super just isn't workable without introducing inefficiencies in all call sites regardless of whether the dynamic-super feature is used.

--Oliver

> 
> /be
> 
>> 
>> Allen
>> 
>> On Jun 25, 2011, at 10:12 PM, Brendan Eich wrote:
>> 
>>> On Jun 25, 2011, at 2:10 PM, Brendan Eich wrote:
>>> 
>>>> Should we really constrain super calls in methods to be only of the same-named method in the superclass? Conciseness is better but the restriction seems worse. Is it necessary in Ruby or CoffeeScript?
>>> 
>>> Consider also that the ES.next 'super' proposals allow super.baz where super.baz is a property other than a method. That would not be possible with 'super'-only.
>>> 
>>> /be
>>> _______________________________________________
>>> es-discuss mailing list
>>> es-discuss at mozilla.org
>>> https://mail.mozilla.org/listinfo/es-discuss
>> 
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss



More information about the es-discuss mailing list