mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-29 14:54:56 +01:00
Handle recursion limit errors in postfix expressions (#1081)
This commit is contained in:
@@ -912,6 +912,7 @@ auto ParseTree::Parser::ParsePostfixExpression() -> llvm::Optional<Node> {
|
||||
auto start = GetSubtreeStartPosition();
|
||||
llvm::Optional<Node> expression = ParsePrimaryExpression();
|
||||
|
||||
TokenizedBuffer::TokenIterator last_position = position_;
|
||||
while (true) {
|
||||
switch (NextTokenKind()) {
|
||||
case TokenKind::Period():
|
||||
@@ -923,10 +924,16 @@ auto ParseTree::Parser::ParsePostfixExpression() -> llvm::Optional<Node> {
|
||||
expression = ParseCallExpression(start, !expression);
|
||||
break;
|
||||
|
||||
default: {
|
||||
default:
|
||||
return expression;
|
||||
}
|
||||
}
|
||||
// This is subject to an infinite loop if a child call fails, so monitor for
|
||||
// stalling.
|
||||
if (last_position == position_) {
|
||||
CHECK(expression == llvm::None);
|
||||
return expression;
|
||||
}
|
||||
last_position = position_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user