@@ -35,7 +35,7 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
3535 return if is_delimited {
3636 Ok ( ( open_spacing, TokenStream :: new ( buf) ) )
3737 } else {
38- Err ( vec ! [ self . close_delim_err( delim) ] )
38+ Err ( self . close_delim_err ( delim) )
3939 } ;
4040 }
4141 token:: Eof => {
@@ -157,15 +157,15 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
157157 candidate = Some ( * brace_span) ;
158158 }
159159 }
160- let ( _, _) = self . diag_info . open_braces . pop ( ) . unwrap ( ) ;
160+ // let (_, _) = self.diag_info.open_braces.pop().unwrap();
161161 self . diag_info . unmatched_delims . push ( UnmatchedDelim {
162162 found_delim : Some ( close_delim) ,
163163 found_span : self . token . span ,
164164 unclosed_span : unclosed_delimiter,
165165 candidate_span : candidate,
166166 } ) ;
167167 } else {
168- self . diag_info . open_braces . pop ( ) ;
168+ // self.diag_info.open_braces.pop();
169169 }
170170
171171 // If the incorrect delimiter matches an earlier opening
@@ -242,14 +242,21 @@ impl<'psess, 'src> Lexer<'psess, 'src> {
242242 this_spacing
243243 }
244244
245- fn close_delim_err ( & mut self , delim : Delimiter ) -> Diag < ' psess > {
245+ fn close_delim_err ( & mut self , delim : Delimiter ) -> Vec < Diag < ' psess > > {
246246 // An unexpected closing delimiter (i.e., there is no matching opening delimiter).
247+ //println!("open_braces: {:?}", self.diag_info.open_braces);
248+ if let Some ( ( last_open_braces, _) ) = self . diag_info . open_braces . last ( )
249+ && * last_open_braces == delim
250+ {
251+ self . diag_info . open_braces . pop ( ) ;
252+ return vec ! [ ] ;
253+ }
247254 let token_str = token_to_string ( & self . token ) ;
248255 let msg = format ! ( "unexpected closing delimiter: `{token_str}`" ) ;
249256 let mut err = self . dcx ( ) . struct_span_err ( self . token . span , msg) ;
250257
251258 report_suspicious_mismatch_block ( & mut err, & self . diag_info , self . psess . source_map ( ) , delim) ;
252259 err. span_label ( self . token . span , "unexpected closing delimiter" ) ;
253- err
260+ vec ! [ err]
254261 }
255262}
0 commit comments