Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Trailing comma is not allowed in getter and setter methods
// 14.3 Method Definitions
// MethodDefinition[Yield]:
// get PropertyName[?Yield] () { FunctionBody[~Yield] }
// set PropertyName[?Yield] ( PropertySetParameterList ) { FunctionBody[~Yield] }
// PropertySetParameterList:
// FormalParameter[~Yield]
function objectGetter(argList) {
return eval(`({
get m(${argList}) {}
})`);
}
function objectSetter(argList) {
return eval(`({
set m(${argList}) {}
})`);
}
function classGetter(argList) {
return eval(`(class {
get m(${argList}) {}
})`);
}
function classStaticGetter(argList) {
return eval(`(class {
static get m(${argList}) {}
})`);
}
function classSetter(argList) {
return eval(`(class {
set m(${argList}) {}
})`);
}
function classStaticSetter(argList) {
return eval(`(class {
static set m(${argList}) {}
})`);
}
const tests = [
objectGetter,
objectSetter,
classGetter,
classStaticGetter,
classSetter,
classStaticSetter,
];
for (let test of tests) {
// Trailing comma.
assertThrowsInstanceOf(() => test("a, "), SyntaxError);
assertThrowsInstanceOf(() => test("[], "), SyntaxError);
assertThrowsInstanceOf(() => test("{}, "), SyntaxError);
assertThrowsInstanceOf(() => test("a = 0, "), SyntaxError);
assertThrowsInstanceOf(() => test("[] = [], "), SyntaxError);
assertThrowsInstanceOf(() => test("{} = {}, "), SyntaxError);
// Trailing comma in empty parameters list.
assertThrowsInstanceOf(() => test(","), SyntaxError);
// Leading comma.
assertThrowsInstanceOf(() => test(", a"), SyntaxError);
assertThrowsInstanceOf(() => test(", ...a"), SyntaxError);
// Multiple trailing comma.
assertThrowsInstanceOf(() => test("a, ,"), SyntaxError);
assertThrowsInstanceOf(() => test("a..., ,"), SyntaxError);
// Trailing comma after rest parameter.
assertThrowsInstanceOf(() => test("...a ,"), SyntaxError);
assertThrowsInstanceOf(() => test("a, ...b, "), SyntaxError);
// Elision.
assertThrowsInstanceOf(() => test("a, , b"), SyntaxError);
}
if (typeof reportCompare === "function")
reportCompare(0, 0);