Checking pause locations when stepping in, out, and over functions with default parameter expressions.


== Running test suite: Debugger.stepping.function-default-parameters
-- Running test case: Debugger.stepping.DefaultParameterExpression
EXPRESSION: setTimeout(entryDefaultParameterExpression)
STEPS: over, in, out, in, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryDefaultParameterExpression:19:5
     15        function add(a=1, b=2) {
     16            return a + b;
     17        }
 ->  18        |debugger;
     19        add();
     20        add(1);
     21        add(1, 2);

ACTION: step-over
PAUSE AT entryDefaultParameterExpression:20:5
     16            return a + b;
     17        }
     18        debugger;
 ->  19        |add();
     20        add(1);
     21        add(1, 2);
     22    }

ACTION: step-in
PAUSE AT add:17:9
     13    
     14    function entryDefaultParameterExpression() {
     15        function add(a=1, b=2) {
 ->  16            |return a + b;
     17        }
     18        debugger;
     19        add();

ACTION: step-out
PAUSE AT entryDefaultParameterExpression:21:5
     17        }
     18        debugger;
     19        add();
 ->  20        |add(1);
     21        add(1, 2);
     22    }
     23    

ACTION: step-in
PAUSE AT add:17:9
     13    
     14    function entryDefaultParameterExpression() {
     15        function add(a=1, b=2) {
 ->  16            |return a + b;
     17        }
     18        debugger;
     19        add();

ACTION: step-out
PAUSE AT entryDefaultParameterExpression:22:5
     18        debugger;
     19        add();
     20        add(1);
 ->  21        |add(1, 2);
     22    }
     23    
     24    function entryDefaultParameterCallExpression() {

ACTION: step-in
PAUSE AT add:17:9
     13    
     14    function entryDefaultParameterExpression() {
     15        function add(a=1, b=2) {
 ->  16            |return a + b;
     17        }
     18        debugger;
     19        add();

ACTION: step-out
PAUSE AT entryDefaultParameterExpression:23:2
     19        add();
     20        add(1);
     21        add(1, 2);
 ->  22    }|
     23    
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {

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

-- Running test case: Debugger.stepping.DefaultParameterCallExpression
EXPRESSION: setTimeout(entryDefaultParameterCallExpression)
STEPS: over, in, in, out, in, out, out, in, in, out, out, in, out, resume
PAUSED (debugger-statement)
PAUSE AT entryDefaultParameterCallExpression:29:5
     25        function add(x=a(), y=b()) {
     26            return x + y;
     27        }
 ->  28        |debugger;
     29        add();
     30        add(1);
     31        add(1, 2);

ACTION: step-over
PAUSE AT entryDefaultParameterCallExpression:30:5
     26            return x + y;
     27        }
     28        debugger;
 ->  29        |add();
     30        add(1);
     31        add(1, 2);
     32    }

ACTION: step-in
PAUSE AT add:26:20
     22    }
     23    
     24    function entryDefaultParameterCallExpression() {
 ->  25        function add(x=|a(), y=b()) {
     26            return x + y;
     27        }
     28        debugger;

ACTION: step-in
PAUSE AT a:8:5
      4    <script src="../resources/log-pause-location.js"></script>
      5    <script>
      6    function a() {
 ->   7        |return 1;
      8    }
      9    
     10    function b() {

ACTION: step-out
PAUSE AT add:26:27
     22    }
     23    
     24    function entryDefaultParameterCallExpression() {
 ->  25        function add(x=a(), y=|b()) {
     26            return x + y;
     27        }
     28        debugger;

ACTION: step-in
PAUSE AT b:12:5
      8    }
      9    
     10    function b() {
 ->  11        |return 2;
     12    }
     13    
     14    function entryDefaultParameterExpression() {

ACTION: step-out
PAUSE AT add:27:9
     23    
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {
 ->  26            |return x + y;
     27        }
     28        debugger;
     29        add();

ACTION: step-out
PAUSE AT entryDefaultParameterCallExpression:31:5
     27        }
     28        debugger;
     29        add();
 ->  30        |add(1);
     31        add(1, 2);
     32    }
     33    

ACTION: step-in
PAUSE AT add:26:27
     22    }
     23    
     24    function entryDefaultParameterCallExpression() {
 ->  25        function add(x=a(), y=|b()) {
     26            return x + y;
     27        }
     28        debugger;

ACTION: step-in
PAUSE AT b:12:5
      8    }
      9    
     10    function b() {
 ->  11        |return 2;
     12    }
     13    
     14    function entryDefaultParameterExpression() {

ACTION: step-out
PAUSE AT add:27:9
     23    
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {
 ->  26            |return x + y;
     27        }
     28        debugger;
     29        add();

ACTION: step-out
PAUSE AT entryDefaultParameterCallExpression:32:5
     28        debugger;
     29        add();
     30        add(1);
 ->  31        |add(1, 2);
     32    }
     33    
     34    // ---------

ACTION: step-in
PAUSE AT add:27:9
     23    
     24    function entryDefaultParameterCallExpression() {
     25        function add(x=a(), y=b()) {
 ->  26            |return x + y;
     27        }
     28        debugger;
     29        add();

ACTION: step-out
PAUSE AT entryDefaultParameterCallExpression:33:2
     29        add();
     30        add(1);
     31        add(1, 2);
 ->  32    }|
     33    
     34    // ---------
     35    

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

