From d0a2bd170e6fea9bfb44bab82ea2facc9f9be1da Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 16 Nov 2014 14:33:37 +1100 Subject: [PATCH] clean up constants transformer --- .../transformation/transformers/constants.js | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) 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)); } }); };