Checking pause locations when stepping in, out, and over in loops.


== Running test suite: Debugger.stepping.loops
-- Running test case: Debugger.stepping.While
EXPRESSION: setTimeout(entryWhile)
STEPS: over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryWhile:13:5
      9    
     10    function entryWhile() {
     11        let i = 2;
 ->  12        |debugger;
     13        while (i > 0)
     14            --i;
     15    }

ACTION: step-over
PAUSE AT entryWhile:14:12
     10    function entryWhile() {
     11        let i = 2;
     12        debugger;
 ->  13        while (|i > 0)
     14            --i;
     15    }
     16    

ACTION: step-over
PAUSE AT entryWhile:15:9
     11        let i = 2;
     12        debugger;
     13        while (i > 0)
 ->  14            |--i;
     15    }
     16    
     17    function entryDoWhile() {

ACTION: step-over
PAUSE AT entryWhile:14:12
     10    function entryWhile() {
     11        let i = 2;
     12        debugger;
 ->  13        while (|i > 0)
     14            --i;
     15    }
     16    

ACTION: step-over
PAUSE AT entryWhile:15:9
     11        let i = 2;
     12        debugger;
     13        while (i > 0)
 ->  14            |--i;
     15    }
     16    
     17    function entryDoWhile() {

ACTION: step-over
PAUSE AT entryWhile:14:12
     10    function entryWhile() {
     11        let i = 2;
     12        debugger;
 ->  13        while (|i > 0)
     14            --i;
     15    }
     16    

ACTION: step-over
PAUSE AT entryWhile:16:2
     12        debugger;
     13        while (i > 0)
     14            --i;
 ->  15    }|
     16    
     17    function entryDoWhile() {
     18        let i = 2;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.DoWhile
EXPRESSION: setTimeout(entryDoWhile)
STEPS: over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryDoWhile:20:5
     16    
     17    function entryDoWhile() {
     18        let i = 2;
 ->  19        |debugger;
     20        do {
     21            --i;
     22        } while (i > 0);

ACTION: step-over
PAUSE AT entryDoWhile:22:9
     18        let i = 2;
     19        debugger;
     20        do {
 ->  21            |--i;
     22        } while (i > 0);
     23    }
     24    

ACTION: step-over
PAUSE AT entryDoWhile:23:14
     19        debugger;
     20        do {
     21            --i;
 ->  22        } while (|i > 0);
     23    }
     24    
     25    function entryTraditionalFor() {

ACTION: step-over
PAUSE AT entryDoWhile:22:9
     18        let i = 2;
     19        debugger;
     20        do {
 ->  21            |--i;
     22        } while (i > 0);
     23    }
     24    

ACTION: step-over
PAUSE AT entryDoWhile:23:14
     19        debugger;
     20        do {
     21            --i;
 ->  22        } while (|i > 0);
     23    }
     24    
     25    function entryTraditionalFor() {

ACTION: step-over
PAUSE AT entryDoWhile:24:2
     20        do {
     21            --i;
     22        } while (i > 0);
 ->  23    }|
     24    
     25    function entryTraditionalFor() {
     26        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.TraditionalForStepOver
EXPRESSION: setTimeout(entryTraditionalFor)
STEPS: over, over, over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryTraditionalFor:27:5
     23    }
     24    
     25    function entryTraditionalFor() {
 ->  26        |debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
     29    }

ACTION: step-over
PAUSE AT entryTraditionalFor:28:10
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (|let i = 0; i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-over
PAUSE AT entryTraditionalFor:28:21
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-over
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30    
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30    

ACTION: step-over
PAUSE AT entryTraditionalFor:28:21
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-over
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30    
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30    

ACTION: step-over
PAUSE AT entryTraditionalFor:28:21
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-over
PAUSE AT entryTraditionalFor:30:2
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
 ->  29    }|
     30    
     31    function entryTraditionalForNoInit() {
     32        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.TraditionalForStepIn
EXPRESSION: setTimeout(entryTraditionalFor)
STEPS: over, in, in, over, in, in, over, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryTraditionalFor:27:5
     23    }
     24    
     25    function entryTraditionalFor() {
 ->  26        |debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
     29    }

ACTION: step-over
PAUSE AT entryTraditionalFor:28:10
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (|let i = 0; i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-in
PAUSE AT entryTraditionalFor:28:21
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-in
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30    
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30    

ACTION: step-in
PAUSE AT entryTraditionalFor:28:21
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-in
PAUSE AT entryTraditionalFor:29:9
     25    function entryTraditionalFor() {
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
 ->  28            |a();
     29    }
     30    
     31    function entryTraditionalForNoInit() {

ACTION: step-over
PAUSE AT entryTraditionalFor:28:28
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; i < 2; |++i)
     28            a();
     29    }
     30    

ACTION: step-in
PAUSE AT entryTraditionalFor:28:21
     24    
     25    function entryTraditionalFor() {
     26        debugger;
 ->  27        for (let i = 0; |i < 2; ++i)
     28            a();
     29    }
     30    

ACTION: step-in
PAUSE AT entryTraditionalFor:30:2
     26        debugger;
     27        for (let i = 0; i < 2; ++i)
     28            a();
 ->  29    }|
     30    
     31    function entryTraditionalForNoInit() {
     32        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.TraditionalForNoInit
EXPRESSION: setTimeout(entryTraditionalForNoInit)
STEPS: over, in, over, in, in, over, in, in, resume
PAUSED (debugger-statement)
PAUSE AT entryTraditionalForNoInit:34:5
     30    
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
 ->  33        |debugger;
     34        for (; i < 2; ++i)
     35            a();
     36    }

ACTION: step-over
PAUSE AT entryTraditionalForNoInit:35:12
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; |i < 2; ++i)
     35            a();
     36    }
     37    

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:36:9
     32        let i = 0;
     33        debugger;
     34        for (; i < 2; ++i)
 ->  35            |a();
     36    }
     37    
     38    function entryForIn() {

ACTION: step-over
PAUSE AT entryTraditionalForNoInit:35:19
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; i < 2; |++i)
     35            a();
     36    }
     37    

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:35:12
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; |i < 2; ++i)
     35            a();
     36    }
     37    

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:36:9
     32        let i = 0;
     33        debugger;
     34        for (; i < 2; ++i)
 ->  35            |a();
     36    }
     37    
     38    function entryForIn() {

ACTION: step-over
PAUSE AT entryTraditionalForNoInit:35:19
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; i < 2; |++i)
     35            a();
     36    }
     37    

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:35:12
     31    function entryTraditionalForNoInit() {
     32        let i = 0;
     33        debugger;
 ->  34        for (; |i < 2; ++i)
     35            a();
     36    }
     37    

ACTION: step-in
PAUSE AT entryTraditionalForNoInit:37:2
     33        debugger;
     34        for (; i < 2; ++i)
     35            a();
 ->  36    }|
     37    
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForIn
EXPRESSION: setTimeout(entryForIn)
STEPS: over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForIn:41:5
     37    
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
 ->  40        |debugger;
     41        for (let property in o)
     42            a();
     43    }

ACTION: step-over
PAUSE AT entryForIn:42:26
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (let property in |o)
     42            a();
     43    }
     44    

ACTION: step-over
PAUSE AT entryForIn:42:10
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (|let property in o)
     42            a();
     43    }
     44    

ACTION: step-over
PAUSE AT entryForIn:43:9
     39        let o = {key1: 1, key2: 2};
     40        debugger;
     41        for (let property in o)
 ->  42            |a();
     43    }
     44    
     45    function entryForOf() {

ACTION: step-over
PAUSE AT entryForIn:42:10
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (|let property in o)
     42            a();
     43    }
     44    

ACTION: step-over
PAUSE AT entryForIn:43:9
     39        let o = {key1: 1, key2: 2};
     40        debugger;
     41        for (let property in o)
 ->  42            |a();
     43    }
     44    
     45    function entryForOf() {

ACTION: step-over
PAUSE AT entryForIn:42:10
     38    function entryForIn() {
     39        let o = {key1: 1, key2: 2};
     40        debugger;
 ->  41        for (|let property in o)
     42            a();
     43    }
     44    

ACTION: step-over
PAUSE AT entryForIn:44:2
     40        debugger;
     41        for (let property in o)
     42            a();
 ->  43    }|
     44    
     45    function entryForOf() {
     46        let arr = [1, 2];

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForIn
EXPRESSION: setTimeout(entryForOf)
STEPS: over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForOf:48:5
     44    
     45    function entryForOf() {
     46        let arr = [1, 2];
 ->  47        |debugger;
     48        for (let value of arr)
     49            a();
     50    }

ACTION: step-over
PAUSE AT entryForOf:49:23
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (let value of |arr)
     49            a();
     50    }
     51    

ACTION: step-over
PAUSE AT entryForOf:49:10
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (|let value of arr)
     49            a();
     50    }
     51    

ACTION: step-over
PAUSE AT entryForOf:50:9
     46        let arr = [1, 2];
     47        debugger;
     48        for (let value of arr)
 ->  49            |a();
     50    }
     51    
     52    function entryWhileBreakContinue() {

ACTION: step-over
PAUSE AT entryForOf:49:10
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (|let value of arr)
     49            a();
     50    }
     51    

ACTION: step-over
PAUSE AT entryForOf:50:9
     46        let arr = [1, 2];
     47        debugger;
     48        for (let value of arr)
 ->  49            |a();
     50    }
     51    
     52    function entryWhileBreakContinue() {

ACTION: step-over
PAUSE AT entryForOf:49:10
     45    function entryForOf() {
     46        let arr = [1, 2];
     47        debugger;
 ->  48        for (|let value of arr)
     49            a();
     50    }
     51    

ACTION: step-over
PAUSE AT entryForOf:51:2
     47        debugger;
     48        for (let value of arr)
     49            a();
 ->  50    }|
     51    
     52    function entryWhileBreakContinue() {
     53        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.WhileBreakContinue
EXPRESSION: setTimeout(entryWhileBreakContinue)
STEPS: over, over, over, over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryWhileBreakContinue:55:5
     51    
     52    function entryWhileBreakContinue() {
     53        let i = 0;
 ->  54        |debugger;
     55        while (truthy) {
     56            ++i;
     57            if (i === 1)

ACTION: step-over
PAUSE AT entryWhileBreakContinue:56:12
     52    function entryWhileBreakContinue() {
     53        let i = 0;
     54        debugger;
 ->  55        while (|truthy) {
     56            ++i;
     57            if (i === 1)
     58                continue;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:57:9
     53        let i = 0;
     54        debugger;
     55        while (truthy) {
 ->  56            |++i;
     57            if (i === 1)
     58                continue;
     59            if (i === 2)

ACTION: step-over
PAUSE AT entryWhileBreakContinue:58:13
     54        debugger;
     55        while (truthy) {
     56            ++i;
 ->  57            if (|i === 1)
     58                continue;
     59            if (i === 2)
     60                break;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:59:13
     55        while (truthy) {
     56            ++i;
     57            if (i === 1)
 ->  58                |continue;
     59            if (i === 2)
     60                break;
     61        }

ACTION: step-over
PAUSE AT entryWhileBreakContinue:56:12
     52    function entryWhileBreakContinue() {
     53        let i = 0;
     54        debugger;
 ->  55        while (|truthy) {
     56            ++i;
     57            if (i === 1)
     58                continue;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:57:9
     53        let i = 0;
     54        debugger;
     55        while (truthy) {
 ->  56            |++i;
     57            if (i === 1)
     58                continue;
     59            if (i === 2)

ACTION: step-over
PAUSE AT entryWhileBreakContinue:58:13
     54        debugger;
     55        while (truthy) {
     56            ++i;
 ->  57            if (|i === 1)
     58                continue;
     59            if (i === 2)
     60                break;

ACTION: step-over
PAUSE AT entryWhileBreakContinue:60:13
     56            ++i;
     57            if (i === 1)
     58                continue;
 ->  59            if (|i === 2)
     60                break;
     61        }
     62    }

ACTION: step-over
PAUSE AT entryWhileBreakContinue:61:13
     57            if (i === 1)
     58                continue;
     59            if (i === 2)
 ->  60                |break;
     61        }
     62    }
     63    

ACTION: step-over
PAUSE AT entryWhileBreakContinue:63:2
     59            if (i === 2)
     60                break;
     61        }
 ->  62    }|
     63    
     64    function entryForBreakContinue() {
     65        let i = 0;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForBreakContinue
EXPRESSION: setTimeout(entryForBreakContinue)
STEPS: over, over, over, over, over, over, over, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForBreakContinue:67:5
     63    
     64    function entryForBreakContinue() {
     65        let i = 0;
 ->  66        |debugger;
     67        for (;;) {
     68            ++i;
     69            if (i === 1)

ACTION: step-over
PAUSE AT entryForBreakContinue:69:9
     65        let i = 0;
     66        debugger;
     67        for (;;) {
 ->  68            |++i;
     69            if (i === 1)
     70                continue;
     71            if (i === 2)

ACTION: step-over
PAUSE AT entryForBreakContinue:70:13
     66        debugger;
     67        for (;;) {
     68            ++i;
 ->  69            if (|i === 1)
     70                continue;
     71            if (i === 2)
     72                break;

ACTION: step-over
PAUSE AT entryForBreakContinue:71:13
     67        for (;;) {
     68            ++i;
     69            if (i === 1)
 ->  70                |continue;
     71            if (i === 2)
     72                break;
     73        }

ACTION: step-over
PAUSE AT entryForBreakContinue:69:9
     65        let i = 0;
     66        debugger;
     67        for (;;) {
 ->  68            |++i;
     69            if (i === 1)
     70                continue;
     71            if (i === 2)

ACTION: step-over
PAUSE AT entryForBreakContinue:70:13
     66        debugger;
     67        for (;;) {
     68            ++i;
 ->  69            if (|i === 1)
     70                continue;
     71            if (i === 2)
     72                break;

ACTION: step-over
PAUSE AT entryForBreakContinue:72:13
     68            ++i;
     69            if (i === 1)
     70                continue;
 ->  71            if (|i === 2)
     72                break;
     73        }
     74    }

ACTION: step-over
PAUSE AT entryForBreakContinue:73:13
     69            if (i === 1)
     70                continue;
     71            if (i === 2)
 ->  72                |break;
     73        }
     74    }
     75    

ACTION: step-over
PAUSE AT entryForBreakContinue:75:2
     71            if (i === 2)
     72                break;
     73        }
 ->  74    }|
     75    
     76    function entryForWithCommas() {
     77        debugger;

ACTION: resume
RESUMED
PASS: Should have used all steps.

-- Running test case: Debugger.stepping.ForWithCommasStepOver
EXPRESSION: setTimeout(entryForWithCommas)
STEPS: over, next, over, next, over, over, next, over, next, over, over, next, over, next, over, resume
PAUSED (debugger-statement)
PAUSE AT entryForWithCommas:78:5
     74    }
     75    
     76    function entryForWithCommas() {
 ->  77        |debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
     80    }

ACTION: step-over
PAUSE AT entryForWithCommas:79:10
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (|let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-next
PAUSE AT entryForWithCommas:79:21
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, |length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-over
PAUSE AT entryForWithCommas:79:33
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-next
PAUSE AT entryForWithCommas:79:45
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-over
PAUSE AT entryForWithCommas:80:9
     76    function entryForWithCommas() {
     77        debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
 ->  79            |a();
     80    }
     81    
     82    // ---------

ACTION: step-over
PAUSE AT entryForWithCommas:79:57
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; |length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-next
PAUSE AT entryForWithCommas:79:69
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; length = 1, |++i)
     79            a();
     80    }
     81    

ACTION: step-over
PAUSE AT entryForWithCommas:79:33
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-next
PAUSE AT entryForWithCommas:79:45
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-over
PAUSE AT entryForWithCommas:80:9
     76    function entryForWithCommas() {
     77        debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
 ->  79            |a();
     80    }
     81    
     82    // ---------

ACTION: step-over
PAUSE AT entryForWithCommas:79:57
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; |length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-next
PAUSE AT entryForWithCommas:79:69
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, i < length; length = 1, |++i)
     79            a();
     80    }
     81    

ACTION: step-over
PAUSE AT entryForWithCommas:79:33
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; |length = 2, i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-next
PAUSE AT entryForWithCommas:79:45
     75    
     76    function entryForWithCommas() {
     77        debugger;
 ->  78        for (let i = 0, length = 0; length = 2, |i < length; length = 1, ++i)
     79            a();
     80    }
     81    

ACTION: step-over
PAUSE AT entryForWithCommas:81:2
     77        debugger;
     78        for (let i = 0, length = 0; length = 2, i < length; length = 1, ++i)
     79            a();
 ->  80    }|
     81    
     82    // ---------
     83    

ACTION: resume
RESUMED
PASS: Should have used all steps.

