From 3595992b2110eaf8a62c2059b1f79b786b29e43b Mon Sep 17 00:00:00 2001 From: Benjamin Coe Date: Sun, 12 Jan 2020 17:25:43 -0800 Subject: [PATCH] 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 Reviewed-by: Jakob Gruber Commit-Queue: Sigurd Schneider Cr-Commit-Position: refs/heads/master@{#65593} Refs: https://github.com/v8/v8/commit/b9d33036e9a80fff87824f157f68928955842e66 --- common.gypi | 2 +- deps/v8/src/ast/source-range-ast-visitor.cc | 7 ++ deps/v8/src/ast/source-range-ast-visitor.h | 1 + deps/v8/test/mjsunit/code-coverage-block.js | 93 +++++++++++++++++---- 4 files changed, 88 insertions(+), 15 deletions(-) diff --git a/common.gypi b/common.gypi index 67615166ccc128..ab28ca65e7676d 100644 --- a/common.gypi +++ b/common.gypi @@ -39,7 +39,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.27', + 'v8_embedder_string': '-node.28', ##### V8 defaults for Node.js ##### diff --git a/deps/v8/src/ast/source-range-ast-visitor.cc b/deps/v8/src/ast/source-range-ast-visitor.cc index 74709916159a9c..52359d54525a77 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 8b6b99c434634e..42f69e8b20878b 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* stmts); diff --git a/deps/v8/test/mjsunit/code-coverage-block.js b/deps/v8/test/mjsunit/code-coverage-block.js index 4b9221604ad8d0..ea1c2ea5fc9770 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);