@@ -116,11 +116,42 @@ impl<'infcx, 'tcx> BorrowckDiagnosticsBuffer<'infcx, 'tcx> {
116116 pub ( crate ) fn buffer_non_error ( & mut self , diag : Diag < ' infcx , ( ) > ) {
117117 self . buffered_diags . push ( BufferedDiag :: NonError ( diag) ) ;
118118 }
119+ pub ( crate ) fn buffer_error ( & mut self , diag : Diag < ' infcx > ) {
120+ self . buffered_diags . push ( BufferedDiag :: Error ( diag) ) ;
121+ }
122+
123+ pub ( crate ) fn emit_errors ( & mut self ) -> Option < ErrorGuaranteed > {
124+ let mut res = None ;
125+
126+ // Buffer any move errors that we collected and de-duplicated.
127+ for ( _, ( _, diag) ) in std:: mem:: take ( & mut self . buffered_move_errors ) {
128+ // We have already set tainted for this error, so just buffer it.
129+ self . buffer_error ( diag) ;
130+ }
131+ for ( _, ( mut diag, count) ) in std:: mem:: take ( & mut self . buffered_mut_errors ) {
132+ if count > 10 {
133+ diag. note ( format ! ( "...and {} other attempted mutable borrows" , count - 10 ) ) ;
134+ }
135+ self . buffer_error ( diag) ;
136+ }
137+
138+ if !self . buffered_diags . is_empty ( ) {
139+ self . buffered_diags . sort_by_key ( |buffered_diag| buffered_diag. sort_span ( ) ) ;
140+ for buffered_diag in self . buffered_diags . drain ( ..) {
141+ match buffered_diag {
142+ BufferedDiag :: Error ( diag) => res = Some ( diag. emit ( ) ) ,
143+ BufferedDiag :: NonError ( diag) => diag. emit ( ) ,
144+ }
145+ }
146+ }
147+
148+ res
149+ }
119150}
120151
121152impl < ' infcx , ' tcx > MirBorrowckCtxt < ' _ , ' infcx , ' tcx > {
122153 pub ( crate ) fn buffer_error ( & mut self , diag : Diag < ' infcx > ) {
123- self . diags_buffer . buffered_diags . push ( BufferedDiag :: Error ( diag) ) ;
154+ self . diags_buffer . buffer_error ( diag) ;
124155 }
125156
126157 pub ( crate ) fn buffer_non_error ( & mut self , diag : Diag < ' infcx , ( ) > ) {
@@ -152,34 +183,6 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, 'infcx, 'tcx> {
152183 self . diags_buffer . buffered_mut_errors . insert ( span, ( diag, count) ) ;
153184 }
154185
155- pub ( crate ) fn emit_errors ( & mut self ) -> Option < ErrorGuaranteed > {
156- let mut res = self . infcx . tainted_by_errors ( ) ;
157-
158- // Buffer any move errors that we collected and de-duplicated.
159- for ( _, ( _, diag) ) in std:: mem:: take ( & mut self . diags_buffer . buffered_move_errors ) {
160- // We have already set tainted for this error, so just buffer it.
161- self . buffer_error ( diag) ;
162- }
163- for ( _, ( mut diag, count) ) in std:: mem:: take ( & mut self . diags_buffer . buffered_mut_errors ) {
164- if count > 10 {
165- diag. note ( format ! ( "...and {} other attempted mutable borrows" , count - 10 ) ) ;
166- }
167- self . buffer_error ( diag) ;
168- }
169-
170- if !self . diags_buffer . buffered_diags . is_empty ( ) {
171- self . diags_buffer . buffered_diags . sort_by_key ( |buffered_diag| buffered_diag. sort_span ( ) ) ;
172- for buffered_diag in self . diags_buffer . buffered_diags . drain ( ..) {
173- match buffered_diag {
174- BufferedDiag :: Error ( diag) => res = Some ( diag. emit ( ) ) ,
175- BufferedDiag :: NonError ( diag) => diag. emit ( ) ,
176- }
177- }
178- }
179-
180- res
181- }
182-
183186 pub ( crate ) fn has_buffered_diags ( & self ) -> bool {
184187 self . diags_buffer . buffered_diags . is_empty ( )
185188 }
0 commit comments