--- a/js/src/frontend/BinSource-auto.cpp
+++ b/js/src/frontend/BinSource-auto.cpp
@@ -11,18 +11,18 @@
#include "mozilla/ArrayUtils.h"
#include "mozilla/Casting.h"
#include "mozilla/Maybe.h"
#include "mozilla/Move.h"
#include "mozilla/PodOperations.h"
#include "mozilla/Vector.h"
+#include "frontend/BinSource-macros.h"
#include "frontend/BinSource.h"
-#include "frontend/BinSource-macros.h"
#include "frontend/BinTokenReaderTester.h"
#include "frontend/FullParseHandler.h"
#include "frontend/Parser.h"
#include "frontend/SharedContext.h"
#include "vm/RegExpObject.h"
#include "frontend/ParseContext-inl.h"
@@ -50,17 +50,17 @@ BinASTParser<Tok>::parseArrowExpression(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumArrowExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumArrowExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumArrowExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -90,17 +90,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -140,17 +140,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumAssignmentTargetOrAssignmentTargetWithInitializer(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumAssignmentTargetOrAssignmentTargetWithInitializer(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumAssignmentTargetOrAssignmentTargetWithInitializer(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -189,17 +189,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumAssignmentTargetPattern(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumAssignmentTargetPattern(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumAssignmentTargetPattern(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -226,17 +226,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumAssignmentTargetProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumAssignmentTargetProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumAssignmentTargetProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -264,17 +264,17 @@ BinASTParser<Tok>::parseBinding()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumBinding(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumBinding(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumBinding(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -306,17 +306,17 @@ BinASTParser<Tok>::parseBindingOrBinding
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumBindingOrBindingWithInitializer(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumBindingOrBindingWithInitializer(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumBindingOrBindingWithInitializer(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -349,17 +349,17 @@ BinASTParser<Tok>::parseBindingPattern()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumBindingPattern(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumBindingPattern(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumBindingPattern(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -386,17 +386,17 @@ BinASTParser<Tok>::parseBindingProperty(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumBindingProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumBindingProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumBindingProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -426,17 +426,17 @@ BinASTParser<Tok>::parseExportDeclaratio
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumExportDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumExportDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumExportDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -500,17 +500,17 @@ BinASTParser<Tok>::parseExpression()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -650,17 +650,17 @@ BinASTParser<Tok>::parseExpressionOrSupe
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumExpressionOrSuper(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumExpressionOrSuper(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumExpressionOrSuper(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -803,17 +803,17 @@ BinASTParser<Tok>::parseExpressionOrTemp
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumExpressionOrTemplateElement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumExpressionOrTemplateElement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumExpressionOrTemplateElement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -931,17 +931,17 @@ BinASTParser<Tok>::parseForInOfBindingOr
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumForInOfBindingOrAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumForInOfBindingOrAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumForInOfBindingOrAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1009,17 +1009,17 @@ BinASTParser<Tok>::parseFunctionBodyOrEx
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumFunctionBodyOrExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumFunctionBodyOrExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumFunctionBodyOrExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1133,17 +1133,17 @@ BinASTParser<Tok>::parseFunctionDeclarat
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumFunctionDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumFunctionDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumFunctionDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1201,17 +1201,17 @@ BinASTParser<Tok>::parseFunctionDeclarat
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumFunctionDeclarationOrClassDeclarationOrExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumFunctionDeclarationOrClassDeclarationOrExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumFunctionDeclarationOrClassDeclarationOrExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1333,17 +1333,17 @@ BinASTParser<Tok>::parseFunctionDeclarat
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumFunctionDeclarationOrClassDeclarationOrVariableDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumFunctionDeclarationOrClassDeclarationOrVariableDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumFunctionDeclarationOrClassDeclarationOrVariableDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1376,17 +1376,17 @@ BinASTParser<Tok>::parseFunctionExpressi
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumFunctionExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumFunctionExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumFunctionExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1413,17 +1413,17 @@ BinASTParser<Tok>::parseGetter()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumGetter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumGetter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumGetter(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1450,17 +1450,17 @@ BinASTParser<Tok>::parseImportDeclaratio
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumImportDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumImportDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumImportDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1516,17 +1516,17 @@ BinASTParser<Tok>::parseImportDeclaratio
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumImportDeclarationOrExportDeclarationOrStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumImportDeclarationOrExportDeclarationOrStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumImportDeclarationOrExportDeclarationOrStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1643,17 +1643,17 @@ BinASTParser<Tok>::parseIterationStateme
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumIterationStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumIterationStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumIterationStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1692,17 +1692,17 @@ BinASTParser<Tok>::parseLiteral()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumLiteral(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumLiteral(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumLiteral(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1738,17 +1738,17 @@ BinASTParser<Tok>::parseMethod()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumMethod(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumMethod(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumMethod(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1779,17 +1779,17 @@ BinASTParser<Tok>::parseMethodDefinition
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumMethodDefinition(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumMethodDefinition(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumMethodDefinition(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1834,17 +1834,17 @@ BinASTParser<Tok>::parseObjectProperty()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumObjectProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumObjectProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumObjectProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1891,17 +1891,17 @@ BinASTParser<Tok>::parseParameter()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumParameter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumParameter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumParameter(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1934,17 +1934,17 @@ BinASTParser<Tok>::parseProgram()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumProgram(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumProgram(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumProgram(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -1971,17 +1971,17 @@ BinASTParser<Tok>::parsePropertyName()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumPropertyName(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumPropertyName(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumPropertyName(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2008,17 +2008,17 @@ BinASTParser<Tok>::parseSetter()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumSetter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumSetter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumSetter(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2046,17 +2046,17 @@ BinASTParser<Tok>::parseSimpleAssignment
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumSimpleAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumSimpleAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumSimpleAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2115,17 +2115,17 @@ BinASTParser<Tok>::parseSpreadElementOrE
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumSpreadElementOrExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumSpreadElementOrExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumSpreadElementOrExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2261,17 +2261,17 @@ BinASTParser<Tok>::parseStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2393,17 +2393,17 @@ BinASTParser<Tok>::parseVariableDeclarat
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
- MOZ_TRY_DECL(result, parseSumVariableDeclarationOrExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseSumVariableDeclarationOrExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseSumVariableDeclarationOrExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2522,17 +2522,17 @@ BinASTParser<Tok>::parseNull()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceNull(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceNull(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceNull(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2551,17 +2551,17 @@ BinASTParser<Tok>::parseArrayAssignmentT
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceArrayAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceArrayAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceArrayAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2580,17 +2580,17 @@ BinASTParser<Tok>::parseArrayBinding()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceArrayBinding(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceArrayBinding(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceArrayBinding(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2608,33 +2608,33 @@ BinASTParser<Tok>::parseArrayExpression(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceArrayExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceArrayExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceArrayExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ArrayExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Elements }));
- MOZ_TRY_DECL(elements, parseListOfOptionalSpreadElementOrExpression());
+ BINJS_MOZ_TRY_DECL(elements, parseListOfOptionalSpreadElementOrExpression());
auto result = elements;
return result;
}
/*
@@ -2649,17 +2649,17 @@ BinASTParser<Tok>::parseAssertedBlockSco
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssertedBlockScope(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssertedBlockScope(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<Ok>
BinASTParser<Tok>::parseInterfaceAssertedBlockScope(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2667,17 +2667,17 @@ BinASTParser<Tok>::parseInterfaceAsserte
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::LexicallyDeclaredNames, BinField::CapturedNames, BinField::HasDirectEval }));
MOZ_TRY(parseAndUpdateScopeNames(*parseContext_->innermostScope(), DeclarationKind::Let));
MOZ_TRY(parseAndUpdateCapturedNames());
- MOZ_TRY_DECL(hasDirectEval, tokenizer_->readBool());
+ BINJS_MOZ_TRY_DECL(hasDirectEval, tokenizer_->readBool());
if (hasDirectEval) {
parseContext_->sc()->setHasDirectEval();
parseContext_->sc()->setBindingsAccessedDynamically();
}
if (hasDirectEval && parseContext_->isFunctionBox() && !parseContext_->sc()->strict()) {
// In non-strict mode code, direct calls to eval can
// add variables to the call object.
@@ -2700,17 +2700,17 @@ BinASTParser<Tok>::parseAssertedParamete
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssertedParameterScope(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssertedParameterScope(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<Ok>
BinASTParser<Tok>::parseInterfaceAssertedParameterScope(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2718,17 +2718,17 @@ BinASTParser<Tok>::parseInterfaceAsserte
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::ParameterNames, BinField::CapturedNames, BinField::HasDirectEval }));
MOZ_TRY(parseAndUpdateScopeNames(parseContext_->functionScope(), DeclarationKind:: PositionalFormalParameter));
MOZ_TRY(parseAndUpdateCapturedNames());
- MOZ_TRY_DECL(hasDirectEval, tokenizer_->readBool());
+ BINJS_MOZ_TRY_DECL(hasDirectEval, tokenizer_->readBool());
if (hasDirectEval) {
parseContext_->sc()->setHasDirectEval();
parseContext_->sc()->setBindingsAccessedDynamically();
}
if (hasDirectEval && parseContext_->isFunctionBox() && !parseContext_->sc()->strict()) {
// In non-strict mode code, direct calls to eval can
// add variables to the call object.
@@ -2752,17 +2752,17 @@ BinASTParser<Tok>::parseAssertedVarScope
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssertedVarScope(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssertedVarScope(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<Ok>
BinASTParser<Tok>::parseInterfaceAssertedVarScope(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2771,17 +2771,17 @@ BinASTParser<Tok>::parseInterfaceAsserte
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::LexicallyDeclaredNames, BinField::VarDeclaredNames, BinField::CapturedNames, BinField::HasDirectEval }));
MOZ_TRY(parseAndUpdateScopeNames(*parseContext_->innermostScope(), DeclarationKind::Let));
MOZ_TRY(parseAndUpdateScopeNames(parseContext_->varScope(), DeclarationKind::Var));
MOZ_TRY(parseAndUpdateCapturedNames());
- MOZ_TRY_DECL(hasDirectEval, tokenizer_->readBool());
+ BINJS_MOZ_TRY_DECL(hasDirectEval, tokenizer_->readBool());
if (hasDirectEval) {
parseContext_->sc()->setHasDirectEval();
parseContext_->sc()->setBindingsAccessedDynamically();
}
if (hasDirectEval && parseContext_->isFunctionBox() && !parseContext_->sc()->strict()) {
// In non-strict mode code, direct calls to eval can
// add variables to the call object.
@@ -2803,41 +2803,41 @@ BinASTParser<Tok>::parseAssignmentExpres
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssignmentExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssignmentExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceAssignmentExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::AssignmentExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Binding, BinField::Expression }));
- MOZ_TRY_DECL(binding, parseAssignmentTarget());
-
-
-
-
- MOZ_TRY_DECL(expression, parseExpression());
-
-
- TRY_DECL(result, factory_.newAssignment(ParseNodeKind::Assign, binding, expression));
+ BINJS_MOZ_TRY_DECL(binding, parseAssignmentTarget());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newAssignment(ParseNodeKind::Assign, binding, expression));
return result;
}
/*
interface AssignmentTargetIdentifier : Node {
Identifier name;
}
@@ -2847,17 +2847,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetIdentifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetIdentifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceAssignmentTargetIdentifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2868,17 +2868,17 @@ BinASTParser<Tok>::parseInterfaceAssignm
RootedAtom name(cx_);
MOZ_TRY_VAR(name, tokenizer_->readAtom());
if (!IsIdentifier(name))
return raiseError("Invalid identifier");
- TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
return result;
}
/*
interface AssignmentTargetPropertyIdentifier : Node {
AssignmentTargetIdentifier binding;
Expression? init;
@@ -2889,17 +2889,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetPropertyIdentifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetPropertyIdentifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceAssignmentTargetPropertyIdentifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2918,17 +2918,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetPropertyProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetPropertyProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceAssignmentTargetPropertyProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2947,17 +2947,17 @@ BinASTParser<Tok>::parseAssignmentTarget
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetWithInitializer(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAssignmentTargetWithInitializer(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceAssignmentTargetWithInitializer(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -2975,17 +2975,17 @@ BinASTParser<Tok>::parseAwaitExpression(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceAwaitExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceAwaitExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceAwaitExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3005,43 +3005,43 @@ BinASTParser<Tok>::parseBinaryExpression
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBinaryExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBinaryExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBinaryExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::BinaryExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Operator, BinField::Left, BinField::Right }));
- MOZ_TRY_DECL(operator_, parseBinaryOperator());
-
-
-
-
- MOZ_TRY_DECL(left, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(right, parseExpression());
+ BINJS_MOZ_TRY_DECL(operator_, parseBinaryOperator());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(left, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(right, parseExpression());
ParseNodeKind pnk;
switch (operator_) {
case BinaryOperator::Comma:
pnk = ParseNodeKind::Comma;
break;
case BinaryOperator::LogicalOr:
@@ -3121,17 +3121,17 @@ BinASTParser<Tok>::parseInterfaceBinaryE
ParseNode* result;
if (left->isKind(pnk) &&
pnk != ParseNodeKind::Pow /* ParseNodeKind::Pow is not left-associative */)
{
// Regroup left-associative operations into lists.
left->appendWithoutOrderAssumption(right);
result = left;
} else {
- TRY_DECL(list, factory_.newList(pnk, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(list, factory_.newList(pnk, tokenizer_->pos(start)));
list->appendWithoutOrderAssumption(left);
list->appendWithoutOrderAssumption(right);
result = list;
}
return result;
}
@@ -3146,17 +3146,17 @@ BinASTParser<Tok>::parseBindingIdentifie
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBindingIdentifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBindingIdentifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBindingIdentifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3167,17 +3167,17 @@ BinASTParser<Tok>::parseInterfaceBinding
RootedAtom name(cx_);
MOZ_TRY_VAR(name, tokenizer_->readAtom());
if (!IsIdentifier(name))
return raiseError("Invalid identifier");
- TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
return result;
}
/*
interface BindingPropertyIdentifier : Node {
BindingIdentifier binding;
Expression? init;
@@ -3188,17 +3188,17 @@ BinASTParser<Tok>::parseBindingPropertyI
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBindingPropertyIdentifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBindingPropertyIdentifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBindingPropertyIdentifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3217,17 +3217,17 @@ BinASTParser<Tok>::parseBindingPropertyP
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBindingPropertyProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBindingPropertyProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBindingPropertyProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3246,17 +3246,17 @@ BinASTParser<Tok>::parseBindingWithIniti
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBindingWithInitializer(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBindingWithInitializer(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBindingWithInitializer(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3275,44 +3275,44 @@ BinASTParser<Tok>::parseBlock()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBlock(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBlock(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBlock(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::Block);
CheckRecursionLimit(cx_);
- MOZ_TRY(checkFields(kind, fields, { BinField::Scope, BinField::Statements }));
+ MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Scope, BinField::Statements }));
ParseContext::Statement stmt(parseContext_, StatementKind::Block);
ParseContext::Scope currentScope(cx_, parseContext_, usedNames_);
- TRY(currentScope.init(parseContext_));
+ BINJS_TRY(currentScope.init(parseContext_));
MOZ_TRY(parseOptionalAssertedBlockScope());
- MOZ_TRY_DECL(statements, parseListOfStatement());
-
-
- TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
- TRY_DECL(result, factory_.newLexicalScope(*bindings, statements));
+ BINJS_MOZ_TRY_DECL(statements, parseListOfStatement());
+
+
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
+ BINJS_TRY_DECL(result, factory_.newLexicalScope(*bindings, statements));
return result;
}
/*
interface BreakStatement : Node {
Label? label;
}
@@ -3322,17 +3322,17 @@ BinASTParser<Tok>::parseBreakStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceBreakStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceBreakStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceBreakStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3353,17 +3353,17 @@ BinASTParser<Tok>::parseInterfaceBreakSt
switch (validity.unwrapErr()) {
case ParseContext::BreakStatementError::ToughBreak:
return raiseError(kind, "Not in a loop");
case ParseContext::BreakStatementError::LabelNotFound:
return raiseError(kind, "Label not found");
}
}
}
- TRY_DECL(result, factory_.newBreakStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newBreakStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
return result;
}
/*
interface CallExpression : Node {
(Expression or Super) callee;
Arguments arguments;
@@ -3374,38 +3374,38 @@ BinASTParser<Tok>::parseCallExpression()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceCallExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceCallExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceCallExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::CallExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Callee, BinField::Arguments }));
- MOZ_TRY_DECL(callee, parseExpressionOrSuper());
-
-
-
-
- MOZ_TRY_DECL(arguments, parseArguments());
+ BINJS_MOZ_TRY_DECL(callee, parseExpressionOrSuper());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(arguments, parseArguments());
auto op = JSOP_CALL;
// Check for direct calls to `eval`.
if (factory_.isEvalName(callee, cx_)) {
if (!parseContext_->varScope().lookupDeclaredNameForAdd(callee->name())
&& !parseContext_->innermostScope()->lookupDeclaredNameForAdd(callee->name())) {
// This is a direct call to `eval`.
@@ -3420,71 +3420,65 @@ BinASTParser<Tok>::parseInterfaceCallExp
result->prepend(callee);
result->setOp(op);
return result;
}
/*
interface CatchClause : Node {
- AssertedParameterScope? bindingScope;
Binding binding;
Block body;
}
*/
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseCatchClause()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceCatchClause(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceCatchClause(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceCatchClause(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::CatchClause);
CheckRecursionLimit(cx_);
- MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::BindingScope, BinField::Binding, BinField::Body }));
+ MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Binding, BinField::Body }));
ParseContext::Statement stmt(parseContext_, StatementKind::Catch);
ParseContext::Scope currentScope(cx_, parseContext_, usedNames_);
- TRY(currentScope.init(parseContext_));
-
-
- MOZ_TRY(parseOptionalAssertedParameterScope());
-
-
-
-
- MOZ_TRY_DECL(binding, parseBinding());
-
-
-
-
- MOZ_TRY_DECL(body, parseBlock());
+ BINJS_TRY(currentScope.init(parseContext_));
+
+
+ BINJS_MOZ_TRY_DECL(binding, parseBinding());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseBlock());
// Export implicit variables to the scope.
// FIXME: Handle cases other than Name.
MOZ_ASSERT(binding->isKind(ParseNodeKind::Name));
auto ptr = currentScope.lookupDeclaredNameForAdd(binding->name());
- TRY(currentScope.addDeclaredName(parseContext_, ptr, binding->name(), DeclarationKind::Let, start));
-
- TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
- TRY_DECL(result, factory_.newLexicalScope(*bindings, body));
- TRY(factory_.setupCatchScope(result, binding, body));
+ BINJS_TRY(currentScope.addDeclaredName(parseContext_, ptr, binding->name(), DeclarationKind::Let, start));
+
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
+ BINJS_TRY_DECL(result, factory_.newLexicalScope(*bindings, body));
+ BINJS_TRY(factory_.setupCatchScope(result, binding, body));
return result;
}
/*
interface ClassDeclaration : Node {
BindingIdentifier name;
Expression? super;
@@ -3496,17 +3490,17 @@ BinASTParser<Tok>::parseClassDeclaration
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceClassDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceClassDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceClassDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3525,17 +3519,17 @@ BinASTParser<Tok>::parseClassElement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceClassElement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceClassElement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceClassElement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3555,17 +3549,17 @@ BinASTParser<Tok>::parseClassExpression(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceClassExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceClassExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceClassExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3585,43 +3579,43 @@ BinASTParser<Tok>::parseCompoundAssignme
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceCompoundAssignmentExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceCompoundAssignmentExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceCompoundAssignmentExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::CompoundAssignmentExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Operator, BinField::Binding, BinField::Expression }));
- MOZ_TRY_DECL(operator_, parseCompoundAssignmentOperator());
-
-
-
-
- MOZ_TRY_DECL(binding, parseSimpleAssignmentTarget());
-
-
-
-
- MOZ_TRY_DECL(expression, parseExpression());
+ BINJS_MOZ_TRY_DECL(operator_, parseCompoundAssignmentOperator());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(binding, parseSimpleAssignmentTarget());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
ParseNodeKind pnk;
switch (operator_){
case CompoundAssignmentOperator::PlusAssign:
pnk = ParseNodeKind::AddAssign;
break;
case CompoundAssignmentOperator::MinusAssign:
@@ -3653,17 +3647,17 @@ BinASTParser<Tok>::parseInterfaceCompoun
break;
case CompoundAssignmentOperator::BitXorAssign:
pnk = ParseNodeKind::BitXorAssign;
break;
case CompoundAssignmentOperator::BitAndAssign:
pnk = ParseNodeKind::BitAndAssign;
break;
}
- TRY_DECL(result, factory_.newAssignment(pnk, binding, expression));
+ BINJS_TRY_DECL(result, factory_.newAssignment(pnk, binding, expression));
return result;
}
/*
interface ComputedMemberAssignmentTarget : Node {
(Expression or Super) object;
Expression expression;
@@ -3674,41 +3668,41 @@ BinASTParser<Tok>::parseComputedMemberAs
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceComputedMemberAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceComputedMemberAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceComputedMemberAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ComputedMemberAssignmentTarget);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Object, BinField::Expression }));
- MOZ_TRY_DECL(object, parseExpressionOrSuper());
-
-
-
-
- MOZ_TRY_DECL(expression, parseExpression());
-
-
- TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
+ BINJS_MOZ_TRY_DECL(object, parseExpressionOrSuper());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
return result;
}
/*
interface ComputedMemberExpression : Node {
(Expression or Super) object;
Expression expression;
@@ -3719,41 +3713,41 @@ BinASTParser<Tok>::parseComputedMemberEx
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceComputedMemberExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceComputedMemberExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceComputedMemberExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ComputedMemberExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Object, BinField::Expression }));
- MOZ_TRY_DECL(object, parseExpressionOrSuper());
-
-
-
-
- MOZ_TRY_DECL(expression, parseExpression());
-
-
- TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
+ BINJS_MOZ_TRY_DECL(object, parseExpressionOrSuper());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
return result;
}
/*
interface ComputedPropertyName : Node {
Expression expression;
}
@@ -3763,17 +3757,17 @@ BinASTParser<Tok>::parseComputedProperty
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceComputedPropertyName(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceComputedPropertyName(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceComputedPropertyName(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3793,46 +3787,46 @@ BinASTParser<Tok>::parseConditionalExpre
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceConditionalExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceConditionalExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceConditionalExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ConditionalExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Test, BinField::Consequent, BinField::Alternate }));
- MOZ_TRY_DECL(test, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(consequent, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(alternate, parseExpression());
-
-
- TRY_DECL(result, factory_.newConditional(test, consequent, alternate));
+ BINJS_MOZ_TRY_DECL(test, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(consequent, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(alternate, parseExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newConditional(test, consequent, alternate));
return result;
}
/*
interface ContinueStatement : Node {
Label? label;
}
@@ -3842,17 +3836,17 @@ BinASTParser<Tok>::parseContinueStatemen
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceContinueStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceContinueStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceContinueStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3873,17 +3867,17 @@ BinASTParser<Tok>::parseInterfaceContinu
case ParseContext::ContinueStatementError::NotInALoop:
return raiseError(kind, "Not in a loop");
case ParseContext::ContinueStatementError::LabelNotFound:
return raiseError(kind, "Label not found");
}
}
}
- TRY_DECL(result, factory_.newContinueStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newContinueStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
return result;
}
/*
interface DataProperty : Node {
PropertyName name;
Expression expression;
@@ -3894,44 +3888,44 @@ BinASTParser<Tok>::parseDataProperty()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceDataProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceDataProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceDataProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::DataProperty);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Name, BinField::Expression }));
- MOZ_TRY_DECL(name, parsePropertyName());
-
-
-
-
- MOZ_TRY_DECL(expression, parseExpression());
+ BINJS_MOZ_TRY_DECL(name, parsePropertyName());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
if (!factory_.isUsableAsObjectPropertyName(name))
return raiseError("DataProperty key kind");
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, expression, AccessorType::None));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, expression, AccessorType::None));
return result;
}
/*
interface DebuggerStatement : Node {
}
*/
@@ -3940,17 +3934,17 @@ BinASTParser<Tok>::parseDebuggerStatemen
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceDebuggerStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceDebuggerStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceDebuggerStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3968,17 +3962,17 @@ BinASTParser<Tok>::parseDirective()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceDirective(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceDirective(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceDirective(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -3988,17 +3982,17 @@ BinASTParser<Tok>::parseInterfaceDirecti
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::RawValue }));
RootedAtom rawValue(cx_);
MOZ_TRY_VAR(rawValue, tokenizer_->readAtom());
TokenPos pos = tokenizer_->pos(start);
- TRY_DECL(result, factory_.newStringLiteral(rawValue, pos));
+ BINJS_TRY_DECL(result, factory_.newStringLiteral(rawValue, pos));
return result;
}
/*
interface DoWhileStatement : Node {
Expression test;
Statement body;
@@ -4009,41 +4003,41 @@ BinASTParser<Tok>::parseDoWhileStatement
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceDoWhileStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceDoWhileStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceDoWhileStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::DoWhileStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Test, BinField::Body }));
ParseContext::Statement stmt(parseContext_, StatementKind::DoLoop);
- MOZ_TRY_DECL(test, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(body, parseStatement());
-
-
- TRY_DECL(result, factory_.newDoWhileStatement(body, test, tokenizer_->pos(start)));
+ BINJS_MOZ_TRY_DECL(test, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newDoWhileStatement(body, test, tokenizer_->pos(start)));
return result;
}
/*
interface EagerArrowExpression : Node {
bool isAsync;
AssertedParameterScope? parameterScope;
@@ -4057,17 +4051,17 @@ BinASTParser<Tok>::parseEagerArrowExpres
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEagerArrowExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEagerArrowExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEagerArrowExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4091,26 +4085,83 @@ BinASTParser<Tok>::parseEagerFunctionDec
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEagerFunctionDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEagerFunctionDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEagerFunctionDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
- return raiseError("FIXME: Not implemented yet (EagerFunctionDeclaration)");
+ MOZ_ASSERT(kind == BinKind::EagerFunctionDeclaration);
+ CheckRecursionLimit(cx_);
+
+ MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::IsAsync, BinField::IsGenerator, BinField::ParameterScope, BinField::BodyScope, BinField::Name, BinField::Params, BinField::Body }));
+ const auto syntax = FunctionSyntaxKind::Statement;
+
+
+ BINJS_MOZ_TRY_DECL(isAsync, tokenizer_->readBool());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(isGenerator, tokenizer_->readBool());
+
+
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
+ isGenerator ? GeneratorKind::Generator
+ : GeneratorKind::NotGenerator,
+ isAsync ? FunctionAsyncKind::AsyncFunction
+ : FunctionAsyncKind::SyncFunction,
+ syntax));
+
+ // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
+ BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
+ BINJS_TRY(funpc.init());
+ parseContext_->functionScope().useAsVarScope(parseContext_);
+ MOZ_ASSERT(parseContext_->isFunctionBox());
+
+ ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
+ BINJS_TRY(lexicalScope.init(parseContext_));
+
+ MOZ_TRY(parseOptionalAssertedParameterScope());
+
+
+
+
+ MOZ_TRY(parseOptionalAssertedVarScope());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(name, parseBindingIdentifier());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(params, parseFormalParameters());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseFunctionBody());
+
+
+ BINJS_TRY_DECL(lexicalScopeData, NewLexicalScopeData(cx_, lexicalScope, alloc_, parseContext_));
+ BINJS_TRY_VAR(body, factory_.newLexicalScope(*lexicalScopeData, body));
+ BINJS_MOZ_TRY_DECL(result, buildFunction(start, kind, name, params, body, funbox));
+ return result;
}
/*
interface EagerFunctionExpression : Node {
bool isAsync;
bool isGenerator;
AssertedParameterScope? parameterScope;
@@ -4125,81 +4176,82 @@ BinASTParser<Tok>::parseEagerFunctionExp
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEagerFunctionExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEagerFunctionExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEagerFunctionExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::EagerFunctionExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::IsAsync, BinField::IsGenerator, BinField::ParameterScope, BinField::BodyScope, BinField::Name, BinField::Params, BinField::Body }));
-
-
-
- MOZ_TRY_DECL(isAsync, tokenizer_->readBool());
-
-
-
-
- MOZ_TRY_DECL(isGenerator, tokenizer_->readBool());
-
-
- MOZ_TRY_DECL(funbox, buildFunctionBox(
+ const auto syntax = FunctionSyntaxKind::Expression;
+
+
+ BINJS_MOZ_TRY_DECL(isAsync, tokenizer_->readBool());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(isGenerator, tokenizer_->readBool());
+
+
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
isGenerator ? GeneratorKind::Generator
: GeneratorKind::NotGenerator,
isAsync ? FunctionAsyncKind::AsyncFunction
- : FunctionAsyncKind::SyncFunction));
+ : FunctionAsyncKind::SyncFunction,
+ syntax));
// Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
- TRY(funpc.init());
+ BINJS_TRY(funpc.init());
parseContext_->functionScope().useAsVarScope(parseContext_);
MOZ_ASSERT(parseContext_->isFunctionBox());
ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
- TRY(lexicalScope.init(parseContext_));
+ BINJS_TRY(lexicalScope.init(parseContext_));
MOZ_TRY(parseOptionalAssertedParameterScope());
MOZ_TRY(parseOptionalAssertedVarScope());
- MOZ_TRY_DECL(name, parseOptionalBindingIdentifier());
-
-
-
-
- MOZ_TRY_DECL(params, parseFormalParameters());
-
-
-
-
- MOZ_TRY_DECL(body, parseFunctionBody());
-
-
- TRY_DECL(lexicalScopeData, NewLexicalScopeData(cx_, lexicalScope, alloc_, parseContext_));
- TRY_VAR(body, factory_.newLexicalScope(*lexicalScopeData, body));
- MOZ_TRY_DECL(result, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_MOZ_TRY_DECL(name, parseOptionalBindingIdentifier());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(params, parseFormalParameters());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseFunctionBody());
+
+
+ BINJS_TRY_DECL(lexicalScopeData, NewLexicalScopeData(cx_, lexicalScope, alloc_, parseContext_));
+ BINJS_TRY_VAR(body, factory_.newLexicalScope(*lexicalScopeData, body));
+ BINJS_MOZ_TRY_DECL(result, buildFunction(start, kind, name, params, body, funbox));
return result;
}
/*
interface EagerGetter : Node {
AssertedVarScope? bodyScope;
PropertyName name;
@@ -4211,26 +4263,61 @@ BinASTParser<Tok>::parseEagerGetter()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEagerGetter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEagerGetter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEagerGetter(const size_t start, const BinKind kind, const BinFields& fields)
{
- return raiseError("FIXME: Not implemented yet (EagerGetter)");
+ MOZ_ASSERT(kind == BinKind::EagerGetter);
+ CheckRecursionLimit(cx_);
+
+ MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::BodyScope, BinField::Name, BinField::Body }));
+
+
+
+ MOZ_TRY(parseOptionalAssertedVarScope());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(name, parsePropertyName());
+
+
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
+ GeneratorKind::NotGenerator,
+ FunctionAsyncKind::SyncFunction,
+ FunctionSyntaxKind::Getter));
+
+ // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
+ BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
+ BINJS_TRY(funpc.init());
+ parseContext_->functionScope().useAsVarScope(parseContext_);
+ MOZ_ASSERT(parseContext_->isFunctionBox());
+
+ ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
+ BINJS_TRY(lexicalScope.init(parseContext_));
+
+ BINJS_MOZ_TRY_DECL(body, parseFunctionBody());
+
+
+ ParseNode* params = new_<ListNode>(ParseNodeKind::ParamsBody, tokenizer_->pos(start));
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::Getter));
+ return result;
}
/*
interface EagerMethod : Node {
bool isAsync;
bool isGenerator;
AssertedParameterScope? parameterScope;
@@ -4245,80 +4332,81 @@ BinASTParser<Tok>::parseEagerMethod()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEagerMethod(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEagerMethod(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEagerMethod(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::EagerMethod);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::IsAsync, BinField::IsGenerator, BinField::ParameterScope, BinField::BodyScope, BinField::Name, BinField::Params, BinField::Body }));
-
-
-
- MOZ_TRY_DECL(isAsync, tokenizer_->readBool());
-
-
-
-
- MOZ_TRY_DECL(isGenerator, tokenizer_->readBool());
-
-
- MOZ_TRY_DECL(funbox, buildFunctionBox(
+ const auto syntax = FunctionSyntaxKind::Method;
+
+
+ BINJS_MOZ_TRY_DECL(isAsync, tokenizer_->readBool());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(isGenerator, tokenizer_->readBool());
+
+
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
isGenerator ? GeneratorKind::Generator
: GeneratorKind::NotGenerator,
isAsync ? FunctionAsyncKind::AsyncFunction
- : FunctionAsyncKind::SyncFunction));
+ : FunctionAsyncKind::SyncFunction,
+ syntax));
// Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
- TRY(funpc.init());
+ BINJS_TRY(funpc.init());
parseContext_->functionScope().useAsVarScope(parseContext_);
MOZ_ASSERT(parseContext_->isFunctionBox());
ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
- TRY(lexicalScope.init(parseContext_));
+ BINJS_TRY(lexicalScope.init(parseContext_));
MOZ_TRY(parseOptionalAssertedParameterScope());
MOZ_TRY(parseOptionalAssertedVarScope());
- MOZ_TRY_DECL(name, parsePropertyName());
-
-
-
-
- MOZ_TRY_DECL(params, parseFormalParameters());
-
-
-
-
- MOZ_TRY_DECL(body, parseFunctionBody());
-
-
- MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::None));
+ BINJS_MOZ_TRY_DECL(name, parsePropertyName());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(params, parseFormalParameters());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseFunctionBody());
+
+
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::None));
return result;
}
/*
interface EagerSetter : Node {
AssertedParameterScope? parameterScope;
AssertedVarScope? bodyScope;
@@ -4332,26 +4420,72 @@ BinASTParser<Tok>::parseEagerSetter()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEagerSetter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEagerSetter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEagerSetter(const size_t start, const BinKind kind, const BinFields& fields)
{
- return raiseError("FIXME: Not implemented yet (EagerSetter)");
+ MOZ_ASSERT(kind == BinKind::EagerSetter);
+ CheckRecursionLimit(cx_);
+
+ MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::ParameterScope, BinField::BodyScope, BinField::Name, BinField::Param, BinField::Body }));
+
+
+
+ MOZ_TRY(parseOptionalAssertedParameterScope());
+
+
+
+
+ MOZ_TRY(parseOptionalAssertedVarScope());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(name, parsePropertyName());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(param, parseParameter());
+
+
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
+ GeneratorKind::NotGenerator,
+ FunctionAsyncKind::SyncFunction,
+ FunctionSyntaxKind::Setter));
+
+ // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
+ BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
+ BINJS_TRY(funpc.init());
+ parseContext_->functionScope().useAsVarScope(parseContext_);
+ MOZ_ASSERT(parseContext_->isFunctionBox());
+
+ ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
+ BINJS_TRY(lexicalScope.init(parseContext_));
+
+ BINJS_MOZ_TRY_DECL(body, parseFunctionBody());
+
+
+ ParseNode* params = new_<ListNode>(ParseNodeKind::ParamsBody, param->pn_pos);
+ factory_.addList(params, param);
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::Setter));
+ return result;
}
/*
interface EmptyStatement : Node {
}
*/
template<typename Tok> JS::Result<ParseNode*>
@@ -4359,31 +4493,31 @@ BinASTParser<Tok>::parseEmptyStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceEmptyStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceEmptyStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceEmptyStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::EmptyStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields0(kind, fields));
- TRY_DECL(result, factory_.newEmptyStatement(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newEmptyStatement(tokenizer_->pos(start)));
return result;
}
/*
interface Export : Node {
(FunctionDeclaration or ClassDeclaration or VariableDeclaration) declaration;
}
@@ -4393,17 +4527,17 @@ BinASTParser<Tok>::parseExport()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExport(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExport(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExport(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4421,17 +4555,17 @@ BinASTParser<Tok>::parseExportAllFrom()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExportAllFrom(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExportAllFrom(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExportAllFrom(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4449,17 +4583,17 @@ BinASTParser<Tok>::parseExportDefault()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExportDefault(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExportDefault(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExportDefault(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4478,17 +4612,17 @@ BinASTParser<Tok>::parseExportFrom()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExportFrom(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExportFrom(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExportFrom(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4507,17 +4641,17 @@ BinASTParser<Tok>::parseExportFromSpecif
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExportFromSpecifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExportFromSpecifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExportFromSpecifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4536,17 +4670,17 @@ BinASTParser<Tok>::parseExportLocalSpeci
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExportLocalSpecifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExportLocalSpecifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExportLocalSpecifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4564,17 +4698,17 @@ BinASTParser<Tok>::parseExportLocals()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExportLocals(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExportLocals(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExportLocals(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4592,36 +4726,36 @@ BinASTParser<Tok>::parseExpressionStatem
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceExpressionStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceExpressionStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceExpressionStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ExpressionStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Expression }));
- MOZ_TRY_DECL(expression, parseExpression());
-
-
- TRY_DECL(result, factory_.newExprStatement(expression, tokenizer_->offset()));
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newExprStatement(expression, tokenizer_->offset()));
return result;
}
/*
interface ForInOfBinding : Node {
VariableDeclarationKind kind;
Binding binding;
@@ -4632,48 +4766,48 @@ BinASTParser<Tok>::parseForInOfBinding()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceForInOfBinding(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceForInOfBinding(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceForInOfBinding(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ForInOfBinding);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Kind, BinField::Binding }));
AutoVariableDeclarationKind kindGuard(this);
- MOZ_TRY_DECL(kind_, parseVariableDeclarationKind());
-
-
-
-
- MOZ_TRY_DECL(binding, parseBinding());
+ BINJS_MOZ_TRY_DECL(kind_, parseVariableDeclarationKind());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(binding, parseBinding());
// Restored by `kindGuard`.
variableDeclarationKind_ = kind_;
MOZ_TRY(checkBinding(binding->pn_atom->asPropertyName()));
auto pnk =
kind_ == VariableDeclarationKind::Let
? ParseNodeKind::Let
: ParseNodeKind::Var;
- TRY_DECL(result, factory_.newDeclarationList(pnk, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newDeclarationList(pnk, tokenizer_->pos(start)));
factory_.addList(result, binding);
return result;
}
/*
interface ForInStatement : Node {
(ForInOfBinding or AssignmentTarget) left;
@@ -4686,17 +4820,17 @@ BinASTParser<Tok>::parseForInStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceForInStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceForInStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceForInStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4705,38 +4839,38 @@ BinASTParser<Tok>::parseInterfaceForInSt
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Left, BinField::Right, BinField::Body }));
ParseContext::Statement stmt(parseContext_, StatementKind::ForInLoop);
// Implicit scope around the `for`, used to store `for (let x in ...)`
// or `for (const x in ...)`-style declarations. Detail on the
// declaration is stored as part of `scope`.
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
-
-
- MOZ_TRY_DECL(left, parseForInOfBindingOrAssignmentTarget());
-
-
-
-
- MOZ_TRY_DECL(right, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(body, parseStatement());
-
-
- TRY_DECL(forHead, factory_.newForInOrOfHead(ParseNodeKind::ForIn, left, right, tokenizer_->pos(start)));
- TRY_DECL(result, factory_.newForStatement(start, forHead, body, /*flags*/ 0));
+ BINJS_TRY(scope.init(parseContext_));
+
+
+ BINJS_MOZ_TRY_DECL(left, parseForInOfBindingOrAssignmentTarget());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(right, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseStatement());
+
+
+ BINJS_TRY_DECL(forHead, factory_.newForInOrOfHead(ParseNodeKind::ForIn, left, right, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newForStatement(start, forHead, body, /*flags*/ 0));
if (!scope.isEmpty()) {
- TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
- TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
+ BINJS_TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
}
return result;
}
/*
interface ForOfStatement : Node {
(ForInOfBinding or AssignmentTarget) left;
@@ -4749,17 +4883,17 @@ BinASTParser<Tok>::parseForOfStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceForOfStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceForOfStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceForOfStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4780,17 +4914,17 @@ BinASTParser<Tok>::parseForStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceForStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceForStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceForStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4799,43 +4933,43 @@ BinASTParser<Tok>::parseInterfaceForStat
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Init, BinField::Test, BinField::Update, BinField::Body }));
ParseContext::Statement stmt(parseContext_, StatementKind::ForLoop);
// Implicit scope around the `for`, used to store `for (let x; ...; ...)`
// or `for (const x; ...; ...)`-style declarations. Detail on the
// declaration is stored as part of `BINJS_Scope`.
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
-
-
- MOZ_TRY_DECL(init, parseOptionalVariableDeclarationOrExpression());
-
-
-
-
- MOZ_TRY_DECL(test, parseOptionalExpression());
-
-
-
-
- MOZ_TRY_DECL(update, parseOptionalExpression());
-
-
-
-
- MOZ_TRY_DECL(body, parseStatement());
-
-
- TRY_DECL(forHead, factory_.newForHead(init, test, update, tokenizer_->pos(start)));
- TRY_DECL(result, factory_.newForStatement(start, forHead, body, /* iflags = */ 0));
+ BINJS_TRY(scope.init(parseContext_));
+
+
+ BINJS_MOZ_TRY_DECL(init, parseOptionalVariableDeclarationOrExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(test, parseOptionalExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(update, parseOptionalExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseStatement());
+
+
+ BINJS_TRY_DECL(forHead, factory_.newForHead(init, test, update, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newForStatement(start, forHead, body, /* iflags = */ 0));
if (!scope.isEmpty()) {
- TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
- TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
+ BINJS_TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
}
return result;
}
/*
interface FormalParameters : Node {
FrozenArray<Parameter> items;
@@ -4847,43 +4981,43 @@ BinASTParser<Tok>::parseFormalParameters
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceFormalParameters(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceFormalParameters(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceFormalParameters(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::FormalParameters);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Items, BinField::Rest }));
- MOZ_TRY_DECL(items, parseListOfParameter());
-
-
-
-
- MOZ_TRY_DECL(rest, parseOptionalBinding());
+ BINJS_MOZ_TRY_DECL(items, parseListOfParameter());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(rest, parseOptionalBinding());
auto result = items;
if (rest) {
- TRY_DECL(spread, factory_.newSpread(start, rest));
+ BINJS_TRY_DECL(spread, factory_.newSpread(start, rest));
factory_.addList(result, spread);
}
return result;
}
/*
interface FunctionBody : Node {
@@ -4896,41 +5030,41 @@ BinASTParser<Tok>::parseFunctionBody()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceFunctionBody(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceFunctionBody(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceFunctionBody(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::FunctionBody);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Directives, BinField::Statements }));
- MOZ_TRY_DECL(directives, parseListOfDirective());
-
-
-
-
- MOZ_TRY_DECL(statements, parseListOfStatement());
-
-
- MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
+ BINJS_MOZ_TRY_DECL(directives, parseListOfDirective());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(statements, parseListOfStatement());
+
+
+ BINJS_MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
return result;
}
/*
interface IdentifierExpression : Node {
Identifier name;
}
@@ -4940,17 +5074,17 @@ BinASTParser<Tok>::parseIdentifierExpres
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceIdentifierExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceIdentifierExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceIdentifierExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -4961,17 +5095,17 @@ BinASTParser<Tok>::parseInterfaceIdentif
RootedAtom name(cx_);
MOZ_TRY_VAR(name, tokenizer_->readAtom());
if (!IsIdentifier(name))
return raiseError("Invalid identifier");
- TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
return result;
}
/*
interface IfStatement : Node {
Expression test;
Statement consequent;
@@ -4983,46 +5117,46 @@ BinASTParser<Tok>::parseIfStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceIfStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceIfStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceIfStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::IfStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Test, BinField::Consequent, BinField::Alternate }));
- MOZ_TRY_DECL(test, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(consequent, parseStatement());
-
-
-
-
- MOZ_TRY_DECL(alternate, parseOptionalStatement());
-
-
- TRY_DECL(result, factory_.newIfStatement(start, test, consequent, alternate));
+ BINJS_MOZ_TRY_DECL(test, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(consequent, parseStatement());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(alternate, parseOptionalStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newIfStatement(start, test, consequent, alternate));
return result;
}
/*
interface Import : Node {
string moduleSpecifier;
BindingIdentifier? defaultBinding;
@@ -5034,17 +5168,17 @@ BinASTParser<Tok>::parseImport()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceImport(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceImport(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceImport(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5064,17 +5198,17 @@ BinASTParser<Tok>::parseImportNamespace(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceImportNamespace(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceImportNamespace(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceImportNamespace(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5093,17 +5227,17 @@ BinASTParser<Tok>::parseImportSpecifier(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceImportSpecifier(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceImportSpecifier(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceImportSpecifier(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5122,17 +5256,17 @@ BinASTParser<Tok>::parseLabelledStatemen
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLabelledStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLabelledStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLabelledStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5145,20 +5279,20 @@ BinASTParser<Tok>::parseInterfaceLabelle
RootedAtom label(cx_);
MOZ_TRY_VAR(label, tokenizer_->readAtom());
if (!IsIdentifier(label))
return raiseError("Invalid identifier");
ParseContext::LabelStatement stmt(parseContext_, label);
- MOZ_TRY_DECL(body, parseStatement());
-
-
- TRY_DECL(result, factory_.newLabeledStatement(label->asPropertyName(), body, start));
+ BINJS_MOZ_TRY_DECL(body, parseStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newLabeledStatement(label->asPropertyName(), body, start));
return result;
}
/*
interface LiteralBooleanExpression : Node {
bool value;
}
@@ -5168,36 +5302,36 @@ BinASTParser<Tok>::parseLiteralBooleanEx
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralBooleanExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralBooleanExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralBooleanExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::LiteralBooleanExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Value }));
- MOZ_TRY_DECL(value, tokenizer_->readBool());
-
-
- TRY_DECL(result, factory_.newBooleanLiteral(value, tokenizer_->pos(start)));
+ BINJS_MOZ_TRY_DECL(value, tokenizer_->readBool());
+
+
+ BINJS_TRY_DECL(result, factory_.newBooleanLiteral(value, tokenizer_->pos(start)));
return result;
}
/*
interface LiteralInfinityExpression : Node {
}
*/
@@ -5206,17 +5340,17 @@ BinASTParser<Tok>::parseLiteralInfinityE
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralInfinityExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralInfinityExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralInfinityExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5233,31 +5367,31 @@ BinASTParser<Tok>::parseLiteralNullExpre
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralNullExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralNullExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralNullExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::LiteralNullExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields0(kind, fields));
- TRY_DECL(result, factory_.newNullLiteral(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newNullLiteral(tokenizer_->pos(start)));
return result;
}
/*
interface LiteralNumericExpression : Node {
number value;
}
@@ -5267,36 +5401,36 @@ BinASTParser<Tok>::parseLiteralNumericEx
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralNumericExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralNumericExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralNumericExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::LiteralNumericExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Value }));
- MOZ_TRY_DECL(value, tokenizer_->readDouble());
-
-
- TRY_DECL(result, factory_.newNumber(value, DecimalPoint::HasDecimal, tokenizer_->pos(start)));
+ BINJS_MOZ_TRY_DECL(value, tokenizer_->readDouble());
+
+
+ BINJS_TRY_DECL(result, factory_.newNumber(value, DecimalPoint::HasDecimal, tokenizer_->pos(start)));
return result;
}
/*
interface LiteralPropertyName : Node {
string value;
}
@@ -5306,17 +5440,17 @@ BinASTParser<Tok>::parseLiteralPropertyN
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralPropertyName(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralPropertyName(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralPropertyName(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5328,19 +5462,19 @@ BinASTParser<Tok>::parseInterfaceLiteral
RootedAtom value(cx_);
MOZ_TRY_VAR(value, tokenizer_->readAtom());
ParseNode* result;
uint32_t index;
if (value->isIndex(&index))
- TRY_VAR(result, factory_.newNumber(index, NoDecimal, TokenPos(start, tokenizer_->offset())));
+ BINJS_TRY_VAR(result, factory_.newNumber(index, NoDecimal, TokenPos(start, tokenizer_->offset())));
else
- TRY_VAR(result, factory_.newObjectLiteralPropertyName(value, tokenizer_->pos(start)));
+ BINJS_TRY_VAR(result, factory_.newObjectLiteralPropertyName(value, tokenizer_->pos(start)));
return result;
}
/*
interface LiteralRegExpExpression : Node {
string pattern;
string flags;
@@ -5351,17 +5485,17 @@ BinASTParser<Tok>::parseLiteralRegExpExp
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralRegExpExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralRegExpExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralRegExpExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5390,23 +5524,23 @@ BinASTParser<Tok>::parseInterfaceLiteral
else if (c == 'u' && !(reflags & UnicodeFlag))
reflags = RegExpFlag(reflags | UnicodeFlag);
else
return raiseError("Invalid regexp flags");
}
Rooted<RegExpObject*> reobj(cx_);
- TRY_VAR(reobj, RegExpObject::create(cx_,
+ BINJS_TRY_VAR(reobj, RegExpObject::create(cx_,
pattern,
reflags,
alloc_,
TenuredObject));
- TRY_DECL(result, factory_.newRegExp(reobj, tokenizer_->pos(start), *this));
+ BINJS_TRY_DECL(result, factory_.newRegExp(reobj, tokenizer_->pos(start), *this));
return result;
}
/*
interface LiteralStringExpression : Node {
string value;
}
@@ -5416,17 +5550,17 @@ BinASTParser<Tok>::parseLiteralStringExp
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceLiteralStringExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceLiteralStringExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceLiteralStringExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5435,17 +5569,17 @@ BinASTParser<Tok>::parseInterfaceLiteral
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Value }));
RootedAtom value(cx_);
MOZ_TRY_VAR(value, tokenizer_->readAtom());
- TRY_DECL(result, factory_.newStringLiteral(value, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStringLiteral(value, tokenizer_->pos(start)));
return result;
}
/*
interface Module : Node {
AssertedVarScope? scope;
FrozenArray<Directive> directives;
@@ -5457,17 +5591,17 @@ BinASTParser<Tok>::parseModule()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceModule(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceModule(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceModule(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5486,38 +5620,38 @@ BinASTParser<Tok>::parseNewExpression()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceNewExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceNewExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceNewExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::NewExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Callee, BinField::Arguments }));
- MOZ_TRY_DECL(callee, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(arguments, parseArguments());
+ BINJS_MOZ_TRY_DECL(callee, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(arguments, parseArguments());
auto result = arguments;
result->setKind(ParseNodeKind::New);
result->prepend(callee);
return result;
}
@@ -5531,17 +5665,17 @@ BinASTParser<Tok>::parseNewTargetExpress
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceNewTargetExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceNewTargetExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceNewTargetExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5559,17 +5693,17 @@ BinASTParser<Tok>::parseObjectAssignment
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceObjectAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceObjectAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceObjectAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5587,17 +5721,17 @@ BinASTParser<Tok>::parseObjectBinding()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceObjectBinding(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceObjectBinding(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceObjectBinding(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5615,33 +5749,33 @@ BinASTParser<Tok>::parseObjectExpression
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceObjectExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceObjectExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceObjectExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ObjectExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Properties }));
- MOZ_TRY_DECL(properties, parseListOfObjectProperty());
+ BINJS_MOZ_TRY_DECL(properties, parseListOfObjectProperty());
auto result = properties;
return result;
}
/*
@@ -5654,17 +5788,17 @@ BinASTParser<Tok>::parseReturnStatement(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceReturnStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceReturnStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceReturnStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5675,20 +5809,20 @@ BinASTParser<Tok>::parseInterfaceReturnS
if (!parseContext_->isFunctionBox()) {
// Return statements are permitted only inside functions.
return raiseInvalidKind("Toplevel Statement", kind);
}
parseContext_->functionBox()->usesReturn = true;
- MOZ_TRY_DECL(expression, parseOptionalExpression());
-
-
- TRY_DECL(result, factory_.newReturnStatement(expression, tokenizer_->pos(start)));
+ BINJS_MOZ_TRY_DECL(expression, parseOptionalExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newReturnStatement(expression, tokenizer_->pos(start)));
return result;
}
/*
interface Script : Node {
AssertedVarScope? scope;
FrozenArray<Directive> directives;
@@ -5700,17 +5834,17 @@ BinASTParser<Tok>::parseScript()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceScript(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceScript(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceScript(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5721,25 +5855,25 @@ BinASTParser<Tok>::parseInterfaceScript(
MOZ_TRY(parseOptionalAssertedVarScope());
- MOZ_TRY_DECL(directives, parseListOfDirective());
-
-
-
-
- MOZ_TRY_DECL(statements, parseListOfStatement());
-
-
- MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
+ BINJS_MOZ_TRY_DECL(directives, parseListOfDirective());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(statements, parseListOfStatement());
+
+
+ BINJS_MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
return result;
}
/*
interface ShorthandProperty : Node {
IdentifierExpression name;
}
@@ -5749,39 +5883,39 @@ BinASTParser<Tok>::parseShorthandPropert
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceShorthandProperty(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceShorthandProperty(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceShorthandProperty(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ShorthandProperty);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Name }));
- MOZ_TRY_DECL(name, parseIdentifierExpression());
+ BINJS_MOZ_TRY_DECL(name, parseIdentifierExpression());
if (!factory_.isUsableAsObjectPropertyName(name))
- TRY_VAR(name, factory_.newObjectLiteralPropertyName(name->name(), tokenizer_->pos(start)));
-
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, name, AccessorType::None));
+ BINJS_TRY_VAR(name, factory_.newObjectLiteralPropertyName(name->name(), tokenizer_->pos(start)));
+
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, name, AccessorType::None));
return result;
}
/*
interface SkippableArrowExpression : Node {
EagerArrowExpression skipped;
}
@@ -5791,17 +5925,17 @@ BinASTParser<Tok>::parseSkippableArrowEx
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSkippableArrowExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSkippableArrowExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSkippableArrowExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5819,17 +5953,17 @@ BinASTParser<Tok>::parseSkippableFunctio
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSkippableFunctionDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSkippableFunctionDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSkippableFunctionDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5847,17 +5981,17 @@ BinASTParser<Tok>::parseSkippableFunctio
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSkippableFunctionExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSkippableFunctionExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSkippableFunctionExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5875,17 +6009,17 @@ BinASTParser<Tok>::parseSkippableGetter(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSkippableGetter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSkippableGetter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSkippableGetter(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5903,17 +6037,17 @@ BinASTParser<Tok>::parseSkippableMethod(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSkippableMethod(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSkippableMethod(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSkippableMethod(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5931,17 +6065,17 @@ BinASTParser<Tok>::parseSkippableSetter(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSkippableSetter(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSkippableSetter(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSkippableSetter(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5959,17 +6093,17 @@ BinASTParser<Tok>::parseSpreadElement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSpreadElement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSpreadElement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSpreadElement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -5988,41 +6122,41 @@ BinASTParser<Tok>::parseStaticMemberAssi
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceStaticMemberAssignmentTarget(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceStaticMemberAssignmentTarget(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceStaticMemberAssignmentTarget(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::StaticMemberAssignmentTarget);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Object, BinField::Property }));
- MOZ_TRY_DECL(object, parseExpressionOrSuper());
+ BINJS_MOZ_TRY_DECL(object, parseExpressionOrSuper());
RootedAtom property(cx_);
MOZ_TRY_VAR(property, tokenizer_->readAtom());
- TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
+ BINJS_TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
return result;
}
/*
interface StaticMemberExpression : Node {
(Expression or Super) object;
IdentifierName property;
@@ -6033,41 +6167,41 @@ BinASTParser<Tok>::parseStaticMemberExpr
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceStaticMemberExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceStaticMemberExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceStaticMemberExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::StaticMemberExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Object, BinField::Property }));
- MOZ_TRY_DECL(object, parseExpressionOrSuper());
+ BINJS_MOZ_TRY_DECL(object, parseExpressionOrSuper());
RootedAtom property(cx_);
MOZ_TRY_VAR(property, tokenizer_->readAtom());
- TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
+ BINJS_TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
return result;
}
/*
interface Super : Node {
}
*/
@@ -6076,17 +6210,17 @@ BinASTParser<Tok>::parseSuper()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSuper(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSuper(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSuper(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6105,41 +6239,41 @@ BinASTParser<Tok>::parseSwitchCase()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSwitchCase(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSwitchCase(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSwitchCase(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::SwitchCase);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Test, BinField::Consequent }));
- MOZ_TRY_DECL(test, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(consequent, parseListOfStatement());
-
-
- TRY_DECL(result, factory_.newCaseOrDefault(start, test, consequent));
+ BINJS_MOZ_TRY_DECL(test, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(consequent, parseListOfStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newCaseOrDefault(start, test, consequent));
return result;
}
/*
interface SwitchDefault : Node {
FrozenArray<Statement> consequent;
}
@@ -6149,36 +6283,36 @@ BinASTParser<Tok>::parseSwitchDefault()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSwitchDefault(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSwitchDefault(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSwitchDefault(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::SwitchDefault);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Consequent }));
- MOZ_TRY_DECL(consequent, parseListOfStatement());
-
-
- TRY_DECL(result, factory_.newCaseOrDefault(start, nullptr, consequent));
+ BINJS_MOZ_TRY_DECL(consequent, parseListOfStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newCaseOrDefault(start, nullptr, consequent));
return result;
}
/*
interface SwitchStatement : Node {
Expression discriminant;
FrozenArray<SwitchCase> cases;
@@ -6189,42 +6323,42 @@ BinASTParser<Tok>::parseSwitchStatement(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSwitchStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSwitchStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSwitchStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::SwitchStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Discriminant, BinField::Cases }));
- MOZ_TRY_DECL(discriminant, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(cases, parseListOfSwitchCase());
-
-
- TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
- TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
+ BINJS_MOZ_TRY_DECL(discriminant, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(cases, parseListOfSwitchCase());
+
+
+ BINJS_TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
+ BINJS_TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
return result;
}
/*
interface SwitchStatementWithDefault : Node {
Expression discriminant;
FrozenArray<SwitchCase> preDefaultCases;
@@ -6237,61 +6371,61 @@ BinASTParser<Tok>::parseSwitchStatementW
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceSwitchStatementWithDefault(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceSwitchStatementWithDefault(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceSwitchStatementWithDefault(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::SwitchStatementWithDefault);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Discriminant, BinField::PreDefaultCases, BinField::DefaultCase, BinField::PostDefaultCases }));
- MOZ_TRY_DECL(discriminant, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(preDefaultCases, parseListOfSwitchCase());
-
-
-
-
- MOZ_TRY_DECL(defaultCase, parseSwitchDefault());
-
-
-
-
- MOZ_TRY_DECL(postDefaultCases, parseListOfSwitchCase());
+ BINJS_MOZ_TRY_DECL(discriminant, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(preDefaultCases, parseListOfSwitchCase());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(defaultCase, parseSwitchDefault());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(postDefaultCases, parseListOfSwitchCase());
// Concatenate `preDefaultCase`, `defaultCase`, `postDefaultCase`
auto cases = preDefaultCases;
factory_.addList(cases, defaultCase);
ParseNode* iter = postDefaultCases->pn_head;
while (iter) {
ParseNode* next = iter->pn_next;
factory_.addList(cases, iter);
iter = next;
}
- TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
- TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
+ BINJS_TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
+ BINJS_TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
return result;
}
/*
interface TemplateElement : Node {
string rawValue;
}
@@ -6301,17 +6435,17 @@ BinASTParser<Tok>::parseTemplateElement(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceTemplateElement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceTemplateElement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceTemplateElement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6330,17 +6464,17 @@ BinASTParser<Tok>::parseTemplateExpressi
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceTemplateExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceTemplateExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceTemplateExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6357,17 +6491,17 @@ BinASTParser<Tok>::parseThisExpression()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceThisExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceThisExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceThisExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6377,19 +6511,19 @@ BinASTParser<Tok>::parseInterfaceThisExp
MOZ_TRY(tokenizer_->checkFields0(kind, fields));
if (parseContext_->isFunctionBox())
parseContext_->functionBox()->usesThis = true;
TokenPos pos = tokenizer_->pos(start);
ParseNode* thisName(nullptr);
if (parseContext_->sc()->thisBinding() == ThisBinding::Function)
- TRY_VAR(thisName, factory_.newName(cx_->names().dotThis, pos, cx_));
-
- TRY_DECL(result, factory_.newThisLiteral(pos, thisName));
+ BINJS_TRY_VAR(thisName, factory_.newName(cx_->names().dotThis, pos, cx_));
+
+ BINJS_TRY_DECL(result, factory_.newThisLiteral(pos, thisName));
return result;
}
/*
interface ThrowStatement : Node {
Expression expression;
}
@@ -6399,36 +6533,36 @@ BinASTParser<Tok>::parseThrowStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceThrowStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceThrowStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceThrowStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::ThrowStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Expression }));
- MOZ_TRY_DECL(expression, parseExpression());
-
-
- TRY_DECL(result, factory_.newThrowStatement(expression, tokenizer_->pos(start)));
+ BINJS_MOZ_TRY_DECL(expression, parseExpression());
+
+
+ BINJS_TRY_DECL(result, factory_.newThrowStatement(expression, tokenizer_->pos(start)));
return result;
}
/*
interface TryCatchStatement : Node {
Block body;
CatchClause catchClause;
@@ -6439,17 +6573,17 @@ BinASTParser<Tok>::parseTryCatchStatemen
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceTryCatchStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceTryCatchStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceTryCatchStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6457,27 +6591,27 @@ BinASTParser<Tok>::parseInterfaceTryCatc
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Body, BinField::CatchClause }));
ParseNode* body;
{
ParseContext::Statement stmt(parseContext_, StatementKind::Try);
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
MOZ_TRY_VAR(body, parseBlock());
}
- MOZ_TRY_DECL(catchClause, parseCatchClause());
-
-
- TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, /* finally = */ nullptr));
+ BINJS_MOZ_TRY_DECL(catchClause, parseCatchClause());
+
+
+ BINJS_TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, /* finally = */ nullptr));
return result;
}
/*
interface TryFinallyStatement : Node {
Block body;
CatchClause? catchClause;
@@ -6489,17 +6623,17 @@ BinASTParser<Tok>::parseTryFinallyStatem
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceTryFinallyStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceTryFinallyStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceTryFinallyStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6507,36 +6641,36 @@ BinASTParser<Tok>::parseInterfaceTryFina
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Body, BinField::CatchClause, BinField::Finalizer }));
ParseNode* body;
{
ParseContext::Statement stmt(parseContext_, StatementKind::Try);
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
MOZ_TRY_VAR(body, parseBlock());
}
- MOZ_TRY_DECL(catchClause, parseOptionalCatchClause());
+ BINJS_MOZ_TRY_DECL(catchClause, parseOptionalCatchClause());
ParseNode* finalizer;
{
ParseContext::Statement stmt(parseContext_, StatementKind::Finally);
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
MOZ_TRY_VAR(finalizer, parseBlock());
}
- TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, finalizer));
+ BINJS_TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, finalizer));
return result;
}
/*
interface UnaryExpression : Node {
UnaryOperator operator;
Expression operand;
@@ -6547,38 +6681,38 @@ BinASTParser<Tok>::parseUnaryExpression(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceUnaryExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceUnaryExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceUnaryExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::UnaryExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Operator, BinField::Operand }));
- MOZ_TRY_DECL(operator_, parseUnaryOperator());
-
-
-
-
- MOZ_TRY_DECL(operand, parseExpression());
+ BINJS_MOZ_TRY_DECL(operator_, parseUnaryOperator());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(operand, parseExpression());
ParseNodeKind pnk;
switch (operator_) {
case UnaryOperator::Minus:
pnk = ParseNodeKind::Neg;
break;
case UnaryOperator::Plus:
@@ -6613,17 +6747,17 @@ BinASTParser<Tok>::parseInterfaceUnaryEx
pnk = ParseNodeKind::DeleteElem;
break;
default:
pnk = ParseNodeKind::DeleteExpr;
}
break;
}
}
- TRY_DECL(result, factory_.newUnary(pnk, start, operand));
+ BINJS_TRY_DECL(result, factory_.newUnary(pnk, start, operand));
return result;
}
/*
interface UpdateExpression : Node {
bool isPrefix;
UpdateOperator operator;
@@ -6635,57 +6769,57 @@ BinASTParser<Tok>::parseUpdateExpression
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceUpdateExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceUpdateExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceUpdateExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::UpdateExpression);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::IsPrefix, BinField::Operator, BinField::Operand }));
- MOZ_TRY_DECL(isPrefix, tokenizer_->readBool());
-
-
-
-
- MOZ_TRY_DECL(operator_, parseUpdateOperator());
-
-
-
-
- MOZ_TRY_DECL(operand, parseSimpleAssignmentTarget());
+ BINJS_MOZ_TRY_DECL(isPrefix, tokenizer_->readBool());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(operator_, parseUpdateOperator());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(operand, parseSimpleAssignmentTarget());
ParseNodeKind pnk;
switch (operator_) {
case UpdateOperator::Incr:
pnk = isPrefix ? ParseNodeKind::PreIncrement
: ParseNodeKind::PostIncrement;
break;
case UpdateOperator::Decr:
pnk = isPrefix ? ParseNodeKind::PreDecrement
: ParseNodeKind::PostDecrement;
break;
}
- TRY_DECL(result, factory_.newUnary(pnk, start, operand));
+ BINJS_TRY_DECL(result, factory_.newUnary(pnk, start, operand));
return result;
}
/*
interface VariableDeclaration : Node {
VariableDeclarationKind kind;
FrozenArray<VariableDeclarator> declarators;
@@ -6696,39 +6830,39 @@ BinASTParser<Tok>::parseVariableDeclarat
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceVariableDeclaration(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceVariableDeclaration(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceVariableDeclaration(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::VariableDeclaration);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Kind, BinField::Declarators }));
AutoVariableDeclarationKind kindGuard(this);
- MOZ_TRY_DECL(kind_, parseVariableDeclarationKind());
+ BINJS_MOZ_TRY_DECL(kind_, parseVariableDeclarationKind());
// Restored by `kindGuard`.
variableDeclarationKind_ = kind_;
- MOZ_TRY_DECL(declarators, parseListOfVariableDeclarator());
+ BINJS_MOZ_TRY_DECL(declarators, parseListOfVariableDeclarator());
// By specification, the list may not be empty.
if (declarators->pn_count == 0)
return raiseEmpty("VariableDeclaration");
ParseNodeKind pnk;
switch (kind_) {
@@ -6759,57 +6893,57 @@ BinASTParser<Tok>::parseVariableDeclarat
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceVariableDeclarator(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceVariableDeclarator(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceVariableDeclarator(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::VariableDeclarator);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Binding, BinField::Init }));
- MOZ_TRY_DECL(binding, parseBinding());
-
-
-
-
- MOZ_TRY_DECL(init, parseOptionalExpression());
+ BINJS_MOZ_TRY_DECL(binding, parseBinding());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(init, parseOptionalExpression());
ParseNode* result;
if (binding->isKind(ParseNodeKind::Name)) {
// `var foo [= bar]``
MOZ_TRY(checkBinding(binding->pn_atom->asPropertyName()));
- TRY_VAR(result, factory_.newName(binding->pn_atom->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_VAR(result, factory_.newName(binding->pn_atom->asPropertyName(), tokenizer_->pos(start), cx_));
if (init)
result->pn_expr = init;
} else {
// `var pattern = bar`
if (!init) {
// Here, `init` is required.
return raiseMissingField("VariableDeclarator (with non-trivial pattern)", BinField::Init);
}
MOZ_CRASH("Unimplemented: AssertedScope check for BindingPattern variable declaration");
- TRY_VAR(result, factory_.newAssignment(ParseNodeKind::Assign, binding, init));
+ BINJS_TRY_VAR(result, factory_.newAssignment(ParseNodeKind::Assign, binding, init));
}
return result;
}
/*
interface WhileStatement : Node {
Expression test;
@@ -6821,41 +6955,41 @@ BinASTParser<Tok>::parseWhileStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceWhileStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceWhileStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceWhileStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::WhileStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Test, BinField::Body }));
ParseContext::Statement stmt(parseContext_, StatementKind::WhileLoop);
- MOZ_TRY_DECL(test, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(body, parseStatement());
-
-
- TRY_DECL(result, factory_.newWhileStatement(start, test, body));
+ BINJS_MOZ_TRY_DECL(test, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newWhileStatement(start, test, body));
return result;
}
/*
interface WithStatement : Node {
Expression object;
Statement body;
@@ -6866,41 +7000,41 @@ BinASTParser<Tok>::parseWithStatement()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceWithStatement(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceWithStatement(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceWithStatement(const size_t start, const BinKind kind, const BinFields& fields)
{
MOZ_ASSERT(kind == BinKind::WithStatement);
CheckRecursionLimit(cx_);
MOZ_TRY(tokenizer_->checkFields(kind, fields, { BinField::Object, BinField::Body }));
- MOZ_TRY_DECL(object, parseExpression());
-
-
-
-
- MOZ_TRY_DECL(body, parseStatement());
-
-
- TRY_DECL(result, factory_.newWithStatement(start, object, body));
+ BINJS_MOZ_TRY_DECL(object, parseExpression());
+
+
+
+
+ BINJS_MOZ_TRY_DECL(body, parseStatement());
+
+
+ BINJS_TRY_DECL(result, factory_.newWithStatement(start, object, body));
return result;
}
/*
interface YieldExpression : Node {
Expression? expression;
}
@@ -6910,17 +7044,17 @@ BinASTParser<Tok>::parseYieldExpression(
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceYieldExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceYieldExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceYieldExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6938,17 +7072,17 @@ BinASTParser<Tok>::parseYieldStarExpress
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
MOZ_TRY(tokenizer_->enterTaggedTuple(kind, fields, guard));
const auto start = tokenizer_->offset();
- MOZ_TRY_DECL(result, parseInterfaceYieldStarExpression(start, kind, fields));
+ BINJS_MOZ_TRY_DECL(result, parseInterfaceYieldStarExpression(start, kind, fields));
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseInterfaceYieldStarExpression(const size_t start, const BinKind kind, const BinFields& fields)
{
@@ -6985,17 +7119,17 @@ enum BinaryOperator {
"/",
"%",
"**"
};
*/
template<typename Tok> JS::Result<typename BinASTParser<Tok>::BinaryOperator>
BinASTParser<Tok>::parseBinaryOperator()
{
- MOZ_TRY_DECL(variant, tokenizer_->readVariant());
+ BINJS_MOZ_TRY_DECL(variant, tokenizer_->readVariant());
switch (variant) {
case BinVariant::BinaryOperatorComma:
return BinaryOperator::Comma;
case BinVariant::BinaryOperatorLogicalOr:
return BinaryOperator::LogicalOr;
case BinVariant::BinaryOperatorLogicalAnd:
return BinaryOperator::LogicalAnd;
@@ -7062,17 +7196,17 @@ enum CompoundAssignmentOperator {
"|=",
"^=",
"&="
};
*/
template<typename Tok> JS::Result<typename BinASTParser<Tok>::CompoundAssignmentOperator>
BinASTParser<Tok>::parseCompoundAssignmentOperator()
{
- MOZ_TRY_DECL(variant, tokenizer_->readVariant());
+ BINJS_MOZ_TRY_DECL(variant, tokenizer_->readVariant());
switch (variant) {
case BinVariant::CompoundAssignmentOperatorPlusAssign:
return CompoundAssignmentOperator::PlusAssign;
case BinVariant::CompoundAssignmentOperatorMinusAssign:
return CompoundAssignmentOperator::MinusAssign;
case BinVariant::CompoundAssignmentOperatorMulAssign:
return CompoundAssignmentOperator::MulAssign;
@@ -7108,17 +7242,17 @@ enum UnaryOperator {
"typeof",
"void",
"delete"
};
*/
template<typename Tok> JS::Result<typename BinASTParser<Tok>::UnaryOperator>
BinASTParser<Tok>::parseUnaryOperator()
{
- MOZ_TRY_DECL(variant, tokenizer_->readVariant());
+ BINJS_MOZ_TRY_DECL(variant, tokenizer_->readVariant());
switch (variant) {
case BinVariant::BinaryOperatorOrUnaryOperatorPlus:
return UnaryOperator::Plus;
case BinVariant::BinaryOperatorOrUnaryOperatorMinus:
return UnaryOperator::Minus;
case BinVariant::UnaryOperatorNot:
return UnaryOperator::Not;
@@ -7139,17 +7273,17 @@ BinASTParser<Tok>::parseUnaryOperator()
enum UpdateOperator {
"++",
"--"
};
*/
template<typename Tok> JS::Result<typename BinASTParser<Tok>::UpdateOperator>
BinASTParser<Tok>::parseUpdateOperator()
{
- MOZ_TRY_DECL(variant, tokenizer_->readVariant());
+ BINJS_MOZ_TRY_DECL(variant, tokenizer_->readVariant());
switch (variant) {
case BinVariant::UpdateOperatorIncr:
return UpdateOperator::Incr;
case BinVariant::UpdateOperatorDecr:
return UpdateOperator::Decr;
default:
return raiseInvalidVariant("UpdateOperator", variant);
@@ -7161,17 +7295,17 @@ enum VariableDeclarationKind {
"var",
"let",
"const"
};
*/
template<typename Tok> JS::Result<typename BinASTParser<Tok>::VariableDeclarationKind>
BinASTParser<Tok>::parseVariableDeclarationKind()
{
- MOZ_TRY_DECL(variant, tokenizer_->readVariant());
+ BINJS_MOZ_TRY_DECL(variant, tokenizer_->readVariant());
switch (variant) {
case BinVariant::VariableDeclarationKindVar:
return VariableDeclarationKind::Var;
case BinVariant::VariableDeclarationKindLet:
return VariableDeclarationKind::Let;
case BinVariant::VariableDeclarationKindConst:
return VariableDeclarationKind::Const;
@@ -7187,20 +7321,20 @@ BinASTParser<Tok>::parseVariableDeclarat
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseArguments()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newList(ParseNodeKind::ParamsBody, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newList(ParseNodeKind::ParamsBody, tokenizer_->pos(start)));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseSpreadElementOrExpression());
+ BINJS_MOZ_TRY_DECL(item, parseSpreadElementOrExpression());
factory_.addList(/* list = */ result, /* child = */ item);
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
@@ -7230,20 +7364,20 @@ BinASTParser<Tok>::parseListOfClassEleme
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfDirective()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseDirective());
+ BINJS_MOZ_TRY_DECL(item, parseDirective());
factory_.addStatementToList(result, item);
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
@@ -7285,20 +7419,20 @@ BinASTParser<Tok>::parseListOfImportSpec
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfObjectProperty()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newObjectLiteral(start));
+ BINJS_TRY_DECL(result, factory_.newObjectLiteral(start));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseObjectProperty());
+ BINJS_MOZ_TRY_DECL(item, parseObjectProperty());
result->appendWithoutOrderAssumption(item);
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
@@ -7310,24 +7444,24 @@ BinASTParser<Tok>::parseListOfOptionalBi
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfOptionalSpreadElementOrExpression()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newArrayLiteral(start));
+ BINJS_TRY_DECL(result, factory_.newArrayLiteral(start));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseOptionalSpreadElementOrExpression());
+ BINJS_MOZ_TRY_DECL(item, parseOptionalSpreadElementOrExpression());
if (item)
factory_.addArrayElement(result, item); // Infallible.
else
- TRY(factory_.addElision(result, tokenizer_->pos(start)));
+ BINJS_TRY(factory_.addElision(result, tokenizer_->pos(start)));
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfParameter()
@@ -7335,75 +7469,75 @@ BinASTParser<Tok>::parseListOfParameter(
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
ParseNode* result = new_<ListNode>(ParseNodeKind::ParamsBody, tokenizer_->pos(start));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseParameter());
+ BINJS_MOZ_TRY_DECL(item, parseParameter());
factory_.addList(/* list = */ result, /* item = */ item);
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfStatement()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseStatement());
+ BINJS_MOZ_TRY_DECL(item, parseStatement());
factory_.addStatementToList(result, item);
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfSwitchCase()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseSwitchCase());
+ BINJS_MOZ_TRY_DECL(item, parseSwitchCase());
factory_.addCaseStatementToList(result, item);
}
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseListOfVariableDeclarator()
{
uint32_t length;
AutoList guard(*tokenizer_);
const auto start = tokenizer_->offset();
MOZ_TRY(tokenizer_->enterList(length, guard));
- TRY_DECL(result, factory_.newDeclarationList(ParseNodeKind::Const /*Placeholder*/,
+ BINJS_TRY_DECL(result, factory_.newDeclarationList(ParseNodeKind::Const /*Placeholder*/,
tokenizer_->pos(start)));
for (uint32_t i = 0; i < length; ++i) {
- MOZ_TRY_DECL(item, parseVariableDeclarator());
+ BINJS_MOZ_TRY_DECL(item, parseVariableDeclarator());
result->appendWithoutOrderAssumption(item);
}
MOZ_TRY(guard.done());
return result;
}
@@ -7586,33 +7720,23 @@ BinASTParser<Tok>::parseOptionalExpressi
MOZ_TRY(guard.done());
return result;
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseOptionalIdentifierName()
{
- MOZ_TRY_DECL(result, tokenizer_->readMaybeAtom());
-
-
-
return raiseError("FIXME: Not implemented yet (OptionalIdentifierName)");
-
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseOptionalLabel()
{
- MOZ_TRY_DECL(result, tokenizer_->readMaybeAtom());
-
-
-
return raiseError("FIXME: Not implemented yet (OptionalLabel)");
-
}
template<typename Tok> JS::Result<ParseNode*>
BinASTParser<Tok>::parseOptionalSpreadElementOrExpression()
{
BinKind kind;
BinFields fields(cx_);
AutoTaggedTuple guard(*tokenizer_);
@@ -7675,15 +7799,8 @@ BinASTParser<Tok>::parseOptionalVariable
// Force class instantiation.
// This ensures that the symbols are built, without having to export all our
// code (and its baggage of #include and macros) in the header.
template class BinASTParser<BinTokenReaderMultipart>;
template class BinASTParser<BinTokenReaderTester>;
} // namespace frontend
} // namespace js
-
-#undef TRY
-#undef TRY_VAR
-#undef TRY_DECL
-#undef TRY_EMPL
-#undef MOZ_TRY_EMPLACE
-#undef MOZ_TRY_DECL
--- a/js/src/frontend/BinSource.yaml
+++ b/js/src/frontend/BinSource.yaml
@@ -16,140 +16,51 @@ cpp:
#include "mozilla/ArrayUtils.h"
#include "mozilla/Casting.h"
#include "mozilla/Maybe.h"
#include "mozilla/Move.h"
#include "mozilla/PodOperations.h"
#include "mozilla/Vector.h"
+ #include "frontend/BinSource-macros.h"
#include "frontend/BinSource.h"
#include "frontend/BinTokenReaderTester.h"
#include "frontend/FullParseHandler.h"
#include "frontend/Parser.h"
#include "frontend/SharedContext.h"
#include "vm/RegExpObject.h"
#include "frontend/ParseContext-inl.h"
#include "frontend/ParseNode-inl.h"
namespace js {
namespace frontend {
- using AutoList = BinTokenReaderTester::AutoList;
- using AutoTaggedTuple = BinTokenReaderTester::AutoTaggedTuple;
- using AutoTuple = BinTokenReaderTester::AutoTuple;
- using BinFields = BinTokenReaderTester::BinFields;
- using Chars = BinTokenReaderTester::Chars;
- using NameBag = GCHashSet<JSString*>;
- using Names = GCVector<JSString*, 8>;
- using UsedNamePtr = UsedNameTracker::UsedNameMap::Ptr;
-
- // Evaluate an expression EXPR, checking that the result is not falsy.
- //
- // Throw `cx->alreadyReportedError()` if it returns 0/nullptr.
- #define TRY(EXPR) \
- do { \
- if (!EXPR) \
- return cx_->alreadyReportedError(); \
- } while(false)
-
-
- // Evaluate an expression EXPR, checking that the result is not falsy.
- // In case of success, assign the result to VAR.
- //
- // Throw `cx->alreadyReportedError()` if it returns 0/nullptr.
- #define TRY_VAR(VAR, EXPR) \
- do { \
- VAR = EXPR; \
- if (!VAR) \
- return cx_->alreadyReportedError(); \
- } while (false)
-
- // Evaluate an expression EXPR, checking that the result is not falsy.
- // In case of success, assign the result to a new variable VAR.
- //
- // Throw `cx->alreadyReportedError()` if it returns 0/nullptr.
- #define TRY_DECL(VAR, EXPR) \
- auto VAR = EXPR; \
- if (!VAR) \
- return cx_->alreadyReportedError();
-
- // Evaluate an expression EXPR, checking that the result is a success.
- // In case of success, unwrap and assign the result to a new variable VAR.
- //
- // In case of error, propagate the error.
- #define MOZ_TRY_DECL(VAR, EXPR) \
- auto _##VAR = EXPR; \
- if (_##VAR.isErr()) \
- return ::mozilla::Err(_##VAR.unwrapErr()); \
- auto VAR = _##VAR.unwrap();
-
- // Ensure that we are visiting the right fields.
- template<size_t N>
- JS::Result<Ok, JS::Error&>
- BinASTParser::checkFields(const BinKind kind, const BinFields& actual, const BinField (&expected)[N])
- {
- if (actual.length() != N)
- return raiseInvalidNumberOfFields(kind, N, actual.length());
-
- for (size_t i = 0; i < N; ++i) {
- if (actual[i] != expected[i])
- return raiseInvalidField(describeBinKind(kind), actual[i]);
- }
-
- return Ok();
- }
-
- // Special case for N=0, as empty arrays are not permitted in C++
- JS::Result<Ok, JS::Error&>
- BinASTParser::checkFields0(const BinKind kind, const BinFields& actual)
- {
- if (actual.length() != 0)
- return raiseInvalidNumberOfFields(kind, 0, actual.length());
-
- return Ok();
- }
-
// Compare a bunch of `uint8_t` values (as returned by the tokenizer_) with
// a string literal (and ONLY a string literal).
- template<size_t N>
- bool operator==(const Chars& left, const char (&right)[N]) {
- return BinTokenReaderTester::equals(left, right);
+ template<typename Tok, size_t N>
+ bool operator==(const typename Tok::Chars& left, const char (&right)[N]) {
+ return Tok::equals(left, right);
}
- // Helper class: Restore field `variableDeclarationKind_` upon leaving a scope.
- class MOZ_RAII AutoVariableDeclarationKind {
- public:
- explicit AutoVariableDeclarationKind(BinASTParser* parser
- MOZ_GUARD_OBJECT_NOTIFIER_PARAM) :
- parser_(parser),
- kind(parser->variableDeclarationKind_)
- {
- MOZ_GUARD_OBJECT_NOTIFIER_INIT;
- }
- ~AutoVariableDeclarationKind() {
- parser_->variableDeclarationKind_ = kind;
- }
- private:
- BinASTParser* parser_;
- BinASTParser::VariableDeclarationKind kind;
- MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
- };
-
footer: |
- #undef TRY
- #undef TRY_VAR
- #undef TRY_DECL
- #undef MOZ_TRY_DECL
+ // Force class instantiation.
+ // This ensures that the symbols are built, without having to export all our
+ // code (and its baggage of #include and macros) in the header.
+ template class BinASTParser<BinTokenReaderMultipart>;
+ template class BinASTParser<BinTokenReaderTester>;
+
} // namespace frontend
} // namespace js
+
+
hpp:
# Rules for generating BinSource-class.h
class:
header: |
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* vim: set ts=8 sts=4 et sw=4 tw=99:
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -191,16 +102,34 @@ hpp:
*
* ```c++
* #define WITH_FIELD(CPP_NAME, SPEC_NAME) ...
* FOR_EACH_BIN_FIELD(WITH_FIELD)
* ```
*
* (sorted by alphabetical order)
*/
+ field:
+ doc: |
+ /**
+ * The different variants of Binary AST string enums, as per
+ * the specifications of Binary AST, as a single macro and
+ * `enum class`.
+ *
+ * Separate enum classes are also defined in BinSource-auto.h.
+ *
+ * Usage:
+ *
+ * ```c++
+ * #define WITH_VARIANT(CPP_NAME, SPEC_NAME) ...
+ * FOR_EACH_BIN_VARIANT(WITH_VARIANT)
+ * ```
+ *
+ * (sorted by alphabetical order)
+ */
header: |
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
* vim: set ts=8 sts=4 et sw=4 tw=99:
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@@ -248,24 +177,29 @@ hpp:
*/
const char* describeBinKind(const BinKind& kind);
/**
* Return a string describing a `BinField`.
*/
const char* describeBinField(const BinField& kind);
+ /**
+ * Return a string describing a `BinVariant`.
+ */
+ const char* describeBinVariant(const BinVariant& kind);
+
} // namespace frontend
} // namespace js
#endif // frontend_BinToken_h
Arguments:
init:
- TRY_DECL(result, factory_.newList(ParseNodeKind::ParamsBody, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newList(ParseNodeKind::ParamsBody, tokenizer_->pos(start)));
append:
factory_.addList(/* list = */ result, /* child = */ item);
ArrayExpression:
build:
auto result = elements;
AssertedBlockScope:
@@ -307,29 +241,29 @@ AssertedVarScope:
fields:
varDeclaredNames:
block:
replace:
MOZ_TRY(parseAndUpdateScopeNames(parseContext_->varScope(), DeclarationKind::Var));
AssignmentExpression:
build: |
- TRY_DECL(result, factory_.newAssignment(ParseNodeKind::Assign, binding, expression));
+ BINJS_TRY_DECL(result, factory_.newAssignment(ParseNodeKind::Assign, binding, expression));
AssignmentTargetIdentifier:
build: |
if (!IsIdentifier(name))
return raiseError("Invalid identifier");
- TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
BindingIdentifier:
build: |
if (!IsIdentifier(name))
return raiseError("Invalid identifier");
- TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
BinaryExpression:
build: |
ParseNodeKind pnk;
switch (operator_) {
case BinaryOperator::Comma:
pnk = ParseNodeKind::Comma;
break;
@@ -410,56 +344,57 @@ BinaryExpression:
ParseNode* result;
if (left->isKind(pnk) &&
pnk != ParseNodeKind::Pow /* ParseNodeKind::Pow is not left-associative */)
{
// Regroup left-associative operations into lists.
left->appendWithoutOrderAssumption(right);
result = left;
} else {
- TRY_DECL(list, factory_.newList(pnk, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(list, factory_.newList(pnk, tokenizer_->pos(start)));
list->appendWithoutOrderAssumption(left);
list->appendWithoutOrderAssumption(right);
result = list;
}
Block:
init: |
ParseContext::Statement stmt(parseContext_, StatementKind::Block);
ParseContext::Scope currentScope(cx_, parseContext_, usedNames_);
- TRY(currentScope.init(parseContext_));
+ BINJS_TRY(currentScope.init(parseContext_));
build: |
- TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
- TRY_DECL(result, factory_.newLexicalScope(*bindings, statements));
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
+ BINJS_TRY_DECL(result, factory_.newLexicalScope(*bindings, statements));
BreakStatement:
fields:
label:
block:
replace: |
RootedAtom label(cx_);
- MOZ_TRY(readMaybeString(&label));
+ MOZ_TRY_VAR(label, tokenizer_->readMaybeAtom());
- if (label && !IsIdentifier(label))
- return raiseError("Invalid identifier");
build: |
if (label) {
+ if (!IsIdentifier(label))
+ return raiseError("Invalid identifier");
+
auto validity = parseContext_->checkBreakStatement(label->asPropertyName());
if (validity.isErr()) {
switch (validity.unwrapErr()) {
case ParseContext::BreakStatementError::ToughBreak:
return raiseError(kind, "Not in a loop");
case ParseContext::BreakStatementError::LabelNotFound:
return raiseError(kind, "Label not found");
}
}
}
- TRY_DECL(result, factory_.newBreakStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newBreakStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
CallExpression:
build: |
auto op = JSOP_CALL;
// Check for direct calls to `eval`.
if (factory_.isEvalName(callee, cx_)) {
if (!parseContext_->varScope().lookupDeclaredNameForAdd(callee->name())
&& !parseContext_->innermostScope()->lookupDeclaredNameForAdd(callee->name())) {
@@ -475,27 +410,27 @@ CallExpression:
result->prepend(callee);
result->setOp(op);
CatchClause:
init: |
ParseContext::Statement stmt(parseContext_, StatementKind::Catch);
ParseContext::Scope currentScope(cx_, parseContext_, usedNames_);
- TRY(currentScope.init(parseContext_));
+ BINJS_TRY(currentScope.init(parseContext_));
build: |
// Export implicit variables to the scope.
// FIXME: Handle cases other than Name.
MOZ_ASSERT(binding->isKind(ParseNodeKind::Name));
auto ptr = currentScope.lookupDeclaredNameForAdd(binding->name());
- TRY(currentScope.addDeclaredName(parseContext_, ptr, binding->name(), DeclarationKind::Let, start));
+ BINJS_TRY(currentScope.addDeclaredName(parseContext_, ptr, binding->name(), DeclarationKind::Let, start));
- TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
- TRY_DECL(result, factory_.newLexicalScope(*bindings, body));
- TRY(factory_.setupCatchScope(result, binding, body));
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, currentScope, alloc_, parseContext_));
+ BINJS_TRY_DECL(result, factory_.newLexicalScope(*bindings, body));
+ BINJS_TRY(factory_.setupCatchScope(result, binding, body));
CompoundAssignmentExpression:
build: |
ParseNodeKind pnk;
switch (operator_){
case CompoundAssignmentOperator::PlusAssign:
pnk = ParseNodeKind::AddAssign;
break;
@@ -528,304 +463,358 @@ CompoundAssignmentExpression:
break;
case CompoundAssignmentOperator::BitXorAssign:
pnk = ParseNodeKind::BitXorAssign;
break;
case CompoundAssignmentOperator::BitAndAssign:
pnk = ParseNodeKind::BitAndAssign;
break;
}
- TRY_DECL(result, factory_.newAssignment(pnk, binding, expression));
+ BINJS_TRY_DECL(result, factory_.newAssignment(pnk, binding, expression));
ComputedMemberAssignmentTarget:
build: |
- TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
+ BINJS_TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
ComputedMemberExpression:
build: |
- TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
+ BINJS_TRY_DECL(result, factory_.newPropertyByValue(object, expression, start));
ConditionalExpression:
build: |
- TRY_DECL(result, factory_.newConditional(test, consequent, alternate));
+ BINJS_TRY_DECL(result, factory_.newConditional(test, consequent, alternate));
ContinueStatement:
fields:
label:
block:
replace: |
RootedAtom label(cx_);
- MOZ_TRY(readMaybeString(&label));
+ MOZ_TRY_VAR(label, tokenizer_->readMaybeAtom());
- if (label && !IsIdentifier(label))
- return raiseError("ContinueStatement - Label MUST be an identifier");
build: |
if (label) {
+ if (!IsIdentifier(label))
+ return raiseError("ContinueStatement - Label MUST be an identifier");
+
auto validity = parseContext_->checkContinueStatement(label ? label->asPropertyName() : nullptr);
if (validity.isErr()) {
switch (validity.unwrapErr()) {
case ParseContext::ContinueStatementError::NotInALoop:
return raiseError(kind, "Not in a loop");
case ParseContext::ContinueStatementError::LabelNotFound:
return raiseError(kind, "Label not found");
}
}
}
- TRY_DECL(result, factory_.newContinueStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newContinueStatement(label ? label->asPropertyName() : nullptr, tokenizer_->pos(start)));
DataProperty:
build: |
if (!factory_.isUsableAsObjectPropertyName(name))
return raiseError("DataProperty key kind");
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, expression, AccessorType::None));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, expression, AccessorType::None));
Directive:
build: |
TokenPos pos = tokenizer_->pos(start);
- TRY_DECL(result, factory_.newStringLiteral(rawValue, pos));
+ BINJS_TRY_DECL(result, factory_.newStringLiteral(rawValue, pos));
DoWhileStatement:
init:
ParseContext::Statement stmt(parseContext_, StatementKind::DoLoop);
build:
- TRY_DECL(result, factory_.newDoWhileStatement(body, test, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newDoWhileStatement(body, test, tokenizer_->pos(start)));
+
+EagerFunctionDeclaration:
+ init: |
+ const auto syntax = FunctionSyntaxKind::Statement;
+ inherits: EagerFunctionExpression
+
+EagerFunctionExpression:
+ init: |
+ const auto syntax = FunctionSyntaxKind::Expression;
+ fields:
+ parameterScope:
+ before: |
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
+ isGenerator ? GeneratorKind::Generator
+ : GeneratorKind::NotGenerator,
+ isAsync ? FunctionAsyncKind::AsyncFunction
+ : FunctionAsyncKind::SyncFunction,
+ syntax));
+
+ // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
+ BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
+ BINJS_TRY(funpc.init());
+ parseContext_->functionScope().useAsVarScope(parseContext_);
+ MOZ_ASSERT(parseContext_->isFunctionBox());
+
+ ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
+ BINJS_TRY(lexicalScope.init(parseContext_));
+ build: |
+ BINJS_TRY_DECL(lexicalScopeData, NewLexicalScopeData(cx_, lexicalScope, alloc_, parseContext_));
+ BINJS_TRY_VAR(body, factory_.newLexicalScope(*lexicalScopeData, body));
+ BINJS_MOZ_TRY_DECL(result, buildFunction(start, kind, name, params, body, funbox));
+
+EagerGetter:
+ fields:
+ body:
+ before: |
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
+ GeneratorKind::NotGenerator,
+ FunctionAsyncKind::SyncFunction,
+ FunctionSyntaxKind::Getter));
+
+ // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
+ BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
+ BINJS_TRY(funpc.init());
+ parseContext_->functionScope().useAsVarScope(parseContext_);
+ MOZ_ASSERT(parseContext_->isFunctionBox());
+
+ ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
+ BINJS_TRY(lexicalScope.init(parseContext_));
+ build: |
+ ParseNode* params = new_<ListNode>(ParseNodeKind::ParamsBody, tokenizer_->pos(start));
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::Getter));
+
+EagerMethod:
+ init: |
+ const auto syntax = FunctionSyntaxKind::Method;
+ inherits: EagerFunctionExpression
+ build: |
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::None));
+
+EagerSetter:
+ fields:
+ body:
+ before: |
+ BINJS_MOZ_TRY_DECL(funbox, buildFunctionBox(
+ GeneratorKind::NotGenerator,
+ FunctionAsyncKind::SyncFunction,
+ FunctionSyntaxKind::Setter));
+
+ // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
+ BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
+ BINJS_TRY(funpc.init());
+ parseContext_->functionScope().useAsVarScope(parseContext_);
+ MOZ_ASSERT(parseContext_->isFunctionBox());
+
+ ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
+ BINJS_TRY(lexicalScope.init(parseContext_));
+ build: |
+ ParseNode* params = new_<ListNode>(ParseNodeKind::ParamsBody, param->pn_pos);
+ factory_.addList(params, param);
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::Setter));
EmptyStatement:
build:
- TRY_DECL(result, factory_.newEmptyStatement(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newEmptyStatement(tokenizer_->pos(start)));
ExpressionStatement:
build:
- TRY_DECL(result, factory_.newExprStatement(expression, tokenizer_->offset()));
+ BINJS_TRY_DECL(result, factory_.newExprStatement(expression, tokenizer_->offset()));
ForInOfBinding:
init:
AutoVariableDeclarationKind kindGuard(this);
build: |
// Restored by `kindGuard`.
variableDeclarationKind_ = kind_;
MOZ_TRY(checkBinding(binding->pn_atom->asPropertyName()));
auto pnk =
kind_ == VariableDeclarationKind::Let
? ParseNodeKind::Let
: ParseNodeKind::Var;
- TRY_DECL(result, factory_.newDeclarationList(pnk, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newDeclarationList(pnk, tokenizer_->pos(start)));
factory_.addList(result, binding);
ForInStatement:
init: |
ParseContext::Statement stmt(parseContext_, StatementKind::ForInLoop);
// Implicit scope around the `for`, used to store `for (let x in ...)`
// or `for (const x in ...)`-style declarations. Detail on the
// declaration is stored as part of `scope`.
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
build: |
- TRY_DECL(forHead, factory_.newForInOrOfHead(ParseNodeKind::ForIn, left, right, tokenizer_->pos(start)));
- TRY_DECL(result, factory_.newForStatement(start, forHead, body, /*flags*/ 0));
+ BINJS_TRY_DECL(forHead, factory_.newForInOrOfHead(ParseNodeKind::ForIn, left, right, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newForStatement(start, forHead, body, /*flags*/ 0));
if (!scope.isEmpty()) {
- TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
- TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
+ BINJS_TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
}
FormalParameters:
build: |
auto result = items;
if (rest) {
- TRY_DECL(spread, factory_.newSpread(start, rest));
+ BINJS_TRY_DECL(spread, factory_.newSpread(start, rest));
factory_.addList(result, spread);
}
ForStatement:
init: |
ParseContext::Statement stmt(parseContext_, StatementKind::ForLoop);
// Implicit scope around the `for`, used to store `for (let x; ...; ...)`
// or `for (const x; ...; ...)`-style declarations. Detail on the
// declaration is stored as part of `BINJS_Scope`.
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
build: |
- TRY_DECL(forHead, factory_.newForHead(init, test, update, tokenizer_->pos(start)));
- TRY_DECL(result, factory_.newForStatement(start, forHead, body, /* iflags = */ 0));
+ BINJS_TRY_DECL(forHead, factory_.newForHead(init, test, update, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newForStatement(start, forHead, body, /* iflags = */ 0));
if (!scope.isEmpty()) {
- TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
- TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
+ BINJS_TRY_DECL(bindings, NewLexicalScopeData(cx_, scope, alloc_, parseContext_));
+ BINJS_TRY_VAR(result, factory_.newLexicalScope(*bindings, result));
}
FunctionBody:
build: |
- MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
-
-FunctionDeclaration:
- inherits: FunctionExpression
+ BINJS_MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
-FunctionExpression:
- fields:
- parameterScope:
- before: |
- MOZ_TRY_DECL(funbox, buildFunctionBox(
- isGenerator ? GeneratorKind::Generator
- : GeneratorKind::NotGenerator,
- isAsync ? FunctionAsyncKind::AsyncFunction
- : FunctionAsyncKind::SyncFunction));
-
- // Push a new ParseContext. It will be used to parse `scope`, the arguments, the function.
- BinParseContext funpc(cx_, this, funbox, /* newDirectives = */ nullptr);
- TRY(funpc.init());
- parseContext_->functionScope().useAsVarScope(parseContext_);
- MOZ_ASSERT(parseContext_->isFunctionBox());
-
- ParseContext::Scope lexicalScope(cx_, parseContext_, usedNames_);
- TRY(lexicalScope.init(parseContext_));
- build: |
- TRY_DECL(lexicalScopeData, NewLexicalScopeData(cx_, lexicalScope, alloc_, parseContext_));
- TRY_VAR(body, factory_.newLexicalScope(*lexicalScopeData, body));
- MOZ_TRY_DECL(result, buildFunction(start, kind, name, params, body, funbox));
IdentifierExpression:
build: |
if (!IsIdentifier(name))
return raiseError("Invalid identifier");
- TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_DECL(result, factory_.newName(name->asPropertyName(), tokenizer_->pos(start), cx_));
IfStatement:
build: |
- TRY_DECL(result, factory_.newIfStatement(start, test, consequent, alternate));
+ BINJS_TRY_DECL(result, factory_.newIfStatement(start, test, consequent, alternate));
LabelledStatement:
fields:
label:
after: |
if (!IsIdentifier(label))
return raiseError("Invalid identifier");
ParseContext::LabelStatement stmt(parseContext_, label);
build:
- TRY_DECL(result, factory_.newLabeledStatement(label->asPropertyName(), body, start));
+ BINJS_TRY_DECL(result, factory_.newLabeledStatement(label->asPropertyName(), body, start));
ListOfDirective:
init:
- TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
append:
factory_.addStatementToList(result, item);
ListOfObjectProperty:
init:
- TRY_DECL(result, factory_.newObjectLiteral(start));
+ BINJS_TRY_DECL(result, factory_.newObjectLiteral(start));
ListOfOptionalSpreadElementOrExpression:
init:
- TRY_DECL(result, factory_.newArrayLiteral(start));
+ BINJS_TRY_DECL(result, factory_.newArrayLiteral(start));
append: |
if (item)
factory_.addArrayElement(result, item); // Infallible.
else
- TRY(factory_.addElision(result, tokenizer_->pos(start)));
+ BINJS_TRY(factory_.addElision(result, tokenizer_->pos(start)));
ListOfParameter:
init: |
ParseNode* result = new_<ListNode>(ParseNodeKind::ParamsBody, tokenizer_->pos(start));
append:
factory_.addList(/* list = */ result, /* item = */ item);
ListOfStatement:
init:
- TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
append:
factory_.addStatementToList(result, item);
#ListOfSpreadElementOrExpression:
# init:
# ParseNode* result = new_<ListNode>(ParseNodeKind::ParamsBody, tokenizer_->pos());
# append:
# result->appendWithoutOrderAssumption(item);
ListOfSwitchCase:
init:
- TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newStatementList(tokenizer_->pos(start)));
append:
factory_.addCaseStatementToList(result, item);
ListOfVariableDeclarator:
init: |
- TRY_DECL(result, factory_.newDeclarationList(ParseNodeKind::Const /*Placeholder*/,
+ BINJS_TRY_DECL(result, factory_.newDeclarationList(ParseNodeKind::Const /*Placeholder*/,
tokenizer_->pos(start)));
LiteralBooleanExpression:
build:
- TRY_DECL(result, factory_.newBooleanLiteral(value, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newBooleanLiteral(value, tokenizer_->pos(start)));
LiteralNumericExpression:
build:
- TRY_DECL(result, factory_.newNumber(value, DecimalPoint::HasDecimal, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newNumber(value, DecimalPoint::HasDecimal, tokenizer_->pos(start)));
LiteralNullExpression:
build:
- TRY_DECL(result, factory_.newNullLiteral(tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newNullLiteral(tokenizer_->pos(start)));
LiteralPropertyName:
build: |
ParseNode* result;
uint32_t index;
if (value->isIndex(&index))
- TRY_VAR(result, factory_.newNumber(index, NoDecimal, TokenPos(start, tokenizer_->offset())));
+ BINJS_TRY_VAR(result, factory_.newNumber(index, NoDecimal, TokenPos(start, tokenizer_->offset())));
else
- TRY_VAR(result, factory_.newObjectLiteralPropertyName(value, tokenizer_->pos(start)));
+ BINJS_TRY_VAR(result, factory_.newObjectLiteralPropertyName(value, tokenizer_->pos(start)));
LiteralRegExpExpression:
fields:
flags:
block:
- replace:
+ replace: |
Chars flags(cx_);
- MOZ_TRY(readString(flags));
+ MOZ_TRY(tokenizer_->readChars(flags));
build: |
RegExpFlag reflags = NoFlags;
for (auto c : flags) {
if (c == 'g' && !(reflags & GlobalFlag))
reflags = RegExpFlag(reflags | GlobalFlag);
else if (c == 'i' && !(reflags & IgnoreCaseFlag))
reflags = RegExpFlag(reflags | IgnoreCaseFlag);
else if (c == 'm' && !(reflags & MultilineFlag))
reflags = RegExpFlag(reflags | MultilineFlag);
else if (c == 'y' && !(reflags & StickyFlag))
reflags = RegExpFlag(reflags | StickyFlag);
else if (c == 'u' && !(reflags & UnicodeFlag))
reflags = RegExpFlag(reflags | UnicodeFlag);
else
- return raiseInvalidEnum("RegExpLiteral", flags);
+ return raiseError("Invalid regexp flags");
}
Rooted<RegExpObject*> reobj(cx_);
- TRY_VAR(reobj, RegExpObject::create(cx_,
+ BINJS_TRY_VAR(reobj, RegExpObject::create(cx_,
pattern,
reflags,
alloc_,
TenuredObject));
- TRY_DECL(result, factory_.newRegExp(reobj, tokenizer_->pos(start), *this));
+ BINJS_TRY_DECL(result, factory_.newRegExp(reobj, tokenizer_->pos(start), *this));
LiteralStringExpression:
build:
- TRY_DECL(result, factory_.newStringLiteral(value, tokenizer_->pos(start)));
-
-Method:
- inherits: FunctionExpression
- build: |
- MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::None));
+ BINJS_TRY_DECL(result, factory_.newStringLiteral(value, tokenizer_->pos(start)));
NewExpression:
build: |
auto result = arguments;
result->setKind(ParseNodeKind::New);
result->prepend(callee);
ObjectExpression:
@@ -848,123 +837,123 @@ ReturnStatement:
init: |
if (!parseContext_->isFunctionBox()) {
// Return statements are permitted only inside functions.
return raiseInvalidKind("Toplevel Statement", kind);
}
parseContext_->functionBox()->usesReturn = true;
build:
- TRY_DECL(result, factory_.newReturnStatement(expression, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newReturnStatement(expression, tokenizer_->pos(start)));
Script:
build:
- MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
+ BINJS_MOZ_TRY_DECL(result, appendDirectivesToBody(/* body = */ statements, /* directives = */ directives));
Setter:
inherits: Method
init: |
const auto isAsync = false;
const auto isGenerator = false;
build: |
- TRY_DECL(params, factory_.newList(ParseNodeKind::ParamsBody, param));
- MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::Setter));
+ BINJS_TRY_DECL(params, factory_.newList(ParseNodeKind::ParamsBody, param));
+ BINJS_MOZ_TRY_DECL(method, buildFunction(start, kind, name, params, body, funbox));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, method, AccessorType::Setter));
ShorthandProperty:
build: |
if (!factory_.isUsableAsObjectPropertyName(name))
- TRY_VAR(name, factory_.newObjectLiteralPropertyName(name->name(), tokenizer_->pos(start)));
+ BINJS_TRY_VAR(name, factory_.newObjectLiteralPropertyName(name->name(), tokenizer_->pos(start)));
- TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, name, AccessorType::None));
+ BINJS_TRY_DECL(result, factory_.newObjectMethodOrPropertyDefinition(name, name, AccessorType::None));
SwitchCase:
build: |
- TRY_DECL(result, factory_.newCaseOrDefault(start, test, consequent));
+ BINJS_TRY_DECL(result, factory_.newCaseOrDefault(start, test, consequent));
SwitchDefault:
build: |
- TRY_DECL(result, factory_.newCaseOrDefault(start, nullptr, consequent));
+ BINJS_TRY_DECL(result, factory_.newCaseOrDefault(start, nullptr, consequent));
SwitchStatement:
build: |
- TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
- TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
+ BINJS_TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
+ BINJS_TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
SwitchStatementWithDefault:
build: |
// Concatenate `preDefaultCase`, `defaultCase`, `postDefaultCase`
auto cases = preDefaultCases;
factory_.addList(cases, defaultCase);
ParseNode* iter = postDefaultCases->pn_head;
while (iter) {
ParseNode* next = iter->pn_next;
factory_.addList(cases, iter);
iter = next;
}
- TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
- TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
+ BINJS_TRY_DECL(scope, factory_.newLexicalScope(nullptr, cases));
+ BINJS_TRY_DECL(result, factory_.newSwitchStatement(start, discriminant, scope));
StaticMemberAssignmentTarget:
build: |
- TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
+ BINJS_TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
StaticMemberExpression:
build: |
- TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
+ BINJS_TRY_DECL(result, factory_.newPropertyAccess(object, property->asPropertyName(), start));
ThisExpression:
build: |
if (parseContext_->isFunctionBox())
parseContext_->functionBox()->usesThis = true;
TokenPos pos = tokenizer_->pos(start);
ParseNode* thisName(nullptr);
if (parseContext_->sc()->thisBinding() == ThisBinding::Function)
- TRY_VAR(thisName, factory_.newName(cx_->names().dotThis, pos, cx_));
+ BINJS_TRY_VAR(thisName, factory_.newName(cx_->names().dotThis, pos, cx_));
- TRY_DECL(result, factory_.newThisLiteral(pos, thisName));
+ BINJS_TRY_DECL(result, factory_.newThisLiteral(pos, thisName));
ThrowStatement:
build:
- TRY_DECL(result, factory_.newThrowStatement(expression, tokenizer_->pos(start)));
+ BINJS_TRY_DECL(result, factory_.newThrowStatement(expression, tokenizer_->pos(start)));
TryCatchStatement:
fields:
body:
block:
declare:
ParseNode* body;
before: |
ParseContext::Statement stmt(parseContext_, StatementKind::Try);
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
build:
- TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, /* finally = */ nullptr));
+ BINJS_TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, /* finally = */ nullptr));
TryFinallyStatement:
fields:
body:
block:
declare:
ParseNode* body;
before: |
ParseContext::Statement stmt(parseContext_, StatementKind::Try);
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
finalizer:
block:
declare:
ParseNode* finalizer;
before: |
ParseContext::Statement stmt(parseContext_, StatementKind::Finally);
ParseContext::Scope scope(cx_, parseContext_, usedNames_);
- TRY(scope.init(parseContext_));
+ BINJS_TRY(scope.init(parseContext_));
build:
- TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, finalizer));
+ BINJS_TRY_DECL(result, factory_.newTryStatement(start, body, catchClause, finalizer));
UnaryExpression:
build: |
ParseNodeKind pnk;
switch (operator_) {
case UnaryOperator::Minus:
pnk = ParseNodeKind::Neg;
break;
@@ -1000,32 +989,32 @@ UnaryExpression:
pnk = ParseNodeKind::DeleteElem;
break;
default:
pnk = ParseNodeKind::DeleteExpr;
}
break;
}
}
- TRY_DECL(result, factory_.newUnary(pnk, start, operand));
+ BINJS_TRY_DECL(result, factory_.newUnary(pnk, start, operand));
UpdateExpression:
build: |
ParseNodeKind pnk;
switch (operator_) {
case UpdateOperator::Incr:
pnk = isPrefix ? ParseNodeKind::PreIncrement
: ParseNodeKind::PostIncrement;
break;
case UpdateOperator::Decr:
pnk = isPrefix ? ParseNodeKind::PreDecrement
: ParseNodeKind::PostDecrement;
break;
}
- TRY_DECL(result, factory_.newUnary(pnk, start, operand));
+ BINJS_TRY_DECL(result, factory_.newUnary(pnk, start, operand));
VariableDeclaration:
init:
AutoVariableDeclarationKind kindGuard(this);
fields:
kind:
after: |
@@ -1054,31 +1043,31 @@ VariableDeclaration:
VariableDeclarator:
build: |
ParseNode* result;
if (binding->isKind(ParseNodeKind::Name)) {
// `var foo [= bar]``
MOZ_TRY(checkBinding(binding->pn_atom->asPropertyName()));
- TRY_VAR(result, factory_.newName(binding->pn_atom->asPropertyName(), tokenizer_->pos(start), cx_));
+ BINJS_TRY_VAR(result, factory_.newName(binding->pn_atom->asPropertyName(), tokenizer_->pos(start), cx_));
if (init)
result->pn_expr = init;
} else {
// `var pattern = bar`
if (!init) {
// Here, `init` is required.
return raiseMissingField("VariableDeclarator (with non-trivial pattern)", BinField::Init);
}
MOZ_CRASH("Unimplemented: AssertedScope check for BindingPattern variable declaration");
- TRY_VAR(result, factory_.newAssignment(ParseNodeKind::Assign, binding, init));
+ BINJS_TRY_VAR(result, factory_.newAssignment(ParseNodeKind::Assign, binding, init));
}
WhileStatement:
init:
ParseContext::Statement stmt(parseContext_, StatementKind::WhileLoop);
build:
- TRY_DECL(result, factory_.newWhileStatement(start, test, body));
+ BINJS_TRY_DECL(result, factory_.newWhileStatement(start, test, body));
WithStatement:
build:
- TRY_DECL(result, factory_.newWithStatement(start, object, body));
+ BINJS_TRY_DECL(result, factory_.newWithStatement(start, object, body));