Index: src/parsing/parser.cc |
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
index d0cf28a488d078a317c763be8f6a03038bae8289..0aa62c59d8e6cefac0ed4654f7083ddc26a5dc4d 100644 |
--- a/src/parsing/parser.cc |
+++ b/src/parsing/parser.cc |
@@ -314,8 +314,15 @@ class TargetScope BASE_EMBEDDED { |
#define DUMMY ) // to make indentation work |
#undef DUMMY |
-#define CHECK_FAILED /**/); \ |
- if (failed_) return NULL; \ |
+// Used in functions where the return type is not ExpressionT. |
+#define CHECK_OK_CUSTOM(x) ok); \ |
+ if (!*ok) return this->x(); \ |
+ ((void)0 |
+#define DUMMY ) // to make indentation work |
+#undef DUMMY |
+ |
+#define CHECK_FAILED /**/); \ |
+ if (failed_) return NULL; \ |
((void)0 |
#define DUMMY ) // to make indentation work |
#undef DUMMY |
@@ -3876,8 +3883,7 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels, |
int lhs_end_pos = scanner()->location().end_pos; |
ForEachStatement::VisitMode mode = ForEachStatement::ENUMERATE; |
- bool is_for_each = CheckInOrOf(&mode, ok); |
- if (!*ok) return nullptr; |
+ bool is_for_each = CheckInOrOf(&mode, CHECK_OK); |
bool is_destructuring = is_for_each && (expression->IsArrayLiteral() || |
expression->IsObjectLiteral()); |
@@ -4089,8 +4095,8 @@ void ParserTraits::ParseArrowFunctionFormalParameters( |
Expression* left = binop->left(); |
Expression* right = binop->right(); |
int comma_pos = binop->position(); |
- ParseArrowFunctionFormalParameters(parameters, left, comma_pos, ok); |
- if (!*ok) return; |
+ ParseArrowFunctionFormalParameters(parameters, left, comma_pos, |
+ CHECK_OK_CUSTOM(Void)); |
// LHS of comma expression should be unparenthesized. |
expr = right; |
} |
@@ -4169,14 +4175,12 @@ void Parser::DesugarAsyncFunctionBody(const AstRawString* function_name, |
Expression* return_value = nullptr; |
if (body_type == FunctionBody::Normal) { |
- ParseStatementList(inner_body, Token::RBRACE, ok); |
- if (!*ok) return; |
+ ParseStatementList(inner_body, Token::RBRACE, CHECK_OK_CUSTOM(Void)); |
return_value = factory()->NewUndefinedLiteral(kNoSourcePosition); |
} else { |
- return_value = ParseAssignmentExpression(accept_IN, classifier, ok); |
- if (!*ok) return; |
- ParserTraits::RewriteNonPattern(classifier, ok); |
- if (!*ok) return; |
+ return_value = |
+ ParseAssignmentExpression(accept_IN, classifier, CHECK_OK_CUSTOM(Void)); |
+ ParserTraits::RewriteNonPattern(classifier, CHECK_OK_CUSTOM(Void)); |
} |
return_value = BuildPromiseResolve(return_value, return_value->position()); |
@@ -4212,8 +4216,8 @@ void ParserTraits::ParseArrowFunctionFormalParameterList( |
Scanner::Location* duplicate_loc, bool* ok) { |
if (expr->IsEmptyParentheses()) return; |
- ParseArrowFunctionFormalParameters(parameters, expr, params_loc.end_pos, ok); |
- if (!*ok) return; |
+ ParseArrowFunctionFormalParameters(parameters, expr, params_loc.end_pos, |
+ CHECK_OK_CUSTOM(Void)); |
if (parameters->Arity() > Code::kMaxArguments) { |
ReportMessageAt(params_loc, MessageTemplate::kMalformedArrowFunParamList); |
@@ -4537,10 +4541,7 @@ void Parser::SkipLazyFunctionBody(int* materialized_literal_count, |
scanner()->SeekForward(entry.end_pos() - 1); |
scope_->set_end_position(entry.end_pos()); |
- Expect(Token::RBRACE, ok); |
- if (!*ok) { |
- return; |
- } |
+ Expect(Token::RBRACE, CHECK_OK_CUSTOM(Void)); |
total_preparse_skipped_ += scope_->end_position() - function_block_pos; |
*materialized_literal_count = entry.literal_count(); |
*expected_property_count = entry.property_count(); |
@@ -4573,10 +4574,7 @@ void Parser::SkipLazyFunctionBody(int* materialized_literal_count, |
return; |
} |
scope_->set_end_position(logger.end()); |
- Expect(Token::RBRACE, ok); |
- if (!*ok) { |
- return; |
- } |
+ Expect(Token::RBRACE, CHECK_OK_CUSTOM(Void)); |
total_preparse_skipped_ += scope_->end_position() - function_block_pos; |
*materialized_literal_count = logger.literals(); |
*expected_property_count = logger.properties(); |
@@ -5865,8 +5863,7 @@ class NonPatternRewriter : public AstExpressionRewriter { |
void Parser::RewriteNonPattern(ExpressionClassifier* classifier, bool* ok) { |
- ValidateExpression(classifier, ok); |
- if (!*ok) return; |
+ ValidateExpression(classifier, CHECK_OK_CUSTOM(Void)); |
auto non_patterns_to_rewrite = function_state_->non_patterns_to_rewrite(); |
int begin = classifier->GetNonPatternBegin(); |
int end = non_patterns_to_rewrite->length(); |
@@ -7067,5 +7064,9 @@ void Parser::Print(AstNode* node) { |
} |
#endif // DEBUG |
+#undef CHECK_OK |
+#undef CHECK_OK_CUSTOM |
+#undef CHECK_FAILED |
+ |
} // namespace internal |
} // namespace v8 |