diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-02 19:23:20 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-02 19:23:20 +0800 |
commit | 466023a1520cddcfae6fd8a971eb6845d19a15c5 (patch) | |
tree | adac53f695bf623b4f53636d100212370be1d30f /src/hir/generic_params.cpp | |
parent | 35142acbe2deacf0cee3f92ed28e3beb01c22cd5 (diff) | |
download | mrust-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.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 { |