diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-07-30 17:29:04 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-08-05 18:20:56 +0100 |
commit | 0db1c804562aff23344cd5882db6fc65596e0966 (patch) | |
tree | 7dc1a15dcb48e44fc56e3c0cf0a0b06e2962db2d /gcc/rust/util/rust-hir-map.cc | |
parent | 4845c776841fc408fa7aadde21db18270b6b1b12 (diff) | |
download | gcc-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.cc | 50 |
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); |