summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorBenjamin Coe <bencoe@google.com>2020-01-12 17:25:43 -0800
committerBenjamin Coe <bencoe@google.com>2020-01-14 17:55:05 -0800
commitdcbf9da0edf9545107828784dbf3a59706411a3c (patch)
treec9d67be4d283518c05ae25a03a701a5b3b588d3d /deps
parent216e42350f4fdfd4ae6c93b5569bc63327e823f3 (diff)
downloadnode-new-dcbf9da0edf9545107828784dbf3a59706411a3c.tar.gz
deps: V8: cherry-pick b9d33036e9a8
Original commit message: [coverage] Improve whitespace precision of coverage reporting This CL improves whitespace precision of coverage around try blocks; previously a small portion of whitespace could be reported as uncovered between try blocks and catch and/or finally blocks. Change-Id: I763ae3d15106c88f2278cf8893c12b0869a62528 Fixed: v8:10030 Bug: v8:10030 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1962265 Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Commit-Queue: Sigurd Schneider <sigurds@chromium.org> Cr-Commit-Position: refs/heads/master@{#65593} Refs: https://github.com/v8/v8/commit/b9d33036e9a80fff87824f157f68928955842e66 PR-URL: https://github.com/nodejs/node/pull/31335 Refs: https://github.com/nodejs/node/issues/25937 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'deps')
-rw-r--r--deps/v8/src/ast/source-range-ast-visitor.cc7
-rw-r--r--deps/v8/src/ast/source-range-ast-visitor.h1
-rw-r--r--deps/v8/test/mjsunit/code-coverage-block.js93
3 files changed, 87 insertions, 14 deletions
diff --git a/deps/v8/src/ast/source-range-ast-visitor.cc b/deps/v8/src/ast/source-range-ast-visitor.cc
index 7470991615..52359d5452 100644
--- a/deps/v8/src/ast/source-range-ast-visitor.cc
+++ b/deps/v8/src/ast/source-range-ast-visitor.cc
@@ -41,9 +41,16 @@ void SourceRangeAstVisitor::VisitFunctionLiteral(FunctionLiteral* expr) {
void SourceRangeAstVisitor::VisitTryCatchStatement(TryCatchStatement* stmt) {
AstTraversalVisitor::VisitTryCatchStatement(stmt);
+ MaybeRemoveContinuationRange(stmt->try_block());
MaybeRemoveContinuationRangeOfAsyncReturn(stmt);
}
+void SourceRangeAstVisitor::VisitTryFinallyStatement(
+ TryFinallyStatement* stmt) {
+ AstTraversalVisitor::VisitTryFinallyStatement(stmt);
+ MaybeRemoveContinuationRange(stmt->try_block());
+}
+
bool SourceRangeAstVisitor::VisitNode(AstNode* node) {
AstNodeSourceRanges* range = source_range_map_->Find(node);
diff --git a/deps/v8/src/ast/source-range-ast-visitor.h b/deps/v8/src/ast/source-range-ast-visitor.h
index 8b6b99c434..42f69e8b20 100644
--- a/deps/v8/src/ast/source-range-ast-visitor.h
+++ b/deps/v8/src/ast/source-range-ast-visitor.h
@@ -38,6 +38,7 @@ class SourceRangeAstVisitor final
void VisitFunctionLiteral(FunctionLiteral* expr);
bool VisitNode(AstNode* node);
void VisitTryCatchStatement(TryCatchStatement* stmt);
+ void VisitTryFinallyStatement(TryFinallyStatement* stmt);
void MaybeRemoveContinuationRange(Statement* last_statement);
void MaybeRemoveLastContinuationRange(ZonePtrList<Statement>* stmts);
diff --git a/deps/v8/test/mjsunit/code-coverage-block.js b/deps/v8/test/mjsunit/code-coverage-block.js
index 4b9221604a..ea1c2ea5fc 100644
--- a/deps/v8/test/mjsunit/code-coverage-block.js
+++ b/deps/v8/test/mjsunit/code-coverage-block.js
@@ -337,11 +337,7 @@ TestCoverage(
[{"start":0,"end":849,"count":1},
{"start":1,"end":801,"count":1},
{"start":67,"end":87,"count":0},
- {"start":221,"end":222,"count":0},
- {"start":254,"end":274,"count":0},
- {"start":371,"end":372,"count":0},
- {"start":403,"end":404,"count":0},
- {"start":553,"end":554,"count":0}]
+ {"start":254,"end":274,"count":0}]
);
TestCoverage("try/catch/finally statements with early return",
@@ -358,10 +354,8 @@ TestCoverage("try/catch/finally statements with early return",
`,
[{"start":0,"end":449,"count":1},
{"start":1,"end":151,"count":1},
- {"start":69,"end":70,"count":0},
{"start":91,"end":150,"count":0},
{"start":201,"end":401,"count":1},
- {"start":269,"end":270,"count":0},
{"start":321,"end":400,"count":0}]
);
@@ -393,7 +387,6 @@ TestCoverage(
`,
[{"start":0,"end":1099,"count":1},
{"start":1,"end":151,"count":1},
- {"start":69,"end":70,"count":0},
{"start":91,"end":150,"count":0},
{"start":201,"end":351,"count":1},
{"start":286,"end":350,"count":0},
@@ -401,7 +394,6 @@ TestCoverage(
{"start":603,"end":700,"count":0},
{"start":561,"end":568,"count":0},
{"start":751,"end":1051,"count":1},
- {"start":819,"end":820,"count":0},
{"start":861,"end":1050,"count":0}]
);
@@ -561,7 +553,6 @@ try { // 0200
} catch (e) {} // 0450
`,
[{"start":0,"end":499,"count":1},
- {"start":451,"end":452,"count":0},
{"start":12,"end":101,"count":1},
{"start":60,"end":100,"count":0},
{"start":264,"end":353,"count":1},
@@ -636,7 +627,6 @@ try { // 0200
} catch (e) {} // 0450
`,
[{"start":0,"end":499,"count":1},
- {"start":451,"end":452,"count":0},
{"start":12,"end":101,"count":1},
{"start":65,"end":100,"count":0},
{"start":264,"end":353,"count":1},
@@ -1017,7 +1007,6 @@ try { // 0500
} catch (err) {} // 0600
`,
[{"start":0,"end":649,"count":1},
- {"start":351,"end":352,"count":0},
{"start":602,"end":616,"count":0},
{"start":0,"end":201,"count":2},
{"start":69,"end":153,"count":1}]
@@ -1093,7 +1082,8 @@ function test(foo = "foodef") { // 0000
console.log("test"); // 0200
} // 0250
} // 0300
-test().bar(); // 0350`,
+test().bar(); // 0350
+`,
[{"start":0,"end":399,"count":1},
{"start":0,"end":301,"count":1},
{"start":152,"end":253,"count":1}]);
@@ -1105,11 +1095,86 @@ function test(foo = (()=>{})) { // 0000
return {foo}; // 0050
} // 0100
// 0150
-test(()=>{}).foo(); // 0200`,
+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}]
);
+TestCoverage(
+"https://crbug.com/v8/10030 - original",
+`
+function a (shouldThrow) { // 0000
+ try { // 0050
+ if (shouldThrow) // 0100
+ throw Error('I threw!'); // 0150
+ return 'I ran'; // 0200
+ } catch(e) { // 0250
+ console.info('caught'); // 0300
+ } // 0350
+} // 0400
+a(false); // 0450
+a(true); // 0500
+`,
+[{"start":0,"end":549,"count":1},
+ {"start":0,"end":401,"count":2},
+ {"start":156,"end":353,"count":1}]
+);
+
+TestCoverage(
+"https://crbug.com/v8/10030 - only throw",
+`
+function a (shouldThrow) { // 0000
+ try { // 0050
+ if (shouldThrow) // 0100
+ throw Error('I threw!'); // 0150
+ return 'I ran'; // 0200
+ } catch(e) { // 0250
+ console.info('caught'); // 0300
+ } // 0350
+} // 0400
+a(true); // 0450
+`,
+[{"start":0,"end":499,"count":1},
+ {"start":0,"end":401,"count":1},
+ {"start":180,"end":254,"count":0}]
+);
+
+TestCoverage(
+"https://crbug.com/v8/10030 - finally",
+`
+function a (shouldThrow) { // 0000
+ try { // 0050
+ return 'I ran'; // 0100
+ } finally { // 0150
+ console.info('finally'); // 0200
+ } // 0250
+} // 0300
+a(false); // 0350
+a(true); // 0400
+`,
+[{"start":0,"end":449,"count":1},
+ {"start":0,"end":301,"count":2}]);
+
+TestCoverage(
+"https://crbug.com/v8/10030 - catch & finally",
+`
+function a (shouldThrow) { // 0000
+ try { // 0050
+ return 'I ran'; // 0100
+ } catch (e) { // 0150
+ console.info('caught'); // 0200
+ } finally { // 0250
+ console.info('finally'); // 0300
+ } // 0350
+} // 0400
+a(false); // 0450
+a(true); // 0500
+`,
+[{"start":0,"end":549,"count":1},
+ {"start":0,"end":401,"count":2},
+ {"start":154,"end":254,"count":0}]);
+
%DebugToggleBlockCoverage(false);