diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-07-22 12:18:59 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-07-22 12:24:50 +0100 |
commit | 1dc68e40f2d2b9b0d2a208a63f4923be8b12351e (patch) | |
tree | 026930990f4d936269b14d25a6a783414b41fc1d | |
parent | 6dfde8225f4184552aca9c614894ac13144c2298 (diff) | |
download | gcc-1dc68e40f2d2b9b0d2a208a63f4923be8b12351e.zip gcc-1dc68e40f2d2b9b0d2a208a63f4923be8b12351e.tar.gz gcc-1dc68e40f2d2b9b0d2a208a63f4923be8b12351e.tar.bz2 |
Add mappings for trait items
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-implitem.h | 37 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 24 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.h | 5 |
3 files changed, 58 insertions, 8 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.h b/gcc/rust/hir/rust-ast-lower-implitem.h index 6e4c0b1..cbc80d3 100644 --- a/gcc/rust/hir/rust-ast-lower-implitem.h +++ b/gcc/rust/hir/rust-ast-lower-implitem.h @@ -364,10 +364,15 @@ public: mappings->get_next_hir_id (crate_num), mappings->get_next_localdef_id (crate_num)); - translated + HIR::TraitItemFunc *trait_item = new HIR::TraitItemFunc (mapping, std::move (decl), std::unique_ptr<HIR::Expr> (block_expr), func.get_outer_attrs (), func.get_locus ()); + translated = trait_item; + mappings->insert_hir_trait_item (mapping.get_crate_num (), + mapping.get_hirid (), translated); + mappings->insert_location (crate_num, mapping.get_hirid (), + trait_item->get_locus ()); } void visit (AST::TraitItemMethod &method) override @@ -428,10 +433,15 @@ public: mappings->get_next_hir_id (crate_num), mappings->get_next_localdef_id (crate_num)); - translated + HIR::TraitItemFunc *trait_item = new HIR::TraitItemFunc (mapping, std::move (decl), std::unique_ptr<HIR::Expr> (block_expr), method.get_outer_attrs (), method.get_locus ()); + translated = trait_item; + mappings->insert_hir_trait_item (mapping.get_crate_num (), + mapping.get_hirid (), translated); + mappings->insert_location (crate_num, mapping.get_hirid (), + trait_item->get_locus ()); } void visit (AST::TraitItemConst &constant) override @@ -447,11 +457,17 @@ public: mappings->get_next_hir_id (crate_num), mappings->get_next_localdef_id (crate_num)); - translated = new HIR::TraitItemConst (mapping, constant.get_identifier (), - std::unique_ptr<HIR::Type> (type), - std::unique_ptr<HIR::Expr> (expr), - constant.get_outer_attrs (), - constant.get_locus ()); + HIR::TraitItemConst *trait_item + = new HIR::TraitItemConst (mapping, constant.get_identifier (), + std::unique_ptr<HIR::Type> (type), + std::unique_ptr<HIR::Expr> (expr), + constant.get_outer_attrs (), + constant.get_locus ()); + translated = trait_item; + mappings->insert_hir_trait_item (mapping.get_crate_num (), + mapping.get_hirid (), translated); + mappings->insert_location (crate_num, mapping.get_hirid (), + trait_item->get_locus ()); } void visit (AST::TraitItemType &type) override @@ -463,10 +479,15 @@ public: mappings->get_next_hir_id (crate_num), mappings->get_next_localdef_id (crate_num)); - translated + HIR::TraitItemType *trait_item = new HIR::TraitItemType (mapping, type.get_identifier (), std::move (type_param_bounds), type.get_outer_attrs (), type.get_locus ()); + translated = trait_item; + mappings->insert_hir_trait_item (mapping.get_crate_num (), + mapping.get_hirid (), translated); + mappings->insert_location (crate_num, mapping.get_hirid (), + trait_item->get_locus ()); } private: diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 33ba8d0..04fd7e5 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -260,6 +260,30 @@ Mappings::lookup_hir_item (CrateNum crateNum, HirId id) } void +Mappings::insert_hir_trait_item (CrateNum crateNum, HirId id, + HIR::TraitItem *item) +{ + rust_assert (lookup_hir_item (crateNum, id) == nullptr); + + hirTraitItemMappings[crateNum][id] = item; + nodeIdToHirMappings[crateNum][item->get_mappings ().get_nodeid ()] = id; +} + +HIR::TraitItem * +Mappings::lookup_hir_trait_item (CrateNum crateNum, HirId id) +{ + auto it = hirTraitItemMappings.find (crateNum); + if (it == hirTraitItemMappings.end ()) + return nullptr; + + auto iy = it->second.find (id); + if (iy == it->second.end ()) + return nullptr; + + return iy->second; +} + +void Mappings::insert_hir_impl_block (CrateNum crateNum, HirId id, HIR::ImplBlock *item) { diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index 98c15a2..0d14569 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -128,6 +128,10 @@ public: void insert_hir_item (CrateNum crateNum, HirId id, HIR::Item *item); HIR::Item *lookup_hir_item (CrateNum crateNum, HirId id); + void insert_hir_trait_item (CrateNum crateNum, HirId id, + HIR::TraitItem *item); + HIR::TraitItem *lookup_hir_trait_item (CrateNum crateNum, HirId id); + void insert_hir_impl_block (CrateNum crateNum, HirId id, HIR::ImplBlock *item); HIR::ImplBlock *lookup_hir_impl_block (CrateNum crateNum, HirId id); @@ -232,6 +236,7 @@ private: std::map<CrateNum, std::map<HirId, HIR::SelfParam *> > hirSelfParamMappings; std::map<HirId, HIR::ImplBlock *> hirImplItemsToImplMappings; std::map<CrateNum, std::map<HirId, HIR::ImplBlock *> > hirImplBlockMappings; + std::map<CrateNum, std::map<HirId, HIR::TraitItem *> > hirTraitItemMappings; // location info std::map<CrateNum, std::map<NodeId, Location> > locations; |