aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/util/rust-hir-map.h
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.h
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.h')
-rw-r--r--gcc/rust/util/rust-hir-map.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 7e5449c..ccc873b 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -148,6 +148,14 @@ public:
void insert_hir_expr (CrateNum crateNum, HirId id, HIR::Expr *expr);
HIR::Expr *lookup_hir_expr (CrateNum crateNum, HirId id);
+ void insert_hir_path_expr_seg (CrateNum crateNum, HirId id,
+ HIR::PathExprSegment *expr);
+ HIR::PathExprSegment *lookup_hir_path_expr_seg (CrateNum crateNum, HirId id);
+
+ void insert_hir_generic_param (CrateNum crateNum, HirId id,
+ HIR::GenericParam *expr);
+ HIR::GenericParam *lookup_hir_generic_param (CrateNum crateNum, HirId id);
+
void insert_hir_type (CrateNum crateNum, HirId id, HIR::Type *type);
HIR::Type *lookup_hir_type (CrateNum crateNum, HirId id);
@@ -215,6 +223,20 @@ public:
!= nullptr;
}
+ void insert_trait_item_mapping (HirId trait_item_id, HIR::Trait *trait)
+ {
+ rust_assert (hirTraitItemsToTraitMappings.find (trait_item_id)
+ == hirTraitItemsToTraitMappings.end ());
+ hirTraitItemsToTraitMappings[trait_item_id] = trait;
+ }
+
+ HIR::Trait *lookup_trait_item_mapping (HirId trait_item_id)
+ {
+ auto lookup = hirTraitItemsToTraitMappings.find (trait_item_id);
+ rust_assert (lookup != hirTraitItemsToTraitMappings.end ());
+ return lookup->second;
+ }
+
private:
Mappings ();
@@ -245,6 +267,11 @@ private:
std::map<CrateNum, std::map<HirId, HIR::TraitItem *> > hirTraitItemMappings;
std::map<CrateNum, std::map<HirId, HIR::ExternalItem *> >
hirExternItemMappings;
+ std::map<CrateNum, std::map<HirId, HIR::PathExprSegment *> >
+ hirPathSegMappings;
+ std::map<CrateNum, std::map<HirId, HIR::GenericParam *> >
+ hirGenericParamMappings;
+ std::map<HirId, HIR::Trait *> hirTraitItemsToTraitMappings;
// location info
std::map<CrateNum, std::map<NodeId, Location> > locations;