diff options
Diffstat (limited to 'js/src/tests/js1_8/regress/regress-499524.js')
-rw-r--r-- | js/src/tests/js1_8/regress/regress-499524.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/js/src/tests/js1_8/regress/regress-499524.js b/js/src/tests/js1_8/regress/regress-499524.js new file mode 100644 index 000000000..2b996eda2 --- /dev/null +++ b/js/src/tests/js1_8/regress/regress-499524.js @@ -0,0 +1,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); |