summaryrefslogtreecommitdiff
path: root/src/hir/generic_params.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-02 19:23:20 +0800
committerJohn Hodge <tpg@mutabah.net>2016-12-02 19:23:20 +0800
commit466023a1520cddcfae6fd8a971eb6845d19a15c5 (patch)
treeadac53f695bf623b4f53636d100212370be1d30f /src/hir/generic_params.cpp
parent35142acbe2deacf0cee3f92ed28e3beb01c22cd5 (diff)
downloadmrust-466023a1520cddcfae6fd8a971eb6845d19a15c5.tar.gz
HIR Specialistion - Rough up bound support in specialistion
Diffstat (limited to 'src/hir/generic_params.cpp')
-rw-r--r--src/hir/generic_params.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/hir/generic_params.cpp b/src/hir/generic_params.cpp
index 2c9b93d9..54290731 100644
--- a/src/hir/generic_params.cpp
+++ b/src/hir/generic_params.cpp
@@ -59,6 +59,38 @@ namespace HIR {
return os;
}
}
+Ordering ord(const HIR::GenericBound& a, const HIR::GenericBound& b)
+{
+ if( a.tag() != b.tag() )
+ return a.tag() < b.tag() ? OrdLess : OrdGreater;
+ TU_MATCHA( (a,b), (ae,be),
+ (Lifetime,
+ auto cmp = ::ord( ae.test, be.test );
+ if(cmp != OrdEqual) return cmp;
+ cmp = ::ord( ae.valid_for, be.valid_for );
+ if(cmp != OrdEqual) return cmp;
+ ),
+ (TypeLifetime,
+ auto cmp = ae.type.ord( be.type );
+ if(cmp != OrdEqual) return cmp;
+ cmp = ::ord( ae.valid_for, be.valid_for );
+ if(cmp != OrdEqual) return cmp;
+ ),
+ (TraitBound,
+ auto cmp = ae.type.ord( be.type );
+ if(cmp != OrdEqual) return cmp;
+ cmp = ae.trait.ord( be.trait );
+ if(cmp != OrdEqual) return cmp;
+ ),
+ (TypeEquality,
+ auto cmp = ae.type.ord( be.type );
+ if(cmp != OrdEqual) return cmp;
+ cmp = ae.other_type.ord( be.other_type );
+ if(cmp != OrdEqual) return cmp;
+ )
+ )
+ return OrdEqual;
+}
::HIR::GenericParams HIR::GenericParams::clone() const
{