From 080a844457fc5c091ca8ee342af72568e985b1e1 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 14 Mar 2015 04:44:51 +1100 Subject: [PATCH] rename "reassigned" to "constant" to reflect purpose of the property better --- src/babel/transformation/transformers/es6/classes.js | 2 +- .../transformation/transformers/es6/destructuring.js | 2 +- src/babel/transformation/transformers/es6/tail-call.js | 2 +- src/babel/traversal/binding.js | 4 ++-- src/babel/traversal/path/conversion.js | 2 +- src/babel/traversal/path/index.js | 8 +++++--- src/babel/traversal/scope.js | 8 ++++---- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/babel/transformation/transformers/es6/classes.js b/src/babel/transformation/transformers/es6/classes.js index bf66ef32f1..edcb986330 100644 --- a/src/babel/transformation/transformers/es6/classes.js +++ b/src/babel/transformation/transformers/es6/classes.js @@ -209,7 +209,7 @@ class ClassTransformer { } // we have no constructor, we have a super, and the super doesn't appear to be falsy - if (!this.hasConstructor && this.hasSuper) { // todo: t.evaluateTruthy(superName, this.scope) !== false + if (!this.hasConstructor && this.hasSuper && this.path.get("superClass").evaluateTruthy() !== false) { var helperName = "class-super-constructor-call"; if (this.isLoose) helperName += "-loose"; constructor.body.body.push(util.template(helperName, { diff --git a/src/babel/transformation/transformers/es6/destructuring.js b/src/babel/transformation/transformers/es6/destructuring.js index 7fecf07eef..a27e70c907 100644 --- a/src/babel/transformation/transformers/es6/destructuring.js +++ b/src/babel/transformation/transformers/es6/destructuring.js @@ -432,7 +432,7 @@ class DestructuringTransformer { } else { arrayRef = this.scope.generateUidBasedOnNode(arrayRef); this.nodes.push(this.buildVariableDeclaration(arrayRef, toArray)); - this.getBinding(arrayRef.name).assignTypeGeneric("Array"); + //this.getBinding(arrayRef.name).assignTypeGeneric("Array"); } // diff --git a/src/babel/transformation/transformers/es6/tail-call.js b/src/babel/transformation/transformers/es6/tail-call.js index 122f456f2a..c0efe08ec5 100644 --- a/src/babel/transformation/transformers/es6/tail-call.js +++ b/src/babel/transformation/transformers/es6/tail-call.js @@ -144,7 +144,7 @@ class TailCallTransformer { // check if the ownerId has been reassigned, if it has then it's not safe to // perform optimisations var ownerIdInfo = this.scope.getBinding(this.ownerId.name); - return ownerIdInfo && ownerIdInfo.reassigned; + return ownerIdInfo && !ownerIdInfo.constant; } run() { diff --git a/src/babel/traversal/binding.js b/src/babel/traversal/binding.js index fe4d29a096..ee2cdddf0a 100644 --- a/src/babel/traversal/binding.js +++ b/src/babel/traversal/binding.js @@ -3,7 +3,7 @@ import * as t from "../types"; export default class Binding { constructor({ identifier, scope, path, kind }) { this.identifier = identifier; - this.reassigned = false; + this.constant = true; this.scope = scope; this.path = path; this.kind = kind; @@ -50,7 +50,7 @@ export default class Binding { */ reassign() { - this.reassigned = true; + this.constant = false; if (this.typeAnnotationInferred) { // destroy the inferred typeAnnotation diff --git a/src/babel/traversal/path/conversion.js b/src/babel/traversal/path/conversion.js index e0271db76d..24293c7d8b 100644 --- a/src/babel/traversal/path/conversion.js +++ b/src/babel/traversal/path/conversion.js @@ -1,4 +1,4 @@ -import * as t from "./index"; +import * as t from "../../types"; /** * Description diff --git a/src/babel/traversal/path/index.js b/src/babel/traversal/path/index.js index c6891e07b6..f5970b7cf4 100644 --- a/src/babel/traversal/path/index.js +++ b/src/babel/traversal/path/index.js @@ -61,8 +61,10 @@ export default class TraversalPath { return this.data[key] = val; } - getData(key) { - return this.data[key]; + getData(key, def) { + var val = this.data[key]; + if (!val && def) val = this.data[key] = def; + return val; } setScope(file?) { @@ -270,7 +272,7 @@ export default class TraversalPath { } } else if (this.isIdentifier()) { var binding = this.scope.getBinding(this.node.name); - if (!binding || binding.reassigned) return; + if (!binding || !binding.constant) return; if (binding.path === this) { return this; diff --git a/src/babel/traversal/scope.js b/src/babel/traversal/scope.js index 4f4619add1..e7f8ea1791 100644 --- a/src/babel/traversal/scope.js +++ b/src/babel/traversal/scope.js @@ -44,11 +44,11 @@ var programReferenceVisitor = { } else if (t.isLabeledStatement(node)) { state.addGlobal(node); } else if (t.isAssignmentExpression(node)) { - scope.registerBindingReassignment(this.get("left"), this.get("right")); + scope.registerConstantViolation(this.get("left"), this.get("right")); } else if (t.isUpdateExpression(node)) { - // TODO + scope.registerConstantViolation(this.get("argument"), null); } else if (t.isUnaryExpression(node) && node.operator === "delete") { - scope.registerBindingReassignment(this.get("left"), null); + scope.registerConstantViolation(this.get("left"), null); } } }; @@ -320,7 +320,7 @@ export default class Scope { * Description */ - registerBindingReassignment(left: TraversalPath, right: TraversalPath) { + registerConstantViolation(left: TraversalPath, right: TraversalPath) { var ids = left.getBindingIdentifiers(); for (var name in ids) { var binding = this.getBinding(name);