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
39
40
41
42
43
44
45
46
47
48
49
50
|
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/*
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/
*/
function isSyntaxError(code) {
try {
eval(code);
return false;
} catch (exception) {
if (SyntaxError.prototype.isPrototypeOf(exception))
return true;
throw exception;
};
};
/*
* Duplicate parameter names must be tolerated (as per ES3), unless
* the parameter list uses destructuring, in which case we claim the
* user has opted in to a modicum of sanity, and we forbid duplicate
* parameter names.
*/
assertEq(isSyntaxError("function f(x,x){}"), false);
assertEq(isSyntaxError("function f(x,[x]){})"), true);
assertEq(isSyntaxError("function f(x,{y:x}){})"), true);
assertEq(isSyntaxError("function f(x,{x}){})"), true);
assertEq(isSyntaxError("function f([x],x){})"), true);
assertEq(isSyntaxError("function f({y:x},x){})"), true);
assertEq(isSyntaxError("function f({x},x){})"), true);
assertEq(isSyntaxError("function f([x,x]){}"), true);
assertEq(isSyntaxError("function f({x,x}){}"), true);
assertEq(isSyntaxError("function f({y:x,z:x}){}"), true);
assertEq(isSyntaxError("function f(x,x,[y]){}"), true);
assertEq(isSyntaxError("function f(x,x,{y}){}"), true);
assertEq(isSyntaxError("function f([y],x,x){}"), true);
assertEq(isSyntaxError("function f({y},x,x){}"), true);
assertEq(isSyntaxError("function f(a,b,c,d,e,f,g,h,b,[y]){}"), true);
assertEq(isSyntaxError("function f([y],a,b,c,d,e,f,g,h,a){}"), true);
assertEq(isSyntaxError("function f([a],b,c,d,e,f,g,h,i,a){}"), true);
assertEq(isSyntaxError("function f(a,b,c,d,e,f,g,h,i,[a]){}"), true);
assertEq(isSyntaxError("function f(a,b,c,d,e,f,g,h,i,[a]){}"), true);
reportCompare(true, true);
|