// Check that scripts' introduction types are properly marked. if (helperThreadCount() === 0) quit(0); var g = newGlobal(); var dbg = new Debugger(); var gDO = dbg.addDebuggee(g); var log; // (Indirect) eval. dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, 'eval'); }; log = ''; g.eval('debugger;'); assertEq(log, 'd'); // Function constructor. dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, 'Function'); }; log = ''; g.Function('debugger;')(); assertEq(log, 'd'); // GeneratorFunction constructor. dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, 'GeneratorFunction'); }; log = ''; g.eval('(function*() {})').constructor('debugger;')().next(); assertEq(log, 'd'); // Shell 'evaluate' function dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, "js shell evaluate"); }; log = ''; g.evaluate('debugger;'); assertEq(log, 'd'); // Shell 'load' function dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, "js shell load"); }; log = ''; g.load(scriptdir + 'Source-introductionType-data'); assertEq(log, 'd'); // Shell 'run' function dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, "js shell run"); }; log = ''; g.run(scriptdir + 'Source-introductionType-data'); assertEq(log, 'd'); // Shell 'offThreadCompileScript' function. dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, "js shell offThreadCompileScript"); }; log = ''; g.offThreadCompileScript('debugger;'); g.runOffThreadScript(); assertEq(log, 'd'); // Debugger.Frame.prototype.eval dbg.onDebuggerStatement = function (frame) { log += 'o'; dbg.onDebuggerStatement = innerHandler; frame.eval('debugger'); function innerHandler(frame) { log += 'i'; assertEq(frame.script.source.introductionType, "debugger eval"); } }; log = ''; g.eval('debugger;'); assertEq(log, 'oi'); // Debugger.Frame.prototype.evalWithBindings dbg.onDebuggerStatement = function (frame) { log += 'o'; dbg.onDebuggerStatement = innerHandler; frame.evalWithBindings('debugger', { x: 42 }); function innerHandler(frame) { log += 'i'; assertEq(frame.script.source.introductionType, "debugger eval"); } }; log = ''; g.eval('debugger;'); assertEq(log, 'oi'); // Debugger.Object.executeInGlobal dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, "debugger eval"); }; log = ''; gDO.executeInGlobal('debugger;'); assertEq(log, 'd'); // Debugger.Object.executeInGlobalWithBindings dbg.onDebuggerStatement = function (frame) { log += 'd'; assertEq(frame.script.source.introductionType, "debugger eval"); }; log = ''; gDO.executeInGlobalWithBindings('debugger;', { x: 42 }); assertEq(log, 'd');