f47cbb28ab
Use the position of commas in arrow expressions to mark the initializer position of any parameters that might have been set in the preceding parameter. To enable this, this makes variable_list_ in ExpressionParsingScope a ScopedList<pair<VariableProxy*, int>> and changes ScopedList::at to return references so its elements can be modified in place. This fixes a source of bytecode mismatches when collecting source positions lazily and is a second attempt at fixing this after https://chromium-review.googlesource.com/c/v8/v8/+/1683267 introduced problems due to destructuring. Bug: chromium:980422, chromium:981701, v8:8510 Change-Id: I948f89f34fb75d7463a13183e363f7f96ad09d13 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1710671 Reviewed-by: Clemens Hammacher <clemensh@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Commit-Queue: Dan Elphick <delphick@chromium.org> Cr-Commit-Position: refs/heads/master@{#62936}
30 lines
749 B
JavaScript
30 lines
749 B
JavaScript
// Copyright 2019 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.
|
|
|
|
// Flags: --enable-lazy-source-positions --stress-lazy-source-positions
|
|
(function () {
|
|
((d, e = d) => {
|
|
return d * e;
|
|
})();
|
|
})();
|
|
|
|
try {
|
|
(function () {
|
|
((d, e = f, f = d) => {
|
|
// Won't get here as the initializers will cause a ReferenceError
|
|
})();
|
|
})();
|
|
assertUnreachable();
|
|
} catch (ex) {
|
|
assertInstanceof(ex, ReferenceError);
|
|
// Not using assertThrows because we need to access ex.stack to force
|
|
// collection of source positions.
|
|
print(ex.stack);
|
|
}
|
|
|
|
// Check that spreads in arrow functions work
|
|
(function () {
|
|
((...args) => args)();
|
|
})();
|