Checking resolved breakpoint locations for each line in a script.


== Running test suite: Debugger.resolvedBreakpoint.dumpEachLine
-- Running test case: Debugger.resolvedBreakpoint.dumpEachLine.General

INSERTING AT: 0:0
PAUSES AT: 0:0
-=>   0    |let a=function(){return 0}
      1    let b=function(){return 0}
      2    let c=function(){return 0}
      3    let arr=[];


INSERTING AT: 1:0
PAUSES AT: 1:0
      0    let a=function(){return 0}
-=>   1    |let b=function(){return 0}
      2    let c=function(){return 0}
      3    let arr=[];
      4    let obj={};


INSERTING AT: 2:0
PAUSES AT: 2:0
      0    let a=function(){return 0}
      1    let b=function(){return 0}
-=>   2    |let c=function(){return 0}
      3    let arr=[];
      4    let obj={};
      5


INSERTING AT: 3:0
PAUSES AT: 3:0
      0    let a=function(){return 0}
      1    let b=function(){return 0}
      2    let c=function(){return 0}
-=>   3    |let arr=[];
      4    let obj={};
      5
      6    // Control flow


INSERTING AT: 4:0
PAUSES AT: 4:0
      1    let b=function(){return 0}
      2    let c=function(){return 0}
      3    let arr=[];
-=>   4    |let obj={};
      5
      6    // Control flow
      7


INSERTING AT: 5:0
PAUSES AT: 8:4
      2    let c=function(){return 0}
      3    let arr=[];
      4    let obj={};
 ->   5    #
      6    // Control flow
      7
 =>   8    if (|0)
      9        a();
     10
     11    if (0) {


INSERTING AT: 6:0
PAUSES AT: 8:4
      3    let arr=[];
      4    let obj={};
      5
 ->   6    #// Control flow
      7
 =>   8    if (|0)
      9        a();
     10
     11    if (0) {


INSERTING AT: 7:0
PAUSES AT: 8:4
      4    let obj={};
      5
      6    // Control flow
 ->   7    #
 =>   8    if (|0)
      9        a();
     10
     11    if (0) {


INSERTING AT: 8:0
PAUSES AT: 8:4
      5
      6    // Control flow
      7
-=>   8    #if (|0)
      9        a();
     10
     11    if (0) {


INSERTING AT: 9:0
PAUSES AT: 9:4
      6    // Control flow
      7
      8    if (0)
-=>   9    #    |a();
     10
     11    if (0) {
     12        a();


INSERTING AT: 10:0
PAUSES AT: 11:4
      7
      8    if (0)
      9        a();
 ->  10    #
 =>  11    if (|0) {
     12        a();
     13    }
     14


INSERTING AT: 11:0
PAUSES AT: 11:4
      8    if (0)
      9        a();
     10
-=>  11    #if (|0) {
     12        a();
     13    }
     14


INSERTING AT: 12:0
PAUSES AT: 12:4
      9        a();
     10
     11    if (0) {
-=>  12    #    |a();
     13    }
     14
     15    if (0)


INSERTING AT: 13:0
PAUSES AT: 15:4
     10
     11    if (0) {
     12        a();
 ->  13    #}
     14
 =>  15    if (|0)
     16        a();
     17    else if (0)
     18        a();


INSERTING AT: 14:0
PAUSES AT: 15:4
     11    if (0) {
     12        a();
     13    }
 ->  14    #
 =>  15    if (|0)
     16        a();
     17    else if (0)
     18        a();


INSERTING AT: 15:0
PAUSES AT: 15:4
     12        a();
     13    }
     14
-=>  15    #if (|0)
     16        a();
     17    else if (0)
     18        a();


INSERTING AT: 16:0
PAUSES AT: 16:4
     13    }
     14
     15    if (0)
-=>  16    #    |a();
     17    else if (0)
     18        a();
     19    else


INSERTING AT: 17:0
PAUSES AT: 17:9
     14
     15    if (0)
     16        a();
-=>  17    #else if (|0)
     18        a();
     19    else
     20        a();


INSERTING AT: 18:0
PAUSES AT: 18:4
     15    if (0)
     16        a();
     17    else if (0)
-=>  18    #    |a();
     19    else
     20        a();
     21


INSERTING AT: 19:0
PAUSES AT: 20:4
     16        a();
     17    else if (0)
     18        a();
 ->  19    #else
 =>  20        |a();
     21
     22    a() ? b() : c()
     23


INSERTING AT: 20:0
PAUSES AT: 20:4
     17    else if (0)
     18        a();
     19    else
-=>  20    #    |a();
     21
     22    a() ? b() : c()
     23


INSERTING AT: 21:0
PAUSES AT: 22:0
     18        a();
     19    else
     20        a();
 ->  21    #
 =>  22    |a() ? b() : c()
     23
     24    // Loops
     25


INSERTING AT: 22:0
PAUSES AT: 22:0
     19    else
     20        a();
     21
-=>  22    |a() ? b() : c()
     23
     24    // Loops
     25


INSERTING AT: 23:0
PAUSES AT: 26:7
     20        a();
     21
     22    a() ? b() : c()
 ->  23    #
     24    // Loops
     25
 =>  26    while (|0)
     27        a();
     28
     29    while (0) {


INSERTING AT: 24:0
PAUSES AT: 26:7
     21
     22    a() ? b() : c()
     23
 ->  24    #// Loops
     25
 =>  26    while (|0)
     27        a();
     28
     29    while (0) {


INSERTING AT: 25:0
PAUSES AT: 26:7
     22    a() ? b() : c()
     23
     24    // Loops
 ->  25    #
 =>  26    while (|0)
     27        a();
     28
     29    while (0) {


INSERTING AT: 26:0
PAUSES AT: 26:7
     23
     24    // Loops
     25
-=>  26    #while (|0)
     27        a();
     28
     29    while (0) {


INSERTING AT: 27:0
PAUSES AT: 27:4
     24    // Loops
     25
     26    while (0)
-=>  27    #    |a();
     28
     29    while (0) {
     30        a();


INSERTING AT: 28:0
PAUSES AT: 29:7
     25
     26    while (0)
     27        a();
 ->  28    #
 =>  29    while (|0) {
     30        a();
     31    }
     32


INSERTING AT: 29:0
PAUSES AT: 29:7
     26    while (0)
     27        a();
     28
-=>  29    #while (|0) {
     30        a();
     31    }
     32


INSERTING AT: 30:0
PAUSES AT: 30:4
     27        a();
     28
     29    while (0) {
-=>  30    #    |a();
     31    }
     32
     33    do {


INSERTING AT: 31:0
PAUSES AT: 34:4
     28
     29    while (0) {
     30        a();
 ->  31    #}
     32
     33    do {
 =>  34        |a();
     35    } while (0);
     36
     37    for (a(); b(); c())


INSERTING AT: 32:0
PAUSES AT: 34:4
     29    while (0) {
     30        a();
     31    }
 ->  32    #
     33    do {
 =>  34        |a();
     35    } while (0);
     36
     37    for (a(); b(); c())


INSERTING AT: 33:0
PAUSES AT: 34:4
     30        a();
     31    }
     32
 ->  33    #do {
 =>  34        |a();
     35    } while (0);
     36
     37    for (a(); b(); c())


INSERTING AT: 34:0
PAUSES AT: 34:4
     31    }
     32
     33    do {
-=>  34    #    |a();
     35    } while (0);
     36
     37    for (a(); b(); c())


INSERTING AT: 35:0
PAUSES AT: 35:9
     32
     33    do {
     34        a();
-=>  35    #} while (|0);
     36
     37    for (a(); b(); c())
     38        break;


INSERTING AT: 36:0
PAUSES AT: 37:5
     33    do {
     34        a();
     35    } while (0);
 ->  36    #
 =>  37    for (|a(); b(); c())
     38        break;
     39
     40    for (; b(); c())


INSERTING AT: 37:0
PAUSES AT: 37:5
     34        a();
     35    } while (0);
     36
-=>  37    #for (|a(); b(); c())
     38        break;
     39
     40    for (; b(); c())


INSERTING AT: 38:0
PAUSES AT: 38:4
     35    } while (0);
     36
     37    for (a(); b(); c())
-=>  38    #    |break;
     39
     40    for (; b(); c())
     41        break;


INSERTING AT: 39:0
PAUSES AT: 40:7
     36
     37    for (a(); b(); c())
     38        break;
 ->  39    #
 =>  40    for (; |b(); c())
     41        break;
     42
     43    for (a(); b();)


INSERTING AT: 40:0
PAUSES AT: 40:7
     37    for (a(); b(); c())
     38        break;
     39
-=>  40    #for (; |b(); c())
     41        break;
     42
     43    for (a(); b();)


INSERTING AT: 41:0
PAUSES AT: 41:4
     38        break;
     39
     40    for (; b(); c())
-=>  41    #    |break;
     42
     43    for (a(); b();)
     44        break;


INSERTING AT: 42:0
PAUSES AT: 43:5
     39
     40    for (; b(); c())
     41        break;
 ->  42    #
 =>  43    for (|a(); b();)
     44        break;
     45
     46    for (a();; c())


INSERTING AT: 43:0
PAUSES AT: 43:5
     40    for (; b(); c())
     41        break;
     42
-=>  43    #for (|a(); b();)
     44        break;
     45
     46    for (a();; c())


INSERTING AT: 44:0
PAUSES AT: 44:4
     41        break;
     42
     43    for (a(); b();)
-=>  44    #    |break;
     45
     46    for (a();; c())
     47        break;


INSERTING AT: 45:0
PAUSES AT: 46:5
     42
     43    for (a(); b();)
     44        break;
 ->  45    #
 =>  46    for (|a();; c())
     47        break;
     48
     49    for (a();;)


INSERTING AT: 46:0
PAUSES AT: 46:5
     43    for (a(); b();)
     44        break;
     45
-=>  46    #for (|a();; c())
     47        break;
     48
     49    for (a();;)


INSERTING AT: 47:0
PAUSES AT: 47:4
     44        break;
     45
     46    for (a();; c())
-=>  47    #    |break;
     48
     49    for (a();;)
     50        break;


INSERTING AT: 48:0
PAUSES AT: 49:5
     45
     46    for (a();; c())
     47        break;
 ->  48    #
 =>  49    for (|a();;)
     50        break;
     51
     52    for (; b();)


INSERTING AT: 49:0
PAUSES AT: 49:5
     46    for (a();; c())
     47        break;
     48
-=>  49    #for (|a();;)
     50        break;
     51
     52    for (; b();)


INSERTING AT: 50:0
PAUSES AT: 50:4
     47        break;
     48
     49    for (a();;)
-=>  50    #    |break;
     51
     52    for (; b();)
     53        break;


INSERTING AT: 51:0
PAUSES AT: 52:7
     48
     49    for (a();;)
     50        break;
 ->  51    #
 =>  52    for (; |b();)
     53        break;
     54
     55    for (;; c())


INSERTING AT: 52:0
PAUSES AT: 52:7
     49    for (a();;)
     50        break;
     51
-=>  52    #for (; |b();)
     53        break;
     54
     55    for (;; c())


INSERTING AT: 53:0
PAUSES AT: 53:4
     50        break;
     51
     52    for (; b();)
-=>  53    #    |break;
     54
     55    for (;; c())
     56        break;


INSERTING AT: 54:0
PAUSES AT: 55:8
     51
     52    for (; b();)
     53        break;
 ->  54    #
 =>  55    for (;; |c())
     56        break;
     57
     58    for (;;)


INSERTING AT: 55:0
PAUSES AT: 55:8
     52    for (; b();)
     53        break;
     54
-=>  55    #for (;; |c())
     56        break;
     57
     58    for (;;)


INSERTING AT: 56:0
PAUSES AT: 56:4
     53        break;
     54
     55    for (;; c())
-=>  56    #    |break;
     57
     58    for (;;)
     59        break;


INSERTING AT: 57:0
PAUSES AT: 59:4
     54
     55    for (;; c())
     56        break;
 ->  57    #
     58    for (;;)
 =>  59        |break;
     60
     61    for (a(); b(); c()) {
     62        break;


INSERTING AT: 58:0
PAUSES AT: 59:4
     55    for (;; c())
     56        break;
     57
 ->  58    #for (;;)
 =>  59        |break;
     60
     61    for (a(); b(); c()) {
     62        break;


INSERTING AT: 59:0
PAUSES AT: 59:4
     56        break;
     57
     58    for (;;)
-=>  59    #    |break;
     60
     61    for (a(); b(); c()) {
     62        break;


INSERTING AT: 60:0
PAUSES AT: 61:5
     57
     58    for (;;)
     59        break;
 ->  60    #
 =>  61    for (|a(); b(); c()) {
     62        break;
     63    }
     64


INSERTING AT: 61:0
PAUSES AT: 61:5
     58    for (;;)
     59        break;
     60
-=>  61    #for (|a(); b(); c()) {
     62        break;
     63    }
     64


INSERTING AT: 62:0
PAUSES AT: 62:4
     59        break;
     60
     61    for (a(); b(); c()) {
-=>  62    #    |break;
     63    }
     64
     65    for (let x of arr)


INSERTING AT: 63:0
PAUSES AT: 65:14
     60
     61    for (a(); b(); c()) {
     62        break;
 ->  63    #}
     64
 =>  65    for (let x of |arr)
     66        break;
     67
     68    for (let x in obj)


INSERTING AT: 64:0
PAUSES AT: 65:14
     61    for (a(); b(); c()) {
     62        break;
     63    }
 ->  64    #
 =>  65    for (let x of |arr)
     66        break;
     67
     68    for (let x in obj)


INSERTING AT: 65:0
PAUSES AT: 65:14
     62        break;
     63    }
     64
-=>  65    #for (let x of |arr)
     66        break;
     67
     68    for (let x in obj)


INSERTING AT: 66:0
PAUSES AT: 66:4
     63    }
     64
     65    for (let x of arr)
-=>  66    #    |break;
     67
     68    for (let x in obj)
     69        break;


INSERTING AT: 67:0
PAUSES AT: 68:14
     64
     65    for (let x of arr)
     66        break;
 ->  67    #
 =>  68    for (let x in |obj)
     69        break;
     70
     71    // Switch


INSERTING AT: 68:0
PAUSES AT: 68:14
     65    for (let x of arr)
     66        break;
     67
-=>  68    #for (let x in |obj)
     69        break;
     70
     71    // Switch


INSERTING AT: 69:0
PAUSES AT: 69:4
     66        break;
     67
     68    for (let x in obj)
-=>  69    #    |break;
     70
     71    // Switch
     72


INSERTING AT: 70:0
PAUSES AT: 73:8
     67
     68    for (let x in obj)
     69        break;
 ->  70    #
     71    // Switch
     72
 =>  73    switch (|0) {
     74    case 1:
     75        a();
     76        break;


INSERTING AT: 71:0
PAUSES AT: 73:8
     68    for (let x in obj)
     69        break;
     70
 ->  71    #// Switch
     72
 =>  73    switch (|0) {
     74    case 1:
     75        a();
     76        break;


INSERTING AT: 72:0
PAUSES AT: 73:8
     69        break;
     70
     71    // Switch
 ->  72    #
 =>  73    switch (|0) {
     74    case 1:
     75        a();
     76        break;


INSERTING AT: 73:0
PAUSES AT: 73:8
     70
     71    // Switch
     72
-=>  73    #switch (|0) {
     74    case 1:
     75        a();
     76        break;


INSERTING AT: 74:0
PAUSES AT: 75:4
     71    // Switch
     72
     73    switch (0) {
 ->  74    #case 1:
 =>  75        |a();
     76        break;
     77    case 2:
     78        a();


INSERTING AT: 75:0
PAUSES AT: 75:4
     72
     73    switch (0) {
     74    case 1:
-=>  75    #    |a();
     76        break;
     77    case 2:
     78        a();


INSERTING AT: 76:0
PAUSES AT: 76:4
     73    switch (0) {
     74    case 1:
     75        a();
-=>  76    #    |break;
     77    case 2:
     78        a();
     79        // fallthrough


INSERTING AT: 77:0
PAUSES AT: 78:4
     74    case 1:
     75        a();
     76        break;
 ->  77    #case 2:
 =>  78        |a();
     79        // fallthrough
     80    case 3:
     81        a();


INSERTING AT: 78:0
PAUSES AT: 78:4
     75        a();
     76        break;
     77    case 2:
-=>  78    #    |a();
     79        // fallthrough
     80    case 3:
     81        a();


INSERTING AT: 79:0
PAUSES AT: 81:4
     76        break;
     77    case 2:
     78        a();
 ->  79    #    // fallthrough
     80    case 3:
 =>  81        |a();
     82        break;
     83    default:
     84        a();


INSERTING AT: 80:0
PAUSES AT: 81:4
     77    case 2:
     78        a();
     79        // fallthrough
 ->  80    #case 3:
 =>  81        |a();
     82        break;
     83    default:
     84        a();


INSERTING AT: 81:0
PAUSES AT: 81:4
     78        a();
     79        // fallthrough
     80    case 3:
-=>  81    #    |a();
     82        break;
     83    default:
     84        a();


INSERTING AT: 82:0
PAUSES AT: 82:4
     79        // fallthrough
     80    case 3:
     81        a();
-=>  82    #    |break;
     83    default:
     84        a();
     85        break;


INSERTING AT: 83:0
PAUSES AT: 84:4
     80    case 3:
     81        a();
     82        break;
 ->  83    #default:
 =>  84        |a();
     85        break;
     86    }
     87


INSERTING AT: 84:0
PAUSES AT: 84:4
     81        a();
     82        break;
     83    default:
-=>  84    #    |a();
     85        break;
     86    }
     87


INSERTING AT: 85:0
PAUSES AT: 85:4
     82        break;
     83    default:
     84        a();
-=>  85    #    |break;
     86    }
     87
     88    // Try/Catch


INSERTING AT: 86:0
PAUSES AT: 91:4
     83    default:
     84        a();
     85        break;
 ->  86    #}
     87
     88    // Try/Catch
     89
     90    try {
 =>  91        |a();
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {


INSERTING AT: 87:0
PAUSES AT: 91:4
     84        a();
     85        break;
     86    }
 ->  87    #
     88    // Try/Catch
     89
     90    try {
 =>  91        |a();
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {


INSERTING AT: 88:0
PAUSES AT: 91:4
     85        break;
     86    }
     87
 ->  88    #// Try/Catch
     89
     90    try {
 =>  91        |a();
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {


INSERTING AT: 89:0
PAUSES AT: 91:4
     86    }
     87
     88    // Try/Catch
 ->  89    #
     90    try {
 =>  91        |a();
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {


INSERTING AT: 90:0
PAUSES AT: 91:4
     87
     88    // Try/Catch
     89
 ->  90    #try {
 =>  91        |a();
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {


INSERTING AT: 91:0
PAUSES AT: 91:4
     88    // Try/Catch
     89
     90    try {
-=>  91    #    |a();
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {


INSERTING AT: 92:0
PAUSES AT: 93:4
     89
     90    try {
     91        a();
 ->  92    #} catch (e) {
 =>  93        |shouldNotBeReached();
     94    } finally {
     95        b();
     96    }


INSERTING AT: 93:0
PAUSES AT: 93:4
     90    try {
     91        a();
     92    } catch (e) {
-=>  93    #    |shouldNotBeReached();
     94    } finally {
     95        b();
     96    }


INSERTING AT: 94:0
PAUSES AT: 95:4
     91        a();
     92    } catch (e) {
     93        shouldNotBeReached();
 ->  94    #} finally {
 =>  95        |b();
     96    }
     97
     98    // Class


INSERTING AT: 95:0
PAUSES AT: 95:4
     92    } catch (e) {
     93        shouldNotBeReached();
     94    } finally {
-=>  95    #    |b();
     96    }
     97
     98    // Class


INSERTING AT: 96:0
PAUSES AT: 151:8
     93        shouldNotBeReached();
     94    } finally {
     95        b();
 ->  96    #}
     97
     98    // Class
     99
    100    class Base {
    101        constructor()
    102        {
    103            this._base = true;
    104        }
    105
    106        baseMethod()
    107        {
    108            a();
    109        }
    110
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 97:0
PAUSES AT: 151:8
     94    } finally {
     95        b();
     96    }
 ->  97    #
     98    // Class
     99
    100    class Base {
    101        constructor()
    102        {
    103            this._base = true;
    104        }
    105
    106        baseMethod()
    107        {
    108            a();
    109        }
    110
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 98:0
PAUSES AT: 151:8
     95        b();
     96    }
     97
 ->  98    #// Class
     99
    100    class Base {
    101        constructor()
    102        {
    103            this._base = true;
    104        }
    105
    106        baseMethod()
    107        {
    108            a();
    109        }
    110
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 99:0
PAUSES AT: 151:8
     96    }
     97
     98    // Class
 ->  99    #
    100    class Base {
    101        constructor()
    102        {
    103            this._base = true;
    104        }
    105
    106        baseMethod()
    107        {
    108            a();
    109        }
    110
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 100:0
PAUSES AT: 151:8
     97
     98    // Class
     99
 -> 100    #class Base {
    101        constructor()
    102        {
    103            this._base = true;
    104        }
    105
    106        baseMethod()
    107        {
    108            a();
    109        }
    110
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 101:0
PAUSES AT: 103:8
     98    // Class
     99
    100    class Base {
 -> 101    #    constructor()
    102        {
 => 103            |this._base = true;
    104        }
    105
    106        baseMethod()


INSERTING AT: 102:0
PAUSES AT: 103:8
     99
    100    class Base {
    101        constructor()
 -> 102    #    {
 => 103            |this._base = true;
    104        }
    105
    106        baseMethod()


INSERTING AT: 103:0
PAUSES AT: 103:8
    100    class Base {
    101        constructor()
    102        {
-=> 103    #        |this._base = true;
    104        }
    105
    106        baseMethod()


INSERTING AT: 104:0
PAUSES AT: 104:4
    101        constructor()
    102        {
    103            this._base = true;
-=> 104    #    |}
    105
    106        baseMethod()
    107        {


INSERTING AT: 105:0
PAUSES AT: 151:8
    102        {
    103            this._base = true;
    104        }
 -> 105    #
    106        baseMethod()
    107        {
    108            a();
    109        }
    110
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 106:0
PAUSES AT: 108:8
    103            this._base = true;
    104        }
    105
 -> 106    #    baseMethod()
    107        {
 => 108            |a();
    109        }
    110
    111        method()


INSERTING AT: 107:0
PAUSES AT: 108:8
    104        }
    105
    106        baseMethod()
 -> 107    #    {
 => 108            |a();
    109        }
    110
    111        method()


INSERTING AT: 108:0
PAUSES AT: 108:8
    105
    106        baseMethod()
    107        {
-=> 108    #        |a();
    109        }
    110
    111        method()


INSERTING AT: 109:0
PAUSES AT: 109:4
    106        baseMethod()
    107        {
    108            a();
-=> 109    #    |}
    110
    111        method()
    112        {


INSERTING AT: 110:0
PAUSES AT: 151:8
    107        {
    108            a();
    109        }
 -> 110    #
    111        method()
    112        {
    113            a();
    114        }
    115    }
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 111:0
PAUSES AT: 113:8
    108            a();
    109        }
    110
 -> 111    #    method()
    112        {
 => 113            |a();
    114        }
    115    }
    116


INSERTING AT: 112:0
PAUSES AT: 113:8
    109        }
    110
    111        method()
 -> 112    #    {
 => 113            |a();
    114        }
    115    }
    116


INSERTING AT: 113:0
PAUSES AT: 113:8
    110
    111        method()
    112        {
-=> 113    #        |a();
    114        }
    115    }
    116


INSERTING AT: 114:0
PAUSES AT: 114:4
    111        method()
    112        {
    113            a();
-=> 114    #    |}
    115    }
    116
    117    class Child extends Base {


INSERTING AT: 115:0
PAUSES AT: 151:8
    112        {
    113            a();
    114        }
 -> 115    #}
    116
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 116:0
PAUSES AT: 151:8
    113            a();
    114        }
    115    }
 -> 116    #
    117    class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 117:0
PAUSES AT: 151:8
    114        }
    115    }
    116
 -> 117    #class Child extends Base {
    118        constructor()
    119        {
    120            super();
    121            this._child = true;
    122        }
    123
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 118:0
PAUSES AT: 120:8
    115    }
    116
    117    class Child extends Base {
 -> 118    #    constructor()
    119        {
 => 120            |super();
    121            this._child = true;
    122        }
    123


INSERTING AT: 119:0
PAUSES AT: 120:8
    116
    117    class Child extends Base {
    118        constructor()
 -> 119    #    {
 => 120            |super();
    121            this._child = true;
    122        }
    123


INSERTING AT: 120:0
PAUSES AT: 120:8
    117    class Child extends Base {
    118        constructor()
    119        {
-=> 120    #        |super();
    121            this._child = true;
    122        }
    123


INSERTING AT: 121:0
PAUSES AT: 121:8
    118        constructor()
    119        {
    120            super();
-=> 121    #        |this._child = true;
    122        }
    123
    124        childMethod()


INSERTING AT: 122:0
PAUSES AT: 122:4
    119        {
    120            super();
    121            this._child = true;
-=> 122    #    |}
    123
    124        childMethod()
    125        {


INSERTING AT: 123:0
PAUSES AT: 151:8
    120            super();
    121            this._child = true;
    122        }
 -> 123    #
    124        childMethod()
    125        {
    126            b();
    127        }
    128
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 124:0
PAUSES AT: 126:8
    121            this._child = true;
    122        }
    123
 -> 124    #    childMethod()
    125        {
 => 126            |b();
    127        }
    128
    129        method()


INSERTING AT: 125:0
PAUSES AT: 126:8
    122        }
    123
    124        childMethod()
 -> 125    #    {
 => 126            |b();
    127        }
    128
    129        method()


INSERTING AT: 126:0
PAUSES AT: 126:8
    123
    124        childMethod()
    125        {
-=> 126    #        |b();
    127        }
    128
    129        method()


INSERTING AT: 127:0
PAUSES AT: 127:4
    124        childMethod()
    125        {
    126            b();
-=> 127    #    |}
    128
    129        method()
    130        {


INSERTING AT: 128:0
PAUSES AT: 151:8
    125        {
    126            b();
    127        }
 -> 128    #
    129        method()
    130        {
    131            super.method();
    132            b();
    133        }
    134
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 129:0
PAUSES AT: 131:8
    126            b();
    127        }
    128
 -> 129    #    method()
    130        {
 => 131            |super.method();
    132            b();
    133        }
    134


INSERTING AT: 130:0
PAUSES AT: 131:8
    127        }
    128
    129        method()
 -> 130    #    {
 => 131            |super.method();
    132            b();
    133        }
    134


INSERTING AT: 131:0
PAUSES AT: 131:8
    128
    129        method()
    130        {
-=> 131    #        |super.method();
    132            b();
    133        }
    134


INSERTING AT: 132:0
PAUSES AT: 132:8
    129        method()
    130        {
    131            super.method();
-=> 132    #        |b();
    133        }
    134
    135        get name()


INSERTING AT: 133:0
PAUSES AT: 133:4
    130        {
    131            super.method();
    132            b();
-=> 133    #    |}
    134
    135        get name()
    136        {


INSERTING AT: 134:0
PAUSES AT: 151:8
    131            super.method();
    132            b();
    133        }
 -> 134    #
    135        get name()
    136        {
    137            return this._name;
    138        }
    139
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 135:0
PAUSES AT: 137:8
    132            b();
    133        }
    134
 -> 135    #    get name()
    136        {
 => 137            |return this._name;
    138        }
    139
    140        set name(x)


INSERTING AT: 136:0
PAUSES AT: 137:8
    133        }
    134
    135        get name()
 -> 136    #    {
 => 137            |return this._name;
    138        }
    139
    140        set name(x)


INSERTING AT: 137:0
PAUSES AT: 137:8
    134
    135        get name()
    136        {
-=> 137    #        |return this._name;
    138        }
    139
    140        set name(x)


INSERTING AT: 138:0
PAUSES AT: 138:4
    135        get name()
    136        {
    137            return this._name;
-=> 138    #    |}
    139
    140        set name(x)
    141        {


INSERTING AT: 139:0
PAUSES AT: 151:8
    136        {
    137            return this._name;
    138        }
 -> 139    #
    140        set name(x)
    141        {
    142            this._name = x;
    143        }
    144    }
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 140:0
PAUSES AT: 142:8
    137            return this._name;
    138        }
    139
 -> 140    #    set name(x)
    141        {
 => 142            |this._name = x;
    143        }
    144    }
    145


INSERTING AT: 141:0
PAUSES AT: 142:8
    138        }
    139
    140        set name(x)
 -> 141    #    {
 => 142            |this._name = x;
    143        }
    144    }
    145


INSERTING AT: 142:0
PAUSES AT: 142:8
    139
    140        set name(x)
    141        {
-=> 142    #        |this._name = x;
    143        }
    144    }
    145


INSERTING AT: 143:0
PAUSES AT: 143:4
    140        set name(x)
    141        {
    142            this._name = x;
-=> 143    #    |}
    144    }
    145
    146    // ---------


INSERTING AT: 144:0
PAUSES AT: 151:8
    141        {
    142            this._name = x;
    143        }
 -> 144    #}
    145
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 145:0
PAUSES AT: 151:8
    142            this._name = x;
    143        }
    144    }
 -> 145    #
    146    // ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 146:0
PAUSES AT: 151:8
    143        }
    144    }
    145
 -> 146    #// ---------
    147    /* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 147:0
PAUSES AT: 151:8
    144    }
    145
    146    // ---------
 -> 147    #/* Misc */
    148    // ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 148:0
PAUSES AT: 151:8
    145
    146    // ---------
    147    /* Misc */
 -> 148    #// ---------
    149
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 149:0
PAUSES AT: 151:8
    146    // ---------
    147    /* Misc */
    148    // ---------
 -> 149    #
    150        {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 150:0
PAUSES AT: 151:8
    147    /* Misc */
    148    // ---------
    149
 -> 150    #    {
 => 151            |a();
    152        }
    153
    154    label:


INSERTING AT: 151:0
PAUSES AT: 151:8
    148    // ---------
    149
    150        {
-=> 151    #        |a();
    152        }
    153
    154    label:


INSERTING AT: 152:0
PAUSES AT: 156:8
    149
    150        {
    151            a();
 -> 152    #    }
    153
    154    label:
    155        {
 => 156            |a();
    157        }
    158
    159    var w1 = {x:1, y:2};


INSERTING AT: 153:0
PAUSES AT: 156:8
    150        {
    151            a();
    152        }
 -> 153    #
    154    label:
    155        {
 => 156            |a();
    157        }
    158
    159    var w1 = {x:1, y:2};


INSERTING AT: 154:0
PAUSES AT: 156:8
    151            a();
    152        }
    153
 -> 154    #label:
    155        {
 => 156            |a();
    157        }
    158
    159    var w1 = {x:1, y:2};


INSERTING AT: 155:0
PAUSES AT: 156:8
    152        }
    153
    154    label:
 -> 155    #    {
 => 156            |a();
    157        }
    158
    159    var w1 = {x:1, y:2};


INSERTING AT: 156:0
PAUSES AT: 156:8
    153
    154    label:
    155        {
-=> 156    #        |a();
    157        }
    158
    159    var w1 = {x:1, y:2};


INSERTING AT: 157:0
PAUSES AT: 159:0
    154    label:
    155        {
    156            a();
 -> 157    #    }
    158
 => 159    |var w1 = {x:1, y:2};
    160    with (w1) {
    161        a();
    162    }


INSERTING AT: 158:0
PAUSES AT: 159:0
    155        {
    156            a();
    157        }
 -> 158    #
 => 159    |var w1 = {x:1, y:2};
    160    with (w1) {
    161        a();
    162    }


INSERTING AT: 159:0
PAUSES AT: 159:0
    156            a();
    157        }
    158
-=> 159    |var w1 = {x:1, y:2};
    160    with (w1) {
    161        a();
    162    }


INSERTING AT: 160:0
PAUSES AT: 160:6
    157        }
    158
    159    var w1 = {x:1, y:2};
-=> 160    #with (|w1) {
    161        a();
    162    }
    163


INSERTING AT: 161:0
PAUSES AT: 161:4
    158
    159    var w1 = {x:1, y:2};
    160    with (w1) {
-=> 161    #    |a();
    162    }
    163
    164    var v1 = 1,


INSERTING AT: 162:0
PAUSES AT: 164:0
    159    var w1 = {x:1, y:2};
    160    with (w1) {
    161        a();
 -> 162    #}
    163
 => 164    |var v1 = 1,
    165        v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;


INSERTING AT: 163:0
PAUSES AT: 164:0
    160    with (w1) {
    161        a();
    162    }
 -> 163    #
 => 164    |var v1 = 1,
    165        v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;


INSERTING AT: 164:0
PAUSES AT: 164:0
    161        a();
    162    }
    163
-=> 164    |var v1 = 1,
    165        v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;


INSERTING AT: 165:0
PAUSES AT: 165:4
    162    }
    163
    164    var v1 = 1,
-=> 165    #    |v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;
    168    const c1 = 3,


INSERTING AT: 166:0
PAUSES AT: 166:0
    163
    164    var v1 = 1,
    165        v2 = 1;
-=> 166    |let l1 = 2,
    167        l2 = 2;
    168    const c1 = 3,
    169        c2 = 3;


INSERTING AT: 167:0
PAUSES AT: 167:4
    164    var v1 = 1,
    165        v2 = 1;
    166    let l1 = 2,
-=> 167    #    |l2 = 2;
    168    const c1 = 3,
    169        c2 = 3;
    170


INSERTING AT: 168:0
PAUSES AT: 168:0
    165        v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;
-=> 168    |const c1 = 3,
    169        c2 = 3;
    170
    171    v1 = v2 = v1;


INSERTING AT: 169:0
PAUSES AT: 169:4
    166    let l1 = 2,
    167        l2 = 2;
    168    const c1 = 3,
-=> 169    #    |c2 = 3;
    170
    171    v1 = v2 = v1;
    172


INSERTING AT: 170:0
PAUSES AT: 171:0
    167        l2 = 2;
    168    const c1 = 3,
    169        c2 = 3;
 -> 170    #
 => 171    |v1 = v2 = v1;
    172
    173    var {x, y} = obj;
    174    var [w, z] = arr;


INSERTING AT: 171:0
PAUSES AT: 171:0
    168    const c1 = 3,
    169        c2 = 3;
    170
-=> 171    |v1 = v2 = v1;
    172
    173    var {x, y} = obj;
    174    var [w, z] = arr;


INSERTING AT: 172:0
PAUSES AT: 173:0
    169        c2 = 3;
    170
    171    v1 = v2 = v1;
 -> 172    #
 => 173    |var {x, y} = obj;
    174    var [w, z] = arr;
    175
    176    var o1 = {


INSERTING AT: 173:0
PAUSES AT: 173:0
    170
    171    v1 = v2 = v1;
    172
-=> 173    |var {x, y} = obj;
    174    var [w, z] = arr;
    175
    176    var o1 = {


INSERTING AT: 174:0
PAUSES AT: 174:0
    171    v1 = v2 = v1;
    172
    173    var {x, y} = obj;
-=> 174    |var [w, z] = arr;
    175
    176    var o1 = {
    177        p1: 1,


INSERTING AT: 175:0
PAUSES AT: 176:0
    172
    173    var {x, y} = obj;
    174    var [w, z] = arr;
 -> 175    #
 => 176    |var o1 = {
    177        p1: 1,
    178        p2: a(),
    179        p3: 1,


INSERTING AT: 176:0
PAUSES AT: 176:0
    173    var {x, y} = obj;
    174    var [w, z] = arr;
    175
-=> 176    |var o1 = {
    177        p1: 1,
    178        p2: a(),
    179        p3: 1,


INSERTING AT: 177:0
PAUSES AT: 184:0
    174    var [w, z] = arr;
    175
    176    var o1 = {
 -> 177    #    p1: 1,
    178        p2: a(),
    179        p3: 1,
    180        ["p4"]: 1,
    181        [b()]: 1,
    182    };
    183
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 178:0
PAUSES AT: 184:0
    175
    176    var o1 = {
    177        p1: 1,
 -> 178    #    p2: a(),
    179        p3: 1,
    180        ["p4"]: 1,
    181        [b()]: 1,
    182    };
    183
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 179:0
PAUSES AT: 184:0
    176    var o1 = {
    177        p1: 1,
    178        p2: a(),
 -> 179    #    p3: 1,
    180        ["p4"]: 1,
    181        [b()]: 1,
    182    };
    183
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 180:0
PAUSES AT: 184:0
    177        p1: 1,
    178        p2: a(),
    179        p3: 1,
 -> 180    #    ["p4"]: 1,
    181        [b()]: 1,
    182    };
    183
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 181:0
PAUSES AT: 184:0
    178        p2: a(),
    179        p3: 1,
    180        ["p4"]: 1,
 -> 181    #    [b()]: 1,
    182    };
    183
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 182:0
PAUSES AT: 184:0
    179        p3: 1,
    180        ["p4"]: 1,
    181        [b()]: 1,
 -> 182    #};
    183
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 183:0
PAUSES AT: 184:0
    180        ["p4"]: 1,
    181        [b()]: 1,
    182    };
 -> 183    #
 => 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 184:0
PAUSES AT: 184:0
    181        [b()]: 1,
    182    };
    183
-=> 184    |var a1 = [
    185        1,
    186        a(),
    187        1,


INSERTING AT: 185:0
PAUSES AT: 191:0
    182    };
    183
    184    var a1 = [
 -> 185    #    1,
    186        a(),
    187        1,
    188        b(),
    189    ];
    190
 => 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 186:0
PAUSES AT: 191:0
    183
    184    var a1 = [
    185        1,
 -> 186    #    a(),
    187        1,
    188        b(),
    189    ];
    190
 => 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 187:0
PAUSES AT: 191:0
    184    var a1 = [
    185        1,
    186        a(),
 -> 187    #    1,
    188        b(),
    189    ];
    190
 => 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 188:0
PAUSES AT: 191:0
    185        1,
    186        a(),
    187        1,
 -> 188    #    b(),
    189    ];
    190
 => 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 189:0
PAUSES AT: 191:0
    186        a(),
    187        1,
    188        b(),
 -> 189    #];
    190
 => 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 190:0
PAUSES AT: 191:0
    187        1,
    188        b(),
    189    ];
 -> 190    #
 => 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 191:0
PAUSES AT: 191:0
    188        b(),
    189    ];
    190
-=> 191    |var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;


INSERTING AT: 192:0
PAUSES AT: 192:0
    189    ];
    190
    191    var i1 = new Base;
-=> 192    |var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;
    195    i2.method();


INSERTING AT: 193:0
PAUSES AT: 193:0
    190
    191    var i1 = new Base;
    192    var i2 = new Child;
-=> 193    |i2.name;
    194    i2.name = 1;
    195    i2.method();
    196


INSERTING AT: 194:0
PAUSES AT: 194:0
    191    var i1 = new Base;
    192    var i2 = new Child;
    193    i2.name;
-=> 194    |i2.name = 1;
    195    i2.method();
    196
    197    var t1 = `${1} ${x=1} ${a()}`;


INSERTING AT: 195:0
PAUSES AT: 195:0
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;
-=> 195    |i2.method();
    196
    197    var t1 = `${1} ${x=1} ${a()}`;
    198    var t2 = a`${1} ${x=1} ${a()}`;


INSERTING AT: 196:0
PAUSES AT: 197:0
    193    i2.name;
    194    i2.name = 1;
    195    i2.method();
 -> 196    #
 => 197    |var t1 = `${1} ${x=1} ${a()}`;
    198    var t2 = a`${1} ${x=1} ${a()}`;
    199
    200    a(a(), b());


INSERTING AT: 197:0
PAUSES AT: 197:0
    194    i2.name = 1;
    195    i2.method();
    196
-=> 197    |var t1 = `${1} ${x=1} ${a()}`;
    198    var t2 = a`${1} ${x=1} ${a()}`;
    199
    200    a(a(), b());


INSERTING AT: 198:0
PAUSES AT: 198:0
    195    i2.method();
    196
    197    var t1 = `${1} ${x=1} ${a()}`;
-=> 198    |var t2 = a`${1} ${x=1} ${a()}`;
    199
    200    a(a(), b());
    201


INSERTING AT: 199:0
PAUSES AT: 200:0
    196
    197    var t1 = `${1} ${x=1} ${a()}`;
    198    var t2 = a`${1} ${x=1} ${a()}`;
 -> 199    #
 => 200    |a(a(), b());
    201
    202    if (o1.p1)
    203        a();


INSERTING AT: 200:0
PAUSES AT: 200:0
    197    var t1 = `${1} ${x=1} ${a()}`;
    198    var t2 = a`${1} ${x=1} ${a()}`;
    199
-=> 200    |a(a(), b());
    201
    202    if (o1.p1)
    203        a();


INSERTING AT: 201:0
PAUSES AT: 202:4
    198    var t2 = a`${1} ${x=1} ${a()}`;
    199
    200    a(a(), b());
 -> 201    #
 => 202    if (|o1.p1)
    203        a();
    204
    205    if (o1["p1"])


INSERTING AT: 202:0
PAUSES AT: 202:4
    199
    200    a(a(), b());
    201
-=> 202    #if (|o1.p1)
    203        a();
    204
    205    if (o1["p1"])


INSERTING AT: 203:0
PAUSES AT: 203:4
    200    a(a(), b());
    201
    202    if (o1.p1)
-=> 203    #    |a();
    204
    205    if (o1["p1"])
    206        a();


INSERTING AT: 204:0
PAUSES AT: 205:4
    201
    202    if (o1.p1)
    203        a();
 -> 204    #
 => 205    if (|o1["p1"])
    206        a();
    207
    208    if (String.raw`test`)


INSERTING AT: 205:0
PAUSES AT: 205:4
    202    if (o1.p1)
    203        a();
    204
-=> 205    #if (|o1["p1"])
    206        a();
    207
    208    if (String.raw`test`)


INSERTING AT: 206:0
PAUSES AT: 206:4
    203        a();
    204
    205    if (o1["p1"])
-=> 206    #    |a();
    207
    208    if (String.raw`test`)
    209        a();


INSERTING AT: 207:0
PAUSES AT: 208:4
    204
    205    if (o1["p1"])
    206        a();
 -> 207    #
 => 208    if (|String.raw`test`)
    209        a();
    210
    211    a(), b(), c();


INSERTING AT: 208:0
PAUSES AT: 208:4
    205    if (o1["p1"])
    206        a();
    207
-=> 208    #if (|String.raw`test`)
    209        a();
    210
    211    a(), b(), c();


INSERTING AT: 209:0
PAUSES AT: 209:4
    206        a();
    207
    208    if (String.raw`test`)
-=> 209    #    |a();
    210
    211    a(), b(), c();
    212


INSERTING AT: 210:0
PAUSES AT: 211:0
    207
    208    if (String.raw`test`)
    209        a();
 -> 210    #
 => 211    |a(), b(), c();
    212
    213    a(),
    214    b(),


INSERTING AT: 211:0
PAUSES AT: 211:0
    208    if (String.raw`test`)
    209        a();
    210
-=> 211    |a(), b(), c();
    212
    213    a(),
    214    b(),


INSERTING AT: 212:0
PAUSES AT: 213:0
    209        a();
    210
    211    a(), b(), c();
 -> 212    #
 => 213    |a(),
    214    b(),
    215    c();
    216


INSERTING AT: 213:0
PAUSES AT: 213:0
    210
    211    a(), b(), c();
    212
-=> 213    |a(),
    214    b(),
    215    c();
    216


INSERTING AT: 214:0
PAUSES AT: 214:0
    211    a(), b(), c();
    212
    213    a(),
-=> 214    |b(),
    215    c();
    216
    217    true && (a(), b(), c()) && true;


INSERTING AT: 215:0
PAUSES AT: 215:0
    212
    213    a(),
    214    b(),
-=> 215    |c();
    216
    217    true && (a(), b(), c()) && true;
    218


INSERTING AT: 216:0
PAUSES AT: 217:0
    213    a(),
    214    b(),
    215    c();
 -> 216    #
 => 217    |true && (a(), b(), c()) && true;
    218
    219    true && (
    220        a(),


INSERTING AT: 217:0
PAUSES AT: 217:0
    214    b(),
    215    c();
    216
-=> 217    |true && (a(), b(), c()) && true;
    218
    219    true && (
    220        a(),


INSERTING AT: 218:0
PAUSES AT: 219:0
    215    c();
    216
    217    true && (a(), b(), c()) && true;
 -> 218    #
 => 219    |true && (
    220        a(),
    221        b(),
    222        c()


INSERTING AT: 219:0
PAUSES AT: 219:0
    216
    217    true && (a(), b(), c()) && true;
    218
-=> 219    |true && (
    220        a(),
    221        b(),
    222        c()


INSERTING AT: 220:0
PAUSES AT: 226:4
    217    true && (a(), b(), c()) && true;
    218
    219    true && (
 -> 220    #    a(),
    221        b(),
    222        c()
    223    ) && true;
    224
    225    try {
 => 226        |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 221:0
PAUSES AT: 226:4
    218
    219    true && (
    220        a(),
 -> 221    #    b(),
    222        c()
    223    ) && true;
    224
    225    try {
 => 226        |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 222:0
PAUSES AT: 226:4
    219    true && (
    220        a(),
    221        b(),
 -> 222    #    c()
    223    ) && true;
    224
    225    try {
 => 226        |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 223:0
PAUSES AT: 226:4
    220        a(),
    221        b(),
    222        c()
 -> 223    #) && true;
    224
    225    try {
 => 226        |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 224:0
PAUSES AT: 226:4
    221        b(),
    222        c()
    223    ) && true;
 -> 224    #
    225    try {
 => 226        |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 225:0
PAUSES AT: 226:4
    222        c()
    223    ) && true;
    224
 -> 225    #try {
 => 226        |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 226:0
PAUSES AT: 226:4
    223    ) && true;
    224
    225    try {
-=> 226    #    |throw a(), b(), c();
    227    } catch { }
    228
    229    try {


INSERTING AT: 227:0
PAUSES AT: 230:4
    224
    225    try {
    226        throw a(), b(), c();
 -> 227    #} catch { }
    228
    229    try {
 => 230        |throw a(),
    231            b(),
    232            c();
    233    } catch { }


INSERTING AT: 228:0
PAUSES AT: 230:4
    225    try {
    226        throw a(), b(), c();
    227    } catch { }
 -> 228    #
    229    try {
 => 230        |throw a(),
    231            b(),
    232            c();
    233    } catch { }


INSERTING AT: 229:0
PAUSES AT: 230:4
    226        throw a(), b(), c();
    227    } catch { }
    228
 -> 229    #try {
 => 230        |throw a(),
    231            b(),
    232            c();
    233    } catch { }


INSERTING AT: 230:0
PAUSES AT: 230:4
    227    } catch { }
    228
    229    try {
-=> 230    #    |throw a(),
    231            b(),
    232            c();
    233    } catch { }


INSERTING AT: 231:0
PAUSES AT: 231:8
    228
    229    try {
    230        throw a(),
-=> 231    #        |b(),
    232            c();
    233    } catch { }
    234


INSERTING AT: 232:0
PAUSES AT: 232:8
    229    try {
    230        throw a(),
    231            b(),
-=> 232    #        |c();
    233    } catch { }
    234


INSERTING AT: 233:0
PRODUCES: Could not resolve breakpoint

INSERTING AT: 234:0
PRODUCES: Could not resolve breakpoint

-- Running test case: Debugger.resolvedBreakpoint.dumpEachLine.Functions

INSERTING AT: 0:0
PAUSES AT: 0:19
-=>   0    #function inline() {|}
      1    function named() {
      2        var x;
      3    }


INSERTING AT: 1:0
PAUSES AT: 2:4
      0    function inline() {}
 ->   1    #function named() {
 =>   2        |var x;
      3    }
      4    function outer1() {
      5        function inner() {


INSERTING AT: 2:0
PAUSES AT: 2:4
      0    function inline() {}
      1    function named() {
-=>   2    #    |var x;
      3    }
      4    function outer1() {
      5        function inner() {


INSERTING AT: 3:0
PAUSES AT: 3:0
      0    function inline() {}
      1    function named() {
      2        var x;
-=>   3    |}
      4    function outer1() {
      5        function inner() {
      6            var y;


INSERTING AT: 4:0
PAUSES AT: 8:0
      1    function named() {
      2        var x;
      3    }
 ->   4    #function outer1() {
      5        function inner() {
      6            var y;
      7        }
 =>   8    |}
      9    function outer2()
     10    {
     11        function inner()


INSERTING AT: 5:0
PAUSES AT: 6:8
      2        var x;
      3    }
      4    function outer1() {
 ->   5    #    function inner() {
 =>   6            |var y;
      7        }
      8    }
      9    function outer2()


INSERTING AT: 6:0
PAUSES AT: 6:8
      3    }
      4    function outer1() {
      5        function inner() {
-=>   6    #        |var y;
      7        }
      8    }
      9    function outer2()


INSERTING AT: 7:0
PAUSES AT: 7:4
      4    function outer1() {
      5        function inner() {
      6            var y;
-=>   7    #    |}
      8    }
      9    function outer2()
     10    {


INSERTING AT: 8:0
PAUSES AT: 8:0
      5        function inner() {
      6            var y;
      7        }
-=>   8    |}
      9    function outer2()
     10    {
     11        function inner()


INSERTING AT: 9:0
PAUSES AT: 15:0
      6            var y;
      7        }
      8    }
 ->   9    #function outer2()
     10    {
     11        function inner()
     12        {
     13            var y;
     14        }
 =>  15    |}
     16    function outer3() {
     17        var x;
     18        function inner() { var y; }


INSERTING AT: 10:0
PAUSES AT: 15:0
      7        }
      8    }
      9    function outer2()
 ->  10    #{
     11        function inner()
     12        {
     13            var y;
     14        }
 =>  15    |}
     16    function outer3() {
     17        var x;
     18        function inner() { var y; }


INSERTING AT: 11:0
PAUSES AT: 13:8
      8    }
      9    function outer2()
     10    {
 ->  11    #    function inner()
     12        {
 =>  13            |var y;
     14        }
     15    }
     16    function outer3() {


INSERTING AT: 12:0
PAUSES AT: 13:8
      9    function outer2()
     10    {
     11        function inner()
 ->  12    #    {
 =>  13            |var y;
     14        }
     15    }
     16    function outer3() {


INSERTING AT: 13:0
PAUSES AT: 13:8
     10    {
     11        function inner()
     12        {
-=>  13    #        |var y;
     14        }
     15    }
     16    function outer3() {


INSERTING AT: 14:0
PAUSES AT: 14:4
     11        function inner()
     12        {
     13            var y;
-=>  14    #    |}
     15    }
     16    function outer3() {
     17        var x;


INSERTING AT: 15:0
PAUSES AT: 15:0
     12        {
     13            var y;
     14        }
-=>  15    |}
     16    function outer3() {
     17        var x;
     18        function inner() { var y; }


INSERTING AT: 16:0
PAUSES AT: 17:4
     13            var y;
     14        }
     15    }
 ->  16    #function outer3() {
 =>  17        |var x;
     18        function inner() { var y; }
     19    }
     20    function outer4() {


INSERTING AT: 17:0
PAUSES AT: 17:4
     14        }
     15    }
     16    function outer3() {
-=>  17    #    |var x;
     18        function inner() { var y; }
     19    }
     20    function outer4() {


INSERTING AT: 18:0
PAUSES AT: 18:23
     15    }
     16    function outer3() {
     17        var x;
-=>  18    #    function inner() { |var y; }
     19    }
     20    function outer4() {
     21        function inner() { var y; }


INSERTING AT: 19:0
PAUSES AT: 19:0
     16    function outer3() {
     17        var x;
     18        function inner() { var y; }
-=>  19    |}
     20    function outer4() {
     21        function inner() { var y; }
     22        var x;


INSERTING AT: 20:0
PAUSES AT: 22:4
     17        var x;
     18        function inner() { var y; }
     19    }
 ->  20    #function outer4() {
     21        function inner() { var y; }
 =>  22        |var x;
     23    }
     24    function outer5() {
     25        var x;


INSERTING AT: 21:0
PAUSES AT: 21:23
     18        function inner() { var y; }
     19    }
     20    function outer4() {
-=>  21    #    function inner() { |var y; }
     22        var x;
     23    }
     24    function outer5() {


INSERTING AT: 22:0
PAUSES AT: 22:4
     19    }
     20    function outer4() {
     21        function inner() { var y; }
-=>  22    #    |var x;
     23    }
     24    function outer5() {
     25        var x;


INSERTING AT: 23:0
PAUSES AT: 23:0
     20    function outer4() {
     21        function inner() { var y; }
     22        var x;
-=>  23    |}
     24    function outer5() {
     25        var x;
     26        function inner() { var y; }


INSERTING AT: 24:0
PAUSES AT: 25:4
     21        function inner() { var y; }
     22        var x;
     23    }
 ->  24    #function outer5() {
 =>  25        |var x;
     26        function inner() { var y; }
     27        var x;
     28    }


INSERTING AT: 25:0
PAUSES AT: 25:4
     22        var x;
     23    }
     24    function outer5() {
-=>  25    #    |var x;
     26        function inner() { var y; }
     27        var x;
     28    }


INSERTING AT: 26:0
PAUSES AT: 26:23
     23    }
     24    function outer5() {
     25        var x;
-=>  26    #    function inner() { |var y; }
     27        var x;
     28    }
     29    function outer6() {


INSERTING AT: 27:0
PAUSES AT: 27:4
     24    function outer5() {
     25        var x;
     26        function inner() { var y; }
-=>  27    #    |var x;
     28    }
     29    function outer6() {
     30        function inner1() { var y; }


INSERTING AT: 28:0
PAUSES AT: 28:0
     25        var x;
     26        function inner() { var y; }
     27        var x;
-=>  28    |}
     29    function outer6() {
     30        function inner1() { var y; }
     31        var x;


INSERTING AT: 29:0
PAUSES AT: 31:4
     26        function inner() { var y; }
     27        var x;
     28    }
 ->  29    #function outer6() {
     30        function inner1() { var y; }
 =>  31        |var x;
     32        function inner2() { var z; }
     33    }
     34    function outer7() {


INSERTING AT: 30:0
PAUSES AT: 30:24
     27        var x;
     28    }
     29    function outer6() {
-=>  30    #    function inner1() { |var y; }
     31        var x;
     32        function inner2() { var z; }
     33    }


INSERTING AT: 31:0
PAUSES AT: 31:4
     28    }
     29    function outer6() {
     30        function inner1() { var y; }
-=>  31    #    |var x;
     32        function inner2() { var z; }
     33    }
     34    function outer7() {


INSERTING AT: 32:0
PAUSES AT: 32:24
     29    function outer6() {
     30        function inner1() { var y; }
     31        var x;
-=>  32    #    function inner2() { |var z; }
     33    }
     34    function outer7() {
     35        function inner1() { var y; }


INSERTING AT: 33:0
PAUSES AT: 33:0
     30        function inner1() { var y; }
     31        var x;
     32        function inner2() { var z; }
-=>  33    |}
     34    function outer7() {
     35        function inner1() { var y; }
     36        function inner2() { var z; }


INSERTING AT: 34:0
PAUSES AT: 37:4
     31        var x;
     32        function inner2() { var z; }
     33    }
 ->  34    #function outer7() {
     35        function inner1() { var y; }
     36        function inner2() { var z; }
 =>  37        |var x;
     38    }
     39    function outer7() {
     40        function inner1() { var y; }


INSERTING AT: 35:0
PAUSES AT: 35:24
     32        function inner2() { var z; }
     33    }
     34    function outer7() {
-=>  35    #    function inner1() { |var y; }
     36        function inner2() { var z; }
     37        var x;
     38    }


INSERTING AT: 36:0
PAUSES AT: 36:24
     33    }
     34    function outer7() {
     35        function inner1() { var y; }
-=>  36    #    function inner2() { |var z; }
     37        var x;
     38    }
     39    function outer7() {


INSERTING AT: 37:0
PAUSES AT: 37:4
     34    function outer7() {
     35        function inner1() { var y; }
     36        function inner2() { var z; }
-=>  37    #    |var x;
     38    }
     39    function outer7() {
     40        function inner1() { var y; }


INSERTING AT: 38:0
PAUSES AT: 38:0
     35        function inner1() { var y; }
     36        function inner2() { var z; }
     37        var x;
-=>  38    |}
     39    function outer7() {
     40        function inner1() { var y; }
     41        function inner2() { var z; }


INSERTING AT: 39:0
PAUSES AT: 42:0
     36        function inner2() { var z; }
     37        var x;
     38    }
 ->  39    #function outer7() {
     40        function inner1() { var y; }
     41        function inner2() { var z; }
 =>  42    |}
     43
     44    (function() {
     45        var x;


INSERTING AT: 40:0
PAUSES AT: 40:24
     37        var x;
     38    }
     39    function outer7() {
-=>  40    #    function inner1() { |var y; }
     41        function inner2() { var z; }
     42    }
     43


INSERTING AT: 41:0
PAUSES AT: 41:24
     38    }
     39    function outer7() {
     40        function inner1() { var y; }
-=>  41    #    function inner2() { |var z; }
     42    }
     43
     44    (function() {


INSERTING AT: 42:0
PAUSES AT: 42:0
     39    function outer7() {
     40        function inner1() { var y; }
     41        function inner2() { var z; }
-=>  42    |}
     43
     44    (function() {
     45        var x;


INSERTING AT: 43:0
PAUSES AT: 44:0
     40        function inner1() { var y; }
     41        function inner2() { var z; }
     42    }
 ->  43    #
 =>  44    |(function() {
     45        var x;
     46    })();
     47


INSERTING AT: 44:0
PAUSES AT: 44:0
     41        function inner2() { var z; }
     42    }
     43
-=>  44    |(function() {
     45        var x;
     46    })();
     47


INSERTING AT: 45:0
PAUSES AT: 45:4
     42    }
     43
     44    (function() {
-=>  45    #    |var x;
     46    })();
     47
     48    (() => {


INSERTING AT: 46:0
PAUSES AT: 46:0
     43
     44    (function() {
     45        var x;
-=>  46    |})();
     47
     48    (() => {
     49        var x;


INSERTING AT: 47:0
PAUSES AT: 48:0
     44    (function() {
     45        var x;
     46    })();
 ->  47    #
 =>  48    |(() => {
     49        var x;
     50    });
     51


INSERTING AT: 48:0
PAUSES AT: 48:0
     45        var x;
     46    })();
     47
-=>  48    |(() => {
     49        var x;
     50    });
     51


INSERTING AT: 49:0
PAUSES AT: 49:4
     46    })();
     47
     48    (() => {
-=>  49    #    |var x;
     50    });
     51
     52    function* generator() {


INSERTING AT: 50:0
PAUSES AT: 50:0
     47
     48    (() => {
     49        var x;
-=>  50    |});
     51
     52    function* generator() {
     53        var x;


INSERTING AT: 51:0
PAUSES AT: 87:0
     48    (() => {
     49        var x;
     50    });
 ->  51    #
     52    function* generator() {
     53        var x;
     54    }
     55
     56    class Class {
     57        static staticMethod1() {
     58            var x;
     59        }
     60        static staticMethod2()
     61        {
     62            var x;
     63        }
     64        method1() {
     65            var x;
     66        }
     67        method2()
     68        {
     69            var x;
     70        }
     71        get getter1() {
     72            var x;
     73        }
     74        get getter2()
     75        {
     76            var x;
     77        }
     78        set setter1(x) {
     79            var s;
     80        }
     81        set setter2(x)
     82        {
     83            var s;
     84        }
     85    }
     86
 =>  87    |x => x;
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };


INSERTING AT: 52:0
PAUSES AT: 53:4
     49        var x;
     50    });
     51
 ->  52    #function* generator() {
 =>  53        |var x;
     54    }
     55
     56    class Class {


INSERTING AT: 53:0
PAUSES AT: 53:4
     50    });
     51
     52    function* generator() {
-=>  53    #    |var x;
     54    }
     55
     56    class Class {


INSERTING AT: 54:0
PAUSES AT: 54:0
     51
     52    function* generator() {
     53        var x;
-=>  54    |}
     55
     56    class Class {
     57        static staticMethod1() {


INSERTING AT: 55:0
PAUSES AT: 87:0
     52    function* generator() {
     53        var x;
     54    }
 ->  55    #
     56    class Class {
     57        static staticMethod1() {
     58            var x;
     59        }
     60        static staticMethod2()
     61        {
     62            var x;
     63        }
     64        method1() {
     65            var x;
     66        }
     67        method2()
     68        {
     69            var x;
     70        }
     71        get getter1() {
     72            var x;
     73        }
     74        get getter2()
     75        {
     76            var x;
     77        }
     78        set setter1(x) {
     79            var s;
     80        }
     81        set setter2(x)
     82        {
     83            var s;
     84        }
     85    }
     86
 =>  87    |x => x;
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };


INSERTING AT: 56:0
PAUSES AT: 87:0
     53        var x;
     54    }
     55
 ->  56    #class Class {
     57        static staticMethod1() {
     58            var x;
     59        }
     60        static staticMethod2()
     61        {
     62            var x;
     63        }
     64        method1() {
     65            var x;
     66        }
     67        method2()
     68        {
     69            var x;
     70        }
     71        get getter1() {
     72            var x;
     73        }
     74        get getter2()
     75        {
     76            var x;
     77        }
     78        set setter1(x) {
     79            var s;
     80        }
     81        set setter2(x)
     82        {
     83            var s;
     84        }
     85    }
     86
 =>  87    |x => x;
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };


INSERTING AT: 57:0
PAUSES AT: 58:8
     54    }
     55
     56    class Class {
 ->  57    #    static staticMethod1() {
 =>  58            |var x;
     59        }
     60        static staticMethod2()
     61        {


INSERTING AT: 58:0
PAUSES AT: 58:8
     55
     56    class Class {
     57        static staticMethod1() {
-=>  58    #        |var x;
     59        }
     60        static staticMethod2()
     61        {


INSERTING AT: 59:0
PAUSES AT: 59:4
     56    class Class {
     57        static staticMethod1() {
     58            var x;
-=>  59    #    |}
     60        static staticMethod2()
     61        {
     62            var x;


INSERTING AT: 60:0
PAUSES AT: 62:8
     57        static staticMethod1() {
     58            var x;
     59        }
 ->  60    #    static staticMethod2()
     61        {
 =>  62            |var x;
     63        }
     64        method1() {
     65            var x;


INSERTING AT: 61:0
PAUSES AT: 62:8
     58            var x;
     59        }
     60        static staticMethod2()
 ->  61    #    {
 =>  62            |var x;
     63        }
     64        method1() {
     65            var x;


INSERTING AT: 62:0
PAUSES AT: 62:8
     59        }
     60        static staticMethod2()
     61        {
-=>  62    #        |var x;
     63        }
     64        method1() {
     65            var x;


INSERTING AT: 63:0
PAUSES AT: 63:4
     60        static staticMethod2()
     61        {
     62            var x;
-=>  63    #    |}
     64        method1() {
     65            var x;
     66        }


INSERTING AT: 64:0
PAUSES AT: 65:8
     61        {
     62            var x;
     63        }
 ->  64    #    method1() {
 =>  65            |var x;
     66        }
     67        method2()
     68        {


INSERTING AT: 65:0
PAUSES AT: 65:8
     62            var x;
     63        }
     64        method1() {
-=>  65    #        |var x;
     66        }
     67        method2()
     68        {


INSERTING AT: 66:0
PAUSES AT: 66:4
     63        }
     64        method1() {
     65            var x;
-=>  66    #    |}
     67        method2()
     68        {
     69            var x;


INSERTING AT: 67:0
PAUSES AT: 69:8
     64        method1() {
     65            var x;
     66        }
 ->  67    #    method2()
     68        {
 =>  69            |var x;
     70        }
     71        get getter1() {
     72            var x;


INSERTING AT: 68:0
PAUSES AT: 69:8
     65            var x;
     66        }
     67        method2()
 ->  68    #    {
 =>  69            |var x;
     70        }
     71        get getter1() {
     72            var x;


INSERTING AT: 69:0
PAUSES AT: 69:8
     66        }
     67        method2()
     68        {
-=>  69    #        |var x;
     70        }
     71        get getter1() {
     72            var x;


INSERTING AT: 70:0
PAUSES AT: 70:4
     67        method2()
     68        {
     69            var x;
-=>  70    #    |}
     71        get getter1() {
     72            var x;
     73        }


INSERTING AT: 71:0
PAUSES AT: 72:8
     68        {
     69            var x;
     70        }
 ->  71    #    get getter1() {
 =>  72            |var x;
     73        }
     74        get getter2()
     75        {


INSERTING AT: 72:0
PAUSES AT: 72:8
     69            var x;
     70        }
     71        get getter1() {
-=>  72    #        |var x;
     73        }
     74        get getter2()
     75        {


INSERTING AT: 73:0
PAUSES AT: 73:4
     70        }
     71        get getter1() {
     72            var x;
-=>  73    #    |}
     74        get getter2()
     75        {
     76            var x;


INSERTING AT: 74:0
PAUSES AT: 76:8
     71        get getter1() {
     72            var x;
     73        }
 ->  74    #    get getter2()
     75        {
 =>  76            |var x;
     77        }
     78        set setter1(x) {
     79            var s;


INSERTING AT: 75:0
PAUSES AT: 76:8
     72            var x;
     73        }
     74        get getter2()
 ->  75    #    {
 =>  76            |var x;
     77        }
     78        set setter1(x) {
     79            var s;


INSERTING AT: 76:0
PAUSES AT: 76:8
     73        }
     74        get getter2()
     75        {
-=>  76    #        |var x;
     77        }
     78        set setter1(x) {
     79            var s;


INSERTING AT: 77:0
PAUSES AT: 77:4
     74        get getter2()
     75        {
     76            var x;
-=>  77    #    |}
     78        set setter1(x) {
     79            var s;
     80        }


INSERTING AT: 78:0
PAUSES AT: 79:8
     75        {
     76            var x;
     77        }
 ->  78    #    set setter1(x) {
 =>  79            |var s;
     80        }
     81        set setter2(x)
     82        {


INSERTING AT: 79:0
PAUSES AT: 79:8
     76            var x;
     77        }
     78        set setter1(x) {
-=>  79    #        |var s;
     80        }
     81        set setter2(x)
     82        {


INSERTING AT: 80:0
PAUSES AT: 80:4
     77        }
     78        set setter1(x) {
     79            var s;
-=>  80    #    |}
     81        set setter2(x)
     82        {
     83            var s;


INSERTING AT: 81:0
PAUSES AT: 83:8
     78        set setter1(x) {
     79            var s;
     80        }
 ->  81    #    set setter2(x)
     82        {
 =>  83            |var s;
     84        }
     85    }
     86


INSERTING AT: 82:0
PAUSES AT: 83:8
     79            var s;
     80        }
     81        set setter2(x)
 ->  82    #    {
 =>  83            |var s;
     84        }
     85    }
     86


INSERTING AT: 83:0
PAUSES AT: 83:8
     80        }
     81        set setter2(x)
     82        {
-=>  83    #        |var s;
     84        }
     85    }
     86


INSERTING AT: 84:0
PAUSES AT: 84:4
     81        set setter2(x)
     82        {
     83            var s;
-=>  84    #    |}
     85    }
     86
     87    x => x;


INSERTING AT: 85:0
PAUSES AT: 87:0
     82        {
     83            var s;
     84        }
 ->  85    #}
     86
 =>  87    |x => x;
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };


INSERTING AT: 86:0
PAUSES AT: 87:0
     83            var s;
     84        }
     85    }
 ->  86    #
 =>  87    |x => x;
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };


INSERTING AT: 87:0
PAUSES AT: 87:0
     84        }
     85    }
     86
-=>  87    |x => x;
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };


INSERTING AT: 88:0
PAUSES AT: 88:0
     85    }
     86
     87    x => x;
-=>  88    |() => 1;
     89    (x) => x;
     90    (x) => { x };
     91    (x) => {


INSERTING AT: 89:0
PAUSES AT: 89:0
     86
     87    x => x;
     88    () => 1;
-=>  89    |(x) => x;
     90    (x) => { x };
     91    (x) => {
     92        x


INSERTING AT: 90:0
PAUSES AT: 90:0
     87    x => x;
     88    () => 1;
     89    (x) => x;
-=>  90    |(x) => { x };
     91    (x) => {
     92        x
     93    };


INSERTING AT: 91:0
PAUSES AT: 91:0
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };
-=>  91    |(x) => {
     92        x
     93    };
     94    () => {


INSERTING AT: 92:0
PAUSES AT: 92:4
     89    (x) => x;
     90    (x) => { x };
     91    (x) => {
-=>  92    #    |x
     93    };
     94    () => {
     95        var x;


INSERTING AT: 93:0
PAUSES AT: 93:0
     90    (x) => { x };
     91    (x) => {
     92        x
-=>  93    |};
     94    () => {
     95        var x;
     96    };


INSERTING AT: 94:0
PAUSES AT: 94:0
     91    (x) => {
     92        x
     93    };
-=>  94    |() => {
     95        var x;
     96    };
     97


INSERTING AT: 95:0
PAUSES AT: 95:4
     92        x
     93    };
     94    () => {
-=>  95    #    |var x;
     96    };
     97
     98    var fObj = {


INSERTING AT: 96:0
PAUSES AT: 96:0
     93    };
     94    () => {
     95        var x;
-=>  96    |};
     97
     98    var fObj = {
     99        f1: function() {


INSERTING AT: 97:0
PAUSES AT: 98:0
     94    () => {
     95        var x;
     96    };
 ->  97    #
 =>  98    |var fObj = {
     99        f1: function() {
    100            var x;
    101        },


INSERTING AT: 98:0
PAUSES AT: 98:0
     95        var x;
     96    };
     97
-=>  98    |var fObj = {
     99        f1: function() {
    100            var x;
    101        },


INSERTING AT: 99:0
PAUSES AT: 100:8
     96    };
     97
     98    var fObj = {
 ->  99    #    f1: function() {
 => 100            |var x;
    101        },
    102        f2: function()
    103        {


INSERTING AT: 100:0
PAUSES AT: 100:8
     97
     98    var fObj = {
     99        f1: function() {
-=> 100    #        |var x;
    101        },
    102        f2: function()
    103        {


INSERTING AT: 101:0
PAUSES AT: 101:4
     98    var fObj = {
     99        f1: function() {
    100            var x;
-=> 101    #    |},
    102        f2: function()
    103        {
    104            var x;


INSERTING AT: 102:0
PAUSES AT: 104:8
     99        f1: function() {
    100            var x;
    101        },
 -> 102    #    f2: function()
    103        {
 => 104            |var x;
    105        },
    106        f3: () => {
    107            var x;


INSERTING AT: 103:0
PAUSES AT: 104:8
    100            var x;
    101        },
    102        f2: function()
 -> 103    #    {
 => 104            |var x;
    105        },
    106        f3: () => {
    107            var x;


INSERTING AT: 104:0
PAUSES AT: 104:8
    101        },
    102        f2: function()
    103        {
-=> 104    #        |var x;
    105        },
    106        f3: () => {
    107            var x;


INSERTING AT: 105:0
PAUSES AT: 105:4
    102        f2: function()
    103        {
    104            var x;
-=> 105    #    |},
    106        f3: () => {
    107            var x;
    108        },


INSERTING AT: 106:0
PAUSES AT: 107:8
    103        {
    104            var x;
    105        },
 -> 106    #    f3: () => {
 => 107            |var x;
    108        },
    109        f4: () =>
    110        {


INSERTING AT: 107:0
PAUSES AT: 107:8
    104            var x;
    105        },
    106        f3: () => {
-=> 107    #        |var x;
    108        },
    109        f4: () =>
    110        {


INSERTING AT: 108:0
PAUSES AT: 108:4
    105        },
    106        f3: () => {
    107            var x;
-=> 108    #    |},
    109        f4: () =>
    110        {
    111            var x;


INSERTING AT: 109:0
PAUSES AT: 111:8
    106        f3: () => {
    107            var x;
    108        },
 -> 109    #    f4: () =>
    110        {
 => 111            |var x;
    112        }
    113    };
    114


INSERTING AT: 110:0
PAUSES AT: 111:8
    107            var x;
    108        },
    109        f4: () =>
 -> 110    #    {
 => 111            |var x;
    112        }
    113    };
    114


INSERTING AT: 111:0
PAUSES AT: 111:8
    108        },
    109        f4: () =>
    110        {
-=> 111    #        |var x;
    112        }
    113    };
    114


INSERTING AT: 112:0
PAUSES AT: 112:4
    109        f4: () =>
    110        {
    111            var x;
-=> 112    #    |}
    113    };
    114
    115    function commaOneLine() {


INSERTING AT: 113:0
PRODUCES: Could not resolve breakpoint

INSERTING AT: 114:0
PRODUCES: Could not resolve breakpoint

INSERTING AT: 115:0
PAUSES AT: 116:4
    112        }
    113    };
    114
 -> 115    #function commaOneLine() {
 => 116        |inline(), inline(), inline();
    117    }
    118
    119    function commaMultiLine() {


INSERTING AT: 116:0
PAUSES AT: 116:4
    113    };
    114
    115    function commaOneLine() {
-=> 116    #    |inline(), inline(), inline();
    117    }
    118
    119    function commaMultiLine() {


INSERTING AT: 117:0
PAUSES AT: 117:0
    114
    115    function commaOneLine() {
    116        inline(), inline(), inline();
-=> 117    |}
    118
    119    function commaMultiLine() {
    120        inline(),


INSERTING AT: 118:0
PRODUCES: Could not resolve breakpoint

INSERTING AT: 119:0
PAUSES AT: 120:4
    116        inline(), inline(), inline();
    117    }
    118
 -> 119    #function commaMultiLine() {
 => 120        |inline(),
    121        inline(),
    122        inline();
    123    }


INSERTING AT: 120:0
PAUSES AT: 120:4
    117    }
    118
    119    function commaMultiLine() {
-=> 120    #    |inline(),
    121        inline(),
    122        inline();
    123    }


INSERTING AT: 121:0
PAUSES AT: 121:4
    118
    119    function commaMultiLine() {
    120        inline(),
-=> 121    #    |inline(),
    122        inline();
    123    }
    124


INSERTING AT: 122:0
PAUSES AT: 122:4
    119    function commaMultiLine() {
    120        inline(),
    121        inline(),
-=> 122    #    |inline();
    123    }
    124
    125    function returnOneLine() {


INSERTING AT: 123:0
PAUSES AT: 123:0
    120        inline(),
    121        inline(),
    122        inline();
-=> 123    |}
    124
    125    function returnOneLine() {
    126        return inline(), inline(), inline();


INSERTING AT: 124:0
PRODUCES: Could not resolve breakpoint

INSERTING AT: 125:0
PAUSES AT: 126:4
    122        inline();
    123    }
    124
 -> 125    #function returnOneLine() {
 => 126        |return inline(), inline(), inline();
    127    }
    128
    129    function returnMultiLine() {


INSERTING AT: 126:0
PAUSES AT: 126:4
    123    }
    124
    125    function returnOneLine() {
-=> 126    #    |return inline(), inline(), inline();
    127    }
    128
    129    function returnMultiLine() {


INSERTING AT: 127:0
PAUSES AT: 127:0
    124
    125    function returnOneLine() {
    126        return inline(), inline(), inline();
-=> 127    |}
    128
    129    function returnMultiLine() {
    130        return inline(),


INSERTING AT: 128:0
PRODUCES: Could not resolve breakpoint

INSERTING AT: 129:0
PAUSES AT: 130:4
    126        return inline(), inline(), inline();
    127    }
    128
 -> 129    #function returnMultiLine() {
 => 130        |return inline(),
    131            inline(),
    132            inline();
    133    }


INSERTING AT: 130:0
PAUSES AT: 130:4
    127    }
    128
    129    function returnMultiLine() {
-=> 130    #    |return inline(),
    131            inline(),
    132            inline();
    133    }


INSERTING AT: 131:0
PAUSES AT: 131:8
    128
    129    function returnMultiLine() {
    130        return inline(),
-=> 131    #        |inline(),
    132            inline();
    133    }
    134


INSERTING AT: 132:0
PAUSES AT: 132:8
    129    function returnMultiLine() {
    130        return inline(),
    131            inline(),
-=> 132    #        |inline();
    133    }
    134


INSERTING AT: 133:0
PAUSES AT: 133:0
    130        return inline(),
    131            inline(),
    132            inline();
-=> 133    |}
    134


INSERTING AT: 134:0
PRODUCES: Could not resolve breakpoint

-- Running test case: Debugger.resolvedBreakpoint.dumpEachLine.Unicode

INSERTING AT: 0:0
PAUSES AT: 0:0
-=>   0    |var unicodeVariable1 = function(){};
      1    var unicodeVariableStr = "Non-8-bit '∙' character.";
      2    var unicodeSurrogatePairStr = "Emoji '😍' character.";
      3    var unicodeVariable2 = 2;


INSERTING AT: 1:0
PAUSES AT: 1:0
      0    var unicodeVariable1 = function(){};
-=>   1    |var unicodeVariableStr = "Non-8-bit '∙' character.";
      2    var unicodeSurrogatePairStr = "Emoji '😍' character.";
      3    var unicodeVariable2 = 2;
      4


INSERTING AT: 2:0
PAUSES AT: 2:0
      0    var unicodeVariable1 = function(){};
      1    var unicodeVariableStr = "Non-8-bit '∙' character.";
-=>   2    |var unicodeSurrogatePairStr = "Emoji '😍' character.";
      3    var unicodeVariable2 = 2;
      4


INSERTING AT: 3:0
PAUSES AT: 3:0
      0    var unicodeVariable1 = function(){};
      1    var unicodeVariableStr = "Non-8-bit '∙' character.";
      2    var unicodeSurrogatePairStr = "Emoji '😍' character.";
-=>   3    |var unicodeVariable2 = 2;
      4


INSERTING AT: 4:0
PRODUCES: Could not resolve breakpoint

