move traversal scope logic and binding into it's own folder, rename Scope#generateTemp to generateDeclaredUidIdentifier, rename Scope#generateUidBasedOnNode to Scope#generateUidIdentifierBasedOnNode

This commit is contained in:
Sebastian McKenzie 2015-05-14 19:12:26 +01:00
parent 55c99661be
commit b8a01a9919
13 changed files with 32 additions and 30 deletions

View File

@ -26,7 +26,7 @@ var getObjRef = function (node, nodes, file, scope) {
throw new Error(`We can't explode this node type ${node.type}`);
}
var temp = scope.generateUidBasedOnNode(ref);
var temp = scope.generateUidIdentifierBasedOnNode(ref);
nodes.push(t.variableDeclaration("var", [
t.variableDeclarator(temp, ref)
]));
@ -38,7 +38,7 @@ var getPropRef = function (node, nodes, file, scope) {
var key = t.toComputedKey(node, prop);
if (t.isLiteral(key)) return key;
var temp = scope.generateUidBasedOnNode(prop);
var temp = scope.generateUidIdentifierBasedOnNode(prop);
nodes.push(t.variableDeclaration("var", [
t.variableDeclarator(temp, prop)
]));

View File

@ -6,7 +6,7 @@ export default function (decorators, scope) {
var expression = decorator.expression;
if (!t.isMemberExpression(expression)) continue;
var temp = scope.generateMemoisedReference(expression.object);
var temp = scope.maybeGenerateMemoised(expression.object);
var ref;
var nodes = [];

View File

@ -52,7 +52,7 @@ export default class CommonJSFormatter extends DefaultFormatter {
} else if (this.noInteropRequireImport) {
this.internalRemap[variableName.name] = t.memberExpression(ref, t.identifier("default"));
} else {
var uid = this.scope.generateUidBasedOnNode(node, "import");
var uid = this.scope.generateUidIdentifierBasedOnNode(node, "import");
nodes.push(t.variableDeclaration("var", [
t.variableDeclarator(uid, t.callExpression(this.file.addHelper("interop-require-default"), [ref]))
@ -111,7 +111,7 @@ export default class CommonJSFormatter extends DefaultFormatter {
} else if (this.isModuleType(node, "absoluteDefault")) {
call = t.memberExpression(call, t.identifier("default"));
} else {
uid = this.scope.generateUidBasedOnNode(node, "import");
uid = this.scope.generateUidIdentifierBasedOnNode(node, "import");
}
uid = uid || node.specifiers[0].local;

View File

@ -173,7 +173,7 @@ class ClassTransformer {
if (this.hasSuper) {
closureArgs.push(superName);
superName = this.scope.generateUidBasedOnNode(superName);
superName = this.scope.generateUidIdentifierBasedOnNode(superName);
closureParams.push(superName);
this.superName = superName;

View File

@ -295,7 +295,7 @@ class DestructuringTransformer {
// we need to assign the current value of the assignment to avoid evaluating
// it more than once
var tempValueRef = this.scope.generateUidBasedOnNode(valueRef);
var tempValueRef = this.scope.generateUidIdentifierBasedOnNode(valueRef);
var declar = t.variableDeclaration("var", [
t.variableDeclarator(tempValueRef, valueRef)
@ -377,7 +377,7 @@ class DestructuringTransformer {
// only evaluated once
if (pattern.properties.length > 1 && t.isMemberExpression(objRef)) {
var temp = this.scope.generateUidBasedOnNode(objRef, this.file);
var temp = this.scope.generateUidIdentifierBasedOnNode(objRef, this.file);
this.nodes.push(this.buildVariableDeclaration(temp, objRef));
objRef = temp;
}
@ -461,7 +461,7 @@ class DestructuringTransformer {
// array
arrayRef = toArray;
} else {
arrayRef = this.scope.generateUidBasedOnNode(arrayRef);
arrayRef = this.scope.generateUidIdentifierBasedOnNode(arrayRef);
this.arrays[arrayRef.name] = true;
this.nodes.push(this.buildVariableDeclaration(arrayRef, toArray));
}
@ -500,7 +500,7 @@ class DestructuringTransformer {
var shouldMemoise = true;
if (!t.isArrayExpression(ref) && !t.isMemberExpression(ref)) {
var memo = this.scope.generateMemoisedReference(ref, true);
var memo = this.scope.maybeGenerateMemoised(ref, true);
if (memo) {
this.nodes.push(this.buildVariableDeclaration(memo, ref));
ref = memo;

View File

@ -75,7 +75,7 @@ export var ObjectExpression = {
if (!hasComputed) return;
var initProps = [];
var objId = scope.generateUidBasedOnNode(parent);
var objId = scope.generateUidIdentifierBasedOnNode(parent);
//

View File

@ -84,7 +84,7 @@ export function CallExpression(node, parent, scope) {
var callee = node.callee;
if (this.get("callee").isMemberExpression()) {
var temp = scope.generateMemoisedReference(callee.object);
var temp = scope.maybeGenerateMemoised(callee.object);
if (temp) {
callee.object = t.assignmentExpression("=", temp, callee.object);
contextLiteral = temp;

View File

@ -26,7 +26,7 @@ function generator(node) {
}
function array(node, parent, scope, file) {
var uid = scope.generateUidBasedOnNode(parent);
var uid = scope.generateUidIdentifierBasedOnNode(parent);
var container = util.template("array-comprehension-container", {
KEY: uid

View File

@ -11,7 +11,7 @@ function getTempId(scope) {
var id = scope.path.getData("functionBind");
if (id) return id;
id = scope.generateTemp("context");
id = scope.generateDeclaredUidIdentifier("context");
return scope.path.setData("functionBind", id);
}

View File

@ -24,7 +24,7 @@ export function AssignmentExpression(node, parent, scope, file) {
var nodes = [];
var left = node.left.object;
var temp = scope.generateMemoisedReference(left);
var temp = scope.maybeGenerateMemoised(left);
nodes.push(t.expressionStatement(t.assignmentExpression("=", temp, left)));
nodes.push(buildDefaultsCallExpression(node, temp, file));

View File

@ -287,7 +287,7 @@ export default class TraversalPath {
return this.parentPath.insertAfter(nodes);
} else if (this.isPreviousType("Expression") || (this.parentPath.isForStatement() && this.key === "init")) {
if (this.node) {
var temp = this.scope.generateTemp();
var temp = this.scope.generateDeclaredUidIdentifier();
nodes.unshift(t.expressionStatement(t.assignmentExpression("=", temp, this.node)));
nodes.push(t.expressionStatement(temp));
}

View File

@ -1,4 +1,4 @@
import * as t from "../types";
import * as t from "../../types";
export default class Binding {
constructor({ identifier, scope, path, kind }) {

View File

@ -1,15 +1,15 @@
import includes from "lodash/collection/includes";
import { explode } from "./visitors";
import traverse from "./index";
import { explode } from "../visitors";
import traverse from "../index";
import defaults from "lodash/object/defaults";
import * as messages from "../messages";
import * as messages from "../../messages";
import Binding from "./binding";
import globals from "globals";
import flatten from "lodash/array/flatten";
import extend from "lodash/object/extend";
import object from "../helpers/object";
import object from "../../helpers/object";
import each from "lodash/collection/each";
import * as t from "../types";
import * as t from "../../types";
var functionVariableVisitor = {
enter(node, parent, scope, state) {
@ -167,7 +167,7 @@ export default class Scope {
* Description
*/
generateTemp(name: string = "temp") {
generateDeclaredUidIdentifier(name: string = "temp") {
var id = this.generateUidIdentifier(name);
this.push({ id });
return id;
@ -213,7 +213,7 @@ export default class Scope {
* Description
*/
generateUidBasedOnNode(parent: Object, defaultName?: String): Object {
generateUidIdentifierBasedOnNode(parent: Object, defaultName?: String): Object {
var node = parent;
if (t.isAssignmentExpression(parent)) {
@ -289,12 +289,14 @@ export default class Scope {
* Description
*/
generateMemoisedReference(node: Object, dontPush?: boolean): ?Object {
if (this.isStatic(node)) return null;
var id = this.generateUidBasedOnNode(node);
if (!dontPush) this.push({ id });
return id;
maybeGenerateMemoised(node: Object, dontPush?: boolean): ?Object {
if (this.isStatic(node)) {
return null;
} else {
var id = this.generateUidIdentifierBasedOnNode(node);
if (!dontPush) this.push({ id });
return id;
}
}
/**