summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Frame-onStep-17.js
blob: a73bd2187c93353a71374a243f1c7a56a9aeaa0f (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
// Test how stepping interacts with for-in/of statements.

var g = newGlobal({newCompartment: true});
var dbg = new Debugger;
var gw = dbg.addDebuggee(g);
var log;
var previous;

dbg.onDebuggerStatement = function (frame) {
  let debugLine = frame.script.getOffsetLocation(frame.offset).lineNumber;
  log = '';
  previous = '';
  frame.onStep = function() {
    let foundLine = this.script.getOffsetLocation(this.offset).lineNumber;
    if (this.script.getLineOffsets(foundLine).indexOf(this.offset) >= 0) {
      let thisline = (foundLine - debugLine).toString(16);
      if (thisline !== previous) {
        log += thisline;
        previous = thisline;
      }
    }
  };
};

function testOne(decl, loopKind) {
  let body = "var array = [2, 4, 6];\ndebugger;\nfor (" + decl + " iter " +
      loopKind + " array) {\n  print(iter);\n}\n";
  g.eval(body);
  assertEq(log, "12121214");
}

for (let decl of ["", "var", "let"]) {
  testOne(decl, "in");
  testOne(decl, "of");
}