mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-10 09:19:28 +00:00
Bug 984696 - Save more detailed source notes so that Debugger.Script.prototype.getAllColumnOffsets can offer more for source mapped and/or pretty printed JS debugging. r=ejpbruel
This commit is contained in:
parent
6487356b98
commit
be19570abb
@ -37,8 +37,8 @@
|
||||
[ "Callback message", msg, "Error: hello" ],
|
||||
[ "Event error-object", errorEvent.error, thrown],
|
||||
[ "Callback error-object", error, thrown ],
|
||||
[ "Event column", errorEvent.colno, 0 ], // Sadly not correct right now
|
||||
[ "Callback column", column, 0 ]
|
||||
[ "Event column", errorEvent.colno, 6 ], // Sadly not correct right now
|
||||
[ "Callback column", column, 6 ]
|
||||
]);
|
||||
</script>
|
||||
<script>
|
||||
|
@ -3436,6 +3436,8 @@ EmitVariables(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, VarEmit
|
||||
|
||||
ParseNode *next;
|
||||
for (ParseNode *pn2 = pn->pn_head; ; pn2 = next) {
|
||||
if (!UpdateSourceCoordNotes(cx, bce, pn2->pn_pos.begin))
|
||||
return false;
|
||||
next = pn2->pn_next;
|
||||
|
||||
ParseNode *pn3;
|
||||
@ -5904,6 +5906,9 @@ EmitObject(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn)
|
||||
}
|
||||
|
||||
for (ParseNode *pn2 = pn->pn_head; pn2; pn2 = pn2->pn_next) {
|
||||
if (!UpdateSourceCoordNotes(cx, bce, pn2->pn_pos.begin))
|
||||
return false;
|
||||
|
||||
/* Emit an index for t[2] for later consumption by JSOP_INITELEM. */
|
||||
ParseNode *pn3 = pn2->pn_left;
|
||||
bool isIndex = false;
|
||||
@ -6065,6 +6070,8 @@ EmitArray(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, uint32_t co
|
||||
if (nspread && !EmitNumberOp(cx, 0, bce))
|
||||
return false;
|
||||
for (atomIndex = 0; pn2; atomIndex++, pn2 = pn2->pn_next) {
|
||||
if (!UpdateSourceCoordNotes(cx, bce, pn2->pn_pos.begin))
|
||||
return false;
|
||||
if (pn2->isKind(PNK_ELISION)) {
|
||||
if (Emit1(cx, bce, JSOP_HOLE) < 0)
|
||||
return false;
|
||||
@ -6372,6 +6379,8 @@ frontend::EmitTree(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn)
|
||||
case PNK_COMMA:
|
||||
{
|
||||
for (ParseNode *pn2 = pn->pn_head; ; pn2 = pn2->pn_next) {
|
||||
if (!UpdateSourceCoordNotes(cx, bce, pn2->pn_pos.begin))
|
||||
return false;
|
||||
if (!EmitTree(cx, bce, pn2))
|
||||
return false;
|
||||
if (!pn2->pn_next)
|
||||
|
@ -8,11 +8,7 @@ dbg.onDebuggerStatement = function (frame) {
|
||||
assertEq(exc.message, "diaf");
|
||||
assertEq(exc.fileName, "fail");
|
||||
assertEq(exc.lineNumber, 4);
|
||||
|
||||
// Arrant nonsense? Sure -- but different from lineNumber is all this
|
||||
// test exists to verify. If you're the person to make column numbers
|
||||
// actually work, change this accordingly.
|
||||
assertEq(exc.columnNumber, 0);
|
||||
assertEq(exc.columnNumber, 20);
|
||||
return;
|
||||
}
|
||||
throw new Error("deleteProperty should throw");
|
||||
|
@ -16,4 +16,4 @@ Debugger(global).onDebuggerStatement = function (frame) {
|
||||
global.log = '';
|
||||
global.eval("function f(n) { for (var i = 0; i < n; ++i) log += '. '; log += '! '; } debugger;");
|
||||
global.f(3);
|
||||
assertEq(global.log, "21 32 44 . 39 32 44 . 39 32 44 . 39 32 57 ! 69 ");
|
||||
assertEq(global.log, "25 32 44 . 39 32 44 . 39 32 44 . 39 32 57 ! 69 ");
|
||||
|
21
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-02.js
Normal file
21
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-02.js
Normal file
@ -0,0 +1,21 @@
|
||||
// getColumnOffsets correctly places multiple variable declarations.
|
||||
|
||||
var global = newGlobal();
|
||||
Debugger(global).onDebuggerStatement = function (frame) {
|
||||
var script = frame.eval("f").return.script;
|
||||
script.getAllColumnOffsets().forEach(function (offset) {
|
||||
script.setBreakpoint(offset.offset, {
|
||||
hit: function (frame) {
|
||||
assertEq(offset.lineNumber, 1);
|
||||
global.log += offset.columnNumber + " ";
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
global.log = '';
|
||||
global.eval("function f(n){var w0,x1=3,y2=4,z3=9} debugger;");
|
||||
global.f(3);
|
||||
|
||||
// Should have hit each variable declared.
|
||||
assertEq(global.log, "18 21 26 31 33 ");
|
20
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-03.js
Normal file
20
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-03.js
Normal file
@ -0,0 +1,20 @@
|
||||
// getColumnOffsets correctly places comma separated expressions.
|
||||
|
||||
var global = newGlobal();
|
||||
Debugger(global).onDebuggerStatement = function (frame) {
|
||||
var script = frame.eval("f").return.script;
|
||||
script.getAllColumnOffsets().forEach(function (offset) {
|
||||
script.setBreakpoint(offset.offset, {
|
||||
hit: function (frame) {
|
||||
assertEq(offset.lineNumber, 1);
|
||||
global.log += offset.columnNumber + " ";
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
global.log = '';
|
||||
global.eval("function f(n){print(n),print(n),print(n)} debugger;");
|
||||
global.f(3);
|
||||
// Should hit each call that was separated by commas.
|
||||
assertEq(global.log, "14 23 32 40 ");
|
20
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-04.js
Normal file
20
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-04.js
Normal file
@ -0,0 +1,20 @@
|
||||
// getColumnOffsets correctly places object properties.
|
||||
|
||||
var global = newGlobal();
|
||||
Debugger(global).onDebuggerStatement = function (frame) {
|
||||
var script = frame.eval("f").return.script;
|
||||
script.getAllColumnOffsets().forEach(function (offset) {
|
||||
script.setBreakpoint(offset.offset, {
|
||||
hit: function (frame) {
|
||||
assertEq(offset.lineNumber, 1);
|
||||
global.log += offset.columnNumber + " ";
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
global.log = '';
|
||||
global.eval("function f(n){var o={a:1,b:2,c:3}} debugger;");
|
||||
global.f(3);
|
||||
// Should hit each property in the object.
|
||||
assertEq(global.log, "18 21 25 29 19 ");
|
20
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-05.js
Normal file
20
js/src/jit-test/tests/debug/Script-getAllColumnOffsets-05.js
Normal file
@ -0,0 +1,20 @@
|
||||
// getColumnOffsets correctly places array properties.
|
||||
|
||||
var global = newGlobal();
|
||||
Debugger(global).onDebuggerStatement = function (frame) {
|
||||
var script = frame.eval("f").return.script;
|
||||
script.getAllColumnOffsets().forEach(function (offset) {
|
||||
script.setBreakpoint(offset.offset, {
|
||||
hit: function (frame) {
|
||||
assertEq(offset.lineNumber, 1);
|
||||
global.log += offset.columnNumber + " ";
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
global.log = '';
|
||||
global.eval("function f(n){var a=[1,2,3]} debugger;");
|
||||
global.f(3);
|
||||
// Should hit each item in the array.
|
||||
assertEq(global.log, "18 21 23 25 19 ");
|
Loading…
x
Reference in New Issue
Block a user