WIP: Implemented parseBlockStatement draft
authorDavid Teller <dteller@mozilla.com>
Fri, 04 Aug 2017 22:58:54 +0200
changeset 641377 58e4f08d52ab891dae7069192aa4bd2ec883e433
parent 641376 455c1dc1d17a173be5309ac8309aaadb800a45bb
child 641378 0e31855a1a18e971cc1474e02935a4418145ab07
push id72504
push userdteller@mozilla.com
push dateSun, 06 Aug 2017 22:28:40 +0000
milestone57.0a1
WIP: Implemented parseBlockStatement MozReview-Commit-ID: DSn7etyE8xp
js/src/frontend/BinSource.cpp
--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -266,16 +266,37 @@ ASTReader::parseProgram(SimpleTokenReade
     if (kind != BinKind::program) {
         return this->raiseError();
     }
 
     return this->parseBlockStatementAux(&sub, kind, fields, out);
 }
 
 bool
+ASTReader::parseBlockStatement(SimpleTokenReader* reader, UniquePtr<ParseNode>& out) {
+    if (out) {
+        // Already parsed.
+        return this->raiseError();
+    }
+    BinKind kind;
+    SimpleTokenReader::BinFields fields(this->cx);
+    SimpleTokenReader sub(this->cx);
+
+    if (!reader->taggedTuple(kind, fields, &sub)) {
+        return false;
+    }
+
+    if (kind != BinKind::block_statement) {
+        return this->raiseError();
+    }
+
+    return this->parseBlockStatementAux(&sub, kind, fields, out);
+}
+
+bool
 ASTReader::parseScope(SimpleTokenReader* reader,
     ScopeData& out)
 {
     if (out.hasDirectEval.isSome()
        || out.letNames.address() != nullptr
        || out.constNames.address() != nullptr
        || out.varNames.address() != nullptr
        || out.capturedNames.address() != nullptr) {