diff --git a/src/acorn/src/expression.js b/src/acorn/src/expression.js index cf8370c51c..998864d077 100755 --- a/src/acorn/src/expression.js +++ b/src/acorn/src/expression.js @@ -103,7 +103,7 @@ pp.parseMaybeAssign = function(noIn, refShorthandDefaultPos, afterLeftParse) { node.left = this.type === tt.eq ? this.toAssignable(left) : left refShorthandDefaultPos.start = 0 // reset because shorthand default was used correctly this.checkLVal(left) - if (left.parenthesizedExpression && left.type === "ObjectPattern") { + if (left.parenthesizedExpression && (left.type === "ObjectPattern" || left.type === "ArrayPattern")) { this.raise(left.start, "You're trying to assign to a parenthesized expression, instead of `({ foo }) = {}` use `({ foo } = {})`"); } this.next() diff --git a/test/acorn/tests-babel.js b/test/acorn/tests-babel.js index 8c889508c7..ef99afd578 100644 --- a/test/acorn/tests-babel.js +++ b/test/acorn/tests-babel.js @@ -2,6 +2,14 @@ var test = require("./driver.js").test; var testFail = require("./driver.js").testFail; var testAssert = require("./driver.js").testAssert; +testFail("({a}) = 2;", "You're trying to assign to a parenthesized expression, instead of `({ foo }) = {}` use `({ foo } = {})` (1:1)", { + ecmaVersion: 6 +}); + +testFail("([a]) = 2;", "You're trying to assign to a parenthesized expression, instead of `({ foo }) = {}` use `({ foo } = {})` (1:1)", { + ecmaVersion: 6 +}); + // ES7: Exponentiation Operator test('a **= 2;', {