summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/class/default-constructor-position.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/class/default-constructor-position.js')
-rw-r--r--js/src/jit-test/tests/class/default-constructor-position.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/class/default-constructor-position.js b/js/src/jit-test/tests/class/default-constructor-position.js
new file mode 100644
index 0000000000..abe2eeb7ab
--- /dev/null
+++ b/js/src/jit-test/tests/class/default-constructor-position.js
@@ -0,0 +1,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);
+
+ // 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");