summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/expressions/trailing_comma_getter_setter.js
blob: 258dd8df61fe3395b0fb5babd334f6ee996ec675 (plain)
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/* 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);