diff --git a/lib/6to5/transformation/helpers/explode-assignable-expression.js b/lib/6to5/transformation/helpers/explode-assignable-expression.js index 6f3903574f..3c637c4f56 100644 --- a/lib/6to5/transformation/helpers/explode-assignable-expression.js +++ b/lib/6to5/transformation/helpers/explode-assignable-expression.js @@ -5,9 +5,25 @@ var t = require("../../types"); var getObjRef = function (node, nodes, file, scope) { var ref; if (t.isIdentifier(node)) { - ref = node; + if (scope.has(node.name, true)) { + // this variable is declared in scope so we can be 100% sure + // that evaluating it multiple times wont trigger a getter + // or something else + return node; + } else { + // could possibly trigger a getter so we need to only evaluate + // it once + ref = node; + } } else if (t.isMemberExpression(node)) { ref = node.object; + + if (t.isIdentifier(ref) && scope.has(ref.name)) { + // the object reference that we need to save is locally declared + // so as per the previous comment we can be 100% sure evaluating + // it multiple times will be safe + return ref; + } } else { throw new Error("We can't explode this node type " + node.type); }