diff --git a/lib/6to5/transformation/transformers/constants.js b/lib/6to5/transformation/transformers/constants.js index 965d33dda3..15f2c8c45b 100644 --- a/lib/6to5/transformation/transformers/constants.js +++ b/lib/6to5/transformation/transformers/constants.js @@ -9,24 +9,27 @@ exports.ForOfStatement = exports.ForStatement = function (node, parent, file) { var constants = {}; - var check = function (node, names, parent) { - _.each(names, function (name) { + var check = function (parent, names) { + _.each(names, function (nameNode, name) { if (!_.has(constants, name)) return; if (parent && t.isBlockStatement(parent) && parent !== constants[name]) return; - throw file.errorWithNode(node, name + " is read-only"); + throw file.errorWithNode(nameNode, name + " is read-only"); }); }; var getIds = function (node) { - return t.getIds(node, false, ["MemberExpression"]); + return t.getIds(node, true, ["MemberExpression"]); }; _.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], parent); + _.each(getIds(declar), function (nameNode, name) { + var names = {}; + names[name] = nameNode; + check(parent, names); + constants[name] = parent; }); @@ -42,9 +45,10 @@ exports.ForStatement = function (node, parent, file) { traverse(node, function (child, parent) { if (child._ignoreConstant) return; + if (t.isVariableDeclaration(child)) return; - if (t.isDeclaration(child) || t.isAssignmentExpression(child)) { - check(child, getIds(child), parent); + if (t.isVariableDeclarator(child) || t.isDeclaration(child) || t.isAssignmentExpression(child)) { + check(parent, getIds(child)); } }); };