082009fc3d
Previously, the Parser stored a Scope alongside a RewritableExpression for each potential destructuring assignment. This Scope was later used during rewriting to set the correct context for the rewriting. But this approach failed if a new Scope was inserted into the Scope chain between the time the assignment was parsed and when it was rewritten. By storing the Scope directly in RewritableExpression, ReparentExpressionScopes() is able to appropriately re-scope such expressions prior to their rewriting. Bug: chromium:779457 Change-Id: Ieb429a3da841f76d5798610af59da4fccb000652 Reviewed-on: https://chromium-review.googlesource.com/767666 Commit-Queue: Adam Klein <adamk@chromium.org> Reviewed-by: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#49368}
28 lines
709 B
JavaScript
28 lines
709 B
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
(function testEager() {
|
|
(function({name = [foo] = eval("[]")}) {})({});
|
|
(function([name = [foo] = eval("[]")]) {})([]);
|
|
})();
|
|
|
|
(function testLazy() {
|
|
function f({name = [foo] = eval("[]")}) {}
|
|
function g([name = [foo] = eval("[]")]) {}
|
|
f({});
|
|
g([]);
|
|
})();
|
|
|
|
(function testEagerArrow() {
|
|
(({name = [foo] = eval("[]")}) => {})({});
|
|
(([name = [foo] = eval("[]")]) => {})([]);
|
|
})();
|
|
|
|
(function testLazyArrow() {
|
|
var f = ({name = [foo] = eval("[]")}) => {};
|
|
var g = ([name = [foo] = eval("[]")]) => {};
|
|
f({});
|
|
g([]);
|
|
})();
|