diff options
-rw-r--r-- | crates/hir/src/lib.rs | 4 | ||||
-rw-r--r-- | crates/hir_ty/src/display.rs | 18 | ||||
-rw-r--r-- | crates/hir_ty/src/infer/unify.rs | 1 | ||||
-rw-r--r-- | crates/hir_ty/src/traits.rs | 1 | ||||
-rw-r--r-- | crates/hir_ty/src/walk.rs | 2 |
5 files changed, 23 insertions, 3 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 0afc06906..817a01db1 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs | |||
@@ -1903,7 +1903,9 @@ impl Type { | |||
1903 | | TyKind::Dyn(_) | 1903 | | TyKind::Dyn(_) |
1904 | | TyKind::Function(_) | 1904 | | TyKind::Function(_) |
1905 | | TyKind::Alias(_) | 1905 | | TyKind::Alias(_) |
1906 | | TyKind::Foreign(_) => false, | 1906 | | TyKind::Foreign(_) |
1907 | | TyKind::Generator(..) | ||
1908 | | TyKind::GeneratorWitness(..) => false, | ||
1907 | } | 1909 | } |
1908 | } | 1910 | } |
1909 | } | 1911 | } |
diff --git a/crates/hir_ty/src/display.rs b/crates/hir_ty/src/display.rs index e0ca96c6d..d7a3977e5 100644 --- a/crates/hir_ty/src/display.rs +++ b/crates/hir_ty/src/display.rs | |||
@@ -287,6 +287,8 @@ impl HirDisplay for GenericArg { | |||
287 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { | 287 | fn hir_fmt(&self, f: &mut HirFormatter) -> Result<(), HirDisplayError> { |
288 | match self.interned() { | 288 | match self.interned() { |
289 | crate::GenericArgData::Ty(ty) => ty.hir_fmt(f), | 289 | crate::GenericArgData::Ty(ty) => ty.hir_fmt(f), |
290 | crate::GenericArgData::Lifetime(lt) => lt.hir_fmt(f), | ||
291 | crate::GenericArgData::Const(c) => c.hir_fmt(f), | ||
290 | } | 292 | } |
291 | } | 293 | } |
292 | } | 294 | } |
@@ -664,6 +666,8 @@ impl HirDisplay for Ty { | |||
664 | write!(f, "{{unknown}}")?; | 666 | write!(f, "{{unknown}}")?; |
665 | } | 667 | } |
666 | TyKind::InferenceVar(..) => write!(f, "_")?, | 668 | TyKind::InferenceVar(..) => write!(f, "_")?, |
669 | TyKind::Generator(..) => write!(f, "{{generator}}")?, | ||
670 | TyKind::GeneratorWitness(..) => write!(f, "{{generator witness}}")?, | ||
667 | } | 671 | } |
668 | Ok(()) | 672 | Ok(()) |
669 | } | 673 | } |
@@ -741,7 +745,7 @@ fn write_bounds_like_dyn_trait( | |||
741 | if !first { | 745 | if !first { |
742 | write!(f, " + ")?; | 746 | write!(f, " + ")?; |
743 | } | 747 | } |
744 | // We assume that the self type is $0 (i.e. the | 748 | // We assume that the self type is ^0.0 (i.e. the |
745 | // existential) here, which is the only thing that's | 749 | // existential) here, which is the only thing that's |
746 | // possible in actual Rust, and hence don't print it | 750 | // possible in actual Rust, and hence don't print it |
747 | write!(f, "{}", f.db.trait_data(trait_).name)?; | 751 | write!(f, "{}", f.db.trait_data(trait_).name)?; |
@@ -783,6 +787,10 @@ fn write_bounds_like_dyn_trait( | |||
783 | } | 787 | } |
784 | ty.hir_fmt(f)?; | 788 | ty.hir_fmt(f)?; |
785 | } | 789 | } |
790 | |||
791 | // FIXME implement these | ||
792 | WhereClause::LifetimeOutlives(_) => {} | ||
793 | WhereClause::TypeOutlives(_) => {} | ||
786 | } | 794 | } |
787 | first = false; | 795 | first = false; |
788 | } | 796 | } |
@@ -837,6 +845,10 @@ impl HirDisplay for WhereClause { | |||
837 | ty.hir_fmt(f)?; | 845 | ty.hir_fmt(f)?; |
838 | } | 846 | } |
839 | WhereClause::AliasEq(_) => write!(f, "{{error}}")?, | 847 | WhereClause::AliasEq(_) => write!(f, "{{error}}")?, |
848 | |||
849 | // FIXME implement these | ||
850 | WhereClause::TypeOutlives(..) => {} | ||
851 | WhereClause::LifetimeOutlives(..) => {} | ||
840 | } | 852 | } |
841 | Ok(()) | 853 | Ok(()) |
842 | } | 854 | } |
@@ -881,9 +893,11 @@ impl HirDisplay for DomainGoal { | |||
881 | DomainGoal::Holds(wc) => { | 893 | DomainGoal::Holds(wc) => { |
882 | write!(f, "Holds(")?; | 894 | write!(f, "Holds(")?; |
883 | wc.hir_fmt(f)?; | 895 | wc.hir_fmt(f)?; |
884 | write!(f, ")") | 896 | write!(f, ")")?; |
885 | } | 897 | } |
898 | _ => write!(f, "?")?, | ||
886 | } | 899 | } |
900 | Ok(()) | ||
887 | } | 901 | } |
888 | } | 902 | } |
889 | 903 | ||
diff --git a/crates/hir_ty/src/infer/unify.rs b/crates/hir_ty/src/infer/unify.rs index ffa324b6d..648af4ebf 100644 --- a/crates/hir_ty/src/infer/unify.rs +++ b/crates/hir_ty/src/infer/unify.rs | |||
@@ -116,6 +116,7 @@ impl<'a, 'b> Canonicalizer<'a, 'b> { | |||
116 | DomainGoal::Holds(wc) => { | 116 | DomainGoal::Holds(wc) => { |
117 | DomainGoal::Holds(self.do_canonicalize(wc, DebruijnIndex::INNERMOST)) | 117 | DomainGoal::Holds(self.do_canonicalize(wc, DebruijnIndex::INNERMOST)) |
118 | } | 118 | } |
119 | _ => unimplemented!(), | ||
119 | }; | 120 | }; |
120 | self.into_canonicalized(InEnvironment { goal: result, environment: obligation.environment }) | 121 | self.into_canonicalized(InEnvironment { goal: result, environment: obligation.environment }) |
121 | } | 122 | } |
diff --git a/crates/hir_ty/src/traits.rs b/crates/hir_ty/src/traits.rs index cc1d2ca18..de1d37e17 100644 --- a/crates/hir_ty/src/traits.rs +++ b/crates/hir_ty/src/traits.rs | |||
@@ -81,6 +81,7 @@ pub(crate) fn trait_solve_query( | |||
81 | db.trait_data(it.hir_trait_id()).name.to_string() | 81 | db.trait_data(it.hir_trait_id()).name.to_string() |
82 | } | 82 | } |
83 | DomainGoal::Holds(WhereClause::AliasEq(_)) => "alias_eq".to_string(), | 83 | DomainGoal::Holds(WhereClause::AliasEq(_)) => "alias_eq".to_string(), |
84 | _ => "??".to_string(), | ||
84 | }); | 85 | }); |
85 | log::info!("trait_solve_query({})", goal.value.goal.display(db)); | 86 | log::info!("trait_solve_query({})", goal.value.goal.display(db)); |
86 | 87 | ||
diff --git a/crates/hir_ty/src/walk.rs b/crates/hir_ty/src/walk.rs index 28875dbe0..57343fd61 100644 --- a/crates/hir_ty/src/walk.rs +++ b/crates/hir_ty/src/walk.rs | |||
@@ -93,6 +93,7 @@ impl TypeWalk for GenericArg { | |||
93 | GenericArgData::Ty(ty) => { | 93 | GenericArgData::Ty(ty) => { |
94 | ty.walk(f); | 94 | ty.walk(f); |
95 | } | 95 | } |
96 | _ => {} | ||
96 | } | 97 | } |
97 | } | 98 | } |
98 | } | 99 | } |
@@ -122,6 +123,7 @@ impl TypeWalk for WhereClause { | |||
122 | match self { | 123 | match self { |
123 | WhereClause::Implemented(trait_ref) => trait_ref.walk(f), | 124 | WhereClause::Implemented(trait_ref) => trait_ref.walk(f), |
124 | WhereClause::AliasEq(alias_eq) => alias_eq.walk(f), | 125 | WhereClause::AliasEq(alias_eq) => alias_eq.walk(f), |
126 | _ => {} | ||
125 | } | 127 | } |
126 | } | 128 | } |
127 | } | 129 | } |