rename own binding inside constructor if it collides with our class reference - fixes #1077

This commit is contained in:
Sebastian McKenzie 2015-03-30 18:06:59 +11:00
parent 1641caedc4
commit c4d68897b3
3 changed files with 27 additions and 3 deletions

View File

@ -255,9 +255,11 @@ class ClassTransformer {
for (var i = 0; i < classBody.length; i++) {
var node = classBody[i];
var path = classBodyPaths[i];
if (t.isMethodDefinition(node)) {
var isConstructor = node.kind === "constructor";
if (isConstructor) this.verifyConstructor(classBodyPaths[i]);
if (isConstructor) this.verifyConstructor(path);
var replaceSupers = new ReplaceSupers({
methodNode: node,
@ -272,7 +274,7 @@ class ClassTransformer {
replaceSupers.replace();
if (isConstructor) {
this.pushConstructor(node);
this.pushConstructor(node, path);
} else {
this.pushMethod(node);
}
@ -466,7 +468,13 @@ class ClassTransformer {
* Replace the constructor body of our class.
*/
pushConstructor(method: { type: "MethodDefinition" }) {
pushConstructor(method: { type: "MethodDefinition" }, path: TraversalPath) {
// https://github.com/babel/babel/issues/1077
var fnPath = path.get("value");
if (fnPath.scope.hasOwnBinding(this.classRef.name)) {
fnPath.scope.rename(this.classRef.name);
}
var construct = this.constructor;
var fn = method.value;

View File

@ -0,0 +1,7 @@
class Example {
constructor() {
var Example;
}
}
let t = new Example();

View File

@ -0,0 +1,9 @@
"use strict";
var Example = function Example() {
babelHelpers.classCallCheck(this, Example);
var _Example;
};
var t = new Example();