LCOV - code coverage report
Current view: top level - gcc/rust/util - rust-hir-map.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 100.0 % 27 27
Test Date: 2026-09-19 16:22:48 Functions: 100.0 % 6 6
Legend: Lines:     hit not hit

            Line data    Source code
       1              : // Copyright (C) 2020-2026 Free Software Foundation, Inc.
       2              : 
       3              : // This file is part of GCC.
       4              : 
       5              : // GCC is free software; you can redistribute it and/or modify it under
       6              : // the terms of the GNU General Public License as published by the Free
       7              : // Software Foundation; either version 3, or (at your option) any later
       8              : // version.
       9              : 
      10              : // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      11              : // WARRANTY; without even the implied warranty of MERCHANTABILITY or
      12              : // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      13              : // for more details.
      14              : 
      15              : // You should have received a copy of the GNU General Public License
      16              : // along with GCC; see the file COPYING3.  If not see
      17              : // <http://www.gnu.org/licenses/>.
      18              : 
      19              : #ifndef RUST_HIR_MAP_H
      20              : #define RUST_HIR_MAP_H
      21              : 
      22              : #include "optional.h"
      23              : #include "rust-system.h"
      24              : #include "rust-location.h"
      25              : #include "rust-mapping-common.h"
      26              : #include "rust-canonical-path.h"
      27              : #include "rust-ast-full-decls.h"
      28              : #include "rust-hir-full-decls.h"
      29              : #include "rust-lang-item.h"
      30              : #include "rust-privacy-common.h"
      31              : #include "libproc_macro_internal/proc_macro.h"
      32              : #include "rust-proc-macro.h"
      33              : #include "optional.h"
      34              : 
      35              : namespace Rust {
      36              : namespace Analysis {
      37              : 
      38              : class NodeMapping
      39              : {
      40              : public:
      41       665421 :   NodeMapping (CrateNum crateNum, NodeId nodeId, HirId hirId,
      42              :                LocalDefId localDefId)
      43       613723 :     : crateNum (crateNum), nodeId (nodeId), hirId (hirId),
      44       613723 :       localDefId (localDefId)
      45              :   {}
      46              : 
      47              :   static NodeMapping get_error ();
      48              : 
      49              :   CrateNum get_crate_num () const;
      50              :   NodeId get_nodeid () const;
      51              :   HirId get_hirid () const;
      52              :   LocalDefId get_local_defid () const;
      53              :   DefId get_defid () const;
      54              : 
      55              :   static DefId get_defid (CrateNum crate_num, LocalDefId local_defid);
      56              : 
      57              :   std::string as_string () const;
      58              : 
      59              :   bool is_equal (const NodeMapping &other) const
      60              :   {
      61              :     return get_crate_num () == other.get_crate_num ()
      62              :            && get_nodeid () == other.get_nodeid ()
      63              :            && get_hirid () == other.get_hirid ()
      64              :            && get_local_defid () == other.get_local_defid ();
      65              :   }
      66              : 
      67              : private:
      68              :   CrateNum crateNum;
      69              :   NodeId nodeId;
      70              :   HirId hirId;
      71              :   LocalDefId localDefId;
      72              : };
      73              : 
      74              : class Mappings
      75              : {
      76              : public:
      77              :   static Mappings &get ();
      78              :   ~Mappings ();
      79              : 
      80              :   CrateNum get_next_crate_num (const std::string &name);
      81              :   void set_current_crate (CrateNum crateNum);
      82              :   CrateNum get_current_crate () const;
      83              :   tl::optional<const std::string &> get_crate_name (CrateNum crate_num) const;
      84              : 
      85              :   tl::optional<CrateNum> lookup_crate_num (NodeId node_id) const;
      86              :   void set_crate_name (CrateNum crate_num, const std::string &name);
      87              :   const std::string &get_current_crate_name () const;
      88              :   tl::optional<CrateNum>
      89              :   lookup_crate_name (const std::string &crate_name) const;
      90              :   tl::optional<NodeId> crate_num_to_nodeid (const CrateNum &crate_num) const;
      91              :   bool node_is_crate (NodeId node_id) const;
      92              : 
      93              :   NodeId get_next_node_id ();
      94       240082 :   HirId get_next_hir_id () { return get_next_hir_id (get_current_crate ()); }
      95              :   HirId get_next_hir_id (CrateNum crateNum);
      96              :   LocalDefId get_next_localdef_id ()
      97              :   {
      98              :     return get_next_localdef_id (get_current_crate ());
      99              :   }
     100              :   LocalDefId get_next_localdef_id (CrateNum crateNum);
     101              : 
     102              :   AST::Crate &get_ast_crate (CrateNum crateNum);
     103              :   AST::Crate &get_ast_crate_by_node_id (NodeId id);
     104              :   AST::Crate &insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
     105              :                                 CrateNum crate_num);
     106              :   HIR::Crate &insert_hir_crate (std::unique_ptr<HIR::Crate> &&crate);
     107              :   HIR::Crate &get_hir_crate (CrateNum crateNum);
     108              :   bool is_local_hirid_crate (HirId crateNum);
     109              : 
     110              :   void insert_defid_mapping (DefId id, HIR::Item *item);
     111              :   tl::optional<HIR::Item *> lookup_defid (DefId id);
     112              :   void insert_defid_mapping (DefId id, HIR::TraitItem *item);
     113              :   tl::optional<HIR::TraitItem *> lookup_trait_item_defid (DefId id);
     114              : 
     115              :   void insert_local_defid_mapping (CrateNum crateNum, LocalDefId id,
     116              :                                    HIR::Item *item);
     117              :   tl::optional<HIR::Item *> lookup_local_defid (CrateNum crateNum,
     118              :                                                 LocalDefId id);
     119              : 
     120              :   void insert_hir_item (HIR::Item *item);
     121              :   tl::optional<HIR::Item *> lookup_hir_item (HirId id);
     122              : 
     123              :   void insert_hir_enumitem (HIR::Enum *parent, HIR::EnumItem *item);
     124              :   std::pair<HIR::Enum *, HIR::EnumItem *> lookup_hir_enumitem (HirId id);
     125              : 
     126              :   void insert_hir_trait_item (HIR::TraitItem *item);
     127              :   tl::optional<HIR::TraitItem *> lookup_hir_trait_item (HirId id);
     128              : 
     129              :   void insert_hir_extern_block (HIR::ExternBlock *block);
     130              :   tl::optional<HIR::ExternBlock *> lookup_hir_extern_block (HirId id);
     131              : 
     132              :   void insert_hir_extern_item (HIR::ExternalItem *item, HirId parent_block);
     133              : 
     134              :   // std::pair<hir_extern_item, parent hirid>
     135              :   tl::optional<std::pair<HIR::ExternalItem *, HirId>>
     136              :   lookup_hir_extern_item (HirId id);
     137              : 
     138              :   void insert_hir_impl_block (HIR::ImplBlock *item);
     139              :   tl::optional<HIR::ImplBlock *> lookup_hir_impl_block (HirId id);
     140              :   tl::optional<HIR::ImplBlock *> lookup_impl_block_type (HirId id);
     141              : 
     142              :   void insert_module (HIR::Module *module);
     143              :   tl::optional<HIR::Module *> lookup_module (HirId id);
     144              : 
     145              :   void insert_hir_implitem (HirId parent_impl_id, HIR::ImplItem *item);
     146              :   // Optional<ImpItem, ParentImpl Hir id>
     147              :   tl::optional<std::pair<HIR::ImplItem *, HirId>>
     148              :   lookup_hir_implitem (HirId id);
     149              : 
     150              :   void insert_hir_expr (HIR::Expr *expr);
     151              :   tl::optional<HIR::Expr *> lookup_hir_expr (HirId id);
     152              : 
     153              :   void insert_hir_path_expr_seg (HIR::PathExprSegment *expr);
     154              :   tl::optional<HIR::PathExprSegment *> lookup_hir_path_expr_seg (HirId id);
     155              : 
     156              :   void insert_hir_generic_param (HIR::GenericParam *expr);
     157              :   tl::optional<HIR::GenericParam *> lookup_hir_generic_param (HirId id);
     158              : 
     159              :   void insert_hir_type (HIR::Type *type);
     160              :   tl::optional<HIR::Type *> lookup_hir_type (HirId id);
     161              : 
     162              :   void insert_hir_stmt (HIR::Stmt *stmt);
     163              :   tl::optional<HIR::Stmt *> lookup_hir_stmt (HirId id);
     164              : 
     165              :   void insert_hir_param (HIR::FunctionParam *type);
     166              :   tl::optional<HIR::FunctionParam *> lookup_hir_param (HirId id);
     167              : 
     168              :   void insert_hir_self_param (HIR::SelfParam *type);
     169              :   tl::optional<HIR::SelfParam *> lookup_hir_self_param (HirId id);
     170              : 
     171              :   void insert_hir_struct_field (HIR::StructExprField *type);
     172              :   tl::optional<HIR::StructExprField *> lookup_hir_struct_field (HirId id);
     173              : 
     174              :   void insert_hir_pattern (HIR::Pattern *pattern);
     175              :   tl::optional<HIR::Pattern *> lookup_hir_pattern (HirId id);
     176              : 
     177              :   void walk_local_defids_for_crate (CrateNum crateNum,
     178              :                                     std::function<bool (HIR::Item *)> cb);
     179              : 
     180              :   void insert_node_to_hir (NodeId id, HirId ref);
     181              :   tl::optional<HirId> lookup_node_to_hir (NodeId id);
     182              :   tl::optional<NodeId> lookup_hir_to_node (HirId id);
     183              : 
     184              :   void insert_location (HirId id, location_t locus);
     185              :   location_t lookup_location (HirId id);
     186              : 
     187              :   tl::optional<HIR::Stmt *> resolve_nodeid_to_stmt (NodeId id);
     188              : 
     189              :   std::set<HirId> &get_hirids_within_crate (CrateNum crate)
     190              :   {
     191              :     return hirNodesWithinCrate[crate];
     192              :   }
     193              : 
     194         9389 :   void insert_impl_item_mapping (HirId impl_item_id, HIR::ImplBlock *impl)
     195              :   {
     196         9389 :     rust_assert (hirImplItemsToImplMappings.find (impl_item_id)
     197              :                  == hirImplItemsToImplMappings.end ());
     198         9389 :     hirImplItemsToImplMappings[impl_item_id] = impl;
     199         9389 :   }
     200              : 
     201        86551 :   HIR::ImplBlock *lookup_associated_impl (HirId impl_item_id)
     202              :   {
     203        86551 :     auto lookup = hirImplItemsToImplMappings.find (impl_item_id);
     204        86551 :     rust_assert (lookup != hirImplItemsToImplMappings.end ());
     205        86551 :     return lookup->second;
     206              :   }
     207              : 
     208              :   void iterate_impl_items (
     209              :     std::function<bool (HirId, HIR::ImplItem *, HIR::ImplBlock *)> cb);
     210              : 
     211              :   template <typename Callback>
     212         3213 :   void iterate_inherent_impl_items (const std::string &name, Callback &&cb)
     213              :   {
     214         3213 :     auto items = hirInherentImplItemMappings.find (name);
     215         3213 :     if (items == hirInherentImplItemMappings.end ())
     216              :       return;
     217              : 
     218         9290 :     for (auto &item : items->second)
     219         7188 :       if (!cb (item.first, item.second))
     220              :         return;
     221              :   }
     222              : 
     223              :   void insert_adt_impl_mapping (DefId adt_id, HIR::ImplBlock *impl);
     224              : 
     225              :   void build_impl_indexes ();
     226              : 
     227              :   void iterate_adt_impl_items (
     228              :     DefId adt_id,
     229              :     std::function<bool (HirId, HIR::ImplItem *, HIR::ImplBlock *)> cb);
     230              : 
     231              :   void insert_trait_impl_mapping (DefId trait_id, HIR::ImplBlock *impl);
     232              : 
     233              :   void iterate_trait_impl_items (
     234              :     DefId trait_id,
     235              :     std::function<bool (HirId, HIR::ImplItem *, HIR::ImplBlock *)> cb);
     236              : 
     237              :   void
     238              :   iterate_trait_impl_blocks (DefId trait_id,
     239              :                              std::function<bool (HirId, HIR::ImplBlock *)> cb);
     240              : 
     241          475 :   template <typename Callback> void iterate_trait_impl_blocks (Callback &&cb)
     242              :   {
     243         2421 :     for (auto it = hirTraitImplBlockMappings.begin ();
     244         2421 :          it != hirTraitImplBlockMappings.end (); ++it)
     245         1946 :       if (!cb (it->first, it->second))
     246          475 :         return;
     247              :   }
     248              : 
     249              :   void iterate_trait_impl_blocks_for_item (
     250              :     const std::string &name, std::function<bool (HirId, HIR::ImplBlock *)> cb);
     251              : 
     252              :   void iterate_impl_blocks (std::function<bool (HirId, HIR::ImplBlock *)> cb);
     253              : 
     254              :   void iterate_trait_items (
     255              :     std::function<bool (HIR::TraitItem *item, HIR::Trait *)> cb);
     256              : 
     257         4510 :   bool is_impl_item (HirId id) { return lookup_hir_implitem (id).has_value (); }
     258              : 
     259              :   void insert_trait_item_mapping (HirId trait_item_id, HIR::Trait *trait);
     260              : 
     261         4021 :   HIR::Trait *lookup_trait_item_mapping (HirId trait_item_id)
     262              :   {
     263         4021 :     auto lookup = hirTraitItemsToTraitMappings.find (trait_item_id);
     264         4021 :     rust_assert (lookup != hirTraitItemsToTraitMappings.end ());
     265         4021 :     return lookup->second;
     266              :   }
     267              : 
     268              :   void insert_canonical_path (NodeId id, const Resolver::CanonicalPath path)
     269              :   {
     270              :     if (auto p = lookup_canonical_path (id))
     271              :       {
     272              :         // if we have already stored a canonical path this is ok so long as
     273              :         // this new path is equal or is smaller that the existing one but in
     274              :         // that case we ignore it.
     275              :         if (p->is_equal (path))
     276              :           return;
     277              :         else
     278              :           {
     279              :             rust_assert (p->size () >= path.size ());
     280              :             return;
     281              :           }
     282              :       }
     283              : 
     284              :     paths.emplace (id, std::move (path));
     285              :   }
     286              : 
     287              :   tl::optional<const Resolver::CanonicalPath &>
     288              :   lookup_canonical_path (NodeId id)
     289              :   {
     290              :     auto it = paths.find (id);
     291              :     if (it == paths.end ())
     292              :       return tl::nullopt;
     293              : 
     294              :     return it->second;
     295              :   }
     296              : 
     297              :   void insert_lang_item (LangItem::Kind item_type, DefId id);
     298              :   tl::optional<DefId &> lookup_lang_item (LangItem::Kind item_type);
     299              : 
     300              :   void insert_lang_item_node (LangItem::Kind item_type, NodeId node_id);
     301              :   tl::optional<NodeId &> lookup_lang_item_node (LangItem::Kind item_type);
     302              :   NodeId get_lang_item_node (LangItem::Kind item_type);
     303              :   std::string &get_lang_item_identifier (LangItem::Kind item_type);
     304              : 
     305              :   // This will fatal_error when this lang item does not exist
     306              :   DefId get_lang_item (LangItem::Kind item_type, location_t locus);
     307              : 
     308              :   void insert_macro_def (AST::MacroRulesDefinition *macro);
     309              : 
     310              :   tl::optional<AST::MacroRulesDefinition *> lookup_macro_def (NodeId id);
     311              :   tl::optional<CrateNum> lookup_macro_def_crate (NodeId id);
     312              : 
     313              :   void insert_macro_invocation (AST::MacroInvocation &invoc,
     314              :                                 AST::MacroRulesDefinition *def);
     315              :   tl::optional<AST::MacroRulesDefinition *>
     316              :   lookup_macro_invocation (AST::MacroInvocation &invoc);
     317              : 
     318              :   void insert_exported_macro (AST::MacroRulesDefinition &def);
     319              :   std::vector<AST::MacroRulesDefinition> get_exported_macros ();
     320              : 
     321              :   void insert_derive_proc_macros (CrateNum num,
     322              :                                   std::vector<CustomDeriveProcMacro> macros);
     323              :   void insert_bang_proc_macros (CrateNum num,
     324              :                                 std::vector<BangProcMacro> macros);
     325              :   void insert_attribute_proc_macros (CrateNum num,
     326              :                                      std::vector<AttributeProcMacro> macros);
     327              : 
     328              :   tl::optional<std::vector<CustomDeriveProcMacro> &>
     329              :   lookup_derive_proc_macros (CrateNum num);
     330              :   tl::optional<std::vector<BangProcMacro> &>
     331              :   lookup_bang_proc_macros (CrateNum num);
     332              :   tl::optional<std::vector<AttributeProcMacro> &>
     333              :   lookup_attribute_proc_macros (CrateNum num);
     334              : 
     335              :   void insert_derive_proc_macro_def (CustomDeriveProcMacro macro);
     336              :   void insert_bang_proc_macro_def (BangProcMacro macro);
     337              :   void insert_attribute_proc_macro_def (AttributeProcMacro macro);
     338              : 
     339              :   tl::optional<CustomDeriveProcMacro &>
     340              :   lookup_derive_proc_macro_def (NodeId id);
     341              :   tl::optional<BangProcMacro &> lookup_bang_proc_macro_def (NodeId id);
     342              :   tl::optional<AttributeProcMacro &>
     343              :   lookup_attribute_proc_macro_def (NodeId id);
     344              : 
     345              :   tl::optional<CustomDeriveProcMacro &>
     346              :   lookup_derive_proc_macro_invocation (AST::SimplePath &invoc);
     347              :   tl::optional<BangProcMacro &>
     348              :   lookup_bang_proc_macro_invocation (AST::MacroInvocation &invoc_id);
     349              :   tl::optional<AttributeProcMacro &>
     350              :   lookup_attribute_proc_macro_invocation (AST::SimplePath &invoc);
     351              :   void insert_derive_proc_macro_invocation (AST::SimplePath &invoc,
     352              :                                             CustomDeriveProcMacro def);
     353              :   void insert_bang_proc_macro_invocation (AST::MacroInvocation &invoc,
     354              :                                           BangProcMacro def);
     355              :   void insert_attribute_proc_macro_invocation (AST::SimplePath &invoc,
     356              :                                                AttributeProcMacro def);
     357              : 
     358              :   void insert_visibility (NodeId id, Privacy::ModuleVisibility visibility);
     359              :   tl::optional<Privacy::ModuleVisibility &> lookup_visibility (NodeId id);
     360              : 
     361              :   void insert_glob_container (NodeId, AST::GlobContainer *);
     362              :   tl::optional<AST::GlobContainer *> lookup_glob_container (NodeId id);
     363              : 
     364              :   void insert_module_id (NodeId);
     365              :   bool is_module (NodeId id);
     366              : 
     367              :   void insert_extern_crate_id (NodeId);
     368              :   bool is_extern_crate (NodeId id);
     369              : 
     370              :   void insert_module_child (NodeId module, NodeId child);
     371              :   tl::optional<std::vector<NodeId> &> lookup_module_children (NodeId module);
     372              : 
     373              :   void insert_module_child_item (NodeId module, Resolver::CanonicalPath item);
     374              :   tl::optional<std::vector<Resolver::CanonicalPath> &>
     375              :   lookup_module_chidren_items (NodeId module);
     376              :   tl::optional<Resolver::CanonicalPath &>
     377              :   lookup_module_child (NodeId module, const std::string &item_name);
     378              : 
     379              :   void insert_child_item_to_parent_module_mapping (NodeId child_item,
     380              :                                                    NodeId parent_module);
     381              :   tl::optional<NodeId> lookup_parent_module (NodeId child_item);
     382              :   bool node_is_module (NodeId query);
     383              : 
     384              :   void insert_ast_item (AST::Item *item);
     385              :   tl::optional<AST::Item *> lookup_ast_item (NodeId id);
     386              : 
     387              :   HIR::ImplBlock *lookup_builtin_marker ();
     388              : 
     389              :   tl::optional<HIR::TraitItem *>
     390              :   lookup_trait_item_lang_item (LangItem::Kind item, location_t locus);
     391              : 
     392              :   void insert_auto_trait (HIR::Trait *trait);
     393              :   std::vector<HIR::Trait *> &get_auto_traits ();
     394              :   void add_capture (NodeId closure, NodeId definition);
     395              :   tl::optional<std::vector<NodeId>> lookup_captures (NodeId closure);
     396              : 
     397              :   void add_derived_node (NodeId node_id);
     398              :   bool is_derived_node (NodeId node_id);
     399              : 
     400              :   void add_function_node (NodeId node_id);
     401              :   bool is_function_node (NodeId node_id);
     402              : 
     403              : private:
     404              :   Mappings ();
     405              : 
     406              :   CrateNum crateNumItr;
     407              :   CrateNum currentCrateNum;
     408              :   HirId hirIdIter;
     409              :   NodeId nodeIdIter;
     410              :   std::map<CrateNum, LocalDefId> localIdIter;
     411              :   HIR::ImplBlock *builtinMarker;
     412              : 
     413              :   AST::Crate *get_ast_crate_by_node_id_raw (NodeId id);
     414              : 
     415              :   std::map<NodeId, CrateNum> crate_node_to_crate_num;
     416              :   std::map<CrateNum, AST::Crate *> ast_crate_mappings;
     417              :   std::map<CrateNum, HIR::Crate *> hir_crate_mappings;
     418              :   std::map<DefId, HIR::Item *> defIdMappings;
     419              :   std::map<DefId, HIR::TraitItem *> defIdTraitItemMappings;
     420              :   std::map<CrateNum, std::map<LocalDefId, HIR::Item *>> localDefIdMappings;
     421              : 
     422              :   std::map<HirId, HIR::Module *> hirModuleMappings;
     423              :   std::map<HirId, HIR::Item *> hirItemMappings;
     424              :   std::map<HirId, std::pair<HIR::Enum *, HIR::EnumItem *>> hirEnumItemMappings;
     425              :   std::map<HirId, HIR::Type *> hirTypeMappings;
     426              :   std::map<HirId, HIR::Expr *> hirExprMappings;
     427              :   std::map<HirId, HIR::Stmt *> hirStmtMappings;
     428              :   std::map<HirId, HIR::FunctionParam *> hirParamMappings;
     429              :   std::map<HirId, HIR::StructExprField *> hirStructFieldMappings;
     430              :   std::map<HirId, std::pair<HirId, HIR::ImplItem *>> hirImplItemMappings;
     431              :   std::map<HirId, HIR::SelfParam *> hirSelfParamMappings;
     432              :   std::map<HirId, HIR::ImplBlock *> hirImplItemsToImplMappings;
     433              :   std::map<HirId, HIR::ImplBlock *> hirImplBlockMappings;
     434              :   std::map<HirId, HIR::ImplBlock *> hirTraitImplBlockMappings;
     435              :   std::map<std::string,
     436              :            std::vector<std::pair<HIR::ImplItem *, HIR::ImplBlock *>>>
     437              :     hirInherentImplItemMappings;
     438              :   std::map<HirId, HIR::ImplBlock *> hirImplBlockTypeMappings;
     439              :   std::map<DefId, std::vector<HIR::ImplBlock *>> hirAdtImplMappings;
     440              :   std::set<HIR::ImplBlock *> hirIndexedAdtImpls;
     441              :   std::map<DefId, std::vector<HIR::ImplBlock *>> hirTraitImplMappings;
     442              :   std::map<std::string, std::vector<DefId>> hirTraitItemNameMappings;
     443              :   bool hirImplIndexesBuilt;
     444              :   std::map<HirId, HIR::TraitItem *> hirTraitItemMappings;
     445              :   std::map<HirId, HIR::ExternBlock *> hirExternBlockMappings;
     446              :   std::map<HirId, std::pair<HIR::ExternalItem *, HirId>> hirExternItemMappings;
     447              :   std::map<HirId, HIR::PathExprSegment *> hirPathSegMappings;
     448              :   std::map<HirId, HIR::GenericParam *> hirGenericParamMappings;
     449              :   std::map<HirId, HIR::Trait *> hirTraitItemsToTraitMappings;
     450              :   std::map<HirId, HIR::Pattern *> hirPatternMappings;
     451              : 
     452              :   // FIXME: Add documentation
     453              :   std::vector<HIR::Trait *> auto_traits;
     454              : 
     455              :   // We need to have two maps here, as lang-items need to be used for both AST
     456              :   // passes and HIR passes. Thus those two maps are created at different times.
     457              :   std::map<LangItem::Kind, DefId> lang_item_mappings;
     458              :   std::map<LangItem::Kind, NodeId> lang_item_nodes;
     459              : 
     460              :   std::map<NodeId, Resolver::CanonicalPath> paths;
     461              :   std::map<NodeId, location_t> locations;
     462              :   std::map<NodeId, HirId> nodeIdToHirMappings;
     463              :   std::map<HirId, NodeId> hirIdToNodeMappings;
     464              : 
     465              :   // all hirid nodes
     466              :   std::map<CrateNum, std::set<HirId>> hirNodesWithinCrate;
     467              : 
     468              :   // MBE macros
     469              :   std::map<NodeId, std::pair<AST::MacroRulesDefinition *, CrateNum>>
     470              :     macroMappings;
     471              :   std::map<NodeId, AST::MacroRulesDefinition *> macroInvocations;
     472              :   std::vector<AST::MacroRulesDefinition> exportedMacros;
     473              : 
     474              :   // Procedural macros
     475              :   std::map<CrateNum, std::vector<CustomDeriveProcMacro>>
     476              :     procmacrosDeriveMappings;
     477              :   std::map<CrateNum, std::vector<BangProcMacro>> procmacrosBangMappings;
     478              :   std::map<CrateNum, std::vector<AttributeProcMacro>>
     479              :     procmacrosAttributeMappings;
     480              : 
     481              :   std::map<NodeId, CustomDeriveProcMacro> procmacroDeriveMappings;
     482              :   std::map<NodeId, BangProcMacro> procmacroBangMappings;
     483              :   std::map<NodeId, AttributeProcMacro> procmacroAttributeMappings;
     484              :   std::map<NodeId, CustomDeriveProcMacro> procmacroDeriveInvocations;
     485              :   std::map<NodeId, BangProcMacro> procmacroBangInvocations;
     486              :   std::map<NodeId, AttributeProcMacro> procmacroAttributeInvocations;
     487              : 
     488              :   // crate names
     489              :   std::map<CrateNum, std::string> crate_names;
     490              : 
     491              :   // Low level visibility map for each DefId
     492              :   std::map<NodeId, Privacy::ModuleVisibility> visibility_map;
     493              : 
     494              :   // Module tree maps
     495              : 
     496              :   // Maps each module's node id to a list of its children
     497              :   // TODO: I think these are only used by the old resolved and can be removed
     498              :   std::map<NodeId, std::vector<NodeId>> module_child_map;
     499              :   std::map<NodeId, std::vector<Resolver::CanonicalPath>> module_child_items;
     500              :   std::map<NodeId, NodeId> child_to_parent_module_map;
     501              : 
     502              :   std::map<NodeId, AST::GlobContainer *> glob_containers;
     503              :   std::set<NodeId> module_ids;
     504              :   std::set<NodeId> extern_crate_ids;
     505              : 
     506              :   // AST mappings
     507              :   std::map<NodeId, AST::Item *> ast_item_mappings;
     508              : 
     509              :   // Closure AST NodeId -> vector of Definition node ids
     510              :   std::unordered_map<NodeId, std::vector<NodeId>> captures;
     511              : 
     512              :   std::set<NodeId> derived_nodes;
     513              : 
     514              :   std::set<NodeId> function_nodes;
     515              : };
     516              : 
     517              : } // namespace Analysis
     518              : } // namespace Rust
     519              : 
     520              : #endif // RUST_HIR_MAP_H
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.