summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/arrow-functions/syntax-errors.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/arrow-functions/syntax-errors.js')
-rw-r--r--js/src/jit-test/tests/arrow-functions/syntax-errors.js38
1 files changed, 38 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/arrow-functions/syntax-errors.js b/js/src/jit-test/tests/arrow-functions/syntax-errors.js
new file mode 100644
index 0000000000..925fd5b894
--- /dev/null
+++ b/js/src/jit-test/tests/arrow-functions/syntax-errors.js
@@ -0,0 +1,38 @@
+// Check that we correctly throw SyntaxErrors for various syntactic near-misses.
+
+load(libdir + "asserts.js");
+
+var mistakes = [
+ "((a)) => expr",
+ "a + b => a",
+ "'' + a => a",
+ "...x",
+ "[x] => x",
+ "([x] => x)",
+ "{p: p} => p",
+ "({p: p} => p)",
+ "{p} => p",
+ "(...x => expr)",
+ "1 || a => a",
+ "'use strict' => {}",
+ "package => {'use strict';}", // tricky: FutureReservedWord in strict mode code only
+ "'use strict'; arguments => 0", // names banned in strict mode code
+ "'use strict'; eval => 0",
+ "a => {'use strict'; with (a) return x; }",
+ "a => yield a",
+ "a => { yield a; }",
+ "a => { { let x; yield a; } }",
+ "(a = yield 0) => a",
+ "for (;;) a => { break; };",
+ "for (;;) a => { continue; };",
+ "...rest) =>",
+ "2 + ...rest) =>"
+];
+
+for (var s of mistakes)
+ assertThrowsInstanceOf(function () { Function(s); }, SyntaxError);
+
+// Check that the tricky case is not an error in non-strict-mode code.
+var f = package => 0;
+assertEq(f(1), 0);
+