blob: 02b6efefd0846641580f3d6d0e89d09ec8e056ac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// Test default class constructors have reasonable lineno/column values
const source = `
/* GeneralParser::synthesizeConstructor */ class A {
}
/* GeneralParser::synthesizeConstructor (derived) */ class B extends A {
}
/* GeneralParser::synthesizeConstructor */ class C {
field = "default value";
}
/* GeneralParser::synthesizeConstructor (derived) */ class D extends A {
field = "default value";
}
`;
// Use the Debugger API to introspect the line / column.
let d = new Debugger();
let g = newGlobal({newCompartment: true})
let gw = d.addDebuggee(g);
g.evaluate(source);
function getStartLine(name) {
return gw.makeDebuggeeValue(g.eval(name)).script.startLine;
}
function getStartColumn(name) {
return gw.makeDebuggeeValue(g.eval(name)).script.startColumn;
}
function getSourceStart(name) {
return gw.makeDebuggeeValue(g.eval(name)).script.sourceStart;
}
function getSourceLength(name) {
return gw.makeDebuggeeValue(g.eval(name)).script.sourceLength;
}
// Compute the expected line/column from source.
matches = "";
lineno = 0;
for (text of source.split("\n")) {
lineno++;
column = text.indexOf("class");
if (column < 0) {
continue;
}
className = text[column + 6];
matches += className;
// Check lineno/column.
assertEq(getStartLine(className), lineno);
assertEq(getStartColumn(className), column + 1);
// Check sourceStart/sourceEnd.
offset = source.indexOf("class " + className)
length = source.substring(offset).indexOf("}") + 1
assertEq(getSourceStart(className), offset)
assertEq(getSourceLength(className), length)
}
// Sanity check to did actual matches
assertEq(matches, "ABCD");
|