1
1
use super :: diagnostics:: report_suspicious_mismatch_block;
2
2
use super :: diagnostics:: same_identation_level;
3
3
use super :: diagnostics:: TokenTreeDiagInfo ;
4
- use super :: { StringReader , UnmatchedBrace } ;
4
+ use super :: { StringReader , UnmatchedDelim } ;
5
5
use rustc_ast:: token:: { self , Delimiter , Token } ;
6
6
use rustc_ast:: tokenstream:: { DelimSpan , Spacing , TokenStream , TokenTree } ;
7
7
use rustc_ast_pretty:: pprust:: token_to_string;
@@ -18,14 +18,14 @@ pub(super) struct TokenTreesReader<'a> {
18
18
impl < ' a > TokenTreesReader < ' a > {
19
19
pub ( super ) fn parse_all_token_trees (
20
20
string_reader : StringReader < ' a > ,
21
- ) -> ( PResult < ' a , TokenStream > , Vec < UnmatchedBrace > ) {
21
+ ) -> ( PResult < ' a , TokenStream > , Vec < UnmatchedDelim > ) {
22
22
let mut tt_reader = TokenTreesReader {
23
23
string_reader,
24
24
token : Token :: dummy ( ) ,
25
25
diag_info : TokenTreeDiagInfo :: default ( ) ,
26
26
} ;
27
27
let res = tt_reader. parse_token_trees ( /* is_delimited */ false ) ;
28
- ( res, tt_reader. diag_info . unmatched_braces )
28
+ ( res, tt_reader. diag_info . unmatched_delims )
29
29
}
30
30
31
31
// Parse a stream of tokens into a list of `TokenTree`s.
@@ -34,7 +34,7 @@ impl<'a> TokenTreesReader<'a> {
34
34
let mut buf = Vec :: new ( ) ;
35
35
loop {
36
36
match self . token . kind {
37
- token:: OpenDelim ( delim) => buf. push ( self . parse_token_tree_open_delim ( delim) ) ,
37
+ token:: OpenDelim ( delim) => buf. push ( self . parse_token_tree_open_delim ( delim) ? ) ,
38
38
token:: CloseDelim ( delim) => {
39
39
return if is_delimited {
40
40
Ok ( TokenStream :: new ( buf) )
@@ -43,10 +43,11 @@ impl<'a> TokenTreesReader<'a> {
43
43
} ;
44
44
}
45
45
token:: Eof => {
46
- if is_delimited {
47
- self . eof_err ( ) . emit ( ) ;
48
- }
49
- return Ok ( TokenStream :: new ( buf) ) ;
46
+ return if is_delimited {
47
+ Err ( self . eof_err ( ) )
48
+ } else {
49
+ Ok ( TokenStream :: new ( buf) )
50
+ } ;
50
51
}
51
52
_ => {
52
53
// Get the next normal token. This might require getting multiple adjacent
@@ -78,7 +79,7 @@ impl<'a> TokenTreesReader<'a> {
78
79
let mut err = self . string_reader . sess . span_diagnostic . struct_span_err ( self . token . span , msg) ;
79
80
for & ( _, sp) in & self . diag_info . open_braces {
80
81
err. span_label ( sp, "unclosed delimiter" ) ;
81
- self . diag_info . unmatched_braces . push ( UnmatchedBrace {
82
+ self . diag_info . unmatched_delims . push ( UnmatchedDelim {
82
83
expected_delim : Delimiter :: Brace ,
83
84
found_delim : None ,
84
85
found_span : self . token . span ,
@@ -98,7 +99,7 @@ impl<'a> TokenTreesReader<'a> {
98
99
err
99
100
}
100
101
101
- fn parse_token_tree_open_delim ( & mut self , open_delim : Delimiter ) -> TokenTree {
102
+ fn parse_token_tree_open_delim ( & mut self , open_delim : Delimiter ) -> PResult < ' a , TokenTree > {
102
103
// The span for beginning of the delimited section
103
104
let pre_span = self . token . span ;
104
105
@@ -107,7 +108,7 @@ impl<'a> TokenTreesReader<'a> {
107
108
// Parse the token trees within the delimiters.
108
109
// We stop at any delimiter so we can try to recover if the user
109
110
// uses an incorrect delimiter.
110
- let tts = self . parse_token_trees ( /* is_delimited */ true ) . unwrap ( ) ;
111
+ let tts = self . parse_token_trees ( /* is_delimited */ true ) ? ;
111
112
112
113
// Expand to cover the entire delimited token tree
113
114
let delim_span = DelimSpan :: from_pair ( pre_span, self . token . span ) ;
@@ -160,7 +161,7 @@ impl<'a> TokenTreesReader<'a> {
160
161
}
161
162
}
162
163
let ( tok, _) = self . diag_info . open_braces . pop ( ) . unwrap ( ) ;
163
- self . diag_info . unmatched_braces . push ( UnmatchedBrace {
164
+ self . diag_info . unmatched_delims . push ( UnmatchedDelim {
164
165
expected_delim : tok,
165
166
found_delim : Some ( close_delim) ,
166
167
found_span : self . token . span ,
@@ -190,7 +191,7 @@ impl<'a> TokenTreesReader<'a> {
190
191
_ => unreachable ! ( ) ,
191
192
}
192
193
193
- TokenTree :: Delimited ( delim_span, open_delim, tts)
194
+ Ok ( TokenTree :: Delimited ( delim_span, open_delim, tts) )
194
195
}
195
196
196
197
fn close_delim_err ( & mut self , delim : Delimiter ) -> PErr < ' a > {
0 commit comments