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