summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorbcoe <bencoe@google.com>2019-11-28 14:06:24 -0800
committerbcoe <bencoe@google.com>2019-11-30 12:13:16 -0800
commit596116168a2e2b8dedf31e3d7ca0247fe5c9824b (patch)
tree9fa901a089ee67038fc745e4a7d1d73bbcd347b3 /deps
parent07ba2eb675a4b58f9c43dc2d209d96b0bec2baf3 (diff)
downloadandroid-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.h1
-rw-r--r--deps/v8/test/mjsunit/code-coverage-block-async.js17
-rw-r--r--deps/v8/test/mjsunit/code-coverage-block.js29
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);