@@ -1708,6 +1708,7 @@ impl<'db> InferenceContext<'db> {
1708
1708
LifetimeElisionKind :: Infer ,
1709
1709
) ;
1710
1710
let mut path_ctx = ctx. at_path ( path, node) ;
1711
+ let interner = DbInterner :: conjure ( ) ;
1711
1712
let ( resolution, unresolved) = if value_ns {
1712
1713
let Some ( res) = path_ctx. resolve_path_in_value_ns ( HygieneId :: ROOT ) else {
1713
1714
return ( self . err_ty ( ) , None ) ;
@@ -1717,15 +1718,27 @@ impl<'db> InferenceContext<'db> {
1717
1718
ValueNs :: EnumVariantId ( var) => {
1718
1719
let substs = path_ctx. substs_from_path ( var. into ( ) , true , false ) ;
1719
1720
drop ( ctx) ;
1720
- let ty = self . db . ty ( var. lookup ( self . db ) . parent . into ( ) ) ;
1721
- let ty = self . insert_type_vars ( ty. substitute ( Interner , & substs) ) ;
1721
+ let args: crate :: next_solver:: GenericArgs < ' _ > =
1722
+ substs. to_nextsolver ( interner) ;
1723
+ let ty = self
1724
+ . db
1725
+ . ty ( var. lookup ( self . db ) . parent . into ( ) )
1726
+ . instantiate ( interner, args)
1727
+ . to_chalk ( interner) ;
1728
+ let ty = self . insert_type_vars ( ty) ;
1722
1729
return ( ty, Some ( var. into ( ) ) ) ;
1723
1730
}
1724
1731
ValueNs :: StructId ( strukt) => {
1725
1732
let substs = path_ctx. substs_from_path ( strukt. into ( ) , true , false ) ;
1726
1733
drop ( ctx) ;
1727
- let ty = self . db . ty ( strukt. into ( ) ) ;
1728
- let ty = self . insert_type_vars ( ty. substitute ( Interner , & substs) ) ;
1734
+ let args: crate :: next_solver:: GenericArgs < ' _ > =
1735
+ substs. to_nextsolver ( interner) ;
1736
+ let ty = self
1737
+ . db
1738
+ . ty ( strukt. into ( ) )
1739
+ . instantiate ( interner, args)
1740
+ . to_chalk ( interner) ;
1741
+ let ty = self . insert_type_vars ( ty) ;
1729
1742
return ( ty, Some ( strukt. into ( ) ) ) ;
1730
1743
}
1731
1744
ValueNs :: ImplSelf ( impl_id) => ( TypeNs :: SelfType ( impl_id) , None ) ,
@@ -1746,22 +1759,29 @@ impl<'db> InferenceContext<'db> {
1746
1759
TypeNs :: AdtId ( AdtId :: StructId ( strukt) ) => {
1747
1760
let substs = path_ctx. substs_from_path ( strukt. into ( ) , true , false ) ;
1748
1761
drop ( ctx) ;
1749
- let ty = self . db . ty ( strukt. into ( ) ) ;
1750
- let ty = self . insert_type_vars ( ty. substitute ( Interner , & substs) ) ;
1762
+ let args: crate :: next_solver:: GenericArgs < ' _ > = substs. to_nextsolver ( interner) ;
1763
+ let ty = self . db . ty ( strukt. into ( ) ) . instantiate ( interner, args) . to_chalk ( interner) ;
1764
+ let ty = self . insert_type_vars ( ty) ;
1751
1765
forbid_unresolved_segments ( ( ty, Some ( strukt. into ( ) ) ) , unresolved)
1752
1766
}
1753
1767
TypeNs :: AdtId ( AdtId :: UnionId ( u) ) => {
1754
1768
let substs = path_ctx. substs_from_path ( u. into ( ) , true , false ) ;
1755
1769
drop ( ctx) ;
1756
- let ty = self . db . ty ( u. into ( ) ) ;
1757
- let ty = self . insert_type_vars ( ty. substitute ( Interner , & substs) ) ;
1770
+ let args: crate :: next_solver:: GenericArgs < ' _ > = substs. to_nextsolver ( interner) ;
1771
+ let ty = self . db . ty ( u. into ( ) ) . instantiate ( interner, args) . to_chalk ( interner) ;
1772
+ let ty = self . insert_type_vars ( ty) ;
1758
1773
forbid_unresolved_segments ( ( ty, Some ( u. into ( ) ) ) , unresolved)
1759
1774
}
1760
1775
TypeNs :: EnumVariantId ( var) => {
1761
1776
let substs = path_ctx. substs_from_path ( var. into ( ) , true , false ) ;
1762
1777
drop ( ctx) ;
1763
- let ty = self . db . ty ( var. lookup ( self . db ) . parent . into ( ) ) ;
1764
- let ty = self . insert_type_vars ( ty. substitute ( Interner , & substs) ) ;
1778
+ let args: crate :: next_solver:: GenericArgs < ' _ > = substs. to_nextsolver ( interner) ;
1779
+ let ty = self
1780
+ . db
1781
+ . ty ( var. lookup ( self . db ) . parent . into ( ) )
1782
+ . instantiate ( interner, args)
1783
+ . to_chalk ( interner) ;
1784
+ let ty = self . insert_type_vars ( ty) ;
1765
1785
forbid_unresolved_segments ( ( ty, Some ( var. into ( ) ) ) , unresolved)
1766
1786
}
1767
1787
TypeNs :: SelfType ( impl_id) => {
@@ -1844,8 +1864,10 @@ impl<'db> InferenceContext<'db> {
1844
1864
} ;
1845
1865
let substs = path_ctx. substs_from_path_segment ( it. into ( ) , true , None , false ) ;
1846
1866
drop ( ctx) ;
1847
- let ty = self . db . ty ( it. into ( ) ) ;
1848
- let ty = self . insert_type_vars ( ty. substitute ( Interner , & substs) ) ;
1867
+ let interner = DbInterner :: conjure ( ) ;
1868
+ let args: crate :: next_solver:: GenericArgs < ' _ > = substs. to_nextsolver ( interner) ;
1869
+ let ty = self . db . ty ( it. into ( ) ) . instantiate ( interner, args) . to_chalk ( interner) ;
1870
+ let ty = self . insert_type_vars ( ty) ;
1849
1871
1850
1872
self . resolve_variant_on_alias ( ty, unresolved, mod_path)
1851
1873
}
0 commit comments