WIP: Skeleton of ParseExpression draft
authorDavid Teller <dteller@mozilla.com>
Thu, 27 Jul 2017 12:42:48 +0200
changeset 641345 1d6f6c5a2ba53267f710d74d5350300829305494
parent 641344 30028eec2850f783a21ddde50c814ebd0f623c7a
child 641346 af1f8f5422fe09e984bf2cced0ebe30fe08de48e
push id72504
push userdteller@mozilla.com
push dateSun, 06 Aug 2017 22:28:40 +0000
milestone57.0a1
WIP: Skeleton of ParseExpression MozReview-Commit-ID: AiSWNdTKQmB
js/src/frontend/BinSource.cpp
--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -1099,16 +1099,66 @@ ASTReader::parseBool(SimpleTokenReader* 
         // FIXME: Can replace with an assert once we have
         // implemented headers and header validation.
         return this->raiseError();
     }
     return reader->readBool(result);
 }
 
 bool
+ASTReader::parseExpression(SimpleTokenReader* reader, UniquePtr<ParseNode>& out) {
+    if (out) {
+        return this->raiseError();
+    }
+
+    SimpleTokenReader::Fields fields(this->cx);
+    SimpleTokenReader sub(this->cx);
+
+    std::string name;
+    if (!reader->taggedTuple(&name, &fields, &sub)) {
+        return false;
+    }
+
+    if (name == "ThisExpression") {
+        // FIXME: Implement
+    } else if (name == "ArrayExpression") {
+        // FIXME: Implement
+    } else if (name == "ObjectExpression") {
+        // FIXME: Implement
+    } else if (name == "FunctionExpression") {
+        // FIXME: Implement
+    } else if (name == "UnaryExpression") {
+        // FIXME: Implement
+    } else if (name == "UpdateExpression") {
+        // FIXME: Implement
+    } else if (name == "BinaryExpression") {
+        // FIXME: Implement
+    } else if (name == "AssignmentExpression") {
+        // FIXME: Implement
+    } else if (name == "LogicalExpression") {
+        // FIXME: Implement
+    } else if (name == "MemberExpression") {
+        // FIXME: Implement
+    } else if (name == "ConditionalExpression") {
+        // FIXME: Implement
+    } else if (name == "CallExpression") {
+        // FIXME: Implement
+    } else if (name == "NewExpression") {
+        // FIXME: Implement
+    } else if (name == "SequenceExpression") {
+        // FIXME: Implement
+    } else {
+        return this->raiseError();
+    }
+
+    return false;
+}
+
+
+bool
 ASTReader::raiseError() {
     // FIXME: Implement actual error conditions.
     return false;
 }
 
 void
 TraceBinParser(JSTracer* trc, AutoGCRooter* parser)
 {