summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/arrow-functions/syntax-errors.js
blob: 925fd5b89415f4e4189e1d04e8cf827c85924f34 (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
// 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);