summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/destructuring/bug1396261.js
blob: 5d16b0932388595b58756a5754ad087264efb1f8 (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
// Ensure array or object literals with trailing property accessors are not
// treated as nested destructuring patterns in assignment destructuring
// contexts.

// Array destructuring with normal element.
[{a: 0}.x] = [];
[[0].x] = [];

// Array destructuring with spread element.
[...{a: 0}.x] = [];
[...[0].x] = [];

// Object destructuring with normal property.
({a: {b: 0}.x} = {});
({a: [0].x} = {});

// Object destructuring with spread property.
({...{b: 0}.x} = {});
({...[0].x} = {});

// Object literal with initializer shorthand in destructuring context.
assertThrowsInstanceOf(() => Function(`[{a = 0}.x] = [];`), SyntaxError);
assertThrowsInstanceOf(() => Function(`[...{a = 0}.x] = [];`), SyntaxError);
assertThrowsInstanceOf(() => Function(`({a: {b = 0}.x} = {});`), SyntaxError);
assertThrowsInstanceOf(() => Function(`({...{b = 0}.x} = {});`), SyntaxError);

// Object destructuring with "eval" or "arguments" shorthand in strict mode.
(function() {
    "use strict";

    // Ensure "eval" resp. "arguments" is not treated as an assignment.
    [{eval}.x] = [];
    [...{eval}.x] = [];
    ({a: {eval}.x} = {});
    ({...{eval}.x} = {});

    [{arguments}.x] = [];
    [...{arguments}.x] = [];
    ({a: {arguments}.x} = {});
    ({...{arguments}.x} = {});
})();

if (typeof reportCompare === "function")
    reportCompare(0, 0);