From 25742678cc510034e599bfc4fcf811bca19d3b2f Mon Sep 17 00:00:00 2001 From: Morgan Phillips Date: Tue, 7 Jun 2016 14:12:19 -0700 Subject: [PATCH] Bug 1255167 - Default destructuring arguments should show up as lexical dependencies; r=jorendorff --HG-- extra : rebase_source : 88d9870638eb5565410a5acc23c19f119e56a117 --- js/src/frontend/Parser.cpp | 5 +++++ .../ecma_6/Object/destructuring-shorthand-defaults.js | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 1361b6a96ec0..090d3a029eee 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -9352,7 +9352,12 @@ Parser::objectLiteral(YieldHandling yieldHandling, PossibleError* return null(); tokenStream.consumeKnownToken(TOK_ASSIGN); + bool saved = pc->inDeclDestructuring; + // Setting `inDeclDestructuring` to false allows name use to be noted + // in `identifierName` See Bug: 1255167. + pc->inDeclDestructuring = false; Node rhs = assignExpr(InAllowed, yieldHandling, TripledotProhibited); + pc->inDeclDestructuring = saved; if (!rhs) return null(); diff --git a/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js b/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js index 09adc7719977..879ff33f2954 100644 --- a/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js +++ b/js/src/tests/ecma_6/Object/destructuring-shorthand-defaults.js @@ -123,5 +123,14 @@ assertEq((({a = 0} = {}) => a)({a: 1}), 1); assertEq(j, 2); } +// Default destructuring values, which are variables, should be defined +// within closures (Bug 1255167). +{ + let f = function(a){ + return (function({aa = a}){ return aa; })({}); + }; + assertEq(f(9999), 9999); +} + if (typeof reportCompare == "function") reportCompare(true, true);