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