js/src/jit-test/tests/debug/Source-introductionScript-01.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Dynamically generated sources should have their introduction script and
     2 // offset set correctly.
     4 var g = newGlobal();
     5 var dbg = new Debugger;
     6 var gDO = dbg.addDebuggee(g);
     7 var log;
     9 // Direct eval, while the frame is live.
    10 dbg.onDebuggerStatement = function (frame) {
    11   log += 'd';
    12   var source = frame.script.source;
    13   var introducer = frame.older;
    14   assertEq(source.introductionScript, introducer.script);
    15   assertEq(source.introductionOffset, introducer.offset);
    16 };
    17 log = '';
    18 g.eval('\n\neval("\\n\\ndebugger;");');
    19 assertEq(log, 'd');
    21 // Direct eval, after the frame has been popped.
    22 var introducer, introduced;
    23 dbg.onDebuggerStatement = function (frame) {
    24   log += 'de1';
    25   introducer = frame.script;
    26   dbg.onDebuggerStatement = function (frame) {
    27     log += 'de2';
    28     introduced = frame.script.source;
    29   };
    30 };
    31 log = '';
    32 g.evaluate('debugger; eval("\\n\\ndebugger;");', { lineNumber: 1812 });
    33 assertEq(log, 'de1de2');
    34 assertEq(introduced.introductionScript, introducer);
    35 assertEq(introducer.getOffsetLine(introduced.introductionOffset), 1812);
    37 // Indirect eval, while the frame is live.
    38 dbg.onDebuggerStatement = function (frame) {
    39   log += 'd';
    40   var source = frame.script.source;
    41   var introducer = frame.older;
    42   assertEq(source.introductionScript, introducer.script);
    43   assertEq(source.introductionOffset, introducer.offset);
    44 };
    45 log = '';
    46 g.eval('\n\n(0,eval)("\\n\\ndebugger;");');
    47 assertEq(log, 'd');
    49 // Indirect eval, after the frame has been popped.
    50 var introducer, introduced;
    51 dbg.onDebuggerStatement = function (frame) {
    52   log += 'de1';
    53   introducer = frame.script;
    54   dbg.onDebuggerStatement = function (frame) {
    55     log += 'de2';
    56     introduced = frame.script.source;
    57   };
    58 };
    59 log = '';
    60 g.evaluate('debugger; (0,eval)("\\n\\ndebugger;");', { lineNumber: 1066 });
    61 assertEq(log, 'de1de2');
    62 assertEq(introduced.introductionScript, introducer);
    63 assertEq(introducer.getOffsetLine(introduced.introductionOffset), 1066);
    65 // Function constructor.
    66 dbg.onDebuggerStatement = function (frame) {
    67   log += 'o';
    68   var outerScript = frame.script;
    69   var outerOffset = frame.offset;
    70   dbg.onDebuggerStatement = function (frame) {
    71     log += 'i';
    72     var source = frame.script.source;
    73     assertEq(source.introductionScript, outerScript);
    74     assertEq(outerScript.getOffsetLine(source.introductionOffset),
    75              outerScript.getOffsetLine(outerOffset));
    76   };
    77 };
    78 log = '';
    79 g.eval('\n\n\ndebugger; Function("debugger;")()');
    80 assertEq(log, 'oi');
    82 // Function constructor, after the the introduction call's frame has been
    83 // popped.
    84 var introducer;
    85 dbg.onDebuggerStatement = function (frame) {
    86   log += 'F2';
    87   introducer = frame.script;
    88 };
    89 log = '';
    90 var fDO = gDO.evalInGlobal('debugger; Function("origami;")', { lineNumber: 1685 }).return;
    91 var source = fDO.script.source;
    92 assertEq(log, 'F2');
    93 assertEq(source.introductionScript, introducer);
    94 assertEq(introducer.getOffsetLine(source.introductionOffset), 1685);
    96 // If the introduction script is in a different global from the script it
    97 // introduced, we don't record it.
    98 dbg.onDebuggerStatement = function (frame) {
    99   log += 'x';
   100   var source = frame.script.source;
   101   assertEq(source.introductionScript, undefined);
   102   assertEq(source.introductionOffset, undefined);
   103 };
   104 log = '';
   105 g.eval('debugger;'); // introduction script is this top-level script
   106 assertEq(log, 'x');
   108 // If the code is introduced by a function that doesn't provide
   109 // introduction information, that shouldn't be a problem.
   110 dbg.onDebuggerStatement = function (frame) {
   111   log += 'x';
   112   var source = frame.script.source;
   113   assertEq(source.introductionScript, undefined);
   114   assertEq(source.introductionOffset, undefined);
   115 };
   116 log = '';
   117 g.eval('evaluate("debugger;", { lineNumber: 1729 });');
   118 assertEq(log, 'x');

mercurial