From 58fac2e2beb92f0e0a1b373e8531c378ef00ff44 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sat, 15 Nov 2014 02:49:49 +1100 Subject: [PATCH] support duplicate constants within different block scopes - fixes #161 --- lib/6to5/transformation/transformers/constants.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/6to5/transformation/transformers/constants.js b/lib/6to5/transformation/transformers/constants.js index 9fe817e1ab..7c342edee7 100644 --- a/lib/6to5/transformation/transformers/constants.js +++ b/lib/6to5/transformation/transformers/constants.js @@ -9,11 +9,12 @@ exports.ForOfStatement = exports.ForStatement = function (node, parent, file) { var constants = []; - var check = function (node, names) { + var check = function (node, names, parent) { _.each(names, function (name) { - if (constants.indexOf(name) >= 0) { - throw file.errorWithNode(node, name + " is read-only"); - } + if (!_.has(constants, name)) return; + if (t.isBlockStatement(parent) && parent !== constants[name]) return; + + throw file.errorWithNode(node, name + " is read-only"); }); }; @@ -21,12 +22,12 @@ exports.ForStatement = function (node, parent, file) { return t.getIds(node, false, ["MemberExpression"]); }; - _.each(node.body, function (child) { + _.each(node.body, function (child, parent) { if (child && t.isVariableDeclaration(child, { kind: "const" })) { _.each(child.declarations, function (declar) { _.each(getIds(declar), function (name) { - check(declar, [name]); - constants.push(name); + check(declar, [name], parent); + constants[name] = parent; }); declar._ignoreConstant = true;