@@ -1769,31 +1769,19 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
1769
1769
trait_segment : & hir:: PathSegment < ' tcx > ,
1770
1770
item_segment : & hir:: PathSegment < ' tcx > ,
1771
1771
) -> Ty < ' tcx > {
1772
- let tcx = self . tcx ( ) ;
1773
-
1774
- let trait_def_id = tcx. parent ( item_def_id) ;
1775
- debug ! ( ?trait_def_id) ;
1776
-
1777
- let Some ( self_ty) = opt_self_ty else {
1778
- let guar = self . error_missing_qpath_self_ty (
1779
- trait_def_id,
1780
- span,
1781
- item_segment,
1782
- ty:: AssocKind :: Type ,
1783
- ) ;
1784
- return Ty :: new_error ( tcx, guar) ;
1785
- } ;
1786
- debug ! ( ?self_ty) ;
1787
-
1788
- let ( item_def_id, item_args) = self . lower_qpath_shared (
1772
+ match self . lower_qpath_shared (
1789
1773
span,
1790
- self_ty,
1791
- trait_def_id,
1774
+ opt_self_ty,
1792
1775
item_def_id,
1793
1776
trait_segment,
1794
1777
item_segment,
1795
- ) ;
1796
- Ty :: new_projection_from_args ( tcx, item_def_id, item_args)
1778
+ ty:: AssocKind :: Type ,
1779
+ ) {
1780
+ Ok ( ( item_def_id, item_args) ) => {
1781
+ Ty :: new_projection_from_args ( self . tcx ( ) , item_def_id, item_args)
1782
+ }
1783
+ Err ( guar) => Ty :: new_error ( self . tcx ( ) , guar) ,
1784
+ }
1797
1785
}
1798
1786
1799
1787
/// Lower a qualified path to a const.
@@ -1806,52 +1794,50 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
1806
1794
trait_segment : & hir:: PathSegment < ' tcx > ,
1807
1795
item_segment : & hir:: PathSegment < ' tcx > ,
1808
1796
) -> Const < ' tcx > {
1809
- let tcx = self . tcx ( ) ;
1810
-
1811
- let trait_def_id = tcx. parent ( item_def_id) ;
1812
- debug ! ( ?trait_def_id) ;
1813
-
1814
- let Some ( self_ty) = opt_self_ty else {
1815
- let guar = self . error_missing_qpath_self_ty (
1816
- trait_def_id,
1817
- span,
1818
- item_segment,
1819
- ty:: AssocKind :: Const ,
1820
- ) ;
1821
- return Const :: new_error ( tcx, guar) ;
1822
- } ;
1823
- debug ! ( ?self_ty) ;
1824
-
1825
- let ( item_def_id, item_args) = self . lower_qpath_shared (
1797
+ match self . lower_qpath_shared (
1826
1798
span,
1827
- self_ty,
1828
- trait_def_id,
1799
+ opt_self_ty,
1829
1800
item_def_id,
1830
1801
trait_segment,
1831
1802
item_segment,
1832
- ) ;
1833
- let uv = ty:: UnevaluatedConst :: new ( item_def_id, item_args) ;
1834
- Const :: new_unevaluated ( tcx, uv)
1803
+ ty:: AssocKind :: Const ,
1804
+ ) {
1805
+ Ok ( ( item_def_id, item_args) ) => {
1806
+ let uv = ty:: UnevaluatedConst :: new ( item_def_id, item_args) ;
1807
+ Const :: new_unevaluated ( self . tcx ( ) , uv)
1808
+ }
1809
+ Err ( guar) => Const :: new_error ( self . tcx ( ) , guar) ,
1810
+ }
1835
1811
}
1836
1812
1837
1813
#[ instrument( level = "debug" , skip_all) ]
1838
1814
fn lower_qpath_shared (
1839
1815
& self ,
1840
1816
span : Span ,
1841
- self_ty : Ty < ' tcx > ,
1842
- trait_def_id : DefId ,
1817
+ opt_self_ty : Option < Ty < ' tcx > > ,
1843
1818
item_def_id : DefId ,
1844
1819
trait_segment : & hir:: PathSegment < ' tcx > ,
1845
1820
item_segment : & hir:: PathSegment < ' tcx > ,
1846
- ) -> ( DefId , GenericArgsRef < ' tcx > ) {
1821
+ kind : ty:: AssocKind ,
1822
+ ) -> Result < ( DefId , GenericArgsRef < ' tcx > ) , ErrorGuaranteed > {
1823
+ let tcx = self . tcx ( ) ;
1824
+
1825
+ let trait_def_id = tcx. parent ( item_def_id) ;
1826
+ debug ! ( ?trait_def_id) ;
1827
+
1828
+ let Some ( self_ty) = opt_self_ty else {
1829
+ return Err ( self . error_missing_qpath_self_ty ( trait_def_id, span, item_segment, kind) ) ;
1830
+ } ;
1831
+ debug ! ( ?self_ty) ;
1832
+
1847
1833
let trait_ref =
1848
1834
self . lower_mono_trait_ref ( span, trait_def_id, self_ty, trait_segment, false ) ;
1849
1835
debug ! ( ?trait_ref) ;
1850
1836
1851
1837
let item_args =
1852
1838
self . lower_generic_args_of_assoc_item ( span, item_def_id, item_segment, trait_ref. args ) ;
1853
1839
1854
- ( item_def_id, item_args)
1840
+ Ok ( ( item_def_id, item_args) )
1855
1841
}
1856
1842
1857
1843
fn error_missing_qpath_self_ty (
0 commit comments