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

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

INSERTING AT: 168:1
PAUSES AT: 171:0
    165        v2 = 1;
    166    let l1 = 2,
    167        l2 = 2;
 -> 168    c#onst c1 = 3,
    169        c2 = 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    

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


-- 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: 94:0
     86    
     87    x => x;
     88    () => 1;
 ->  89    (x) => x#;
     90    (x) => { x };
     91    (x) => {
     92        x
     93    };
 =>  94    |() => {
     95        var x;
     96    };
     97    

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: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: 96:1
PAUSES AT: 98:0
     93    };
     94    () => {
     95        var x;
 ->  96    }#;
     97    
 =>  98    |var fObj = {
     99        f1: function() {
    100            var x;
    101        },

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

INSERTING AT: 100: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    


-- 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    


