Issue #1598 -- enabling super() calls in static functions in class bodies.
This commit is contained in:
parent
c6c988ae28
commit
50982b668b
|
@ -537,7 +537,7 @@
|
|||
return this;
|
||||
};
|
||||
Call.prototype.superReference = function(o) {
|
||||
var method, name;
|
||||
var accesses, method, name;
|
||||
method = o.scope.method;
|
||||
if (!method) throw SyntaxError('cannot call super outside of a function.');
|
||||
name = method.name;
|
||||
|
@ -545,7 +545,10 @@
|
|||
throw SyntaxError('cannot call super on an anonymous function.');
|
||||
}
|
||||
if (method.klass) {
|
||||
return (new Value(new Literal(method.klass), [new Access(new Literal("__super__")), new Access(new Literal(name))])).compile(o);
|
||||
accesses = [new Access(new Literal('__super__'))];
|
||||
if (method.static) accesses.push(new Access(new Literal('constructor')));
|
||||
accesses.push(new Access(new Literal(name)));
|
||||
return (new Value(new Literal(method.klass), accesses)).compile(o);
|
||||
} else {
|
||||
return "" + name + ".__super__.constructor";
|
||||
}
|
||||
|
@ -973,7 +976,9 @@
|
|||
assign = new Assign(new Literal(this.externalCtor), func);
|
||||
}
|
||||
} else {
|
||||
if (!assign.variable["this"]) {
|
||||
if (assign.variable["this"]) {
|
||||
func.static = true;
|
||||
} else {
|
||||
assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
|
||||
if (func instanceof Code && func.bound) {
|
||||
this.boundFuncs.push(base);
|
||||
|
|
|
@ -475,7 +475,10 @@ exports.Call = class Call extends Base
|
|||
{name} = method
|
||||
throw SyntaxError 'cannot call super on an anonymous function.' unless name?
|
||||
if method.klass
|
||||
(new Value (new Literal method.klass), [new Access(new Literal "__super__"), new Access new Literal name]).compile o
|
||||
accesses = [new Access(new Literal '__super__')]
|
||||
accesses.push new Access new Literal 'constructor' if method.static
|
||||
accesses.push new Access new Literal name
|
||||
(new Value (new Literal method.klass), accesses).compile o
|
||||
else
|
||||
"#{name}.__super__.constructor"
|
||||
|
||||
|
@ -856,7 +859,9 @@ exports.Class = class Class extends Base
|
|||
@externalCtor = o.scope.freeVariable 'class'
|
||||
assign = new Assign new Literal(@externalCtor), func
|
||||
else
|
||||
unless assign.variable.this
|
||||
if assign.variable.this
|
||||
func.static = yes
|
||||
else
|
||||
assign.variable = new Value(new Literal(name), [(new Access new Literal 'prototype'), new Access base ])
|
||||
if func instanceof Code and func.bound
|
||||
@boundFuncs.push base
|
||||
|
|
Loading…
Reference in New Issue