| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Flags: --allow-natives-syntax |
| |
| // Parameters can't have parentheses (both patterns and identifiers) |
| assertThrows("( ({x: 1}) ) => {};", SyntaxError); |
| assertThrows("( (x) ) => {}", SyntaxError); |
| assertThrows("( ({x: 1}) = y ) => {}", SyntaxError); |
| assertThrows("( (x) = y ) => {}", SyntaxError); |
| |
| // Declarations can't have parentheses (both patterns and identifiers) |
| assertThrows("let [({x: 1})] = [];", SyntaxError); |
| assertThrows("let [(x)] = [];", SyntaxError); |
| assertThrows("let [({x: 1}) = y] = [];", SyntaxError); |
| assertThrows("let [(x) = y] = [];", SyntaxError); |
| assertThrows("var [({x: 1})] = [];", SyntaxError); |
| assertThrows("var [(x)] = [];", SyntaxError); |
| assertThrows("var [({x: 1}) = y] = [];", SyntaxError); |
| assertThrows("var [(x) = y] = [];", SyntaxError); |
| |
| // Patterns can't have parentheses in assignments either |
| assertThrows("[({x: 1}) = y] = [];", SyntaxError); |
| assertThrows("({a,b}) = {a:2,b:3}", SyntaxError); |
| |
| // Parentheses are fine around identifiers in assignments though, even inside a |
| // pattern |
| var x; |
| [(x)] = [2]; |
| assertEquals(x, 2); |
| [(x) = 3] = []; |
| assertEquals(x, 3); |