fix bare super call being illegal in non-constructors

This commit is contained in:
Sebastian McKenzie
2015-01-22 07:54:01 +11:00
parent bed2826e3b
commit 418de75e77

View File

@@ -202,20 +202,21 @@ ReplaceSupers.prototype.specHandle = function (getThisReference, node, parent) {
throw this.file.errorWithNode(node, "illegal use of bare super");
}
} else if (t.isCallExpression(node)) {
// super(); is illegal inside non-constructors
// https://esdiscuss.org/topic/super-call-in-methods
// https://twitter.com/wycats/status/544553184396836864
if (methodNode.key.name !== "constructor") {
var methodName = methodNode.key.name || "METHOD_NAME";
throw this.file.errorWithNode(node, "Direct super call is illegal in non-constructor, use super." + methodName + "() instead");
}
var callee = node.callee;
if (t.isIdentifier(callee, { name: "super" })) {
// super(); -> _get(Object.getPrototypeOf(ClassName), "MethodName", this).call(this);
property = methodNode.key;
computed = methodNode.computed;
args = node.arguments;
// bare `super` call is illegal inside non-constructors
// - https://esdiscuss.org/topic/super-call-in-methods
// - https://twitter.com/wycats/status/544553184396836864
if (methodNode.key.name !== "constructor") {
var methodName = methodNode.key.name || "METHOD_NAME";
console.log(node);
throw this.file.errorWithNode(node, "Direct super call is illegal in non-constructor, use super." + methodName + "() instead");
}
} else {
if (!t.isMemberExpression(callee)) return;
if (callee.object.name !== "super") return;