/js/src/jit-test/tests/debug/Script-getLineOffsets-04.js

http://github.com/zpao/v8monkey · JavaScript · 53 lines · 46 code · 6 blank · 1 comment · 1 complexity · e1928e85b93416cee76bbec26d4456cf MD5 · raw file

  1. // getLineOffsets works with instructions reachable only by breaking out of a loop or switch.
  2. var g = newGlobal('new-compartment');
  3. g.line0 = null;
  4. var dbg = Debugger(g);
  5. var where;
  6. dbg.onDebuggerStatement = function (frame) {
  7. var s = frame.eval("f").return.script;
  8. var lineno = g.line0 + where;
  9. var offs = s.getLineOffsets(lineno);
  10. for (var i = 0; i < offs.length; i++) {
  11. assertEq(s.getOffsetLine(offs[i]), lineno);
  12. s.setBreakpoint(offs[i], {hit: function () { g.log += 'B'; }});
  13. }
  14. g.log += 'A';
  15. };
  16. function test(s) {
  17. var count = (s.split(/\n/).length - 1); // number of newlines in s
  18. g.log = '';
  19. where = 3 + count + 1;
  20. g.eval("line0 = Error().lineNumber;\n" +
  21. "debugger;\n" + // line0 + 1
  22. "function f(i) {\n" + // line0 + 2
  23. s + // line0 + 3 ... line0 + where - 2
  24. " log += '?';\n" + // line0 + where - 1
  25. " log += '!';\n" + // line0 + where
  26. "}\n");
  27. g.f(0);
  28. assertEq(g.log, 'A?B!');
  29. }
  30. test("i = 128;\n" +
  31. "for (;;) {\n" +
  32. " var x = i - 10;;\n" +
  33. " if (x < 0)\n" +
  34. " break;\n" +
  35. " i >>= 2;\n" +
  36. "}\n");
  37. test("while (true)\n" +
  38. " if (++i === 2) break;\n");
  39. test("do {\n" +
  40. " if (++i === 2) break;\n" +
  41. "} while (true);\n");
  42. test("switch (i) {\n" +
  43. " case 2: return 7;\n" +
  44. " case 1: return 8;\n" +
  45. " case 0: break;\n" +
  46. " default: return -i;\n" +
  47. "}\n");