From 466023a1520cddcfae6fd8a971eb6845d19a15c5 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 2 Dec 2016 19:23:20 +0800 Subject: HIR Specialistion - Rough up bound support in specialistion --- src/hir/generic_params.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/hir/generic_params.cpp') 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 { -- cgit v1.2.3