Bug 1377349 - Remove support for nested destructuring in object rest properties. r=shu
authorAndré Bargull <andre.bargull@gmail.com>
Mon, 10 Jul 2017 07:53:10 -0700
changeset 643357 074fb831cd7bf4129794047e3d3a4c3ed1a8227e
parent 643356 595d4c0210e227ff48e1095da958d5eb6b7ba5ca
child 643358 f2f297d544fff3de5778d12f2b099e740e44dc36
push id73068
push usergpascutto@mozilla.com
push dateWed, 09 Aug 2017 16:52:24 +0000
reviewersshu
bugs1377349
milestone57.0a1
Bug 1377349 - Remove support for nested destructuring in object rest properties. r=shu
js/src/frontend/Parser.cpp
js/src/frontend/Parser.h
js/src/tests/js1_8_5/reflect-parse/object-rest.js
js/src/tests/jstests.list
--- a/js/src/frontend/Parser.cpp
+++ b/js/src/frontend/Parser.cpp
@@ -4516,17 +4516,22 @@ Parser<ParseHandler, CharT>::objectBindi
         if (tt == TOK_TRIPLEDOT) {
             tokenStream.consumeKnownToken(TOK_TRIPLEDOT);
             uint32_t begin = pos().begin;
 
             TokenKind tt;
             if (!tokenStream.getToken(&tt))
                 return null();
 
-            Node inner = bindingIdentifierOrPattern(kind, yieldHandling, tt);
+            if (!TokenKindIsPossibleIdentifierName(tt)) {
+                error(JSMSG_NO_VARIABLE_NAME);
+                return null();
+            }
+
+            Node inner = bindingIdentifier(kind, yieldHandling);
             if (!inner)
                 return null();
 
             if (!handler.addSpreadProperty(literal, begin, inner))
                 return null();
         } else {
             TokenPos namePos = tokenStream.nextToken().pos;
 
@@ -9476,17 +9481,18 @@ Parser<SyntaxParseHandler, char16_t>::ne
         return null();
 
     return handler.newRegExp(SyntaxParseHandler::NodeGeneric, pos(), *this);
 }
 
 template <class ParseHandler, typename CharT>
 void
 Parser<ParseHandler, CharT>::checkDestructuringAssignmentTarget(Node expr, TokenPos exprPos,
-                                                                PossibleError* possibleError)
+                                                                PossibleError* possibleError,
+                                                                TargetBehavior behavior)
 {
     // Return early if a pending destructuring error is already present.
     if (possibleError->hasPendingDestructuringError())
         return;
 
     if (pc->sc()->needStrictChecks()) {
         if (handler.isArgumentsAnyParentheses(expr, context)) {
             if (pc->sc()->strict()) {
@@ -9506,16 +9512,25 @@ Parser<ParseHandler, CharT>::checkDestru
             } else {
                 possibleError->setPendingDestructuringWarningAt(exprPos,
                                                                 JSMSG_BAD_STRICT_ASSIGN_EVAL);
             }
             return;
         }
     }
 
+    if (behavior == TargetBehavior::ForbidAssignmentPattern) {
+        if (handler.isUnparenthesizedDestructuringPattern(expr) ||
+            handler.isParenthesizedDestructuringPattern(expr))
+        {
+            possibleError->setPendingDestructuringErrorAt(exprPos, JSMSG_BAD_DESTRUCT_TARGET);
+            return;
+        }
+    }
+
     // The expression must be either a simple assignment target, i.e. a name
     // or a property accessor, or a nested destructuring pattern.
     if (!handler.isUnparenthesizedDestructuringPattern(expr) &&
         !handler.isNameAnyParentheses(expr) &&
         !handler.isPropertyAccess(expr))
     {
         // Parentheses are forbidden around destructuring *patterns* (but
         // allowed around names). Use our nicer error message for
@@ -9907,18 +9922,20 @@ Parser<ParseHandler, CharT>::objectLiter
             TokenPos innerPos;
             if (!tokenStream.peekTokenPos(&innerPos, TokenStream::Operand))
                 return null();
 
             Node inner = assignExpr(InAllowed, yieldHandling, TripledotProhibited,
                                     possibleError);
             if (!inner)
                 return null();
-            if (possibleError)
-                checkDestructuringAssignmentTarget(inner, innerPos, possibleError);
+            if (possibleError) {
+                checkDestructuringAssignmentTarget(inner, innerPos, possibleError,
+                                                   TargetBehavior::ForbidAssignmentPattern);
+            }
             if (!handler.addSpreadProperty(literal, begin, inner))
                 return null();
         } else {
             TokenPos namePos = tokenStream.nextToken().pos;
 
             PropertyType propType;
             Node propName = propertyName(yieldHandling, declKind, literal, &propType, &propAtom);
             if (!propName)
--- a/js/src/frontend/Parser.h
+++ b/js/src/frontend/Parser.h
@@ -929,18 +929,23 @@ class Parser final : public ParserBase, 
 
     Node bindingInitializer(Node lhs, DeclarationKind kind, YieldHandling yieldHandling);
     Node bindingIdentifier(DeclarationKind kind, YieldHandling yieldHandling);
     Node bindingIdentifierOrPattern(DeclarationKind kind, YieldHandling yieldHandling,
                                     TokenKind tt);
     Node objectBindingPattern(DeclarationKind kind, YieldHandling yieldHandling);
     Node arrayBindingPattern(DeclarationKind kind, YieldHandling yieldHandling);
 
+    enum class TargetBehavior {
+        PermitAssignmentPattern,
+        ForbidAssignmentPattern
+    };
     void checkDestructuringAssignmentTarget(Node expr, TokenPos exprPos,
-                                            PossibleError* possibleError);
+                                            PossibleError* possibleError,
+                                            TargetBehavior behavior = TargetBehavior::PermitAssignmentPattern);
     void checkDestructuringAssignmentElement(Node expr, TokenPos exprPos,
                                              PossibleError* possibleError);
 
     Node newNumber(const Token& tok) {
         return handler.newNumber(tok.number(), tok.decimalPoint(), tok.pos);
     }
 
     static Node null() { return ParseHandler::null(); }
--- a/js/src/tests/js1_8_5/reflect-parse/object-rest.js
+++ b/js/src/tests/js1_8_5/reflect-parse/object-rest.js
@@ -8,28 +8,24 @@ function assertDestrAssign(src, pattern)
     assertExpr(`(${src} = 0)`, aExpr("=", pattern, lit(0)));
 }
 
 function assertDestrBinding(src, pattern) {
     assertDecl(`var ${src} = 0`, varDecl([{id: pattern, init: lit(0)}]));
 }
 
 function test() {
-    // Target expression must be a simple assignment target or a nested pattern
-    // in object assignment patterns.
+    // Target expression must be a simple assignment target in object assignment patterns.
     assertDestrAssign("{...x}", objPatt([spread(ident("x"))]));
     assertDestrAssign("{...(x)}", objPatt([spread(ident("x"))]));
     assertDestrAssign("{...obj.p}", objPatt([spread(dotExpr(ident("obj"), ident("p")))]));
-    assertDestrAssign("{...{}}", objPatt([spread(objPatt([]))]));
-    assertDestrAssign("{...[]}", objPatt([spread(arrPatt([]))]));
+    assertDestrAssign("{...(obj.p)}", objPatt([spread(dotExpr(ident("obj"), ident("p")))]));
 
-    // Object binding patterns only allow binding identifiers or nested patterns.
+    // Object binding patterns only allow binding identifiers.
     assertDestrBinding("{...x}", objPatt([spread(ident("x"))]));
-    assertDestrBinding("{...{}}", objPatt([spread(objPatt([]))]));
-    assertDestrBinding("{...[]}", objPatt([spread(arrPatt([]))]));
 
     // The rest-property can be preceded by other properties.
     for (var assertDestr of [assertDestrAssign, assertDestrBinding]) {
         assertDestr("{a, ...x}", objPatt([property(ident("a")), spread(ident("x"))]));
         assertDestr("{a: b, ...x}", objPatt([property(ident("a"), ident("b")), spread(ident("x"))]));
         assertDestr("{[a]: b, ...x}", objPatt([property(comp(ident("a")), ident("b")), spread(ident("x"))]));
     }
 
--- a/js/src/tests/jstests.list
+++ b/js/src/tests/jstests.list
@@ -527,8 +527,220 @@ skip script test262/language/statements/
 skip script test262/language/statements/while/decl-async-fun.js
 skip script test262/language/statements/while/decl-async-gen.js
 skip script test262/language/statements/with/decl-async-fun.js
 skip script test262/language/statements/with/decl-async-gen.js
 
 ####################################################
 # Tests disabled due to invalid test expectations  #
 ####################################################
+
+# https://github.com/tc39/test262/pull/1072
+skip script test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-func-dstr-let-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-var-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-func-dstr-const-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/generators/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/generators/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/generators/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/generators/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/let/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/let/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/let/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/const/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/const/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/const/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/async-generator/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/async-generator/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/async-generator/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/async-generator/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/variable/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/variable/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/variable/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/try/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/try/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/try/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/function/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/function/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/function/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/function/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for/dstr-let-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for/dstr-let-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for/dstr-const-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for/dstr-var-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for/dstr-var-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for/dstr-const-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for/dstr-const-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for/dstr-let-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for/dstr-var-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-of/dstr-let-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-of/dstr-obj-rest-nested-obj-nested-rest.js
+skip script test262/language/statements/for-of/dstr-let-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-of/dstr-const-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-of/dstr-var-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-of/dstr-var-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-of/dstr-obj-rest-nested-obj.js
+skip script test262/language/statements/for-of/dstr-obj-rest-obj-own-property.js
+skip script test262/language/statements/for-of/dstr-const-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/for-of/dstr-const-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/for-of/dstr-let-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/for-of/dstr-var-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/statements/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-meth-static-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/statements/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/generators/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/generators/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/generators/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/generators/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/async-generator/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/async-generator/dstr-named-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/async-generator/dstr-named-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/async-generator/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/async-generator/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/async-generator/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/assignment/dstr-obj-rest-nested-obj-nested-rest.js
+skip script test262/language/expressions/assignment/dstr-obj-rest-nested-obj.js
+skip script test262/language/expressions/assignment/dstr-obj-rest-obj-own-property.js
+skip script test262/language/expressions/function/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/function/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/function/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/function/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/object/dstr-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/object/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/object/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/object/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/object/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/object/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/arrow-function/dstr-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/arrow-function/dstr-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-gen-meth-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-dflt-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-meth-obj-ptrn-rest-nested-obj.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-static-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-gen-meth-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-meth-static-obj-ptrn-rest-obj-own-property.js
+skip script test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-async-gen-meth-static-dflt-obj-ptrn-rest-obj-nested-rest.js
+skip script test262/language/expressions/class/dstr-gen-meth-static-dflt-obj-ptrn-rest-nested-obj.js