Skip to content

Commit 3ee841c

Browse files
committed
Don't loop forever on error recovery with EOF
closes #31804
1 parent e3f2dfd commit 3ee841c

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

src/libsyntax/parse/parser.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -3824,7 +3824,9 @@ impl<'a> Parser<'a> {
38243824
fn recover_stmt_(&mut self, break_on_semi: SemiColonMode) {
38253825
let mut brace_depth = 0;
38263826
let mut bracket_depth = 0;
3827+
debug!("recover_stmt_ enter loop");
38273828
loop {
3829+
debug!("recover_stmt_ loop {:?}", self.token);
38283830
match self.token {
38293831
token::OpenDelim(token::DelimToken::Brace) => {
38303832
brace_depth += 1;
@@ -3836,6 +3838,7 @@ impl<'a> Parser<'a> {
38363838
}
38373839
token::CloseDelim(token::DelimToken::Brace) => {
38383840
if brace_depth == 0 {
3841+
debug!("recover_stmt_ return - close delim {:?}", self.token);
38393842
return;
38403843
}
38413844
brace_depth -= 1;
@@ -3848,12 +3851,16 @@ impl<'a> Parser<'a> {
38483851
}
38493852
self.bump();
38503853
}
3851-
token::Eof => return,
3854+
token::Eof => {
3855+
debug!("recover_stmt_ return - Eof");
3856+
return;
3857+
}
38523858
token::Semi => {
38533859
self.bump();
38543860
if break_on_semi == SemiColonMode::Break &&
38553861
brace_depth == 0 &&
38563862
bracket_depth == 0 {
3863+
debug!("recover_stmt_ return - Semi");
38573864
return;
38583865
}
38593866
}
@@ -4042,6 +4049,8 @@ impl<'a> Parser<'a> {
40424049
while !self.eat(&token::CloseDelim(token::Brace)) {
40434050
let Spanned {node, span} = if let Some(s) = self.parse_stmt_() {
40444051
s
4052+
} else if self.token == token::Eof {
4053+
break;
40454054
} else {
40464055
// Found only `;` or `}`.
40474056
continue;

0 commit comments

Comments
 (0)