summaryrefslogtreecommitdiff
path: root/src/hir/type.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/type.cpp')
-rw-r--r--src/hir/type.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/src/hir/type.cpp b/src/hir/type.cpp
index 981ed0b3..ff4742e6 100644
--- a/src/hir/type.cpp
+++ b/src/hir/type.cpp
@@ -177,12 +177,10 @@ void ::HIR::TypeRef::fmt(::std::ostream& os) const
}
TU_ARM(m_data, Closure, e) {
os << "closure["<<e.node<<"]";
- /*
os << "(";
for(const auto& t : e.m_arg_types)
os << t << ", ";
os << ") -> " << *e.m_rettype;
- */
}
}
}
@@ -901,6 +899,22 @@ bool ::HIR::TypeRef::match_test_generics(const Span& sp, const ::HIR::TypeRef& x
return Compare::Equal;
}
+ // Unbound paths and placeholder generics
+ if( left.m_data.tag() != right.m_data.tag() ) {
+ if( left.m_data.is_Path() && left.m_data.as_Path().binding.is_Unbound() ) {
+ return Compare::Fuzzy;
+ }
+ if( right.m_data.is_Path() && right.m_data.as_Path().binding.is_Unbound() ) {
+ return Compare::Fuzzy;
+ }
+ if( left.m_data.is_Generic() && (left.m_data.as_Generic().binding >> 8) == 2 ) {
+ return Compare::Fuzzy;
+ }
+ if( right.m_data.is_Generic() && (right.m_data.as_Generic().binding >> 8) == 2 ) {
+ return Compare::Fuzzy;
+ }
+ }
+
// If left is infer
TU_IFLET(::HIR::TypeRef::Data, left.m_data, Infer, e,
switch(e.ty_class)
@@ -1025,18 +1039,6 @@ bool ::HIR::TypeRef::match_test_generics(const Span& sp, const ::HIR::TypeRef& x
// - See `(Generic,` below
if( left.m_data.tag() != right.m_data.tag() ) {
- if( left.m_data.is_Path() && left.m_data.as_Path().binding.is_Unbound() ) {
- return Compare::Fuzzy;
- }
- if( right.m_data.is_Path() && right.m_data.as_Path().binding.is_Unbound() ) {
- return Compare::Fuzzy;
- }
- if( left.m_data.is_Generic() && (left.m_data.as_Generic().binding >> 8) == 2 ) {
- return Compare::Fuzzy;
- }
- if( right.m_data.is_Generic() && (right.m_data.as_Generic().binding >> 8) == 2 ) {
- return Compare::Fuzzy;
- }
return Compare::Unequal;
}
TU_MATCH(::HIR::TypeRef::Data, (left.m_data, right.m_data), (le, re),