--- a/js/src/frontend/BinSource.cpp
+++ b/js/src/frontend/BinSource.cpp
@@ -2071,16 +2071,54 @@ ASTReader::parseVariableDeclarator(Simpl
result->pn_left = id.release();
result->pn_right = init.release();
}
out = Move(result);
return true;
}
+bool
+ASTReader::parseExpressionList(SimpleTokenReader* reader, UniquePtr<ParseNode>& out) {
+ if (out) {
+ return this->raiseError();
+ }
+
+ uint32_t length;
+ SimpleTokenReader sub(this->cx);
+
+ if (!reader->readList(&length, &sub)) {
+ return false;
+ }
+
+ UniquePtr<ParseNode> result(new_<ListNode>(PNK_ARRAY, TokenPos()));
+ if (!result) {
+ return false;
+ }
+
+ for (uint32_t i = 0; i < length; ++i) {
+ UniquePtr<ParseNode> expr;
+ if (!this->parseExpression(&sub, expr)) {
+ return false;
+ }
+
+ if (!expr) {
+ expr = UniquePtr<ParseNode>(new_<NullaryNode>(PNK_ELISION, TokenPos()));
+ if (!expr) {
+ return false;
+ }
+ }
+
+ result->append(expr.release());
+ }
+
+ out = Move(result);
+ return true;
+}
+
bool
ASTReader::readNumber(SimpleTokenReader* reader, Maybe<double>& out) {
if (out) {
return this->raiseError();
}
return reader->readMaybeF64(&out);