Source code

Revision control

Copy as Markdown

Other Tools

// Script.prototype.startColumn returns the correct column for all scripts.
const g = newGlobal({newCompartment: true, useWindowProxy: true});
const dbg = Debugger(g);
const gw = dbg.addDebuggee(g);
function test(f, expected) {
const fw = gw.makeDebuggeeValue(f);
assertEq(fw.callable, true);
assertEq(fw.script.startColumn, expected);
}
g.eval(`
function f1() { }
`);
test(g.f1, 12);
g.eval(`
var f2 = function({ a, b, c }, d, e, ...more) { };
`);
test(g.f2, 18);
g.eval(`
var f3 = function *() { };
`);
test(g.f3, 20);
g.eval(`
var f4 = async function
() { };
`);
test(g.f4, 3);
g.eval(`
var f5 = (a, b) => a + b;
`);
test(g.f5, 10);
g.eval(`
var f6 = a => a + 1;
`);
test(g.f6, 10);
g.eval(`
var MyClass = class {
method() { }
};
var myInstance = new MyClass();
`);
test(g.myInstance.method, 11);
test(g.myInstance.constructor, 15);
const g2 = newGlobal({newCompartment: true, useWindowProxy: true});
const dbg2 = Debugger(g2);
const g2Wrapped = dbg2.addDebuggee(g2);
g2.evaluate(`
function f7() { }
`, {
forceFullParse: true,
});
const f7w = g2Wrapped.makeDebuggeeValue(g2.f7);
assertEq(f7w.callable, true);
assertEq(f7w.script.startColumn, 12);
g.eval(`
function f8() {
return function f8Inner() { }
}
`);
test(g.f8, 12);
test(g.f8(), 28);
g.eval(`
var f9 = new Function(\"\");
`);
test(g.f9, 1);
let hit = 0;
let column;
dbg.onDebuggerStatement = function (frame) {
column = frame.script.startColumn;
hit += 1;
};
g.eval(` debugger;`);
assertEq(column, 1);
assertEq(hit, 1);
const location = { fileName: "column.js", lineNumber: 1, columnNumber: 1 };
hit = 0;
g.evaluate(` debugger;`, location);
assertEq(column, 1);
assertEq(hit, 1);
g.evaluate(`var f10 = function () { };`, location);
test(g.f10, 20);
g.evaluate(`
var f11 = function () { };
`, location);
test(g.f11, 20);