WIP: Implemented ReturnStatement draft
authorDavid Teller <dteller@mozilla.com>
Mon, 24 Jul 2017 17:47:17 +0200
changeset 641332 4a4cdba6501a7e0cf738ca8c9e1dd4ee0d1a746d
parent 641331 4dd2ecb8c3b33519ed48f02ae3fab9dee8deb298
child 641333 29801100444078abc8091304c25b98a4837bc3b8
push id72504
push userdteller@mozilla.com
push dateSun, 06 Aug 2017 22:28:40 +0000
milestone57.0a1
WIP: Implemented ReturnStatement MozReview-Commit-ID: DLwclMhIsOx
js/src/frontend/BinSource.cpp
--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -415,17 +415,33 @@ ASTReader::parseStatement(SimpleTokenRea
 
         UniquePtr<ParseNode> result(new_<BinaryNode>(PNK_WITH, JSOP_NOP, TokenPos(),
                                         expr.release(), body.release()));
         if (!result) {
             return false;
         }
         out = Move(result);
     } else if (name == "ReturnStatement") {
-        // FIXME: Implement
+
+        UniquePtr<ParseNode> arg;
+        for (auto field: fields) {
+            if (field == "argument") {
+                if (!this->parseExpression(&sub, arg)) { // FIXME: Make sure that it works with no expression.
+                    return false;
+                }
+            } else {
+                return this->raiseError();
+            }
+        }
+        UniquePtr<ParseNode> result(new_<UnaryNode>(PNK_RETURN, JSOP_RETURN, TokenPos(), arg.release()));
+        if (!result) {
+            return false;
+        }
+        out = Move(result);
+
     } else if (name == "LabeledStatement") {
         // FIXME: Implement
     } else if (name == "BreakStatement") {
         // FIXME: Implement
     } else if (name == "ContinueStatement") {
         // FIXME: Implement
     } else if (name == "IfStatement") {
         // FIXME: Implement