mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-11-15 16:58:09 +00:00
Handle recursion limit errors in postfix expressions (#1081)
This commit is contained in:
1 parent
2e99b4d00f
commit
7e9b24390f
2 files changed
+24
-2
No files matched your search
@@ -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