| // 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); |
| |