summaryrefslogtreecommitdiff
path: root/src/hir/path.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/hir/path.cpp')
-rw-r--r--src/hir/path.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/hir/path.cpp b/src/hir/path.cpp
index f0590e38..8e522aa9 100644
--- a/src/hir/path.cpp
+++ b/src/hir/path.cpp
@@ -356,3 +356,34 @@ namespace {
throw "";
}
+Ordering HIR::Path::ord(const ::HIR::Path& x) const
+{
+ ORD( (unsigned)m_data.tag(), (unsigned)x.m_data.tag() );
+ TU_MATCH(::HIR::Path::Data, (this->m_data, x.m_data), (tpe, xpe),
+ (Generic,
+ return ::ord(tpe, xpe);
+ ),
+ (UfcsInherent,
+ ORD(*tpe.type, *xpe.type);
+ ORD(tpe.item, xpe.item);
+ return ::ord(tpe.params, xpe.params);
+ ),
+ (UfcsKnown,
+ ORD(*tpe.type, *xpe.type);
+ ORD(tpe.trait, xpe.trait);
+ ORD(tpe.item, xpe.item);
+ return ::ord(tpe.params, xpe.params);
+ ),
+ (UfcsUnknown,
+ ORD(*tpe.type, *xpe.type);
+ ORD(tpe.item, xpe.item);
+ return ::ord(tpe.params, xpe.params);
+ )
+ )
+ throw "";
+}
+
+bool ::HIR::Path::operator==(const Path& x) const {
+ return this->ord(x) == ::OrdEqual;
+}
+