From ed4a5fb811648ac244d8ff15b601e8c8e6b4d86f Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Tue, 10 Nov 2015 16:44:28 -0800 Subject: [PATCH] get rid of _let --- .../src/index.js | 16 ++++------------ .../rest-binding-deoptimisation/expected.js | 2 +- packages/babel-types/src/constants.js | 2 ++ packages/babel-types/src/validators.js | 5 +++-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-block-scoping/src/index.js b/packages/babel-plugin-transform-es2015-block-scoping/src/index.js index 3f676459f0..a0bffa579a 100644 --- a/packages/babel-plugin-transform-es2015-block-scoping/src/index.js +++ b/packages/babel-plugin-transform-es2015-block-scoping/src/index.js @@ -71,7 +71,7 @@ let buildRetCheck = template(` function isBlockScoped(node) { if (!t.isVariableDeclaration(node)) return false; - if (node._let) return true; + if (node[t.BLOCK_SCOPED_SYMBOL]) return true; if (node.kind !== "let" && node.kind !== "const") return false; return true; } @@ -85,18 +85,13 @@ function convertBlockScopedToVar(node, parent, scope) { } } + node[t.BLOCK_SCOPED_SYMBOL] = true; node._let = true; node.kind = "var"; } -function isVar(node, parent) { - return t.isVariableDeclaration(node, { kind: "var" }) && !isBlockScoped(node, parent); -} - -function standardizeLets(declars) { - for (let declar of (declars: Array)) { - delete declar._let; - } +function isVar(node) { + return t.isVariableDeclaration(node, { kind: "var" }) && !isBlockScoped(node); } function replace(path, node, scope, remaps) { @@ -527,9 +522,6 @@ class BlockScoping { // no let references so we can just quit if (!this.hasLetReferences) return; - // set let references to plain let references - standardizeLets(declarators); - let state = { letReferences: this.letReferences, closurify: false, diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-binding-deoptimisation/expected.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-binding-deoptimisation/expected.js index 80224dbe80..af7c898bdc 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-binding-deoptimisation/expected.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-binding-deoptimisation/expected.js @@ -1,4 +1,4 @@ -const deepAssign = function () { +var deepAssign = function () { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } diff --git a/packages/babel-types/src/constants.js b/packages/babel-types/src/constants.js index 7cccc83192..8d764200c1 100644 --- a/packages/babel-types/src/constants.js +++ b/packages/babel-types/src/constants.js @@ -22,3 +22,5 @@ export const INHERIT_KEYS = { optional: ["typeAnnotation", "typeParameters", "returnType"], force: ["start", "loc", "end"] }; + +export const BLOCK_SCOPED_SYMBOL = Symbol("var used to be block scoped"); diff --git a/packages/babel-types/src/validators.js b/packages/babel-types/src/validators.js index 6460b9ae1f..019cec3f0b 100644 --- a/packages/babel-types/src/validators.js +++ b/packages/babel-types/src/validators.js @@ -3,6 +3,7 @@ import { getBindingIdentifiers } from "./retrievers"; import esutils from "esutils"; import * as t from "./index"; +import { BLOCK_SCOPED_SYMBOL } from "./constants"; /** * Check if the input `node` is a binding identifier. @@ -169,7 +170,7 @@ export function isValidIdentifier(name: string): boolean { */ export function isLet(node: Object): boolean { - return t.isVariableDeclaration(node) && (node.kind !== "var" || node._let); + return t.isVariableDeclaration(node) && (node.kind !== "var" || node[BLOCK_SCOPED_SYMBOL]); } /** @@ -185,7 +186,7 @@ export function isBlockScoped(node: Object): boolean { */ export function isVar(node: Object): boolean { - return t.isVariableDeclaration(node, { kind: "var" }) && !node._let; + return t.isVariableDeclaration(node, { kind: "var" }) && !node[BLOCK_SCOPED_SYMBOL]; } /**