summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onStep-14.js
blob: a7139adb090d601bcc64f7fb9e25a80fb481b3bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Test how stepping interacts with switch statements.

var g = newGlobal({newCompartment: true});

g.eval('function bob() { return "bob"; }');

// Stepping into a sparse switch should not stop on literal cases.
evaluate(`function lit(x) {     // 1
  debugger;                     // 2
  switch(x) {                   // 3
  case "nope":                  // 4
    break;                      // 5
  case "bob":                   // 6
    break;                      // 7
  }                             // 8
}`, {lineNumber: 1, global: g});

// Stepping into a sparse switch should stop on non-literal cases.
evaluate(`function nonlit(x) {  // 1
  debugger;                     // 2
  switch(x) {                   // 3
  case bob():                   // 4
    break;                      // 5
  }                             // 6
}`, {lineNumber: 1, global: g});

var dbg = Debugger(g);
var badStep = false;

function test(s, okLine) {
  dbg.onDebuggerStatement = function(frame) {
    frame.onStep = function() {
      let thisLine = this.script.getOffsetLocation(this.offset).lineNumber;
      // The stop at line 3 is the switch.
      if (thisLine > 3) {
        assertEq(thisLine, okLine)
        frame.onStep = undefined;
      }
    };
  };
  g.eval(s);
}

test("lit('bob');", 7);

test("nonlit('bob');", 4);