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.cpp62
1 files changed, 40 insertions, 22 deletions
diff --git a/src/hir/type.cpp b/src/hir/type.cpp
index 812e01e4..5233b681 100644
--- a/src/hir/type.cpp
+++ b/src/hir/type.cpp
@@ -103,6 +103,17 @@ void ::HIR::TypeRef::fmt(::std::ostream& os) const
os << "+ '" << e.m_lifetime.name;
os << ")";
),
+ (ErasedType,
+ os << "impl ";
+ for(const auto& tr : e.m_traits) {
+ if( &tr != &e.m_traits[0] )
+ os << "+";
+ os << tr;
+ }
+ if( e.m_lifetime.name != "" )
+ os << "+ '" << e.m_lifetime.name;
+ os << "/*" << e.m_origin << "*/";
+ ),
(Array,
os << "[" << *e.inner << "; ";
if( e.size_val != ~0u )
@@ -225,6 +236,9 @@ bool ::HIR::TypeRef::operator==(const ::HIR::TypeRef& x) const
}
return te.m_lifetime == xe.m_lifetime;
),
+ (ErasedType,
+ return te.m_origin == xe.m_origin;
+ ),
(Array,
if( *te.inner != *xe.inner )
return false;
@@ -299,28 +313,7 @@ Ordering HIR::TypeRef::ord(const ::HIR::TypeRef& x) const
return ::ord( static_cast<unsigned>(te), static_cast<unsigned>(xe) );
),
(Path,
- ORD( (unsigned)te.path.m_data.tag(), (unsigned)xe.path.m_data.tag() );
- TU_MATCH(::HIR::Path::Data, (te.path.m_data, xe.path.m_data), (tpe, xpe),
- (Generic,
- return ::ord(tpe, xpe);
- ),
- (UfcsInherent,
- ORD(*tpe.type, *xpe.type);
- ORD(tpe.item, xpe.item);
- return ::ord(tpe.params, xpe.params);
- ),
- (UfcsKnown,
- ORD(*tpe.type, *xpe.type);
- ORD(tpe.trait, xpe.trait);
- ORD(tpe.item, xpe.item);
- return ::ord(tpe.params, xpe.params);
- ),
- (UfcsUnknown,
- ORD(*tpe.type, *xpe.type);
- ORD(tpe.item, xpe.item);
- return ::ord(tpe.params, xpe.params);
- )
- )
+ return ::ord( te.path, xe.path );
),
(Generic,
ORD(te.name, xe.name);
@@ -334,6 +327,11 @@ Ordering HIR::TypeRef::ord(const ::HIR::TypeRef& x) const
return OrdEqual;
//return ::ord(te.m_lifetime, xe.m_lifetime);
),
+ (ErasedType,
+ ORD(te.m_origin, xe.m_origin);
+ ORD(te.m_traits, xe.m_traits);
+ return OrdEqual;
+ ),
(Array,
ORD(*te.inner, *xe.inner);
ORD(te.size_val, xe.size_val);
@@ -413,6 +411,9 @@ bool ::HIR::TypeRef::contains_generics() const
(TraitObject,
TODO(Span(), "TraitObject");
),
+ (ErasedType,
+ TODO(Span(), "ErasedType");
+ ),
(Array,
return te.inner->contains_generics();
),
@@ -664,6 +665,9 @@ bool ::HIR::TypeRef::match_test_generics(const Span& sp, const ::HIR::TypeRef& x
}
return cmp;
),
+ (ErasedType,
+ TODO(sp, "ErasedType - match_test_generics_fuzz - " << v << " -- " << x);
+ ),
(Array,
return te.inner->match_test_generics_fuzz( sp, *xe.inner, resolve_placeholder, callback );
),
@@ -757,6 +761,17 @@ bool ::HIR::TypeRef::match_test_generics(const Span& sp, const ::HIR::TypeRef& x
rv.m_lifetime = e.m_lifetime;
return ::HIR::TypeRef( Data::make_TraitObject( mv$(rv) ) );
),
+ (ErasedType,
+ ::std::vector< ::HIR::TraitPath> traits;
+ traits.reserve( e.m_traits.size() );
+ for(const auto& trait : e.m_traits)
+ traits.push_back( trait.clone() );
+ return ::HIR::TypeRef( Data::make_ErasedType({
+ e.m_origin.clone(),
+ mv$(traits),
+ e.m_lifetime
+ }) );
+ ),
(Array,
unsigned int size_val = e.size_val;
if( e.size_val == ~0u ) {
@@ -1000,6 +1015,9 @@ bool ::HIR::TypeRef::match_test_generics(const Span& sp, const ::HIR::TypeRef& x
}
return rv;
),
+ (ErasedType,
+ TODO(sp, "ErasedType");
+ ),
(Array,
if( le.size_val != re.size_val )
return Compare::Unequal;