summaryrefslogtreecommitdiff
path: root/src/hir/generic_params.cpp
diff options
context:
space:
mode:
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
{