aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util/rust-hir-map.cc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-07-30 17:29:04 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-08-05 18:20:56 +0100
commit0db1c804562aff23344cd5882db6fc65596e0966 (patch)
tree7dc1a15dcb48e44fc56e3c0cf0a0b06e2962db2d /gcc/rust/util/rust-hir-map.cc
parent4845c776841fc408fa7aadde21db18270b6b1b12 (diff)
downloadgcc-0db1c804562aff23344cd5882db6fc65596e0966.zip
gcc-0db1c804562aff23344cd5882db6fc65596e0966.tar.gz
gcc-0db1c804562aff23344cd5882db6fc65596e0966.tar.bz2
Add missing mappings required for type resolution
Add Trait item mappings for trait resolving purposes. This allows us to lookup the trait with a trait item belongs to and vice versa.
Diffstat (limited to 'gcc/rust/util/rust-hir-map.cc')
-rw-r--r--gcc/rust/util/rust-hir-map.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 69fbe25..4ffbff0 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -383,6 +383,56 @@ Mappings::lookup_hir_expr (CrateNum crateNum, HirId id)
}
void
+Mappings::insert_hir_path_expr_seg (CrateNum crateNum, HirId id,
+ HIR::PathExprSegment *expr)
+{
+ rust_assert (lookup_hir_path_expr_seg (crateNum, id) == nullptr);
+
+ hirPathSegMappings[crateNum][id] = expr;
+ nodeIdToHirMappings[crateNum][expr->get_mappings ().get_nodeid ()] = id;
+ insert_location (crateNum, id, expr->get_locus ());
+}
+
+HIR::PathExprSegment *
+Mappings::lookup_hir_path_expr_seg (CrateNum crateNum, HirId id)
+{
+ auto it = hirPathSegMappings.find (crateNum);
+ if (it == hirPathSegMappings.end ())
+ return nullptr;
+
+ auto iy = it->second.find (id);
+ if (iy == it->second.end ())
+ return nullptr;
+
+ return iy->second;
+}
+
+void
+Mappings::insert_hir_generic_param (CrateNum crateNum, HirId id,
+ HIR::GenericParam *param)
+{
+ rust_assert (lookup_hir_generic_param (crateNum, id) == nullptr);
+
+ hirGenericParamMappings[crateNum][id] = param;
+ nodeIdToHirMappings[crateNum][param->get_mappings ().get_nodeid ()] = id;
+ insert_location (crateNum, id, param->get_locus_slow ());
+}
+
+HIR::GenericParam *
+Mappings::lookup_hir_generic_param (CrateNum crateNum, HirId id)
+{
+ auto it = hirGenericParamMappings.find (crateNum);
+ if (it == hirGenericParamMappings.end ())
+ return nullptr;
+
+ auto iy = it->second.find (id);
+ if (iy == it->second.end ())
+ return nullptr;
+
+ return iy->second;
+}
+
+void
Mappings::insert_hir_type (CrateNum crateNum, HirId id, HIR::Type *type)
{
rust_assert (lookup_hir_type (crateNum, id) == nullptr);