diff --git a/packages/babylon/src/parser/lval.js b/packages/babylon/src/parser/lval.js index 5dabd72541..c6b612b565 100644 --- a/packages/babylon/src/parser/lval.js +++ b/packages/babylon/src/parser/lval.js @@ -148,9 +148,12 @@ export default class LValParser extends NodeUtils { const arg = last.argument; this.toAssignable(arg, isBinding, contextDescription); if ( - arg.type !== "Identifier" && - arg.type !== "MemberExpression" && - arg.type !== "ArrayPattern" + [ + "Identifier", + "MemberExpression", + "ArrayPattern", + "ObjectPattern", + ].indexOf(arg.type) === -1 ) { this.unexpected(arg.start); } diff --git a/packages/babylon/test/fixtures/es2015/uncategorised/287/expected.json b/packages/babylon/test/fixtures/es2015/uncategorised/287/expected.json new file mode 100644 index 0000000000..bc062b5625 --- /dev/null +++ b/packages/babylon/test/fixtures/es2015/uncategorised/287/expected.json @@ -0,0 +1,186 @@ +{ + "type": "File", + "start": 0, + "end": 14, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 14, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "sourceType": "script", + "body": [ + { + "type": "ExpressionStatement", + "start": 0, + "end": 14, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "expression": { + "type": "AssignmentExpression", + "start": 0, + "end": 14, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 14 + } + }, + "operator": "=", + "left": { + "type": "ArrayPattern", + "start": 0, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "elements": [ + { + "type": "RestElement", + "start": 1, + "end": 9, + "loc": { + "start": { + "line": 1, + "column": 1 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "argument": { + "type": "ObjectPattern", + "start": 4, + "end": 9, + "loc": { + "start": { + "line": 1, + "column": 4 + }, + "end": { + "line": 1, + "column": 9 + } + }, + "properties": [ + { + "type": "ObjectProperty", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "method": false, + "key": { + "type": "Identifier", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + }, + "identifierName": "a" + }, + "name": "a" + }, + "computed": false, + "shorthand": true, + "value": { + "type": "Identifier", + "start": 6, + "end": 7, + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + }, + "identifierName": "a" + }, + "name": "a" + }, + "extra": { + "shorthand": true + } + } + ] + } + } + ] + }, + "right": { + "type": "Identifier", + "start": 13, + "end": 14, + "loc": { + "start": { + "line": 1, + "column": 13 + }, + "end": { + "line": 1, + "column": 14 + }, + "identifierName": "b" + }, + "name": "b" + } + } + } + ], + "directives": [] + } +} diff --git a/packages/babylon/test/fixtures/es2015/uncategorised/287/options.json b/packages/babylon/test/fixtures/es2015/uncategorised/287/options.json deleted file mode 100644 index 9f7910a413..0000000000 --- a/packages/babylon/test/fixtures/es2015/uncategorised/287/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "Unexpected token (1:4)" -} \ No newline at end of file diff --git a/scripts/tests/test262/test262_whitelist.txt b/scripts/tests/test262/test262_whitelist.txt index b23431eaac..a2a5fb7eee 100644 --- a/scripts/tests/test262/test262_whitelist.txt +++ b/scripts/tests/test262/test262_whitelist.txt @@ -614,29 +614,8 @@ annexB/language/global-code/if-stmt-else-decl-global-skip-early-err.js(default) annexB/language/global-code/if-stmt-else-decl-global-update.js(default) annexB/language/statements/for-in/nonstrict-initializer.js(default) built-ins/Function/prototype/toString/intrinsics.js(strict mode) -language/expressions/arrow-function/dstr-ary-ptrn-rest-obj-id.js(default) -language/expressions/arrow-function/dstr-ary-ptrn-rest-obj-id.js(strict mode) -language/expressions/arrow-function/dstr-ary-ptrn-rest-obj-prop-id.js(default) -language/expressions/arrow-function/dstr-ary-ptrn-rest-obj-prop-id.js(strict mode) -language/expressions/arrow-function/dstr-dflt-ary-ptrn-rest-obj-id.js(default) -language/expressions/arrow-function/dstr-dflt-ary-ptrn-rest-obj-id.js(strict mode) -language/expressions/arrow-function/dstr-dflt-ary-ptrn-rest-obj-prop-id.js(default) -language/expressions/arrow-function/dstr-dflt-ary-ptrn-rest-obj-prop-id.js(strict mode) language/expressions/assignment/destructuring/obj-prop-__proto__dup.js(default) language/expressions/assignment/destructuring/obj-prop-__proto__dup.js(strict mode) -language/expressions/assignment/dstr-array-rest-nested-obj-null.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj-null.js(strict mode) -language/expressions/assignment/dstr-array-rest-nested-obj-undefined-hole.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj-undefined-hole.js(strict mode) -language/expressions/assignment/dstr-array-rest-nested-obj-undefined-own.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj-undefined-own.js(strict mode) -language/expressions/assignment/dstr-array-rest-nested-obj-undefined.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj-undefined.js(strict mode) -language/expressions/assignment/dstr-array-rest-nested-obj-yield-expr.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj-yield-expr.js(strict mode) -language/expressions/assignment/dstr-array-rest-nested-obj-yield-ident-valid.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj.js(default) -language/expressions/assignment/dstr-array-rest-nested-obj.js(strict mode) language/expressions/assignment/dstr-obj-id-identifier-yield-ident-valid.js(default) language/expressions/object/let-non-strict-access.js(default) @@ -646,48 +625,12 @@ language/expressions/object/yield-non-strict-syntax.js(default) language/statements/for/head-lhs-let.js(default) language/statements/for/let-block-with-newline.js(default) language/statements/for/let-identifier-with-newline.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-null.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-null.js(strict mode) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-hole.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-hole.js(strict mode) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-own.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined-own.js(strict mode) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-undefined.js(strict mode) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj-yield-ident-valid.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj.js(default) -language/statements/for-await-of/async-func-decl-dstr-array-rest-nested-obj.js(strict mode) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-null.js(default) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-null.js(strict mode) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-hole.js(default) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-hole.js(strict mode) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-own.js(default) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined-own.js(strict mode) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined.js(default) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-undefined.js(strict mode) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-yield-expr.js(default) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj-yield-expr.js(strict mode) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj.js(default) -language/statements/for-await-of/async-gen-decl-dstr-array-rest-nested-obj.js(strict mode) language/statements/for-await-of/let-block-with-newline.js(default) language/statements/for-await-of/let-identifier-with-newline.js(default) language/statements/for-in/head-lhs-let.js(default) language/statements/for-in/head-var-bound-names-let.js(default) language/statements/for-in/let-block-with-newline.js(default) language/statements/for-in/let-identifier-with-newline.js(default) -language/statements/for-of/dstr-array-rest-nested-obj-null.js(default) -language/statements/for-of/dstr-array-rest-nested-obj-null.js(strict mode) -language/statements/for-of/dstr-array-rest-nested-obj-undefined-hole.js(default) -language/statements/for-of/dstr-array-rest-nested-obj-undefined-hole.js(strict mode) -language/statements/for-of/dstr-array-rest-nested-obj-undefined-own.js(default) -language/statements/for-of/dstr-array-rest-nested-obj-undefined-own.js(strict mode) -language/statements/for-of/dstr-array-rest-nested-obj-undefined.js(default) -language/statements/for-of/dstr-array-rest-nested-obj-undefined.js(strict mode) -language/statements/for-of/dstr-array-rest-nested-obj-yield-expr.js(default) -language/statements/for-of/dstr-array-rest-nested-obj-yield-expr.js(strict mode) -language/statements/for-of/dstr-array-rest-nested-obj-yield-ident-valid.js(default) -language/statements/for-of/dstr-array-rest-nested-obj.js(default) -language/statements/for-of/dstr-array-rest-nested-obj.js(strict mode) language/statements/for-of/dstr-obj-id-identifier-yield-ident-valid.js(default) language/statements/for-of/head-var-bound-names-let.js(default) language/statements/for-of/let-block-with-newline.js(default)