aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-07-22 12:18:59 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-07-22 12:24:50 +0100
commit1dc68e40f2d2b9b0d2a208a63f4923be8b12351e (patch)
tree026930990f4d936269b14d25a6a783414b41fc1d
parent6dfde8225f4184552aca9c614894ac13144c2298 (diff)
downloadgcc-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.h37
-rw-r--r--gcc/rust/util/rust-hir-map.cc24
-rw-r--r--gcc/rust/util/rust-hir-map.h5
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;