diff options
author | bcoe <bencoe@google.com> | 2019-11-28 14:06:24 -0800 |
---|---|---|
committer | bcoe <bencoe@google.com> | 2019-11-30 12:13:16 -0800 |
commit | 596116168a2e2b8dedf31e3d7ca0247fe5c9824b (patch) | |
tree | 9fa901a089ee67038fc745e4a7d1d73bbcd347b3 /deps | |
parent | 07ba2eb675a4b58f9c43dc2d209d96b0bec2baf3 (diff) | |
download | android-node-v8-596116168a2e2b8dedf31e3d7ca0247fe5c9824b.tar.gz android-node-v8-596116168a2e2b8dedf31e3d7ca0247fe5c9824b.tar.bz2 android-node-v8-596116168a2e2b8dedf31e3d7ca0247fe5c9824b.zip |
deps: V8: cherry-pick 0dfd9ea51241
Original commit message:
[coverage] Fix coverage with default arguments
In the presence of default arguments, the body of the function gets
wrapped into another block. This caused our trailing-range-after-return
optimization to not apply, because the wrapper block had no source
range assigned. This CL correctly assignes a source range to that block,
which allows already present code to handle it correctly.
Note that this is not a real coverage bug; we've just been reporting
whitespace as uncovered. We're fixing it for consistency.
Originally reported on github.com/bcoe/c8/issues/66
Bug: v8:9952
Change-Id: Iab3905f558eb99126e0dad8072d03d0a312fdcd3
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1903430
Commit-Queue: Sigurd Schneider <sigurds@chromium.org>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Reviewed-by: Jakob Gruber <jgruber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64836}
Refs: https://github.com/v8/v8/commit/0dfd9ea51241bebf724f2eb8d6d0158a014f866a
PR-URL: https://github.com/nodejs/node/pull/30713
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'deps')
-rw-r--r-- | deps/v8/src/parsing/parser-base.h | 1 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/code-coverage-block-async.js | 17 | ||||
-rw-r--r-- | deps/v8/test/mjsunit/code-coverage-block.js | 29 |
3 files changed, 47 insertions, 0 deletions
diff --git a/deps/v8/src/parsing/parser-base.h b/deps/v8/src/parsing/parser-base.h index 847774910a..b12a27142c 100644 --- a/deps/v8/src/parsing/parser-base.h +++ b/deps/v8/src/parsing/parser-base.h @@ -4108,6 +4108,7 @@ void ParserBase<Impl>::ParseFunctionBody( inner_body.Rewind(); inner_body.Add(inner_block); inner_block->set_scope(inner_scope); + impl()->RecordBlockSourceRange(inner_block, scope()->end_position()); if (!impl()->HasCheckedSyntax()) { const AstRawString* conflict = inner_scope->FindVariableDeclaredIn( function_scope, VariableMode::kLastLexicalVariableMode); diff --git a/deps/v8/test/mjsunit/code-coverage-block-async.js b/deps/v8/test/mjsunit/code-coverage-block-async.js index 111be213b6..56845aac01 100644 --- a/deps/v8/test/mjsunit/code-coverage-block-async.js +++ b/deps/v8/test/mjsunit/code-coverage-block-async.js @@ -119,4 +119,21 @@ new Foo().timeout().next(); // 0400 {"start":184,"end":302,"count":0}, {"start":158,"end":182,"count":1}] ); +TestCoverage( +"https://crbug.com/v8/9952", +` +async function test(foo) { // 0000 + return {bar}; // 0050 + // 0100 + function bar() { // 0150 + console.log("test"); // 0200 + } // 0250 +} // 0300 +test().then(r => r.bar()); // 0350 +%PerformMicrotaskCheckpoint(); // 0400`, +[{"start":0,"end":449,"count":1}, + {"start":0,"end":301,"count":1}, + {"start":152,"end":253,"count":1}, + {"start":362,"end":374,"count":1}]); + %DebugToggleBlockCoverage(false); diff --git a/deps/v8/test/mjsunit/code-coverage-block.js b/deps/v8/test/mjsunit/code-coverage-block.js index 6cf81bcce0..4b9221604a 100644 --- a/deps/v8/test/mjsunit/code-coverage-block.js +++ b/deps/v8/test/mjsunit/code-coverage-block.js @@ -1083,4 +1083,33 @@ TestCoverage( {"start":16,"end":33,"count":0}] ); +TestCoverage( +"https://crbug.com/v8/9952", +` +function test(foo = "foodef") { // 0000 + return {bar}; // 0050 + // 0100 + function bar() { // 0150 + console.log("test"); // 0200 + } // 0250 +} // 0300 +test().bar(); // 0350`, +[{"start":0,"end":399,"count":1}, + {"start":0,"end":301,"count":1}, + {"start":152,"end":253,"count":1}]); + +TestCoverage( +"https://crbug.com/v8/9952", +` +function test(foo = (()=>{})) { // 0000 + return {foo}; // 0050 +} // 0100 + // 0150 +test(()=>{}).foo(); // 0200`, +[{"start":0,"end":249,"count":1}, + {"start":0,"end":101,"count":1}, + {"start":21,"end":27,"count":0}, + {"start":205,"end":211,"count":1}] +); + %DebugToggleBlockCoverage(false); |