|  | // Copyright 2017 the V8 project authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Flags: --allow-natives-syntax --no-always-opt --no-stress-flush-bytecode | 
|  | // Files: test/mjsunit/code-coverage-utils.js | 
|  |  | 
|  | %DebugToggleBlockCoverage(true); | 
|  |  | 
|  | TestCoverage( | 
|  | "call an IIFE", | 
|  | ` | 
|  | (function f() {})(); | 
|  | `, | 
|  | [{"start":0,"end":20,"count":1},{"start":1,"end":16,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "call locally allocated function", | 
|  | `let f = () => 1; f();`, | 
|  | [{"start":0,"end":21,"count":1},{"start":8,"end":15,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "if statements", | 
|  | ` | 
|  | function g() {}                           // 0000 | 
|  | function f(x) {                           // 0050 | 
|  | if (x == 42) {                          // 0100 | 
|  | if (x == 43) g(); else g();           // 0150 | 
|  | }                                       // 0200 | 
|  | if (x == 42) { g(); } else { g(); }     // 0250 | 
|  | if (x == 42) g(); else g();             // 0300 | 
|  | if (false) g(); else g();               // 0350 | 
|  | if (false) g();                         // 0400 | 
|  | if (true) g(); else g();                // 0450 | 
|  | if (true) g();                          // 0500 | 
|  | }                                         // 0550 | 
|  | f(42);                                    // 0600 | 
|  | f(43);                                    // 0650 | 
|  | if (true) {                               // 0700 | 
|  | const foo = 'bar';                      // 0750 | 
|  | } else {                                  // 0800 | 
|  | const bar = 'foo';                      // 0850 | 
|  | }                                         // 0900 | 
|  | `, | 
|  | [{"start":0,"end":949,"count":1}, | 
|  | {"start":801,"end":901,"count":0}, | 
|  | {"start":0,"end":15,"count":11}, | 
|  | {"start":50,"end":551,"count":2}, | 
|  | {"start":115,"end":203,"count":1}, | 
|  | {"start":167,"end":171,"count":0}, | 
|  | {"start":265,"end":287,"count":1}, | 
|  | {"start":315,"end":329,"count":1}, | 
|  | {"start":363,"end":367,"count":0}, | 
|  | {"start":413,"end":417,"count":0}, | 
|  | {"start":466,"end":476,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "if statement (early return)", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | if (true) {                             // 0050 | 
|  | nop();                                // 0100 | 
|  | return;                               // 0150 | 
|  | nop();                                // 0200 | 
|  | }                                       // 0250 | 
|  | nop();                                  // 0300 | 
|  | }()                                       // 0350 | 
|  | `, | 
|  | [{"start":0,"end":399,"count":1}, | 
|  | {"start":1,"end":351,"count":1}, | 
|  | {"start":161,"end":350,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "if statement (no semi-colon)", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | if (true) nop()                         // 0050 | 
|  | if (true) nop(); else nop()             // 0100 | 
|  | nop();                                  // 0150 | 
|  | }()                                       // 0200 | 
|  | `, | 
|  | [{"start":0,"end":249,"count":1}, | 
|  | {"start":1,"end":201,"count":1}, | 
|  | {"start":118,"end":129,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "for statements", | 
|  | ` | 
|  | function g() {}                           // 0000 | 
|  | !function() {                             // 0050 | 
|  | for (var i = 0; i < 12; i++) g();       // 0100 | 
|  | for (var i = 0; i < 12; i++) {          // 0150 | 
|  | g();                                  // 0200 | 
|  | }                                       // 0250 | 
|  | for (var i = 0; false; i++) g();        // 0300 | 
|  | for (var i = 0; true; i++) break;       // 0350 | 
|  | for (var i = 0; i < 12; i++) {          // 0400 | 
|  | if (i % 3 == 0) g(); else g();        // 0450 | 
|  | }                                       // 0500 | 
|  | }();                                      // 0550 | 
|  | `, | 
|  | [{"start":0,"end":599,"count":1}, | 
|  | {"start":0,"end":15,"count":36}, | 
|  | {"start":51,"end":551,"count":1}, | 
|  | {"start":131,"end":135,"count":12}, | 
|  | {"start":181,"end":253,"count":12}, | 
|  | {"start":330,"end":334,"count":0}, | 
|  | {"start":431,"end":503,"count":12}, | 
|  | {"start":470,"end":474,"count":4}, | 
|  | {"start":474,"end":484,"count":8}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "for statements pt. 2", | 
|  | ` | 
|  | function g() {}                           // 0000 | 
|  | !function() {                             // 0050 | 
|  | let j = 0;                              // 0100 | 
|  | for (let i = 0; i < 12; i++) g();       // 0150 | 
|  | for (const i = 0; j < 12; j++) g();     // 0200 | 
|  | for (j = 0; j < 12; j++) g();           // 0250 | 
|  | for (;;) break;                         // 0300 | 
|  | }();                                      // 0350 | 
|  | `, | 
|  | [{"start":0,"end":399,"count":1}, | 
|  | {"start":0,"end":15,"count":36}, | 
|  | {"start":51,"end":351,"count":1}, | 
|  | {"start":181,"end":185,"count":12}, | 
|  | {"start":233,"end":237,"count":12}, | 
|  | {"start":277,"end":281,"count":12}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "for statements (no semicolon)", | 
|  | ` | 
|  | function g() {}                           // 0000 | 
|  | !function() {                             // 0050 | 
|  | for (let i = 0; i < 12; i++) g()        // 0100 | 
|  | for (let i = 0; i < 12; i++) break      // 0150 | 
|  | for (let i = 0; i < 12; i++) break; g() // 0200 | 
|  | }();                                      // 0250 | 
|  | `, | 
|  | [{"start":0,"end":299,"count":1}, | 
|  | {"start":0,"end":15,"count":13}, | 
|  | {"start":51,"end":251,"count":1}, | 
|  | {"start":131,"end":134,"count":12}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "for statement (early return)", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | for (var i = 0; i < 10; i++) {          // 0050 | 
|  | nop();                                // 0100 | 
|  | continue;                             // 0150 | 
|  | nop();                                // 0200 | 
|  | }                                       // 0250 | 
|  | nop();                                  // 0300 | 
|  | for (;;) {                              // 0350 | 
|  | nop();                                // 0400 | 
|  | break;                                // 0450 | 
|  | nop();                                // 0500 | 
|  | }                                       // 0550 | 
|  | nop();                                  // 0600 | 
|  | for (;;) {                              // 0650 | 
|  | nop();                                // 0700 | 
|  | return;                               // 0750 | 
|  | nop();                                // 0800 | 
|  | }                                       // 0850 | 
|  | nop();                                  // 0900 | 
|  | }()                                       // 0950 | 
|  | `, | 
|  | [{"start":0,"end":999,"count":1}, | 
|  | {"start":1,"end":951,"count":1}, | 
|  | {"start":81,"end":253,"count":10}, | 
|  | {"start":163,"end":253,"count":0}, | 
|  | {"start":460,"end":553,"count":0}, | 
|  | {"start":761,"end":950,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "for-of and for-in statements", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | var i;                                  // 0050 | 
|  | for (i of [0,1,2,3]) { nop(); }         // 0100 | 
|  | for (let j of [0,1,2,3]) { nop(); }     // 0150 | 
|  | for (i in [0,1,2,3]) { nop(); }         // 0200 | 
|  | for (let j in [0,1,2,3]) { nop(); }     // 0250 | 
|  | var xs = [{a:0, b:1}, {a:1,b:0}];       // 0300 | 
|  | for (var {a: x, b: y} of xs) { nop(); } // 0350 | 
|  | }();                                      // 0400 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":1,"end":401,"count":1}, | 
|  | {"start":123,"end":133,"count":4}, | 
|  | {"start":177,"end":187,"count":4}, | 
|  | {"start":223,"end":233,"count":4}, | 
|  | {"start":277,"end":287,"count":4}, | 
|  | {"start":381,"end":391,"count":2}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "while and do-while statements", | 
|  | ` | 
|  | function g() {}                           // 0000 | 
|  | !function() {                             // 0050 | 
|  | var i;                                  // 0100 | 
|  | i = 0; while (i < 12) i++;              // 0150 | 
|  | i = 0; while (i < 12) { g(); i++; }     // 0200 | 
|  | i = 0; while (false) g();               // 0250 | 
|  | i = 0; while (true) break;              // 0300 | 
|  | // 0350 | 
|  | i = 0; do i++; while (i < 12);          // 0400 | 
|  | i = 0; do { g(); i++; }                 // 0450 | 
|  | while (i < 12);                  // 0500 | 
|  | i = 0; do { g(); } while (false);       // 0550 | 
|  | i = 0; do { break; } while (true);      // 0600 | 
|  | }();                                      // 0650 | 
|  | `, | 
|  | [{"start":0,"end":699,"count":1}, | 
|  | {"start":0,"end":15,"count":25}, | 
|  | {"start":51,"end":651,"count":1}, | 
|  | {"start":174,"end":178,"count":12}, | 
|  | {"start":224,"end":237,"count":12}, | 
|  | {"start":273,"end":277,"count":0}, | 
|  | {"start":412,"end":416,"count":12}, | 
|  | {"start":462,"end":475,"count":12}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "while statement (early return)", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | let i = 0;                              // 0050 | 
|  | while (i < 10) {                        // 0100 | 
|  | i++;                                  // 0150 | 
|  | continue;                             // 0200 | 
|  | nop();                                // 0250 | 
|  | }                                       // 0300 | 
|  | nop();                                  // 0350 | 
|  | while (true) {                          // 0400 | 
|  | nop();                                // 0450 | 
|  | break;                                // 0500 | 
|  | nop();                                // 0550 | 
|  | }                                       // 0600 | 
|  | nop();                                  // 0650 | 
|  | while (true) {                          // 0700 | 
|  | nop();                                // 0750 | 
|  | return;                               // 0800 | 
|  | nop();                                // 0850 | 
|  | }                                       // 0900 | 
|  | nop();                                  // 0950 | 
|  | }()                                       // 1000 | 
|  | `, | 
|  | [{"start":0,"end":1049,"count":1}, | 
|  | {"start":1,"end":1001,"count":1}, | 
|  | {"start":117,"end":303,"count":10}, | 
|  | {"start":213,"end":303,"count":0}, | 
|  | {"start":510,"end":603,"count":0}, | 
|  | {"start":811,"end":1000,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "do-while statement (early return)", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | let i = 0;                              // 0050 | 
|  | do {                                    // 0100 | 
|  | i++;                                  // 0150 | 
|  | continue;                             // 0200 | 
|  | nop();                                // 0250 | 
|  | } while (i < 10);                       // 0300 | 
|  | nop();                                  // 0350 | 
|  | do {                                    // 0400 | 
|  | nop();                                // 0450 | 
|  | break;                                // 0500 | 
|  | nop();                                // 0550 | 
|  | } while (true);                         // 0600 | 
|  | nop();                                  // 0650 | 
|  | do {                                    // 0700 | 
|  | nop();                                // 0750 | 
|  | return;                               // 0800 | 
|  | nop();                                // 0850 | 
|  | } while (true);                         // 0900 | 
|  | nop();                                  // 0950 | 
|  | }()                                       // 1000 | 
|  | `, | 
|  | [{"start":0,"end":1049,"count":1}, | 
|  | {"start":1,"end":1001,"count":1}, | 
|  | {"start":105,"end":303,"count":10}, | 
|  | {"start":213,"end":303,"count":0}, | 
|  | {"start":510,"end":603,"count":0}, | 
|  | {"start":811,"end":1000,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "return statements", | 
|  | ` | 
|  | !function() { nop(); return; nop(); }();  // 0000 | 
|  | !function() { nop(); return 42;           // 0050 | 
|  | nop(); }();                 // 0100 | 
|  | `, | 
|  | [{"start":0,"end":149,"count":1}, | 
|  | {"start":1,"end":37,"count":1}, | 
|  | {"start":28,"end":36,"count":0}, | 
|  | {"start":51,"end":122,"count":1}, | 
|  | {"start":81,"end":121,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "try/catch/finally statements", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | try { nop(); } catch (e) { nop(); }     // 0050 | 
|  | try { nop(); } finally { nop(); }       // 0100 | 
|  | try {                                   // 0150 | 
|  | try { throw 42; } catch (e) { nop(); }// 0200 | 
|  | } catch (e) { nop(); }                  // 0250 | 
|  | try {                                   // 0300 | 
|  | try { throw 42; } finally { nop(); }  // 0350 | 
|  | } catch (e) { nop(); }                  // 0400 | 
|  | try {                                   // 0450 | 
|  | throw 42;                             // 0500 | 
|  | } catch (e) {                           // 0550 | 
|  | nop();                                // 0600 | 
|  | } finally {                             // 0650 | 
|  | nop();                                // 0700 | 
|  | }                                       // 0750 | 
|  | }();                                      // 0800 | 
|  | `, | 
|  | [{"start":0,"end":849,"count":1}, | 
|  | {"start":1,"end":801,"count":1}, | 
|  | {"start":67,"end":87,"count":0}, | 
|  | {"start":254,"end":274,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage("try/catch/finally statements with early return", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | try { throw 42; } catch (e) { return; } // 0050 | 
|  | nop();                                  // 0100 | 
|  | }();                                      // 0150 | 
|  | !function() {                             // 0200 | 
|  | try { throw 42; } catch (e) {}          // 0250 | 
|  | finally { return; }                     // 0300 | 
|  | nop();                                  // 0350 | 
|  | }();                                      // 0400 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":1,"end":151,"count":1}, | 
|  | {"start":91,"end":150,"count":0}, | 
|  | {"start":201,"end":401,"count":1}, | 
|  | {"start":321,"end":400,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "early return in blocks", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | try { throw 42; } catch (e) { return; } // 0050 | 
|  | nop();                                  // 0100 | 
|  | }();                                      // 0150 | 
|  | !function() {                             // 0200 | 
|  | try { nop(); } finally { return; }      // 0250 | 
|  | nop();                                  // 0300 | 
|  | }();                                      // 0350 | 
|  | !function() {                             // 0400 | 
|  | {                                       // 0450 | 
|  | let x = 42;                           // 0500 | 
|  | return () => x;                       // 0550 | 
|  | }                                       // 0600 | 
|  | nop();                                  // 0650 | 
|  | }();                                      // 0700 | 
|  | !function() {                             // 0750 | 
|  | try { throw 42; } catch (e) {           // 0800 | 
|  | return;                               // 0850 | 
|  | nop();                                // 0900 | 
|  | }                                       // 0950 | 
|  | nop();                                  // 1000 | 
|  | }();                                      // 1050 | 
|  | `, | 
|  | [{"start":0,"end":1099,"count":1}, | 
|  | {"start":1,"end":151,"count":1}, | 
|  | {"start":91,"end":150,"count":0}, | 
|  | {"start":201,"end":351,"count":1}, | 
|  | {"start":286,"end":350,"count":0}, | 
|  | {"start":401,"end":701,"count":1}, | 
|  | {"start":603,"end":700,"count":0}, | 
|  | {"start":561,"end":568,"count":0}, | 
|  | {"start":751,"end":1051,"count":1}, | 
|  | {"start":861,"end":1050,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "switch statements", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | var x = 42;                             // 0050 | 
|  | switch (x) {                            // 0100 | 
|  | case 41: nop(); break;                // 0150 | 
|  | case 42: nop(); break;                // 0200 | 
|  | default: nop(); break;                // 0250 | 
|  | }                                       // 0300 | 
|  | }();                                      // 0350 | 
|  | `, | 
|  | [{"start":0,"end":399,"count":1}, | 
|  | {"start":1,"end":351,"count":1}, | 
|  | {"start":154,"end":176,"count":0}, | 
|  | {"start":254,"end":276,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "labeled break statements", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | var x = 42;                             // 0050 | 
|  | l0: switch (x) {                        // 0100 | 
|  | case 41: return;                        // 0150 | 
|  | case 42:                                // 0200 | 
|  | switch (x) { case 42: break l0; }     // 0250 | 
|  | break;                                // 0300 | 
|  | }                                       // 0350 | 
|  | l1: for (;;) {                          // 0400 | 
|  | for (;;) break l1;                    // 0450 | 
|  | }                                       // 0500 | 
|  | l2: while (true) {                      // 0550 | 
|  | while (true) break l2;                // 0600 | 
|  | }                                       // 0650 | 
|  | l3: do {                                // 0700 | 
|  | do { break l3; } while (true);        // 0750 | 
|  | } while (true);                         // 0800 | 
|  | l4: { break l4; }                       // 0850 | 
|  | l5: for (;;) for (;;) break l5;         // 0900 | 
|  | }();                                      // 0950 | 
|  | `, | 
|  | [{"start":0,"end":999,"count":1}, | 
|  | {"start":1,"end":951,"count":1}, | 
|  | {"start":152,"end":168,"count":0}, | 
|  | {"start":287,"end":310,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "labeled continue statements", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | l0: for (var i0 = 0; i0 < 2; i0++) {    // 0050 | 
|  | for (;;) continue l0;                 // 0100 | 
|  | }                                       // 0150 | 
|  | var i1 = 0;                             // 0200 | 
|  | l1: while (i1 < 2) {                    // 0250 | 
|  | i1++;                                 // 0300 | 
|  | while (true) continue l1;             // 0350 | 
|  | }                                       // 0400 | 
|  | var i2 = 0;                             // 0450 | 
|  | l2: do {                                // 0500 | 
|  | i2++;                                 // 0550 | 
|  | do { continue l2; } while (true);     // 0600 | 
|  | } while (i2 < 2);                       // 0650 | 
|  | }();                                      // 0700 | 
|  | `, | 
|  | [{"start":0,"end":749,"count":1}, | 
|  | {"start":1,"end":701,"count":1}, | 
|  | {"start":87,"end":153,"count":2}, | 
|  | {"start":271,"end":403,"count":2}, | 
|  | {"start":509,"end":653,"count":2}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "conditional expressions", | 
|  | ` | 
|  | var TRUE = true;                          // 0000 | 
|  | var FALSE = false;                        // 0050 | 
|  | !function() {                             // 0100 | 
|  | TRUE ? nop() : nop();                   // 0150 | 
|  | true ? nop() : nop();                   // 0200 | 
|  | false ? nop() : nop();                  // 0250 | 
|  | FALSE ? TRUE ? nop()                    // 0300 | 
|  | : nop()                    // 0350 | 
|  | : nop();                          // 0400 | 
|  | TRUE ? FALSE ? nop()                    // 0450 | 
|  | : nop()                    // 0500 | 
|  | : nop();                           // 0550 | 
|  | TRUE ? nop() : FALSE ? nop()            // 0600 | 
|  | : nop();           // 0650 | 
|  | FALSE ? nop() : TRUE ? nop()            // 0700 | 
|  | : nop();           // 0750 | 
|  | }();                                      // 0800 | 
|  | `, | 
|  | [{"start":0,"end":849,"count":1}, | 
|  | {"start":101,"end":801,"count":1}, | 
|  | {"start":165,"end":172,"count":0}, | 
|  | {"start":215,"end":222,"count":0}, | 
|  | {"start":258,"end":265,"count":0}, | 
|  | {"start":308,"end":372,"count":0}, | 
|  | {"start":465,"end":472,"count":0}, | 
|  | {"start":557,"end":564,"count":0}, | 
|  | {"start":615,"end":680,"count":0}, | 
|  | {"start":708,"end":715,"count":0}, | 
|  | {"start":773,"end":780,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "yield expressions", | 
|  | ` | 
|  | const it = function*() {                  // 0000 | 
|  | yield nop();                            // 0050 | 
|  | yield nop() ? nop() : nop()             // 0100 | 
|  | return nop();                           // 0150 | 
|  | }();                                      // 0200 | 
|  | it.next(); it.next();                     // 0250 | 
|  | `, | 
|  | [{"start":0,"end":299,"count":1}, | 
|  | {"start":11,"end":201,"count":1}, | 
|  | {"start":114,"end":121,"count":0}, | 
|  | {"start":129,"end":200,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "yield expressions twice", | 
|  | ` | 
|  | function* gen() {                         // 0000 | 
|  | yield nop();                            // 0050 | 
|  | yield nop() ? nop() : nop()             // 0100 | 
|  | return nop();                           // 0150 | 
|  | };                                        // 0200 | 
|  | {const it = gen(); it.next(); it.next();} // 0250 | 
|  | {const it = gen(); it.next(); it.next();} // 0300 | 
|  | `, | 
|  | [{"start":0,"end":349,"count":1}, | 
|  | {"start":0,"end":201,"count":2}, | 
|  | {"start":114,"end":121,"count":0}, | 
|  | {"start":129,"end":200,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "yield expressions (.return and .throw)", | 
|  | ` | 
|  | const it0 = function*() {                 // 0000 | 
|  | yield 1; yield 2; yield 3;              // 0050 | 
|  | }();                                      // 0100 | 
|  | it0.next(); it0.return();                 // 0150 | 
|  | try {                                     // 0200 | 
|  | const it1 = function*() {               // 0250 | 
|  | yield 1; yield 2; yield 3;            // 0300 | 
|  | }();                                    // 0350 | 
|  | it1.next(); it1.throw();                // 0400 | 
|  | } catch (e) {}                            // 0450 | 
|  | `, | 
|  | [{"start":0,"end":499,"count":1}, | 
|  | {"start":12,"end":101,"count":1}, | 
|  | {"start":60,"end":100,"count":0}, | 
|  | {"start":264,"end":353,"count":1}, | 
|  | {"start":312,"end":352,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage("yield expressions (.return and try/catch/finally)", | 
|  | ` | 
|  | const it = function*() {                  // 0000 | 
|  | try {                                   // 0050 | 
|  | yield 1; yield 2; yield 3;            // 0100 | 
|  | } catch (e) {                           // 0150 | 
|  | nop();                                // 0200 | 
|  | } finally { nop(); }                    // 0250 | 
|  | yield 4;                                // 0300 | 
|  | }();                                      // 0350 | 
|  | it.next(); it.return();                   // 0450 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":11,"end":351,"count":1}, | 
|  | {"start":112,"end":254,"count":0}, | 
|  | {"start":272,"end":350,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage("yield expressions (.throw and try/catch/finally)", | 
|  | ` | 
|  | const it = function*() {                  // 0000 | 
|  | try {                                   // 0050 | 
|  | yield 1; yield 2; yield 3;            // 0100 | 
|  | } catch (e) {                           // 0150 | 
|  | nop();                                // 0200 | 
|  | } finally { nop(); }                    // 0250 | 
|  | yield 4;                                // 0300 | 
|  | }();                                      // 0350 | 
|  | it.next(); it.throw(42);                  // 0550 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":11,"end":351,"count":1}, | 
|  | {"start":112,"end":154,"count":0}, | 
|  | {"start":310,"end":350,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "yield* expressions", | 
|  | ` | 
|  | const it = function*() {                  // 0000 | 
|  | yield* gen();                           // 0050 | 
|  | yield* nop() ? gen() : gen()            // 0100 | 
|  | return gen();                           // 0150 | 
|  | }();                                      // 0200 | 
|  | it.next(); it.next(); it.next();          // 0250 | 
|  | it.next(); it.next(); it.next();          // 0300 | 
|  | `, | 
|  | [{"start":0,"end":349,"count":1}, | 
|  | {"start":11,"end":201,"count":1}, | 
|  | {"start":115,"end":122,"count":0}, | 
|  | {"start":130,"end":200,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "yield* expressions (.return and .throw)", | 
|  | ` | 
|  | const it0 = function*() {                 // 0000 | 
|  | yield* gen(); yield* gen(); yield 3;    // 0050 | 
|  | }();                                      // 0100 | 
|  | it0.next(); it0.return();                 // 0150 | 
|  | try {                                     // 0200 | 
|  | const it1 = function*() {               // 0250 | 
|  | yield* gen(); yield* gen(); yield 3;  // 0300 | 
|  | }();                                    // 0350 | 
|  | it1.next(); it1.throw();                // 0400 | 
|  | } catch (e) {}                            // 0450 | 
|  | `, | 
|  | [{"start":0,"end":499,"count":1}, | 
|  | {"start":12,"end":101,"count":1}, | 
|  | {"start":65,"end":100,"count":0}, | 
|  | {"start":264,"end":353,"count":1}, | 
|  | {"start":317,"end":352,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "LogicalOrExpression assignment", | 
|  | ` | 
|  | const a = true || 99                      // 0000 | 
|  | function b () {                           // 0050 | 
|  | const b = a || 2                        // 0100 | 
|  | }                                         // 0150 | 
|  | b()                                       // 0200 | 
|  | b()                                       // 0250 | 
|  | `, | 
|  | [{"start":0,"end":299,"count":1}, | 
|  | {"start":15,"end":20,"count":0}, | 
|  | {"start":50,"end":151,"count":2}, | 
|  | {"start":114,"end":118,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "LogicalOrExpression IsTest()", | 
|  | ` | 
|  | true || false                             // 0000 | 
|  | const a = 99                              // 0050 | 
|  | a || 50                                   // 0100 | 
|  | const b = false                           // 0150 | 
|  | if (b || true) {}                         // 0200 | 
|  | `, | 
|  | [{"start":0,"end":249,"count":1}, | 
|  | {"start":5,"end":13,"count":0}, | 
|  | {"start":102,"end":107,"count":0}]); | 
|  |  | 
|  | TestCoverage( | 
|  | "LogicalAndExpression assignment", | 
|  | ` | 
|  | const a = false && 99                     // 0000 | 
|  | function b () {                           // 0050 | 
|  | const b = a && 2                        // 0100 | 
|  | }                                         // 0150 | 
|  | b()                                       // 0200 | 
|  | b()                                       // 0250 | 
|  | const c = true && 50                      // 0300 | 
|  | `, | 
|  | [{"start":0,"end":349,"count":1}, | 
|  | {"start":16,"end":21,"count":0}, | 
|  | {"start":50,"end":151,"count":2}, | 
|  | {"start":114,"end":118,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "LogicalAndExpression IsTest()", | 
|  | ` | 
|  | false && true                             // 0000 | 
|  | const a = 0                               // 0050 | 
|  | a && 50                                   // 0100 | 
|  | const b = true                            // 0150 | 
|  | if (b && true) {}                         // 0200 | 
|  | true && true                              // 0250 | 
|  | `, | 
|  | [{"start":0,"end":299,"count":1}, | 
|  | {"start":6,"end":13,"count":0}, | 
|  | {"start":102,"end":107,"count":0}]); | 
|  |  | 
|  | TestCoverage( | 
|  | "NaryLogicalOr assignment", | 
|  | ` | 
|  | const a = true                            // 0000 | 
|  | const b = false                           // 0050 | 
|  | const c = false || false || 99            // 0100 | 
|  | const d = false || true || 99             // 0150 | 
|  | const e = true || true || 99              // 0200 | 
|  | const f = b || b || 99                    // 0250 | 
|  | const g = b || a || 99                    // 0300 | 
|  | const h = a || a || 99                    // 0350 | 
|  | const i = a || (b || c) || d              // 0400 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":174,"end":179,"count":0}, | 
|  | {"start":215,"end":222,"count":0}, | 
|  | {"start":223,"end":228,"count":0}, | 
|  | {"start":317,"end":322,"count":0}, | 
|  | {"start":362,"end":366,"count":0}, | 
|  | {"start":367,"end":372,"count":0}, | 
|  | {"start":412,"end":423,"count":0}, | 
|  | {"start":424,"end":428,"count":0}]); | 
|  |  | 
|  | TestCoverage( | 
|  | "NaryLogicalOr IsTest()", | 
|  | ` | 
|  | const a = true                            // 0000 | 
|  | const b = false                           // 0050 | 
|  | false || false || 99                      // 0100 | 
|  | false || true || 99                       // 0150 | 
|  | true || true || 99                        // 0200 | 
|  | b || b || 99                              // 0250 | 
|  | b || a || 99                              // 0300 | 
|  | a || a || 99                              // 0350 | 
|  | `, | 
|  | [{"start":0,"end":399,"count":1}, | 
|  | {"start":164,"end":169,"count":0}, | 
|  | {"start":205,"end":212,"count":0}, | 
|  | {"start":213,"end":218,"count":0}, | 
|  | {"start":307,"end":312,"count":0}, | 
|  | {"start":352,"end":356,"count":0}, | 
|  | {"start":357,"end":362,"count":0}]); | 
|  |  | 
|  | TestCoverage( | 
|  | "NaryLogicalAnd assignment", | 
|  | ` | 
|  | const a = true                            // 0000 | 
|  | const b = false                           // 0050 | 
|  | const c = false && false && 99            // 0100 | 
|  | const d = false && true && 99             // 0150 | 
|  | const e = true && true && 99              // 0200 | 
|  | const f = true && false || true           // 0250 | 
|  | const g = true || false && true           // 0300 | 
|  | `, | 
|  | [{"start":0,"end":349,"count":1}, | 
|  | {"start":116,"end":124,"count":0}, | 
|  | {"start":125,"end":130,"count":0}, | 
|  | {"start":166,"end":173,"count":0}, | 
|  | {"start":174,"end":179,"count":0}, | 
|  | {"start":315,"end":331,"count":0} | 
|  | ]); | 
|  |  | 
|  | TestCoverage( | 
|  | "NaryLogicalAnd IsTest()", | 
|  | ` | 
|  | const a = true                            // 0000 | 
|  | const b = false                           // 0050 | 
|  | false && false && 99                      // 0100 | 
|  | false && true && 99                       // 0150 | 
|  | true && true && 99                        // 0200 | 
|  | true && false || true                     // 0250 | 
|  | true || false && true                     // 0300 | 
|  | false || false || 99 || 55                // 0350 | 
|  | `, | 
|  | [{"start":0,"end":399,"count":1}, | 
|  | {"start":106,"end":114,"count":0}, | 
|  | {"start":115,"end":120,"count":0}, | 
|  | {"start":156,"end":163,"count":0}, | 
|  | {"start":164,"end":169,"count":0}, | 
|  | {"start":305,"end":321,"count":0}, | 
|  | {"start":371,"end":376,"count":0}]); | 
|  |  | 
|  | // see regression: https://bugs.chromium.org/p/chromium/issues/detail?id=785778 | 
|  | TestCoverage( | 
|  | "logical expressions + conditional expressions", | 
|  | ` | 
|  | const a = true                            // 0000 | 
|  | const b = 99                              // 0050 | 
|  | const c = false                           // 0100 | 
|  | const d = ''                              // 0150 | 
|  | const e = a && (b ? 'left' : 'right')     // 0200 | 
|  | const f = a || (b ? 'left' : 'right')     // 0250 | 
|  | const g = c || d ? 'left' : 'right'       // 0300 | 
|  | const h = a && b && (b ? 'left' : 'right')// 0350 | 
|  | const i = d || c || (c ? 'left' : 'right')// 0400 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":227,"end":236,"count":0}, | 
|  | {"start":262,"end":287,"count":0}, | 
|  | {"start":317,"end":325,"count":0}, | 
|  | {"start":382,"end":391,"count":0}, | 
|  | {"start":423,"end":431,"count":0} | 
|  | ]); | 
|  |  | 
|  | TestCoverage( | 
|  | "https://crbug.com/827530", | 
|  | ` | 
|  | Util = {};                                // 0000 | 
|  | Util.escape = function UtilEscape(str) {  // 0050 | 
|  | if (!str) {                             // 0100 | 
|  | return 'if';                          // 0150 | 
|  | } else {                                // 0200 | 
|  | return 'else';                        // 0250 | 
|  | }                                       // 0300 | 
|  | };                                        // 0350 | 
|  | Util.escape("foo.bar");                   // 0400 | 
|  | `, | 
|  | [{"start":0,"end":449,"count":1}, | 
|  | {"start":64,"end":351,"count":1}, | 
|  | {"start":112,"end":203,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "https://crbug.com/v8/8237", | 
|  | ` | 
|  | !function() {                             // 0000 | 
|  | if (true)                               // 0050 | 
|  | while (false) return; else nop();     // 0100 | 
|  | }();                                      // 0150 | 
|  | !function() {                             // 0200 | 
|  | if (true) l0: { break l0; } else        // 0250 | 
|  | if (nop()) { }                        // 0300 | 
|  | }();                                      // 0350 | 
|  | !function() {                             // 0400 | 
|  | if (true) { if (false) { return; }      // 0450 | 
|  | } else if (nop()) { } }();              // 0500 | 
|  | !function(){                              // 0550 | 
|  | if(true)while(false)return;else nop()   // 0600 | 
|  | }();                                      // 0650 | 
|  | !function(){                              // 0700 | 
|  | if(true) l0:{break l0}else if (nop()){} // 0750 | 
|  | }();                                      // 0800 | 
|  | !function(){                              // 0850 | 
|  | if(true){if(false){return}}else         // 0900 | 
|  | if(nop()){}                           // 0950 | 
|  | }();                                      // 1000 | 
|  | `, | 
|  | [{"start":0,"end":1049,"count":1}, | 
|  | {"start":1,"end":151,"count":1}, | 
|  | {"start":118,"end":137,"count":0}, | 
|  | {"start":201,"end":351,"count":1}, | 
|  | {"start":279,"end":318,"count":0}, | 
|  | {"start":401,"end":525,"count":1}, | 
|  | {"start":475,"end":486,"count":0}, | 
|  | {"start":503,"end":523,"count":0}, | 
|  | {"start":551,"end":651,"count":1}, | 
|  | {"start":622,"end":639,"count":0}, | 
|  | {"start":701,"end":801,"count":1}, | 
|  | {"start":774,"end":791,"count":0}, | 
|  | {"start":851,"end":1001,"count":1}, | 
|  | {"start":920,"end":928,"count":0}, | 
|  | {"start":929,"end":965,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "terminal break statement", | 
|  | ` | 
|  | while (true) {                            // 0000 | 
|  | const b = false                         // 0050 | 
|  | break                                   // 0100 | 
|  | }                                         // 0150 | 
|  | let stop = false                          // 0200 | 
|  | while (true) {                            // 0250 | 
|  | if (stop) {                             // 0300 | 
|  | break                                 // 0350 | 
|  | }                                       // 0400 | 
|  | stop = true                             // 0450 | 
|  | }                                         // 0500 | 
|  | `, | 
|  | [{"start":0,"end":549,"count":1}, | 
|  | {"start":263,"end":501,"count":2}, | 
|  | {"start":312,"end":501,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "terminal return statement", | 
|  | ` | 
|  | function a () {                           // 0000 | 
|  | const b = false                         // 0050 | 
|  | return 1                                // 0100 | 
|  | }                                         // 0150 | 
|  | const b = (early) => {                    // 0200 | 
|  | if (early) {                            // 0250 | 
|  | return 2                              // 0300 | 
|  | }                                       // 0350 | 
|  | return 3                                // 0400 | 
|  | }                                         // 0450 | 
|  | const c = () => {                         // 0500 | 
|  | if (true) {                             // 0550 | 
|  | return                                // 0600 | 
|  | }                                       // 0650 | 
|  | }                                         // 0700 | 
|  | a(); b(false); b(true); c()               // 0750 | 
|  | `, | 
|  | [{"start":0,"end":799,"count":1}, | 
|  | {"start":0,"end":151,"count":1}, | 
|  | {"start":210,"end":451,"count":2}, | 
|  | {"start":263,"end":450,"count":1}, | 
|  | {"start":510,"end":701,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "terminal blocks", | 
|  | ` | 
|  | function a () {                           // 0000 | 
|  | {                                       // 0050 | 
|  | return 'a'                            // 0100 | 
|  | }                                       // 0150 | 
|  | }                                         // 0200 | 
|  | function b () {                           // 0250 | 
|  | {                                       // 0300 | 
|  | {                                     // 0350 | 
|  | return 'b'                          // 0400 | 
|  | }                                     // 0450 | 
|  | }                                       // 0500 | 
|  | }                                         // 0550 | 
|  | a(); b()                                  // 0600 | 
|  | `, | 
|  | [{"start":0,"end":649,"count":1}, | 
|  | {"start":0,"end":201,"count":1}, | 
|  | {"start":250,"end":551,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "terminal if statements", | 
|  | ` | 
|  | function a (branch) {                     // 0000 | 
|  | if (branch) {                           // 0050 | 
|  | return 'a'                            // 0100 | 
|  | } else {                                // 0150 | 
|  | return 'b'                            // 0200 | 
|  | }                                       // 0250 | 
|  | }                                         // 0300 | 
|  | function b (branch) {                     // 0350 | 
|  | if (branch) {                           // 0400 | 
|  | if (branch) {                         // 0450 | 
|  | return 'c'                          // 0500 | 
|  | }                                     // 0550 | 
|  | }                                       // 0600 | 
|  | }                                         // 0650 | 
|  | function c (branch) {                     // 0700 | 
|  | if (branch) {                           // 0750 | 
|  | return 'c'                            // 0800 | 
|  | } else {                                // 0850 | 
|  | return 'd'                            // 0900 | 
|  | }                                       // 0950 | 
|  | }                                         // 1000 | 
|  | function d (branch) {                     // 1050 | 
|  | if (branch) {                           // 1100 | 
|  | if (!branch) {                        // 1150 | 
|  | return 'e'                          // 1200 | 
|  | } else {                              // 1250 | 
|  | return 'f'                          // 1300 | 
|  | }                                     // 1350 | 
|  | } else {                                // 1400 | 
|  | // noop                               // 1450 | 
|  | }                                       // 1500 | 
|  | }                                         // 1550 | 
|  | a(true); a(false); b(true); b(false)      // 1600 | 
|  | c(true); d(true);                         // 1650 | 
|  | `, | 
|  | [{"start":0,"end":1699,"count":1}, | 
|  | {"start":0,"end":301,"count":2}, | 
|  | {"start":64,"end":253,"count":1}, | 
|  | {"start":350,"end":651,"count":2}, | 
|  | {"start":414,"end":603,"count":1}, | 
|  | {"start":700,"end":1001,"count":1}, | 
|  | {"start":853,"end":953,"count":0}, | 
|  | {"start":1050,"end":1551,"count":1}, | 
|  | {"start":1167,"end":1255,"count":0}, | 
|  | {"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":602,"end":616,"count":0}, | 
|  | {"start":0,"end":201,"count":2}, | 
|  | {"start":69,"end":153,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "https://crbug.com/v8/9705", | 
|  | ` | 
|  | function f(x) {                           // 0000 | 
|  | switch (x) {                            // 0050 | 
|  | case 40: nop();                       // 0100 | 
|  | case 41: nop(); return 1;             // 0150 | 
|  | case 42: nop(); break;                // 0200 | 
|  | }                                       // 0250 | 
|  | return 3;                               // 0300 | 
|  | };                                        // 0350 | 
|  | f(40);                                    // 0400 | 
|  | f(41);                                    // 0450 | 
|  | f(42);                                    // 0500 | 
|  | f(43);                                    // 0550 | 
|  | `, | 
|  | [{"start":0,"end":599,"count":1}, | 
|  | {"start":0,"end":351,"count":4}, | 
|  | {"start":104,"end":119,"count":1}, | 
|  | {"start":154,"end":179,"count":2}, | 
|  | {"start":204,"end":226,"count":1}, | 
|  | {"start":253,"end":350,"count":2}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "https://crbug.com/v8/9705", | 
|  | ` | 
|  | function f(x) {                           // 0000 | 
|  | switch (x) {                            // 0050 | 
|  | case 40: nop();                       // 0100 | 
|  | case 41: nop(); return 1;             // 0150 | 
|  | case 42: nop(); break;                // 0200 | 
|  | }                                       // 0250 | 
|  | return 3;                               // 0300 | 
|  | };                                        // 0350 | 
|  | f(42);                                    // 0400 | 
|  | f(43);                                    // 0450 | 
|  | `, | 
|  | [{"start":0,"end":499,"count":1}, | 
|  | {"start":0,"end":351,"count":2}, | 
|  | {"start":104,"end":119,"count":0}, | 
|  | {"start":154,"end":179,"count":0}, | 
|  | {"start":204,"end":226,"count":1}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "https://crbug.com/v8/9857", | 
|  | `function foo() {}`, | 
|  | [{"start":0,"end":17,"count":1}, | 
|  | {"start":0,"end":17,"count":0}] | 
|  | ); | 
|  |  | 
|  | TestCoverage( | 
|  | "https://crbug.com/v8/9857", | 
|  | `function foo() {function bar() {}}; foo()`, | 
|  | [{"start":0,"end":41,"count":1}, | 
|  | {"start":0,"end":34,"count":1}, | 
|  | {"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}] | 
|  | ); | 
|  |  | 
|  | 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); |