WIP: parsePatternList draft
authorDavid Teller <dteller@mozilla.com>
Sun, 06 Aug 2017 13:07:36 +0200
changeset 641389 d25624af658f8f584ee078ae6ccfba1e5ec5a7d3
parent 641388 d8dfa3ef84a0573a298c4bcd02146d534290d595
child 641390 54a1427bdc26e06bb697c84ae357a106c17b1c7c
push id72504
push userdteller@mozilla.com
push dateSun, 06 Aug 2017 22:28:40 +0000
milestone57.0a1
WIP: parsePatternList MozReview-Commit-ID: 9DCurf3MLfL
js/src/frontend/BinSource.cpp
--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -2356,16 +2356,48 @@ ASTReader::parseCatchClause(SimpleTokenR
     }
 
     catchList->append(catchClause.release());
 
     out = Move(catchList);
     return true;
 }
 
+bool
+ASTReader::parsePatternList(SimpleTokenReader* reader, UniquePtr<ParseNode>& out) {
+    if (out) {
+        return this->raiseError();
+    }
+
+    UniquePtr<ParseNode> result(this->new_<ListNode>(PNK_LIMIT /* callers must replace */,
+        TokenPos()));
+
+    uint32_t length;
+    SimpleTokenReader sub(this->cx);
+
+    if (!reader->readList(&length, &sub)) {
+        return false;
+    }
+
+    for (uint32_t i = 0; i < length; ++i) {
+        UniquePtr<ParseNode> pattern;
+        if (!this->parsePattern(&sub, pattern)) {
+            return false;
+        }
+
+        if (!pattern) {
+            return this->raiseError();
+        }
+
+        result->append(pattern.release());
+    }
+
+    out = Move(result);
+    return true;
+}
 
 bool
 ASTReader::readString(SimpleTokenReader* reader, MutableHandle<PropertyName*> out) {
     if (out) {
         return this->raiseError();
     }
 
     RootedAtom atom(cx);