Checking all resolved breakpoint locations in a script.


== Running test suite: Debugger.resolvedBreakpoint.dumpAllLocations
-- Running test case: Debugger.resolvedBreakpoint.dumpAllLocations.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: 0:1
PAUSES AT: 0:17
-=>   0    l#et a=function(){|return 0}
      1    let b=function(){return 0}
      2    let c=function(){return 0}
      3    let arr=[];

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

INSERTING AT: 0:26
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: 1:1
PAUSES AT: 1:17
      0    let a=function(){return 0}
-=>   1    l#et b=function(){|return 0}
      2    let c=function(){return 0}
      3    let arr=[];
      4    let obj={};

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

INSERTING AT: 1:26
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: 2:1
PAUSES AT: 2:17
      0    let a=function(){return 0}
      1    let b=function(){return 0}
-=>   2    l#et c=function(){|return 0}
      3    let arr=[];
      4    let obj={};
      5

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

INSERTING AT: 2:26
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: 3:1
PAUSES AT: 4:0
      0    let a=function(){return 0}
      1    let b=function(){return 0}
      2    let c=function(){return 0}
 ->   3    l#et arr=[];
 =>   4    |let obj={};
      5
      6    // Control flow
      7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

INSERTING AT: 68:15
PAUSES AT: 69:4
     65    for (let x of arr)
     66        break;
     67
 ->  68    for (let x in o#bj)
 =>  69        |break;
     70
     71    // Switch
     72

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

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

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

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

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

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

INSERTING AT: 82:5
PAUSES AT: 84:4
     79        // fallthrough
     80    case 3:
     81        a();
 ->  82        b#reak;
     83    default:
 =>  84        |a();
     85        break;
     86    }
     87

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

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

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

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

INSERTING AT: 95:5
PAUSES AT: 151:8
     92    } catch (e) {
     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: 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: 103:9
PAUSES AT: 104:4
    100    class Base {
    101        constructor()
    102        {
 -> 103            t#his._base = true;
 => 104        |}
    105
    106        baseMethod()
    107        {

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: 108:9
PAUSES AT: 109:4
    105
    106        baseMethod()
    107        {
 -> 108            a#();
 => 109        |}
    110
    111        method()
    112        {

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

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

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: 120:9
PAUSES AT: 121:8
    117    class Child extends Base {
    118        constructor()
    119        {
 -> 120            s#uper();
 => 121            |this._child = true;
    122        }
    123
    124        childMethod()

INSERTING AT: 121:9
PAUSES AT: 122:4
    118        constructor()
    119        {
    120            super();
 -> 121            t#his._child = true;
 => 122        |}
    123
    124        childMethod()
    125        {

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: 126:9
PAUSES AT: 127:4
    123
    124        childMethod()
    125        {
 -> 126            b#();
 => 127        |}
    128
    129        method()
    130        {

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

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

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

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: 137:9
PAUSES AT: 138:4
    134
    135        get name()
    136        {
 -> 137            r#eturn this._name;
 => 138        |}
    139
    140        set name(x)
    141        {

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: 142:9
PAUSES AT: 143:4
    139
    140        set name(x)
    141        {
 -> 142            t#his._name = x;
 => 143        |}
    144    }
    145
    146    // ---------

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

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

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

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

INSERTING AT: 161:5
PAUSES AT: 164:0
    158
    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: 164:1
PAUSES AT: 165:4
    161        a();
    162    }
    163
 -> 164    v#ar v1 = 1,
 => 165        |v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;
    168    const c1 = 3,

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

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

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

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

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

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

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

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

INSERTING AT: 176:1
PAUSES AT: 184:0
    173    var {x, y} = obj;
    174    var [w, z] = arr;
    175
 -> 176    v#ar 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: 184:1
PAUSES AT: 191:0
    181        [b()]: 1,
    182    };
    183
 -> 184    v#ar 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: 191:1
PAUSES AT: 192:0
    188        b(),
    189    ];
    190
 -> 191    v#ar i1 = new Base;
 => 192    |var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;
    195    i2.method();

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

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

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

INSERTING AT: 195:1
PAUSES AT: 197:0
    192    var i2 = new Child;
    193    i2.name;
    194    i2.name = 1;
 -> 195    i#2.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:1
PAUSES AT: 198:0
    194    i2.name = 1;
    195    i2.method();
    196
 -> 197    v#ar t1 = `${1} ${x=1} ${a()}`;
 => 198    |var t2 = a`${1} ${x=1} ${a()}`;
    199
    200    a(a(), b());
    201

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

INSERTING AT: 200:1
PAUSES AT: 202:4
    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();
    204
    205    if (o1["p1"])

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

INSERTING AT: 230:5
PAUSES AT: 230:10
    227    } catch { }
    228
    229    try {
-=> 230        t#hrow |a(),
    231            b(),
    232            c();
    233    } catch { }

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

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


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

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

INSERTING AT: 0:20
PAUSES AT: 44:0
 ->   0    function inline() {}#
      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()
     12        {
     13            var y;
     14        }
     15    }
     16    function outer3() {
     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;
     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() {
     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; }
     42    }
     43
 =>  44    |(function() {
     45        var x;
     46    })();
     47

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:5
PAUSES AT: 3:0
      0    function inline() {}
      1    function named() {
 ->   2        v#ar 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: 4:15
PAUSES AT: 6:8
      1    function named() {
      2        var x;
      3    }
 ->   4    function outer1#() {
      5        function inner() {
 =>   6            |var y;
      7        }
      8    }
      9    function outer2()

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

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: 9:15
PAUSES AT: 13:8
      6            var y;
      7        }
      8    }
 ->   9    function outer2#()
     10    {
     11        function inner()
     12        {
 =>  13            |var y;
     14        }
     15    }
     16    function outer3() {

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

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:5
PAUSES AT: 19:0
     14        }
     15    }
     16    function outer3() {
 ->  17        v#ar x;
     18        function inner() { var y; }
 =>  19    |}
     20    function outer4() {
     21        function inner() { var y; }
     22        var x;

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: 18:24
PAUSES AT: 18:30
     15    }
     16    function outer3() {
     17        var x;
-=>  18        function inner() { v#ar y; |}
     19    }
     20    function outer4() {
     21        function inner() { var y; }

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: 20:15
PAUSES AT: 21:23
     17        var x;
     18        function inner() { var y; }
     19    }
 ->  20    function outer4#() {
 =>  21        function inner() { |var y; }
     22        var x;
     23    }
     24    function outer5() {

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

INSERTING AT: 22:5
PAUSES AT: 23:0
     19    }
     20    function outer4() {
     21        function inner() { var y; }
 ->  22        v#ar 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:5
PAUSES AT: 27:4
     22        var x;
     23    }
     24    function outer5() {
 ->  25        v#ar x;
     26        function inner() { var y; }
 =>  27        |var x;
     28    }
     29    function outer6() {
     30        function inner1() { var y; }

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: 26:24
PAUSES AT: 26:30
     23    }
     24    function outer5() {
     25        var x;
-=>  26        function inner() { v#ar y; |}
     27        var x;
     28    }
     29    function outer6() {

INSERTING AT: 27:5
PAUSES AT: 28:0
     24    function outer5() {
     25        var x;
     26        function inner() { var y; }
 ->  27        v#ar 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: 29:15
PAUSES AT: 30:24
     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    }

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

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

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: 32:25
PAUSES AT: 32:31
     29    function outer6() {
     30        function inner1() { var y; }
     31        var x;
-=>  32        function inner2() { v#ar z; |}
     33    }
     34    function outer7() {
     35        function inner1() { var y; }

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: 34:15
PAUSES AT: 35:24
     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    }

INSERTING AT: 35:25
PAUSES AT: 35:31
     32        function inner2() { var z; }
     33    }
     34    function outer7() {
-=>  35        function inner1() { v#ar 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: 36:25
PAUSES AT: 36:31
     33    }
     34    function outer7() {
     35        function inner1() { var y; }
-=>  36        function inner2() { v#ar z; |}
     37        var x;
     38    }
     39    function outer7() {

INSERTING AT: 37:5
PAUSES AT: 38:0
     34    function outer7() {
     35        function inner1() { var y; }
     36        function inner2() { var z; }
 ->  37        v#ar 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: 39:15
PAUSES AT: 40:24
     36        function inner2() { var z; }
     37        var x;
     38    }
 ->  39    function outer7#() {
 =>  40        function inner1() { |var y; }
     41        function inner2() { var z; }
     42    }
     43

INSERTING AT: 40:25
PAUSES AT: 40:31
     37        var x;
     38    }
     39    function outer7() {
-=>  40        function inner1() { v#ar 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: 41:25
PAUSES AT: 41:31
     38    }
     39    function outer7() {
     40        function inner1() { var y; }
-=>  41        function inner2() { v#ar z; |}
     42    }
     43
     44    (function() {

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

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

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

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

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

INSERTING AT: 50:1
PAUSES AT: 87:0
     47
     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:5
PAUSES AT: 54:0
     50    });
     51
     52    function* generator() {
 ->  53        v#ar x;
 =>  54    |}
     55
     56    class Class {
     57        static staticMethod1() {

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:9
PAUSES AT: 59:4
     55
     56    class Class {
     57        static staticMethod1() {
 ->  58            v#ar 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: 62:9
PAUSES AT: 63:4
     59        }
     60        static staticMethod2()
     61        {
 ->  62            v#ar 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:9
PAUSES AT: 66:4
     62            var x;
     63        }
     64        method1() {
 ->  65            v#ar 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: 69:9
PAUSES AT: 70:4
     66        }
     67        method2()
     68        {
 ->  69            v#ar 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:9
PAUSES AT: 73:4
     69            var x;
     70        }
     71        get getter1() {
 ->  72            v#ar 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: 76:9
PAUSES AT: 77:4
     73        }
     74        get getter2()
     75        {
 ->  76            v#ar 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:9
PAUSES AT: 80:4
     76            var x;
     77        }
     78        set setter1(x) {
 ->  79            v#ar 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: 83:9
PAUSES AT: 84:4
     80        }
     81        set setter2(x)
     82        {
 ->  83            v#ar s;
 =>  84        |}
     85    }
     86
     87    x => x;

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

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

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

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

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

INSERTING AT: 89:8
PAUSES AT: 98:0
     86
     87    x => x;
     88    () => 1;
 ->  89    (x) => x#;
     90    (x) => { x };
     91    (x) => {
     92        x
     93    };
     94    () => {
     95        var x;
     96    };
     97
 =>  98    |var fObj = {
     99        f1: function() {
    100            var x;
    101        },

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: 90:1
PAUSES AT: 90:9
     87    x => x;
     88    () => 1;
     89    (x) => x;
-=>  90    (#x) => { |x };
     91    (x) => {
     92        x
     93    };

INSERTING AT: 90:10
PAUSES AT: 90:11
     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: 91:1
PAUSES AT: 92:4
     88    () => 1;
     89    (x) => x;
     90    (x) => { x };
 ->  91    (#x) => {
 =>  92        |x
     93    };
     94    () => {
     95        var x;

INSERTING AT: 92:5
PAUSES AT: 93:0
     89    (x) => x;
     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: 94:1
PAUSES AT: 95:4
     91    (x) => {
     92        x
     93    };
 ->  94    (#) => {
 =>  95        |var x;
     96    };
     97
     98    var fObj = {

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

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:9
PAUSES AT: 101:4
     97
     98    var fObj = {
     99        f1: function() {
 -> 100            v#ar 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: 104:9
PAUSES AT: 105:4
    101        },
    102        f2: function()
    103        {
 -> 104            v#ar 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:9
PAUSES AT: 108:4
    104            var x;
    105        },
    106        f3: () => {
 -> 107            v#ar 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: 111:9
PAUSES AT: 112:4
    108        },
    109        f4: () =>
    110        {
 -> 111            v#ar x;
 => 112        |}
    113    };
    114
    115    function commaOneLine() {

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:5
PAUSES AT: 116:14
    113    };
    114
    115    function commaOneLine() {
-=> 116        i#nline(), |inline(), inline();
    117    }
    118
    119    function commaMultiLine() {

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

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

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:5
PAUSES AT: 121:4
    117    }
    118
    119    function commaMultiLine() {
 -> 120        i#nline(),
 => 121        |inline(),
    122        inline();
    123    }
    124

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

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

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:5
PAUSES AT: 126:11
    123    }
    124
    125    function returnOneLine() {
-=> 126        r#eturn |inline(), inline(), inline();
    127    }
    128
    129    function returnMultiLine() {

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

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

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

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:5
PAUSES AT: 130:11
    127    }
    128
    129    function returnMultiLine() {
-=> 130        r#eturn |inline(),
    131            inline(),
    132            inline();
    133    }

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

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

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


-- Running test case: Debugger.resolvedBreakpoint.dumpAllLocations.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: 0:1
PAUSES AT: 0:34
-=>   0    v#ar unicodeVariable1 = function(){|};
      1    var unicodeVariableStr = "Non-8-bit '∙' character.";
      2    var unicodeSurrogatePairStr = "Emoji '😍' character.";
      3    var unicodeVariable2 = 2;

INSERTING AT: 0:35
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: 1:1
PAUSES AT: 2:0
      0    var unicodeVariable1 = function(){};
 ->   1    v#ar unicodeVariableStr = "Non-8-bit '∙' character.";
 =>   2    |var unicodeSurrogatePairStr = "Emoji '😍' character.";
      3    var unicodeVariable2 = 2;
      4

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


