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