diff options
Diffstat (limited to 'src/hir/generic_params.cpp')
-rw-r--r-- | src/hir/generic_params.cpp | 32 |
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 { |