--- 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