aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util/rust-mapping-common.h
diff options
context:
space:
mode:
authorCohenArthur <arthur.cohen@epita.fr>2021-11-08 22:44:02 +0100
committerGitHub <noreply@github.com>2021-11-08 22:44:02 +0100
commit07fee63db7b06207917849410e12de750bdb646f (patch)
tree1bbb8b1cc483cd37180cc3197cc1780fc9824935 /gcc/rust/util/rust-mapping-common.h
parentd11a50eca3773fb29430db6d3ea3ccc2bb4335fa (diff)
parenta7c31383def5c499864d61c5d00a1575d1cbff81 (diff)
downloadgcc-07fee63db7b06207917849410e12de750bdb646f.zip
gcc-07fee63db7b06207917849410e12de750bdb646f.tar.gz
gcc-07fee63db7b06207917849410e12de750bdb646f.tar.bz2
Merge pull request #792 from npate012/defid_to_struct
Change DefId type from uint64_t to be struct
Diffstat (limited to 'gcc/rust/util/rust-mapping-common.h')
-rw-r--r--gcc/rust/util/rust-mapping-common.h25
1 files changed, 20 insertions, 5 deletions
diff --git a/gcc/rust/util/rust-mapping-common.h b/gcc/rust/util/rust-mapping-common.h
index 1309a8d..0665779 100644
--- a/gcc/rust/util/rust-mapping-common.h
+++ b/gcc/rust/util/rust-mapping-common.h
@@ -31,17 +31,32 @@ typedef uint32_t NodeId;
typedef uint32_t HirId;
// refers to any top-level decl in HIR
typedef uint32_t LocalDefId;
-// refers to <Crate><DefId>
-typedef uint64_t DefId;
-#define DEF_ID_CRATE_MASK 0xFFFFFFFF00000000
-#define DEF_ID_LOCAL_DEF_MASK 0x00000000FFFFFFFF
+struct DefId
+{
+ CrateNum crateNum;
+ LocalDefId localDefId;
+
+ bool operator== (const DefId &other) const
+ {
+ return this->crateNum == other.crateNum
+ && this->localDefId == other.localDefId;
+ }
+
+ bool operator!= (const DefId &other) const { return !(*this == other); }
+
+ bool operator< (const DefId &other) const
+ {
+ return ((uint64_t) this->crateNum << 32 | this->localDefId)
+ < ((uint64_t) other.crateNum << 32 | other.localDefId);
+ }
+};
#define UNKNOWN_CREATENUM ((uint32_t) (0))
#define UNKNOWN_NODEID ((uint32_t) (0))
#define UNKNOWN_HIRID ((uint32_t) (0))
#define UNKNOWN_LOCAL_DEFID ((uint32_t) (0))
-#define UNKNOWN_DEFID ((uint64_t) (0))
+#define UNKNOWN_DEFID (DefId{0, 0})
} // namespace Rust