@@ -1802,29 +1802,94 @@ impl<F: fmt::Write> FmtPrinter<'_, 'tcx, F> {
1802
1802
define_scoped_cx ! ( self ) ;
1803
1803
1804
1804
let mut region_index = self . region_index ;
1805
- let new_value = self . tcx . replace_late_bound_regions ( value. clone ( ) , |br| {
1806
- let _ = start_or_continue ( & mut self , "for<" , ", " ) ;
1807
- let kind = match br. kind {
1808
- ty:: BrNamed ( _, name) => {
1809
- let _ = write ! ( self , "{}" , name) ;
1810
- br. kind
1811
- }
1812
- ty:: BrAnon ( _) | ty:: BrEnv => {
1813
- let name = loop {
1814
- let name = name_by_region_index ( region_index) ;
1815
- region_index += 1 ;
1816
- if !self . used_region_names . contains ( & name) {
1817
- break name;
1818
- }
1819
- } ;
1820
- let _ = write ! ( self , "{}" , name) ;
1821
- ty:: BrNamed ( DefId :: local ( CRATE_DEF_INDEX ) , name)
1805
+ // If we want to print verbosly, then print *all* binders, even if they
1806
+ // aren't named. Eventually, we might just want this as the default, but
1807
+ // this is not *quite* right and changes the ordering of some output
1808
+ // anyways.
1809
+ let new_value = if self . tcx ( ) . sess . verbose ( ) {
1810
+ // anon index + 1 (BrEnv takes 0) -> name
1811
+ let mut region_map: BTreeMap < u32 , Symbol > = BTreeMap :: default ( ) ;
1812
+ let bound_vars = value. bound_vars ( ) ;
1813
+ for var in bound_vars {
1814
+ match var {
1815
+ ty:: BoundVariableKind :: Region ( ty:: BrNamed ( _, name) ) => {
1816
+ let _ = start_or_continue ( & mut self , "for<" , ", " ) ;
1817
+ let _ = write ! ( self , "{}" , name) ;
1818
+ }
1819
+ ty:: BoundVariableKind :: Region ( ty:: BrAnon ( i) ) => {
1820
+ let _ = start_or_continue ( & mut self , "for<" , ", " ) ;
1821
+ let name = loop {
1822
+ let name = name_by_region_index ( region_index) ;
1823
+ region_index += 1 ;
1824
+ if !self . used_region_names . contains ( & name) {
1825
+ break name;
1826
+ }
1827
+ } ;
1828
+ let _ = write ! ( self , "{}" , name) ;
1829
+ region_map. insert ( i + 1 , name) ;
1830
+ }
1831
+ ty:: BoundVariableKind :: Region ( ty:: BrEnv ) => {
1832
+ let _ = start_or_continue ( & mut self , "for<" , ", " ) ;
1833
+ let name = loop {
1834
+ let name = name_by_region_index ( region_index) ;
1835
+ region_index += 1 ;
1836
+ if !self . used_region_names . contains ( & name) {
1837
+ break name;
1838
+ }
1839
+ } ;
1840
+ let _ = write ! ( self , "{}" , name) ;
1841
+ region_map. insert ( 0 , name) ;
1842
+ }
1843
+ _ => continue ,
1822
1844
}
1823
- } ;
1824
- self . tcx
1825
- . mk_region ( ty:: ReLateBound ( ty:: INNERMOST , ty:: BoundRegion { var : br. var , kind } ) )
1826
- } ) ;
1827
- start_or_continue ( & mut self , "" , "> " ) ?;
1845
+ }
1846
+ start_or_continue ( & mut self , "" , "> " ) ?;
1847
+
1848
+ self . tcx . replace_late_bound_regions ( value. clone ( ) , |br| {
1849
+ let kind = match br. kind {
1850
+ ty:: BrNamed ( _, _) => br. kind ,
1851
+ ty:: BrAnon ( i) => {
1852
+ let name = region_map[ & ( i + 1 ) ] ;
1853
+ ty:: BrNamed ( DefId :: local ( CRATE_DEF_INDEX ) , name)
1854
+ }
1855
+ ty:: BrEnv => {
1856
+ let name = region_map[ & 0 ] ;
1857
+ ty:: BrNamed ( DefId :: local ( CRATE_DEF_INDEX ) , name)
1858
+ }
1859
+ } ;
1860
+ self . tcx . mk_region ( ty:: ReLateBound (
1861
+ ty:: INNERMOST ,
1862
+ ty:: BoundRegion { var : br. var , kind } ,
1863
+ ) )
1864
+ } )
1865
+ } else {
1866
+ let new_value = self . tcx . replace_late_bound_regions ( value. clone ( ) , |br| {
1867
+ let _ = start_or_continue ( & mut self , "for<" , ", " ) ;
1868
+ let kind = match br. kind {
1869
+ ty:: BrNamed ( _, name) => {
1870
+ let _ = write ! ( self , "{}" , name) ;
1871
+ br. kind
1872
+ }
1873
+ ty:: BrAnon ( _) | ty:: BrEnv => {
1874
+ let name = loop {
1875
+ let name = name_by_region_index ( region_index) ;
1876
+ region_index += 1 ;
1877
+ if !self . used_region_names . contains ( & name) {
1878
+ break name;
1879
+ }
1880
+ } ;
1881
+ let _ = write ! ( self , "{}" , name) ;
1882
+ ty:: BrNamed ( DefId :: local ( CRATE_DEF_INDEX ) , name)
1883
+ }
1884
+ } ;
1885
+ self . tcx . mk_region ( ty:: ReLateBound (
1886
+ ty:: INNERMOST ,
1887
+ ty:: BoundRegion { var : br. var , kind } ,
1888
+ ) )
1889
+ } ) ;
1890
+ start_or_continue ( & mut self , "" , "> " ) ?;
1891
+ new_value
1892
+ } ;
1828
1893
1829
1894
self . binder_depth += 1 ;
1830
1895
self . region_index = region_index;
0 commit comments