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    


