diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index 241c69f0465523..50d5d1acefc4c4 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -50,7 +50,7 @@ Andrew Paprocki Andrei Kashcha Anna Henningsen Bangfu Tao -Ben Coe +Ben Coe Ben Newman Ben Noordhuis Benjamin Tan diff --git a/deps/v8/src/ast/source-range-ast-visitor.cc b/deps/v8/src/ast/source-range-ast-visitor.cc index b6acbddf0a6a5a..f3a3dbcd9b1385 100644 --- a/deps/v8/src/ast/source-range-ast-visitor.cc +++ b/deps/v8/src/ast/source-range-ast-visitor.cc @@ -56,7 +56,18 @@ void SourceRangeAstVisitor::MaybeRemoveLastContinuationRange( if (statements == nullptr || statements->is_empty()) return; Statement* last_statement = statements->last(); - AstNodeSourceRanges* last_range = source_range_map_->Find(last_statement); + AstNodeSourceRanges* last_range = nullptr; + + if (last_statement->IsExpressionStatement() && + last_statement->AsExpressionStatement()->expression()->IsThrow()) { + // For ThrowStatement, source range is tied to Throw expression not + // ExpressionStatement. + last_range = source_range_map_->Find( + last_statement->AsExpressionStatement()->expression()); + } else { + last_range = source_range_map_->Find(last_statement); + } + if (last_range == nullptr) return; if (last_range->HasRange(SourceRangeKind::kContinuation)) { diff --git a/deps/v8/test/mjsunit/code-coverage-block.js b/deps/v8/test/mjsunit/code-coverage-block.js index 1291a50d978ceb..6df2ca5a566929 100644 --- a/deps/v8/test/mjsunit/code-coverage-block.js +++ b/deps/v8/test/mjsunit/code-coverage-block.js @@ -353,11 +353,11 @@ TestCoverage( [{"start":0,"end":849,"count":1}, {"start":1,"end":801,"count":1}, {"start":67,"end":87,"count":0}, - {"start":219,"end":222,"count":0}, + {"start":221,"end":222,"count":0}, {"start":254,"end":274,"count":0}, - {"start":369,"end":372,"count":0}, + {"start":371,"end":372,"count":0}, {"start":403,"end":404,"count":0}, - {"start":513,"end":554,"count":0}] + {"start":553,"end":554,"count":0}] ); TestCoverage("try/catch/finally statements with early return", @@ -374,10 +374,10 @@ TestCoverage("try/catch/finally statements with early return", `, [{"start":0,"end":449,"count":1}, {"start":1,"end":151,"count":1}, - {"start":67,"end":70,"count":0}, + {"start":69,"end":70,"count":0}, {"start":91,"end":150,"count":0}, {"start":201,"end":401,"count":1}, - {"start":267,"end":270,"count":0}, + {"start":269,"end":270,"count":0}, {"start":321,"end":400,"count":0}] ); @@ -409,7 +409,7 @@ TestCoverage( `, [{"start":0,"end":1099,"count":1}, {"start":1,"end":151,"count":1}, - {"start":67,"end":70,"count":0}, + {"start":69,"end":70,"count":0}, {"start":91,"end":150,"count":0}, {"start":201,"end":351,"count":1}, {"start":286,"end":350,"count":0}, @@ -417,7 +417,7 @@ TestCoverage( {"start":603,"end":700,"count":0}, {"start":561,"end":568,"count":0}, // TODO(jgruber): Sorting. {"start":751,"end":1051,"count":1}, - {"start":817,"end":820,"count":0}, + {"start":819,"end":820,"count":0}, {"start":861,"end":1050,"count":0}] ); @@ -1004,4 +1004,41 @@ c(true); d(true); // 1650 {"start":1403,"end":1503,"count":0}] ); +TestCoverage( +"https://crbug.com/927464", +` +!function f() { // 0000 + function unused() { nop(); } // 0050 + nop(); // 0100 +}(); // 0150 +`, +[{"start":0,"end":199,"count":1}, + {"start":1,"end":151,"count":1}, + {"start":52,"end":80,"count":0}] +); + +TestCoverage( +"https://crbug.com/v8/8691", +` +function f(shouldThrow) { // 0000 + if (shouldThrow) { // 0050 + throw Error('threw') // 0100 + } // 0150 +} // 0200 +try { // 0250 + f(true) // 0300 +} catch (err) { // 0350 + // 0400 +} // 0450 +try { // 0500 + f(false) // 0550 +} 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}] +); + %DebugToggleBlockCoverage(false);