From: Pierre-Emmanuel Patry <[email protected]>

HIR mappings are getting bigger, this commit attempts to regroup crate
related mappings within a single class.

gcc/rust/ChangeLog:

        * ast/rust-collect-lang-items.cc (CollectLangItems::visit): Use sub
        category.
        * backend/rust-compile-expr.cc: Likewise.
        * backend/rust-compile-type.cc (TyTyResolveCompile::get_unit_type): 
Likewise.
        * checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go): 
Likewise.
        * checks/errors/privacy/rust-visibility-resolver.cc
        (VisibilityResolver::resolve_module_path): Likewise.
        * expand/rust-macro-substitute-ctx.cc: Likewise.
        * hir/rust-ast-lower-base.cc (ASTLoweringBase::lower_lifetime): 
Likewise.
        (ASTLoweringBase::lower_loop_label): Likewise.
        (ASTLoweringBase::lower_path_expr_seg): Likewise.
        (ASTLoweringBase::lower_self): Likewise.
        (ASTLoweringBase::lower_extern_block): Likewise.
        * hir/rust-ast-lower-block.h: Likewise.
        * hir/rust-ast-lower-enumitem.h: Likewise.
        * hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Likewise.
        * hir/rust-ast-lower-extern.h: Likewise.
        * hir/rust-ast-lower-implitem.cc (ASTLowerImplItem::visit): Likewise.
        (ASTLowerTraitItem::visit): Likewise.
        * hir/rust-ast-lower-item.cc (ASTLoweringItem::visit): Likewise.
        (ASTLoweringSimplePath::lower): Likewise.
        * hir/rust-ast-lower-pattern.cc (ASTLoweringPattern::visit): Likewise.
        * hir/rust-ast-lower-stmt.cc (ASTLoweringStmt::visit): Likewise.
        * hir/rust-ast-lower-type.cc (ASTLowerTypePath::visit): Likewise.
        (ASTLowerQualifiedPathInType::visit): Likewise.
        (ASTLoweringType::visit): Likewise.
        (ASTLowerGenericParam::visit): Likewise.
        (ASTLoweringTypeBounds::visit): Likewise.
        (ASTLowerWhereClauseItem::visit): Likewise.
        * hir/rust-ast-lower.cc (ASTLowering::go): Likewise.
        (ASTLoweringBlock::visit): Likewise.
        (ASTLoweringIfBlock::visit): Likewise.
        (ASTLoweringIfLetBlock::desugar_iflet): Likewise.
        (ASTLoweringIfLetBlock::visit): Likewise.
        (ASTLowerStructExprField::visit): Likewise.
        (ASTLoweringExprWithBlock::visit): Likewise.
        (ASTLowerPathInExpression::visit): Likewise.
        (ASTLoweringBase::lower_qual_path_type): Likewise.
        (ASTLowerQualPathInExpression::visit): Likewise.
        * metadata/rust-export-metadata.cc 
(PublicInterface::gather_export_data):
        Likewise.
        (PublicInterface::write_to_object_file): Likewise.
        (PublicInterface::write_to_path): Likewise.
        (PublicInterface::expected_metadata_filename): Likewise.
        * resolve/rust-default-resolver.cc (DefaultResolver::visit): Likewise.
        * resolve/rust-forever-stack.h: Likewise.
        * resolve/rust-name-resolution-context.h: Likewise.
        * rust-session-manager.cc (Session::handle_crate_name): Likewise.
        (Session::compile_crate): Likewise.
        (Session::load_extern_crate): Likewise.
        * typecheck/rust-hir-type-check-base.cc 
(TypeCheckBase::resolve_literal):
        Likewise.
        * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
        Likewise.
        (TypeCheckExpr::resolve_fn_trait_call): Likewise.
        * typecheck/rust-hir-type-check-implitem.cc 
(TypeCheckTopLevelExternItem::visit):
        Likewise.
        (TypeCheckImplItem::resolve_function_signature): Likewise.
        * typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit):
        Likewise.
        * typecheck/rust-hir-type-check-struct.cc 
(TypeCheckStructExpr::resolve):
        Likewise.
        * typecheck/rust-hir-type-check.cc 
(TraitItemReference::get_type_from_fn):
        Likewise.
        * typecheck/rust-type-util.cc (query_type): Likewise.
        * typecheck/rust-tyty-bounds.cc: Likewise.
        * typecheck/rust-tyty-subst.cc 
(SubstitutionParamMapping::override_context):
        Likewise.
        * typecheck/rust-tyty-util.cc (TyVar::monomorphized_clone): Likewise.
        * typecheck/rust-tyty.cc (InferType::clone): Likewise.
        (ConstInferType::clone): Likewise.
        * util/rust-hir-map.cc (CrateMappings::CrateMappings): Add a new
        specialized class to keep all crate related mappings.
        (Mappings::Mappings): Move some member functions to CrateMappings.
        (Mappings::get_next_crate_num): Likewise.
        (CrateMappings::get_next_crate_num): Likewise.
        (Mappings::set_current_crate): Likewise.
        (CrateMappings::set_current_crate): Likewise.
        (Mappings::get_current_crate): Likewise.
        (CrateMappings::get_current_crate): Likewise.
        (Mappings::get_crate_name): Likewise.
        (CrateMappings::get_crate_name): Likewise.
        (Mappings::lookup_crate_num): Likewise.
        (CrateMappings::lookup_crate_num): Likewise.
        (Mappings::set_crate_name): Likewise.
        (CrateMappings::set_crate_name): Likewise.
        (Mappings::get_current_crate_name): Likewise.
        (CrateMappings::get_current_crate_name): Likewise.
        (Mappings::lookup_crate_name): Likewise.
        (CrateMappings::lookup_crate_name): Likewise.
        (Mappings::crate_num_to_nodeid): Likewise.
        (CrateMappings::crate_num_to_nodeid): Likewise.
        (Mappings::node_is_crate): Likewise.
        (CrateMappings::node_is_crate): Likewise.
        (Mappings::get_ast_crate): Likewise.
        (CrateMappings::get_ast_crate): Likewise.
        (Mappings::get_ast_crate_by_node_id): Likewise.
        (Mappings::get_ast_crate_by_node_id_raw): Likewise.
        (CrateMappings::get_ast_crate_by_node_id_raw): Likewise.
        (Mappings::insert_ast_crate): Likewise.
        (CrateMappings::insert_ast_crate): Likewise.
        (Mappings::insert_macro_def): Likewise.
        (Mappings::insert_glob_container): Likewise.
        * util/rust-hir-map.h (class Mappings): Move some declarations from
        here...
        (class CrateMappings): ...to here.

Signed-off-by: Pierre-Emmanuel Patry <[email protected]>

Tested on x86_64-pc-linux-gnu.

---
 gcc/rust/ast/rust-collect-lang-items.cc       |  6 +-
 gcc/rust/backend/rust-compile-expr.cc         |  3 +-
 gcc/rust/backend/rust-compile-type.cc         |  4 +-
 .../errors/borrowck/rust-borrow-checker.cc    |  4 +-
 .../privacy/rust-visibility-resolver.cc       |  3 +-
 gcc/rust/expand/rust-macro-substitute-ctx.cc  |  4 +-
 gcc/rust/hir/rust-ast-lower-base.cc           | 10 +--
 gcc/rust/hir/rust-ast-lower-block.h           |  4 +-
 gcc/rust/hir/rust-ast-lower-enumitem.h        | 12 +--
 gcc/rust/hir/rust-ast-lower-expr.cc           | 84 +++++++++----------
 gcc/rust/hir/rust-ast-lower-extern.h          |  8 +-
 gcc/rust/hir/rust-ast-lower-implitem.cc       | 16 ++--
 gcc/rust/hir/rust-ast-lower-item.cc           | 52 ++++++------
 gcc/rust/hir/rust-ast-lower-pattern.cc        | 26 +++---
 gcc/rust/hir/rust-ast-lower-stmt.cc           |  6 +-
 gcc/rust/hir/rust-ast-lower-type.cc           | 48 +++++------
 gcc/rust/hir/rust-ast-lower.cc                | 32 +++----
 gcc/rust/metadata/rust-export-metadata.cc     | 15 ++--
 gcc/rust/resolve/rust-default-resolver.cc     | 15 ++--
 gcc/rust/resolve/rust-forever-stack.h         |  5 +-
 .../resolve/rust-name-resolution-context.h    | 10 ++-
 gcc/rust/rust-session-manager.cc              | 32 ++++---
 .../typecheck/rust-hir-type-check-base.cc     |  2 +-
 .../typecheck/rust-hir-type-check-expr.cc     |  9 +-
 .../typecheck/rust-hir-type-check-implitem.cc |  4 +-
 .../typecheck/rust-hir-type-check-item.cc     | 10 +--
 .../typecheck/rust-hir-type-check-struct.cc   |  2 +-
 gcc/rust/typecheck/rust-hir-type-check.cc     |  2 +-
 gcc/rust/typecheck/rust-type-util.cc          |  6 +-
 gcc/rust/typecheck/rust-tyty-bounds.cc        |  2 +-
 gcc/rust/typecheck/rust-tyty-subst.cc         | 10 +--
 gcc/rust/typecheck/rust-tyty-util.cc          |  8 +-
 gcc/rust/typecheck/rust-tyty.cc               | 20 ++---
 gcc/rust/util/rust-hir-map.cc                 | 42 +++++-----
 gcc/rust/util/rust-hir-map.h                  | 51 +++++++----
 35 files changed, 304 insertions(+), 263 deletions(-)

diff --git a/gcc/rust/ast/rust-collect-lang-items.cc 
b/gcc/rust/ast/rust-collect-lang-items.cc
index 8a952f8dcee..0b3214253b0 100644
--- a/gcc/rust/ast/rust-collect-lang-items.cc
+++ b/gcc/rust/ast/rust-collect-lang-items.cc
@@ -131,12 +131,12 @@ CollectLangItems::visit (AST::EnumItemDiscriminant &item)
 void
 CollectLangItems::visit (AST::ExternCrate &extern_crate)
 {
-  auto &mappings = Analysis::Mappings::get ();
+  auto &crate_mappings = Analysis::Mappings::get ().crate_mapping;
   auto crate_num
-    = mappings.lookup_crate_name (extern_crate.get_referenced_crate ());
+    = crate_mappings.lookup_crate_name (extern_crate.get_referenced_crate ());
   if (crate_num)
     {
-      visit (mappings.get_ast_crate (*crate_num));
+      visit (crate_mappings.get_ast_crate (*crate_num));
     }
 
   DefaultASTVisitor::visit (extern_crate);
diff --git a/gcc/rust/backend/rust-compile-expr.cc 
b/gcc/rust/backend/rust-compile-expr.cc
index e2e5644938e..0f16010a375 100644
--- a/gcc/rust/backend/rust-compile-expr.cc
+++ b/gcc/rust/backend/rust-compile-expr.cc
@@ -2696,7 +2696,8 @@ HIRCompileBase::resolve_unsized_adt_adjustment (
       TyTy::BaseType *cloned_target = target_adt->clone ();
       cloned_target->set_ref (t_tyvar.get_ref ());
       Analysis::NodeMapping pseudo_mapping (
-       ctx->get_mappings ().get_current_crate (), 0, t_tyvar.get_ref (), 0);
+       ctx->get_mappings ().crate_mapping.get_current_crate (), 0,
+       t_tyvar.get_ref (), 0);
       ctx->get_tyctx ()->insert_type (pseudo_mapping, cloned_target);
 
       const TyTy::ReferenceType r (ctx->get_mappings ().get_next_hir_id (),
diff --git a/gcc/rust/backend/rust-compile-type.cc 
b/gcc/rust/backend/rust-compile-type.cc
index 126705c5ddf..16d32ac7321 100644
--- a/gcc/rust/backend/rust-compile-type.cc
+++ b/gcc/rust/backend/rust-compile-type.cc
@@ -178,8 +178,8 @@ TyTyResolveCompile::get_unit_type (Context *ctx)
   static tree unit_type;
   if (unit_type == nullptr)
     {
-      auto cn = ctx->get_mappings ().get_current_crate ();
-      auto &c = ctx->get_mappings ().get_ast_crate (cn);
+      auto cn = ctx->get_mappings ().crate_mapping.get_current_crate ();
+      auto &c = ctx->get_mappings ().crate_mapping.get_ast_crate (cn);
       location_t locus = BUILTINS_LOCATION;
       if (c.items.size () > 0)
        {
diff --git a/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc 
b/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
index ba2b7067dca..f9e9316f971 100644
--- a/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
+++ b/gcc/rust/checks/errors/borrowck/rust-borrow-checker.cc
@@ -55,8 +55,8 @@ BorrowChecker::go (HIR::Crate &crate)
     {
       mkdir ("bir_dump", 0755);
       auto &mappings = Analysis::Mappings::get ();
-      crate_name
-       = *mappings.get_crate_name (crate.get_mappings ().get_crate_num ());
+      crate_name = *mappings.crate_mapping.get_crate_name (
+       crate.get_mappings ().get_crate_num ());
       mkdir ("nll_facts_gccrs", 0755);
     }
 
diff --git a/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc 
b/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc
index c24f0657e58..d7c1955f8ad 100644
--- a/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc
+++ b/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc
@@ -82,7 +82,8 @@ VisibilityResolver::resolve_module_path (const 
HIR::SimplePath &restriction,
   rust_assert (hid.has_value ());
   auto ref = hid.value ();
 
-  auto crate = mappings.get_ast_crate (mappings.get_current_crate ());
+  auto crate = mappings.crate_mapping.get_ast_crate (
+    mappings.crate_mapping.get_current_crate ());
 
   // we may be dealing with pub(crate)
   if (ref_node_id == crate.get_node_id ())
diff --git a/gcc/rust/expand/rust-macro-substitute-ctx.cc 
b/gcc/rust/expand/rust-macro-substitute-ctx.cc
index 4423abe57a8..44c7512f86a 100644
--- a/gcc/rust/expand/rust-macro-substitute-ctx.cc
+++ b/gcc/rust/expand/rust-macro-substitute-ctx.cc
@@ -30,7 +30,7 @@ SubstituteCtx::substitute_dollar_crate (
   auto &mappings = Analysis::Mappings::get ();
 
   auto def_crate = mappings.lookup_macro_def_crate (definition.get_node_id ());
-  auto current_crate = mappings.get_current_crate ();
+  auto current_crate = mappings.crate_mapping.get_current_crate ();
 
   rust_assert (def_crate);
 
@@ -44,7 +44,7 @@ SubstituteCtx::substitute_dollar_crate (
     }
   else
     {
-      auto name = mappings.get_crate_name (*def_crate);
+      auto name = mappings.crate_mapping.get_crate_name (*def_crate);
 
       rust_assert (name);
 
diff --git a/gcc/rust/hir/rust-ast-lower-base.cc 
b/gcc/rust/hir/rust-ast-lower-base.cc
index 33b1c2f51ad..1d55632e690 100644
--- a/gcc/rust/hir/rust-ast-lower-base.cc
+++ b/gcc/rust/hir/rust-ast-lower-base.cc
@@ -596,7 +596,7 @@ ASTLoweringBase::lower_lifetime (AST::Lifetime &lifetime,
       lifetime_type = AST::Lifetime::STATIC;
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, lifetime.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -611,7 +611,7 @@ ASTLoweringBase::lower_loop_label (AST::LoopLabel 
&loop_label)
 {
   HIR::Lifetime life = lower_lifetime (loop_label.get_lifetime ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, loop_label.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -636,7 +636,7 @@ ASTLoweringBase::lower_generic_params (
 HIR::PathExprSegment
 ASTLoweringBase::lower_path_expr_seg (AST::PathExprSegment &s)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, s.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -717,7 +717,7 @@ ASTLoweringBase::lower_self (AST::Param &param)
   rust_assert (param.is_self ());
 
   auto self = static_cast<AST::SelfParam &> (param);
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, self.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -1043,7 +1043,7 @@ ASTLoweringBase::lower_extern_block (AST::ExternBlock 
&extern_block)
 {
   HIR::Visibility vis = translate_visibility (extern_block.get_visibility ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, extern_block.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
diff --git a/gcc/rust/hir/rust-ast-lower-block.h 
b/gcc/rust/hir/rust-ast-lower-block.h
index 76cbfc5539a..3b36ea36c25 100644
--- a/gcc/rust/hir/rust-ast-lower-block.h
+++ b/gcc/rust/hir/rust-ast-lower-block.h
@@ -51,7 +51,7 @@ public:
 
     HIR::BlockExpr *block
       = ASTLoweringBlock::translate (expr.get_block_expr (), terminated);
-    auto crate_num = resolver.mappings.get_current_crate ();
+    auto crate_num = resolver.mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                   resolver.mappings.get_next_hir_id (
                                     crate_num),
@@ -199,7 +199,7 @@ public:
     if (expr.has_loop_label ())
       loop_label = lower_loop_label (expr.get_loop_label ());
 
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   UNKNOWN_LOCAL_DEFID);
diff --git a/gcc/rust/hir/rust-ast-lower-enumitem.h 
b/gcc/rust/hir/rust-ast-lower-enumitem.h
index 3a24f477f74..e5f06b40c86 100644
--- a/gcc/rust/hir/rust-ast-lower-enumitem.h
+++ b/gcc/rust/hir/rust-ast-lower-enumitem.h
@@ -54,7 +54,7 @@ public:
 
   void visit (AST::EnumItem &item) override
   {
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
@@ -69,7 +69,7 @@ public:
 
   void visit (AST::EnumItemTuple &item) override
   {
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
@@ -87,7 +87,7 @@ public:
        HIR::Visibility vis = translate_visibility (field.get_visibility ());
        HIR::Type *type = ASTLoweringType::translate (field.get_field_type ());
 
-       auto crate_num = mappings.get_current_crate ();
+       auto crate_num = mappings.crate_mapping.get_current_crate ();
        Analysis::NodeMapping field_mapping (
          crate_num, field.get_node_id (), mappings.get_next_hir_id (crate_num),
          mappings.get_next_localdef_id (crate_num));
@@ -104,7 +104,7 @@ public:
 
   void visit (AST::EnumItemStruct &item) override
   {
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
@@ -120,7 +120,7 @@ public:
        HIR::Visibility vis = translate_visibility (field.get_visibility ());
        HIR::Type *type = ASTLoweringType::translate (field.get_field_type ());
 
-       auto crate_num = mappings.get_current_crate ();
+       auto crate_num = mappings.crate_mapping.get_current_crate ();
        Analysis::NodeMapping field_mapping (
          crate_num, field.get_node_id (), mappings.get_next_hir_id (crate_num),
          mappings.get_next_localdef_id (crate_num));
@@ -145,7 +145,7 @@ public:
 
   void visit (AST::EnumItemDiscriminant &item) override
   {
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc 
b/gcc/rust/hir/rust-ast-lower-expr.cc
index 77811f2b8da..61a3f10c3fd 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -66,7 +66,7 @@ ASTLoweringExpr::visit (AST::TupleIndexExpr &expr)
   HIR::Expr *tuple_expr
     = ASTLoweringExpr::translate (expr.get_tuple_expr (), &terminated);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -86,7 +86,7 @@ ASTLoweringExpr::visit (AST::TupleExpr &expr)
   for (auto &e : expr.get_tuple_elems ())
     tuple_elements.emplace_back (ASTLoweringExpr::translate (*e));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -131,7 +131,7 @@ void
 ASTLoweringExpr::visit (AST::AnonConst &expr)
 {
   auto &mappings = Analysis::Mappings::get ();
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto mapping = Analysis::NodeMapping (crate_num, expr.get_node_id (),
                                        mappings.get_next_hir_id (crate_num),
                                        UNKNOWN_LOCAL_DEFID);
@@ -161,7 +161,7 @@ ASTLoweringExpr::visit (AST::ConstBlock &expr)
   auto anon_const = static_cast<AnonConst *> (inner_expr);
 
   auto &mappings = Analysis::Mappings::get ();
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto mapping = Analysis::NodeMapping (crate_num, expr.get_node_id (),
                                        mappings.get_next_hir_id (crate_num),
                                        UNKNOWN_LOCAL_DEFID);
@@ -194,7 +194,7 @@ ASTLoweringExpr::visit (AST::BoxExpr &expr)
 {
   HIR::Expr *box_expr = ASTLoweringExpr::translate (expr.get_boxed_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -212,7 +212,7 @@ ASTLoweringExpr::visit (AST::ReturnExpr &expr)
        ? ASTLoweringExpr::translate (expr.get_returned_expr ())
        : nullptr;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -234,7 +234,7 @@ ASTLoweringExpr::visit (AST::CallExpr &expr)
   for (auto &param : in_params)
     params.emplace_back (ASTLoweringExpr::translate (*param));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (
     crate_num, UNKNOWN_NODEID /* this can map back to the AST*/,
     mappings.get_next_hir_id (crate_num), UNKNOWN_LOCAL_DEFID);
@@ -259,7 +259,7 @@ ASTLoweringExpr::visit (AST::MethodCallExpr &expr)
   for (auto &param : in_params)
     params.emplace_back (ASTLoweringExpr::translate (*param));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -276,7 +276,7 @@ ASTLoweringExpr::visit (AST::AssignmentExpr &expr)
   HIR::Expr *lhs = ASTLoweringExpr::translate (expr.get_left_expr ());
   HIR::Expr *rhs = ASTLoweringExpr::translate (expr.get_right_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -290,7 +290,7 @@ ASTLoweringExpr::visit (AST::AssignmentExpr &expr)
 void
 ASTLoweringExpr::visit (AST::IdentifierExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping1 (crate_num, expr.get_node_id (),
                                  mappings.get_next_hir_id (crate_num),
                                  UNKNOWN_LOCAL_DEFID);
@@ -310,7 +310,7 @@ ASTLoweringExpr::visit (AST::ArrayExpr &expr)
   rust_assert (translated_array_elems != nullptr);
   HIR::ArrayElems *elems = translated_array_elems;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -328,7 +328,7 @@ ASTLoweringExpr::visit (AST::ArrayIndexExpr &expr)
   HIR::Expr *array_index_expr
     = ASTLoweringExpr::translate (expr.get_index_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -348,9 +348,8 @@ ASTLoweringExpr::visit (AST::ArrayElemsValues &elems)
   for (auto &elem : elems.get_values ())
     elements.emplace_back (ASTLoweringExpr::translate (*elem));
 
-  auto crate_num = mappings.get_current_crate ();
-  Analysis::NodeMapping mapping (mappings.get_current_crate (),
-                                elems.get_node_id (),
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
+  Analysis::NodeMapping mapping (crate_num, elems.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
 
@@ -364,9 +363,8 @@ ASTLoweringExpr::visit (AST::ArrayElemsCopied &elems)
   HIR::Expr *element = ASTLoweringExpr::translate (elems.get_elem_to_copy ());
   HIR::Expr *num_copies = ASTLoweringExpr::translate (elems.get_num_copies ());
 
-  auto crate_num = mappings.get_current_crate ();
-  Analysis::NodeMapping mapping (mappings.get_current_crate (),
-                                elems.get_node_id (),
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
+  Analysis::NodeMapping mapping (crate_num, elems.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
 
@@ -378,7 +376,7 @@ ASTLoweringExpr::visit (AST::ArrayElemsCopied &elems)
 void
 ASTLoweringExpr::visit (AST::LiteralExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -396,7 +394,7 @@ ASTLoweringExpr::visit (AST::ArithmeticOrLogicalExpr &expr)
   HIR::Expr *rhs = ASTLoweringExpr::translate (expr.get_right_expr ());
   rust_assert (rhs != nullptr);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -414,7 +412,7 @@ ASTLoweringExpr::visit (AST::ComparisonExpr &expr)
   HIR::Expr *rhs = ASTLoweringExpr::translate (expr.get_right_expr ());
   rust_assert (rhs != nullptr);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -433,7 +431,7 @@ ASTLoweringExpr::visit (AST::LazyBooleanExpr &expr)
   HIR::Expr *rhs = ASTLoweringExpr::translate (expr.get_right_expr ());
   rust_assert (rhs != nullptr);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -450,7 +448,7 @@ ASTLoweringExpr::visit (AST::NegationExpr &expr)
   HIR::Expr *negated_value
     = ASTLoweringExpr::translate (expr.get_negated_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -469,7 +467,7 @@ ASTLoweringExpr::visit (AST::TypeCastExpr &expr)
   HIR::Type *type_to_cast_to
     = lower_type_no_bounds (expr.get_type_to_cast_to ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -524,7 +522,7 @@ ASTLoweringExpr::visit (AST::CompoundAssignmentExpr &expr)
   HIR::Expr *asignee_expr = ASTLoweringExpr::translate (expr.get_left_expr ());
   HIR::Expr *value = ASTLoweringExpr::translate (expr.get_right_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -542,7 +540,7 @@ ASTLoweringExpr::visit (AST::StructExprStruct &struct_expr)
   HIR::PathInExpression copied_path (*path);
   delete path;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, struct_expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -580,7 +578,7 @@ ASTLoweringExpr::visit (AST::StructExprStructFields 
&struct_expr)
   for (auto &field : in_fields)
     fields.emplace_back (ASTLowerStructExprField::translate (*field));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, struct_expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -599,7 +597,7 @@ ASTLoweringExpr::visit (AST::GroupedExpr &expr)
   HIR::Expr *paren_expr
     = ASTLoweringExpr::translate (expr.get_expr_in_parens ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -615,7 +613,7 @@ ASTLoweringExpr::visit (AST::FieldAccessExpr &expr)
 {
   HIR::Expr *receiver = ASTLoweringExpr::translate (expr.get_receiver_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -649,7 +647,7 @@ ASTLoweringExpr::visit (AST::BreakExpr &expr)
        ? ASTLoweringExpr::translate (expr.get_break_expr_unchecked ())
        : nullptr;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -667,7 +665,7 @@ ASTLoweringExpr::visit (AST::ContinueExpr &expr)
   if (expr.has_label ())
     break_label = lower_lifetime (expr.get_label_unchecked ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -683,7 +681,7 @@ ASTLoweringExpr::visit (AST::BorrowExpr &expr)
   HIR::Expr *borrow_lvalue
     = ASTLoweringExpr::translate (expr.get_borrowed_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -716,7 +714,7 @@ ASTLoweringExpr::visit (AST::DereferenceExpr &expr)
   HIR::Expr *dref_lvalue
     = ASTLoweringExpr::translate (expr.get_dereferenced_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -736,7 +734,7 @@ ASTLoweringExpr::visit (AST::MatchExpr &expr)
 void
 ASTLoweringExpr::visit (AST::RangeFromToExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -754,7 +752,7 @@ ASTLoweringExpr::visit (AST::RangeFromToExpr &expr)
 void
 ASTLoweringExpr::visit (AST::RangeFromExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -769,7 +767,7 @@ ASTLoweringExpr::visit (AST::RangeFromExpr &expr)
 void
 ASTLoweringExpr::visit (AST::RangeToExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -784,7 +782,7 @@ ASTLoweringExpr::visit (AST::RangeToExpr &expr)
 void
 ASTLoweringExpr::visit (AST::RangeFullExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -795,7 +793,7 @@ ASTLoweringExpr::visit (AST::RangeFullExpr &expr)
 void
 ASTLoweringExpr::visit (AST::RangeFromToInclExpr &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping path_mapping (crate_num, mappings.get_next_node_id (),
                                      mappings.get_next_hir_id (crate_num),
                                      UNKNOWN_LOCAL_DEFID);
@@ -834,7 +832,7 @@ ASTLoweringExpr::visit (AST::ClosureExprInner &expr)
   for (auto &param : expr.get_params ())
     closure_params.emplace_back (lower_closure_param (param));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -860,7 +858,7 @@ ASTLoweringExpr::visit (AST::ClosureExprInnerTyped &expr)
   for (auto &param : expr.get_params ())
     closure_params.emplace_back (lower_closure_param (param));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -989,7 +987,7 @@ from_operand (const AST::InlineAsmOperand &operand)
 void
 ASTLoweringExpr::visit (AST::InlineAsm &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -1140,7 +1138,7 @@ ASTLoweringExpr::visit (AST::LlvmInlineAsm &expr)
        "subset of %<llvm_asm%> to compile libcore");
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -1197,7 +1195,7 @@ ASTLoweringExpr::visit (AST::OffsetOf &offset_of)
   auto type = std::unique_ptr<Type> (
     ASTLoweringType::translate (offset_of.get_type ()));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, offset_of.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
diff --git a/gcc/rust/hir/rust-ast-lower-extern.h 
b/gcc/rust/hir/rust-ast-lower-extern.h
index 833e69cd23a..c9cec8cb6c0 100644
--- a/gcc/rust/hir/rust-ast-lower-extern.h
+++ b/gcc/rust/hir/rust-ast-lower-extern.h
@@ -53,7 +53,7 @@ public:
     HIR::Visibility vis = translate_visibility (item.get_visibility ());
     HIR::Type *static_type = ASTLoweringType::translate (item.get_type ());
 
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
@@ -103,7 +103,7 @@ public:
 
        HIR::Type *param_type = ASTLoweringType::translate (param.get_type ());
 
-       auto crate_num = mappings.get_current_crate ();
+       auto crate_num = mappings.crate_mapping.get_current_crate ();
        Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                       mappings.get_next_hir_id (crate_num),
                                       mappings.get_next_localdef_id (
@@ -113,7 +113,7 @@ public:
                                      std::unique_ptr<HIR::Type> (param_type));
       }
 
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, function.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
@@ -127,7 +127,7 @@ public:
 
   void visit (AST::ExternalTypeItem &type) override
   {
-    auto crate_num = mappings.get_current_crate ();
+    auto crate_num = mappings.crate_mapping.get_current_crate ();
     Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                   mappings.get_next_hir_id (crate_num),
                                   mappings.get_next_localdef_id (crate_num));
diff --git a/gcc/rust/hir/rust-ast-lower-implitem.cc 
b/gcc/rust/hir/rust-ast-lower-implitem.cc
index 16a7c3b4368..828d0065fa7 100644
--- a/gcc/rust/hir/rust-ast-lower-implitem.cc
+++ b/gcc/rust/hir/rust-ast-lower-implitem.cc
@@ -66,7 +66,7 @@ ASTLowerImplItem::visit (AST::TypeAlias &alias)
   HIR::Type *existing_type
     = ASTLoweringType::translate (alias.get_type_aliased ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, alias.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -90,7 +90,7 @@ ASTLowerImplItem::visit (AST::ConstantItem &constant)
   HIR::Type *type = ASTLoweringType::translate (constant.get_type (), true);
   HIR::Expr *expr = ASTLoweringExpr::translate (constant.get_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, constant.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -157,7 +157,7 @@ ASTLowerImplItem::visit (AST::Function &function)
       auto translated_type = std::unique_ptr<HIR::Type> (
        ASTLoweringType::translate (param.get_type ()));
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
@@ -173,7 +173,7 @@ ASTLowerImplItem::visit (AST::Function &function)
       ASTLoweringBlock::translate (*function.get_definition ().value (),
                                   &terminated));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, function.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -271,7 +271,7 @@ ASTLowerTraitItem::visit (AST::Function &func)
       auto translated_type = std::unique_ptr<HIR::Type> (
        ASTLoweringType::translate (param.get_type ()));
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
@@ -304,7 +304,7 @@ ASTLowerTraitItem::visit (AST::Function &func)
                                     &terminated))
                       : nullptr;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, func.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -330,7 +330,7 @@ ASTLowerTraitItem::visit (AST::ConstantItem &constant)
                      ? ASTLoweringExpr::translate (constant.get_expr ())
                      : nullptr;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, constant.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -365,7 +365,7 @@ ASTLowerTraitItem::visit (AST::TraitItemType &type)
        std::unique_ptr<HIR::TypeParamBound> (lowered_bound));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
diff --git a/gcc/rust/hir/rust-ast-lower-item.cc 
b/gcc/rust/hir/rust-ast-lower-item.cc
index 2ae5242357f..546ba6fb848 100644
--- a/gcc/rust/hir/rust-ast-lower-item.cc
+++ b/gcc/rust/hir/rust-ast-lower-item.cc
@@ -56,7 +56,7 @@ ASTLoweringItem::translate (AST::Item &item)
 void
 ASTLoweringItem::visit (AST::Module &module)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, module.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -106,7 +106,7 @@ ASTLoweringItem::visit (AST::TypeAlias &alias)
   HIR::Type *existing_type
     = ASTLoweringType::translate (alias.get_type_aliased ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, alias.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -151,7 +151,7 @@ ASTLoweringItem::visit (AST::TupleStruct &struct_decl)
       HIR::Visibility vis = translate_visibility (field.get_visibility ());
       HIR::Type *type = ASTLoweringType::translate (field.get_field_type ());
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, field.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     mappings.get_next_localdef_id (crate_num));
@@ -160,7 +160,7 @@ ASTLoweringItem::visit (AST::TupleStruct &struct_decl)
                           field.get_locus (), field.get_outer_attrs ());
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, struct_decl.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -204,7 +204,7 @@ ASTLoweringItem::visit (AST::StructStruct &struct_decl)
       HIR::Visibility vis = translate_visibility (field.get_visibility ());
       HIR::Type *type = ASTLoweringType::translate (field.get_field_type ());
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, field.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     mappings.get_next_localdef_id (crate_num));
@@ -220,7 +220,7 @@ ASTLoweringItem::visit (AST::StructStruct &struct_decl)
       fields.push_back (std::move (translated_field));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, struct_decl.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -265,7 +265,7 @@ ASTLoweringItem::visit (AST::Enum &enum_decl)
       items.emplace_back (ASTLoweringEnumItem::translate (variant.get ()));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, enum_decl.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -310,7 +310,7 @@ ASTLoweringItem::visit (AST::Union &union_decl)
       HIR::Visibility vis = translate_visibility (variant.get_visibility ());
       HIR::Type *type = ASTLoweringType::translate (variant.get_field_type ());
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, variant.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     mappings.get_next_localdef_id (crate_num));
@@ -326,7 +326,7 @@ ASTLoweringItem::visit (AST::Union &union_decl)
       variants.push_back (std::move (translated_variant));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, union_decl.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -346,7 +346,7 @@ ASTLoweringItem::visit (AST::StaticItem &var)
   HIR::Type *type = ASTLoweringType::translate (var.get_type (), true);
   HIR::Expr *expr = ASTLoweringExpr::translate (var.get_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, var.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -369,7 +369,7 @@ ASTLoweringItem::visit (AST::ConstantItem &constant)
   if (constant.has_expr ())
     expr = ASTLoweringExpr::translate (constant.get_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, constant.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -418,7 +418,7 @@ ASTLoweringItem::visit (AST::Function &function)
   std::vector<HIR::FunctionParam> function_params;
   function_params.reserve (function.get_function_params ().size ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   for (auto &p : function.get_function_params ())
     {
       if (p->is_variadic ())
@@ -470,7 +470,7 @@ ASTLoweringItem::visit (AST::Function &function)
       auto translated_type = std::unique_ptr<HIR::Type> (
        ASTLoweringType::translate (param.get_type ()));
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
@@ -565,7 +565,7 @@ ASTLoweringItem::visit (AST::InherentImpl &impl_block)
 
   HIR::Type *impl_type = ASTLoweringType::translate (impl_block.get_type ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, impl_block.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -649,7 +649,7 @@ ASTLoweringItem::visit (AST::Trait &trait)
       trait_items.emplace_back (lowered);
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, trait.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -729,7 +729,7 @@ ASTLoweringItem::visit (AST::TraitImpl &impl_block)
   HIR::TypePath *trait_ref
     = ASTLowerTypePath::translate (impl_block.get_trait_path ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, impl_block.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -791,16 +791,18 @@ ASTLoweringItem::visit (AST::ExternCrate &extern_crate)
     return;
 
   auto &mappings = Analysis::Mappings::get ();
-  CrateNum num
-    = mappings.lookup_crate_name (extern_crate.get_referenced_crate ())
-       .value ();
-  AST::Crate &crate = mappings.get_ast_crate (num);
+  auto &crate_mapping = mappings.crate_mapping;
 
-  auto saved_crate_num = mappings.get_current_crate ();
-  mappings.set_current_crate (num);
+  CrateNum num
+    = crate_mapping.lookup_crate_name (extern_crate.get_referenced_crate ())
+       .value ();
+  AST::Crate &crate = mappings.crate_mapping.get_ast_crate (num);
+
+  auto saved_crate_num = mappings.crate_mapping.get_current_crate ();
+  crate_mapping.set_current_crate (num);
   auto lowered = ASTLowering::Resolve (crate);
   mappings.insert_hir_crate (std::move (lowered));
-  mappings.set_current_crate (saved_crate_num);
+  crate_mapping.set_current_crate (saved_crate_num);
 }
 
 HIR::SimplePath
@@ -814,7 +816,7 @@ ASTLoweringSimplePath::translate (const AST::SimplePath 
&path)
 HIR::SimplePathSegment
 ASTLoweringSimplePath::lower (const AST::SimplePathSegment &segment)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto node_id = segment.get_node_id ();
 
   auto mapping = Analysis::NodeMapping (crate_num, node_id,
@@ -836,7 +838,7 @@ ASTLoweringSimplePath::lower (const AST::SimplePath &path)
   for (auto &segment : path.get_segments ())
     segments.emplace_back (lower (segment));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto node_id = path.get_node_id ();
 
   auto mapping = Analysis::NodeMapping (crate_num, node_id,
diff --git a/gcc/rust/hir/rust-ast-lower-pattern.cc 
b/gcc/rust/hir/rust-ast-lower-pattern.cc
index 17d4dc981e1..21544ff2664 100644
--- a/gcc/rust/hir/rust-ast-lower-pattern.cc
+++ b/gcc/rust/hir/rust-ast-lower-pattern.cc
@@ -46,7 +46,7 @@ ASTLoweringPattern::translate (AST::Pattern &pattern, bool 
is_let_top_level)
 void
 ASTLoweringPattern::visit (AST::IdentifierPattern &pattern)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -124,7 +124,7 @@ ASTLoweringPattern::visit (AST::TupleStructPattern &pattern)
       break;
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -152,7 +152,7 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
            auto &tuple
              = static_cast<AST::StructPatternFieldTuplePat &> (*field);
 
-           auto crate_num = mappings.get_current_crate ();
+           auto crate_num = mappings.crate_mapping.get_current_crate ();
            Analysis::NodeMapping mapping (crate_num, tuple.get_node_id (),
                                           mappings.get_next_hir_id (crate_num),
                                           UNKNOWN_LOCAL_DEFID);
@@ -173,7 +173,7 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
            AST::StructPatternFieldIdentPat &ident
              = static_cast<AST::StructPatternFieldIdentPat &> (*field);
 
-           auto crate_num = mappings.get_current_crate ();
+           auto crate_num = mappings.crate_mapping.get_current_crate ();
            Analysis::NodeMapping mapping (crate_num, ident.get_node_id (),
                                           mappings.get_next_hir_id (crate_num),
                                           UNKNOWN_LOCAL_DEFID);
@@ -194,7 +194,7 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
            AST::StructPatternFieldIdent &ident
              = static_cast<AST::StructPatternFieldIdent &> (*field.get ());
 
-           auto crate_num = mappings.get_current_crate ();
+           auto crate_num = mappings.crate_mapping.get_current_crate ();
            Analysis::NodeMapping mapping (crate_num, ident.get_node_id (),
                                           mappings.get_next_hir_id (crate_num),
                                           UNKNOWN_LOCAL_DEFID);
@@ -217,7 +217,7 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
       fields.emplace_back (f);
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -230,7 +230,7 @@ ASTLoweringPattern::visit (AST::StructPattern &pattern)
 void
 ASTLoweringPattern::visit (AST::WildcardPattern &pattern)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -261,7 +261,7 @@ ASTLoweringPattern::visit (AST::TuplePattern &pattern)
       break;
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -273,7 +273,7 @@ ASTLoweringPattern::visit (AST::TuplePattern &pattern)
 void
 ASTLoweringPattern::visit (AST::LiteralPattern &pattern)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -290,7 +290,7 @@ ASTLoweringPattern::visit (AST::RangePattern &pattern)
   auto upper_bound = lower_range_pattern_bound (pattern.get_upper_bound ());
   auto lower_bound = lower_range_pattern_bound (pattern.get_lower_bound ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -312,7 +312,7 @@ ASTLoweringPattern::visit (AST::GroupedPattern &pattern)
 void
 ASTLoweringPattern::visit (AST::ReferencePattern &pattern)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -360,7 +360,7 @@ ASTLoweringPattern::visit (AST::SlicePattern &pattern)
 
   // need this earlier than usual
   // since we might need to produce rest_bind
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
 
   for (size_t i = 0; i < sub_patterns.size (); i++)
     {
@@ -424,7 +424,7 @@ ASTLoweringPattern::visit (AST::SlicePattern &pattern)
 void
 ASTLoweringPattern::visit (AST::AltPattern &pattern)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, pattern.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
diff --git a/gcc/rust/hir/rust-ast-lower-stmt.cc 
b/gcc/rust/hir/rust-ast-lower-stmt.cc
index 4792b9ac8a8..2f5eede1203 100644
--- a/gcc/rust/hir/rust-ast-lower-stmt.cc
+++ b/gcc/rust/hir/rust-ast-lower-stmt.cc
@@ -49,7 +49,7 @@ ASTLoweringStmt::visit (AST::ExprStmt &stmt)
 {
   HIR::Expr *expr = ASTLoweringExpr::translate (stmt.get_expr (), &terminated);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, stmt.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -87,7 +87,7 @@ ASTLoweringStmt::visit (AST::LetStmt &stmt)
     else_expr = std::unique_ptr<HIR::Expr> (
       ASTLoweringExpr::translate (stmt.get_else_expr ()));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, stmt.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -125,7 +125,7 @@ ASTLoweringStmt::visit (AST::Enum &enum_decl)
 void
 ASTLoweringStmt::visit (AST::EmptyStmt &empty)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, empty.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
diff --git a/gcc/rust/hir/rust-ast-lower-type.cc 
b/gcc/rust/hir/rust-ast-lower-type.cc
index 3acdfeaa1e5..7bc9c6b9719 100644
--- a/gcc/rust/hir/rust-ast-lower-type.cc
+++ b/gcc/rust/hir/rust-ast-lower-type.cc
@@ -38,7 +38,7 @@ ASTLowerTypePath::translate (AST::TypePath &type)
 void
 ASTLowerTypePath::visit (AST::TypePathSegmentFunction &segment)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto hirid = mappings.get_next_hir_id (crate_num);
   Analysis::NodeMapping mapping (crate_num, segment.get_node_id (), hirid,
                                 UNKNOWN_LOCAL_DEFID);
@@ -69,7 +69,7 @@ ASTLowerTypePath::visit (AST::TypePathSegmentFunction 
&segment)
 void
 ASTLowerTypePath::visit (AST::TypePathSegment &segment)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto hirid = mappings.get_next_hir_id (crate_num);
   Analysis::NodeMapping mapping (crate_num, segment.get_node_id (), hirid,
                                 UNKNOWN_LOCAL_DEFID);
@@ -97,7 +97,7 @@ ASTLowerTypePath::visit (AST::TypePathSegmentGeneric &segment)
 
   auto generic_args = lower_generic_args (segment.get_generic_args ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto hirid = mappings.get_next_hir_id (crate_num);
   Analysis::NodeMapping mapping (crate_num, segment.get_node_id (), hirid,
                                 UNKNOWN_LOCAL_DEFID);
@@ -137,7 +137,7 @@ ASTLowerTypePath::visit (AST::TypePath &path)
        std::unique_ptr<HIR::TypePathSegment> (translated_segment));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto hirid = mappings.get_next_hir_id (crate_num);
   Analysis::NodeMapping mapping (crate_num, path.get_node_id (), hirid,
                                 mappings.get_next_localdef_id (crate_num));
@@ -160,7 +160,7 @@ ASTLowerQualifiedPathInType::translate 
(AST::QualifiedPathInType &type)
 void
 ASTLowerQualifiedPathInType::visit (AST::QualifiedPathInType &path)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   auto hirid = mappings.get_next_hir_id (crate_num);
   Analysis::NodeMapping qual_mappings (
     crate_num, path.get_qualified_path_type ().get_node_id (), hirid,
@@ -284,7 +284,7 @@ ASTLoweringType::visit (AST::BareFunctionType &fntype)
                                                impl_trait_allowed);
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, fntype.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -306,7 +306,7 @@ ASTLoweringType::visit (AST::TupleType &tuple)
       elems.push_back (std::unique_ptr<HIR::Type> (t));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, tuple.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -336,7 +336,7 @@ ASTLoweringType::visit (AST::ArrayType &type)
                                  impl_trait_allowed);
   HIR::Expr *array_size = ASTLoweringExpr::translate (type.get_size_expr ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -357,7 +357,7 @@ ASTLoweringType::visit (AST::ReferenceType &type)
                                                     default_to_static_lifetime,
                                                     impl_trait_allowed);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -377,7 +377,7 @@ ASTLoweringType::visit (AST::RawPointerType &type)
                                  default_to_static_lifetime,
                                  impl_trait_allowed);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -399,7 +399,7 @@ ASTLoweringType::visit (AST::SliceType &type)
                                                     default_to_static_lifetime,
                                                     impl_trait_allowed);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -412,7 +412,7 @@ ASTLoweringType::visit (AST::SliceType &type)
 void
 ASTLoweringType::visit (AST::InferredType &type)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -423,7 +423,7 @@ ASTLoweringType::visit (AST::InferredType &type)
 void
 ASTLoweringType::visit (AST::NeverType &type)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -439,7 +439,7 @@ ASTLoweringType::visit (AST::TraitObjectTypeOneBound &type)
     = ASTLoweringTypeBounds::translate (type.get_trait_bound ());
   bounds.push_back (std::unique_ptr<HIR::TypeParamBound> (translated_bound));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -461,7 +461,7 @@ ASTLoweringType::visit (AST::TraitObjectType &type)
        std::unique_ptr<HIR::TypeParamBound> (translated_bound));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -477,7 +477,7 @@ ASTLoweringType::visit (AST::ParenthesisedType &type)
                                            default_to_static_lifetime,
                                            impl_trait_allowed);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -502,7 +502,7 @@ ASTLoweringType::visit (AST::ImplTraitType &type)
       bounds.push_back (std::unique_ptr<HIR::TypeParamBound> (b));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -522,7 +522,7 @@ ASTLoweringType::visit (AST::ImplTraitTypeOneBound &type)
   auto b = ASTLoweringTypeBounds::translate (*type.get_trait_bound ().get ());
   bounds.push_back (std::unique_ptr<HIR::TypeParamBound> (b));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -557,7 +557,7 @@ ASTLowerGenericParam::translate (AST::GenericParam &param)
 void
 ASTLowerGenericParam::visit (AST::LifetimeParam &param)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   AST::Lifetime lifetime = param.get_lifetime ();
   Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
@@ -574,7 +574,7 @@ ASTLowerGenericParam::visit (AST::LifetimeParam &param)
 void
 ASTLowerGenericParam::visit (AST::ConstGenericParam &param)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -612,7 +612,7 @@ ASTLowerGenericParam::visit (AST::TypeParam &param)
       = tl::optional<std::unique_ptr<HIR::Type>> (std::unique_ptr<HIR::Type> (
        ASTLoweringType::translate (param.get_type ())));
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, param.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 mappings.get_next_localdef_id (crate_num));
@@ -652,7 +652,7 @@ ASTLoweringTypeBounds::visit (AST::TraitBound &bound)
   AST::TypePath &ast_trait_path = bound.get_type_path ();
   HIR::TypePath *trait_path = ASTLowerTypePath::translate (ast_trait_path);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, bound.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -698,7 +698,7 @@ ASTLowerWhereClauseItem::visit 
(AST::LifetimeWhereClauseItem &item)
       lifetime_bounds.push_back (std::move (ll));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -731,7 +731,7 @@ ASTLowerWhereClauseItem::visit 
(AST::TypeBoundWhereClauseItem &item)
       type_param_bounds.push_back (std::unique_ptr<HIR::TypeParamBound> (b));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, item.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index 413e3f0baaa..f31cc92cdb0 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -82,7 +82,7 @@ ASTLowering::go ()
     }
 
   auto &mappings = Analysis::Mappings::get ();
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, astCrate.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -145,7 +145,7 @@ ASTLoweringBlock::visit (AST::BlockExpr &expr)
     }
 
   bool tail_reachable = !block_did_terminate;
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -168,7 +168,7 @@ ASTLoweringIfBlock::visit (AST::IfExpr &expr)
   HIR::BlockExpr *block
     = ASTLoweringBlock::translate (expr.get_if_block (), &ignored_terminated);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -195,7 +195,7 @@ ASTLoweringIfBlock::visit (AST::IfExprConseqElse &expr)
 
   terminated = if_block_terminated && else_block_termianted;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -245,7 +245,7 @@ ASTLoweringIfLetBlock::desugar_iflet (AST::IfLetExpr &expr,
   HIR::MatchArm arm (std::move (match_arm_pattern), expr.get_locus (), nullptr,
                     {});
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -286,7 +286,7 @@ ASTLoweringIfLetBlock::visit (AST::IfLetExpr &expr)
   HIR::Expr *branch_value;
 
   std::vector<HIR::MatchCase> match_arms;
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -326,7 +326,7 @@ ASTLoweringIfLetBlock::visit (AST::IfLetExprConseqElse 
&expr)
 
   desugar_iflet (expr, &branch_value, kase_else_expr, match_arms);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -343,7 +343,7 @@ ASTLowerStructExprField::visit 
(AST::StructExprFieldIdentifierValue &field)
 {
   HIR::Expr *value = ASTLoweringExpr::translate (field.get_value ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, field.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -358,7 +358,7 @@ ASTLowerStructExprField::visit 
(AST::StructExprFieldIndexValue &field)
 {
   HIR::Expr *value = ASTLoweringExpr::translate (field.get_value ());
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, field.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -372,7 +372,7 @@ ASTLowerStructExprField::visit 
(AST::StructExprFieldIndexValue &field)
 void
 ASTLowerStructExprField::visit (AST::StructExprFieldIdentifier &field)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, field.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -397,7 +397,7 @@ ASTLoweringExprWithBlock::visit (AST::WhileLoopExpr &expr)
   HIR::Expr *loop_condition
     = ASTLoweringExpr::translate (expr.get_predicate_expr (), &terminated);
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -439,7 +439,7 @@ ASTLoweringExprWithBlock::visit (AST::MatchExpr &expr)
                         std::unique_ptr<HIR::Expr> (kase_guard_expr),
                         match_case.get_arm ().get_outer_attrs ());
 
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
@@ -448,7 +448,7 @@ ASTLoweringExprWithBlock::visit (AST::MatchExpr &expr)
                               std::unique_ptr<HIR::Expr> (kase_expr));
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -464,7 +464,7 @@ ASTLoweringExprWithBlock::visit (AST::MatchExpr &expr)
 void
 ASTLowerPathInExpression::visit (AST::PathInExpression &expr)
 {
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -504,7 +504,7 @@ ASTLoweringBase::lower_qual_path_type 
(AST::QualifiedPathType &qualified_type)
        ? ASTLowerTypePath::translate (qualified_type.get_as_type_path ())
        : nullptr;
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, qualified_type.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
@@ -534,7 +534,7 @@ ASTLowerQualPathInExpression::visit 
(AST::QualifiedPathInExpression &expr)
       mappings.insert_hir_path_expr_seg (lowered_seg);
     }
 
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings.get_next_hir_id (crate_num),
                                 UNKNOWN_LOCAL_DEFID);
diff --git a/gcc/rust/metadata/rust-export-metadata.cc 
b/gcc/rust/metadata/rust-export-metadata.cc
index 4c36be9f5ae..1030f32092b 100644
--- a/gcc/rust/metadata/rust-export-metadata.cc
+++ b/gcc/rust/metadata/rust-export-metadata.cc
@@ -95,9 +95,9 @@ PublicInterface::ExportTo (HIR::Crate &crate, const 
std::string &output_path)
 void
 PublicInterface::gather_export_data ()
 {
-  auto crate_num
-    = mappings.lookup_crate_num (crate.get_mappings ().get_nodeid ());
-  auto &ast_crate = mappings.get_ast_crate (crate_num.value ());
+  auto crate_num = mappings.crate_mapping.lookup_crate_num (
+    crate.get_mappings ().get_nodeid ());
+  auto &ast_crate = mappings.crate_mapping.get_ast_crate (crate_num.value ());
   context.emit_crate (ast_crate);
 
   for (auto &macro : mappings.get_exported_macros ())
@@ -120,7 +120,8 @@ PublicInterface::write_to_object_file () const
   md5_finish_ctx (&chksm, checksum);
 
   // MAGIC MD5 DLIM  DLIM buffer-size DELIM contents
-  const std::string current_crate_name = mappings.get_current_crate_name ();
+  const std::string current_crate_name
+    = mappings.crate_mapping.get_current_crate_name ();
 
   // extern void
   rust_write_export_data (kMagicHeader, sizeof (kMagicHeader));
@@ -162,7 +163,8 @@ PublicInterface::write_to_path (const std::string &path) 
const
   md5_finish_ctx (&chksm, checksum);
 
   // MAGIC MD5 DLIM  DLIM buffer-size DELIM contents
-  const std::string current_crate_name = mappings.get_current_crate_name ();
+  const std::string current_crate_name
+    = mappings.crate_mapping.get_current_crate_name ();
 
   // write to path
   FILE *nfd = fopen (path.c_str (), "wb");
@@ -264,7 +266,8 @@ PublicInterface::expected_metadata_filename ()
 {
   auto &mappings = Analysis::Mappings::get ();
 
-  const std::string current_crate_name = mappings.get_current_crate_name ();
+  const std::string current_crate_name
+    = mappings.crate_mapping.get_current_crate_name ();
   return current_crate_name + extension_path;
 }
 
diff --git a/gcc/rust/resolve/rust-default-resolver.cc 
b/gcc/rust/resolve/rust-default-resolver.cc
index ac2b7b19658..0433156482d 100644
--- a/gcc/rust/resolve/rust-default-resolver.cc
+++ b/gcc/rust/resolve/rust-default-resolver.cc
@@ -41,11 +41,11 @@ DefaultResolver::visit (AST::Crate &crate)
     AST::DefaultASTVisitor::visit (crate);
   };
 
-  auto &mappings = Analysis::Mappings::get ();
+  auto &crate_mappings = Analysis::Mappings::get ().crate_mapping;
 
-  auto crate_num = mappings.lookup_crate_num (crate.get_node_id ());
+  auto crate_num = crate_mappings.lookup_crate_num (crate.get_node_id ());
   rust_assert (crate_num.has_value ());
-  auto crate_name = mappings.get_crate_name (*crate_num);
+  auto crate_name = crate_mappings.get_crate_name (*crate_num);
   rust_assert (crate_name.has_value ());
 
   ctx.canonical_ctx.scope_crate (crate.get_node_id (), *crate_name, inner_fn);
@@ -482,11 +482,12 @@ void
 DefaultResolver::visit (AST::ExternCrate &crate)
 {
   auto &mappings = Analysis::Mappings::get ();
+  auto &crate_mappings = mappings.crate_mapping;
   tl::optional<CrateNum> num_opt;
   if (crate.get_referenced_crate () == "self")
-    num_opt = mappings.get_current_crate ();
+    num_opt = crate_mappings.get_current_crate ();
   else
-    num_opt = mappings.lookup_crate_name (crate.get_referenced_crate ());
+    num_opt = crate_mappings.lookup_crate_name (crate.get_referenced_crate ());
 
   if (!num_opt)
     {
@@ -497,7 +498,7 @@ DefaultResolver::visit (AST::ExternCrate &crate)
 
   CrateNum num = *num_opt;
 
-  AST::Crate &referenced_crate = mappings.get_ast_crate (num);
+  AST::Crate &referenced_crate = mappings.crate_mapping.get_ast_crate (num);
 
   auto sub_visitor_1
     = [&, this] () { visit_extern_crate (crate, referenced_crate, num); };
@@ -505,7 +506,7 @@ DefaultResolver::visit (AST::ExternCrate &crate)
   auto sub_visitor_2 = [&] () {
     ctx.canonical_ctx.scope_crate (referenced_crate.get_node_id (),
                                   crate.get_referenced_crate () == "self"
-                                    ? mappings.get_current_crate_name ()
+                                    ? crate_mappings.get_current_crate_name ()
                                     : crate.get_referenced_crate (),
                                   std::move (sub_visitor_1));
   };
diff --git a/gcc/rust/resolve/rust-forever-stack.h 
b/gcc/rust/resolve/rust-forever-stack.h
index eb21331166c..07eb6293bd3 100644
--- a/gcc/rust/resolve/rust-forever-stack.h
+++ b/gcc/rust/resolve/rust-forever-stack.h
@@ -597,8 +597,9 @@ public:
 
     // TODO: Should we be using the forever stack root as the crate scope?
     // TODO: Is this how we should be getting the crate node id?
-    auto &mappings = Analysis::Mappings::get ();
-    root.id = *mappings.crate_num_to_nodeid (mappings.get_current_crate ());
+    auto &crate_mappings = Analysis::Mappings::get ().crate_mapping;
+    root.id = *crate_mappings.crate_num_to_nodeid (
+      crate_mappings.get_current_crate ());
   }
 
   /**
diff --git a/gcc/rust/resolve/rust-name-resolution-context.h 
b/gcc/rust/resolve/rust-name-resolution-context.h
index e30c5b59e42..8903b23ae32 100644
--- a/gcc/rust/resolve/rust-name-resolution-context.h
+++ b/gcc/rust/resolve/rust-name-resolution-context.h
@@ -253,8 +253,11 @@ public:
   CanonicalPathRecordCrateRoot (NodeId node_id, std::string seg)
     : node_id (node_id), seg (std::move (seg))
   {
-    rust_assert (Analysis::Mappings::get ().node_is_crate (node_id));
-    crate_num = Analysis::Mappings::get ().lookup_crate_num (node_id).value ();
+    rust_assert (
+      Analysis::Mappings::get ().crate_mapping.node_is_crate (node_id));
+    crate_num = Analysis::Mappings::get ()
+                 .crate_mapping.lookup_crate_num (node_id)
+                 .value ();
   }
 
   Resolver::CanonicalPath as_path (const NameResolutionContext &,
@@ -276,7 +279,8 @@ public:
     : CanonicalPathRecordWithParent (parent_node_id), node_id (node_id),
       seg (std::move (seg))
   {
-    rust_assert (!Analysis::Mappings::get ().node_is_crate (node_id));
+    rust_assert (
+      !Analysis::Mappings::get ().crate_mapping.node_is_crate (node_id));
   }
 
   Resolver::CanonicalPath as_path (const NameResolutionContext &,
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 4f4f8d411d8..f65b0926447 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -482,7 +482,6 @@ void
 Session::handle_crate_name (const char *filename,
                            const AST::Crate &parsed_crate)
 {
-  auto &mappings = Analysis::Mappings::get ();
   auto crate_name_found = false;
   auto error = Error (UNDEF_LOCATION, std::string ());
 
@@ -544,8 +543,11 @@ Session::handle_crate_name (const char *filename,
   if (saw_errors ())
     return;
 
-  CrateNum crate_num = mappings.get_next_crate_num (options.get_crate_name ());
-  mappings.set_current_crate (crate_num);
+  auto &crate_mappings = Analysis::Mappings::get ().crate_mapping;
+
+  CrateNum crate_num
+    = crate_mappings.get_next_crate_num (options.get_crate_name ());
+  crate_mappings.set_current_crate (crate_num);
 }
 
 /** Parse additional attributes injected from the command line
@@ -667,9 +669,10 @@ Session::compile_crate (const char *filename)
     }
 
   // setup the mappings for this AST
-  CrateNum current_crate = mappings.get_current_crate ();
+  CrateNum current_crate = mappings.crate_mapping.get_current_crate ();
   AST::Crate &parsed_crate
-    = mappings.insert_ast_crate (std::move (ast_crate), current_crate);
+    = mappings.crate_mapping.insert_ast_crate (std::move (ast_crate),
+                                              current_crate);
 
   /* basic pipeline:
    *  - lex
@@ -1253,10 +1256,11 @@ Session::dump_hir_pretty (HIR::Crate &crate) const
 tl::expected<Session::LoadedCrate, Session::LoadingError>
 Session::load_extern_crate (const std::string &crate_name, location_t locus)
 {
+  auto &crate_mapping = mappings.crate_mapping;
   // has it already been loaded?
-  if (auto crate_num = mappings.lookup_crate_name (crate_name))
+  if (auto crate_num = crate_mapping.lookup_crate_name (crate_name))
     {
-      auto resolved_node_id = mappings.crate_num_to_nodeid (*crate_num);
+      auto resolved_node_id = crate_mapping.crate_num_to_nodeid (*crate_num);
       rust_assert (resolved_node_id);
 
       return tl::make_unexpected (
@@ -1309,7 +1313,8 @@ Session::load_extern_crate (const std::string 
&crate_name, location_t locus)
     }
 
   // ensure the current vs this crate name don't collide
-  const std::string current_crate_name = mappings.get_current_crate_name ();
+  const std::string current_crate_name
+    = crate_mapping.get_current_crate_name ();
   if (current_crate_name.compare (extern_crate.get_crate_name ()) == 0)
     {
       rust_error_at (locus, "current crate name %qs collides with this",
@@ -1318,10 +1323,10 @@ Session::load_extern_crate (const std::string 
&crate_name, location_t locus)
     }
 
   // setup mappings
-  CrateNum saved_crate_num = mappings.get_current_crate ();
+  CrateNum saved_crate_num = crate_mapping.get_current_crate ();
   CrateNum crate_num
-    = mappings.get_next_crate_num (extern_crate.get_crate_name ());
-  mappings.set_current_crate (crate_num);
+    = crate_mapping.get_next_crate_num (extern_crate.get_crate_name ());
+  crate_mapping.set_current_crate (crate_num);
 
   // then lets parse this as a 2nd crate
   Lexer lex (extern_crate.get_metadata (), linemap);
@@ -1329,7 +1334,8 @@ Session::load_extern_crate (const std::string 
&crate_name, location_t locus)
   std::unique_ptr<AST::Crate> metadata_crate = parser.parse_crate ();
 
   AST::Crate &parsed_crate
-    = mappings.insert_ast_crate (std::move (metadata_crate), crate_num);
+    = mappings.crate_mapping.insert_ast_crate (std::move (metadata_crate),
+                                              crate_num);
 
   auto ctx = Resolver2_0::NameResolutionContext ();
   Resolver2_0::Builtins::setup_lang_prelude (ctx);
@@ -1365,7 +1371,7 @@ Session::load_extern_crate (const std::string 
&crate_name, location_t locus)
   mappings.insert_derive_proc_macros (crate_num, derive_macros);
 
   // always restore the crate_num
-  mappings.set_current_crate (saved_crate_num);
+  crate_mapping.set_current_crate (saved_crate_num);
 
   return LoadedCrate{crate_name, parsed_crate.get_node_id (), std::move (ctx)};
 }
diff --git a/gcc/rust/typecheck/rust-hir-type-check-base.cc 
b/gcc/rust/typecheck/rust-hir-type-check-base.cc
index f5f457f6020..2bcc778c684 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-base.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-base.cc
@@ -386,7 +386,7 @@ TypeCheckBase::resolve_literal (const Analysis::NodeMapping 
&expr_mappings,
        auto ok = context->lookup_builtin ("u8", &u8);
        rust_assert (ok);
 
-       auto crate_num = mappings.get_current_crate ();
+       auto crate_num = mappings.crate_mapping.get_current_crate ();
        Analysis::NodeMapping capacity_mapping (crate_num, UNKNOWN_NODEID,
                                                mappings.get_next_hir_id (
                                                  crate_num),
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc 
b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
index b2e10c6225b..0f02b3698dd 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
@@ -1210,7 +1210,7 @@ TypeCheckExpr::visit (HIR::ArrayExpr &expr)
                            expr.get_locus ());
          }
 
-       auto crate_num = mappings.get_current_crate ();
+       auto crate_num = mappings.crate_mapping.get_current_crate ();
        Analysis::NodeMapping mapping (crate_num, UNKNOWN_NODEID,
                                       mappings.get_next_hir_id (crate_num),
                                       UNKNOWN_LOCAL_DEFID);
@@ -1998,7 +1998,7 @@ TypeCheckExpr::visit (HIR::ClosureExpr &expr)
 
   // lets generate an implicit Type so that it resolves to the implict tuple
   // type we have created
-  auto crate_num = mappings.get_current_crate ();
+  auto crate_num = mappings.crate_mapping.get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_mappings ().get_nodeid (),
                                 implicit_args_id, UNKNOWN_LOCAL_DEFID);
   HIR::TupleType *implicit_tuple
@@ -2401,8 +2401,9 @@ TypeCheckExpr::resolve_fn_trait_call (HIR::CallExpr &expr,
 
   // crate implicit tuple
   HirId implicit_arg_id = mappings.get_next_hir_id ();
-  Analysis::NodeMapping mapping (mappings.get_current_crate (), UNKNOWN_NODEID,
-                                implicit_arg_id, UNKNOWN_LOCAL_DEFID);
+  Analysis::NodeMapping mapping (mappings.crate_mapping.get_current_crate (),
+                                UNKNOWN_NODEID, implicit_arg_id,
+                                UNKNOWN_LOCAL_DEFID);
 
   TyTy::TupleType *tuple
     = new TyTy::TupleType (implicit_arg_id, expr.get_locus (), call_args);
diff --git a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc 
b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc
index 8c65390f781..5886e57968d 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-implitem.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-implitem.cc
@@ -108,7 +108,7 @@ TypeCheckTopLevelExternItem::visit 
(HIR::ExternalFunctionItem &function)
       auto param_tyty = TypeCheckType::Resolve (param.get_type ());
 
       // these are implicit mappings and not used
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, mappings.get_next_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
@@ -273,7 +273,7 @@ TypeCheckImplItem::resolve_function_signature 
(HIR::Function &function)
   if (function.is_method ())
     {
       // these are implicit mappings and not used
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, mappings.get_next_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc 
b/gcc/rust/typecheck/rust-hir-type-check-item.cc
index 5f54c0726fa..17067603719 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-item.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc
@@ -1132,17 +1132,17 @@ TypeCheckItem::visit (HIR::ExternCrate &extern_crate)
   if (extern_crate.references_self ())
     return;
 
-  auto &mappings = Analysis::Mappings::get ();
+  auto &crate_mappings = Analysis::Mappings::get ().crate_mapping;
   CrateNum num
-    = mappings.lookup_crate_name (extern_crate.get_referenced_crate ())
+    = crate_mappings.lookup_crate_name (extern_crate.get_referenced_crate ())
        .value ();
   HIR::Crate &crate = mappings.get_hir_crate (num);
 
-  CrateNum saved_crate_num = mappings.get_current_crate ();
-  mappings.set_current_crate (num);
+  CrateNum saved_crate_num = crate_mappings.get_current_crate ();
+  crate_mappings.set_current_crate (num);
   for (auto &item : crate.get_items ())
     TypeCheckItem::Resolve (*item);
-  mappings.set_current_crate (saved_crate_num);
+  crate_mappings.set_current_crate (saved_crate_num);
 }
 
 std::pair<std::vector<TyTy::SubstitutionParamMapping>, TyTy::RegionConstraints>
diff --git a/gcc/rust/typecheck/rust-hir-type-check-struct.cc 
b/gcc/rust/typecheck/rust-hir-type-check-struct.cc
index b6ea1028f7a..8c3d540c17c 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-struct.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-struct.cc
@@ -191,7 +191,7 @@ TypeCheckStructExpr::resolve (HIR::StructExprStructFields 
&struct_expr)
              HIR::StructExprField *implicit_field = nullptr;
 
              AST::AttrVec outer_attribs;
-             auto crate_num = mappings.get_current_crate ();
+             auto crate_num = mappings.crate_mapping.get_current_crate ();
              Analysis::NodeMapping mapping (crate_num,
                                             struct_expr.get_struct_base ()
                                               .get_base ()
diff --git a/gcc/rust/typecheck/rust-hir-type-check.cc 
b/gcc/rust/typecheck/rust-hir-type-check.cc
index d4c21d09ca8..25048a38f11 100644
--- a/gcc/rust/typecheck/rust-hir-type-check.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check.cc
@@ -206,7 +206,7 @@ TraitItemReference::get_type_from_fn (/*const*/ 
HIR::TraitItemFunc &fn) const
     {
       // these are implicit mappings and not used
       auto &mappings = Analysis::Mappings::get ();
-      auto crate_num = mappings.get_current_crate ();
+      auto crate_num = mappings.crate_mapping.get_current_crate ();
       Analysis::NodeMapping mapping (crate_num, mappings.get_next_node_id (),
                                     mappings.get_next_hir_id (crate_num),
                                     UNKNOWN_LOCAL_DEFID);
diff --git a/gcc/rust/typecheck/rust-type-util.cc 
b/gcc/rust/typecheck/rust-type-util.cc
index 7df36f0d3cf..96367df5cb5 100644
--- a/gcc/rust/typecheck/rust-type-util.cc
+++ b/gcc/rust/typecheck/rust-type-util.cc
@@ -76,7 +76,8 @@ query_type (HirId reference, TyTy::BaseType **result)
                      reference);
 
       DefId item_defid = item.value ()->get_mappings ().get_defid ();
-      bool is_local = item_defid.crateNum == mappings.get_current_crate ();
+      bool is_local
+       = item_defid.crateNum == mappings.crate_mapping.get_current_crate ();
       bool is_fn
        = item.value ()->get_item_kind () == HIR::Item::ItemKind::Function;
       bool is_const_fn = false;
@@ -164,7 +165,8 @@ query_type (HirId reference, TyTy::BaseType **result)
                      "resolved impl-item {%u} to", reference);
 
       DefId item_defid = impl_item->first->get_impl_mappings ().get_defid ();
-      bool is_local = item_defid.crateNum == mappings.get_current_crate ();
+      bool is_local
+       = item_defid.crateNum == mappings.crate_mapping.get_current_crate ();
       bool is_fn
        = impl_item->first->get_impl_item_type () == HIR::ImplItem::FUNCTION;
       bool is_const_fn = false;
diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc 
b/gcc/rust/typecheck/rust-tyty-bounds.cc
index 0d762c8c09c..a00cb6b3d4a 100644
--- a/gcc/rust/typecheck/rust-tyty-bounds.cc
+++ b/gcc/rust/typecheck/rust-tyty-bounds.cc
@@ -316,7 +316,7 @@ TypeCheckBase::get_predicate_from_bound (
 
        // we need to make implicit generic args which must be an implicit
        // Tuple
-       auto crate_num = mappings.get_current_crate ();
+       auto crate_num = mappings.crate_mapping.get_current_crate ();
        HirId implicit_args_id = mappings.get_next_hir_id ();
        Analysis::NodeMapping mapping (crate_num,
                                       final_seg.get_mappings ().get_nodeid (),
diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc 
b/gcc/rust/typecheck/rust-tyty-subst.cc
index ba237bcc744..08b618e8cca 100644
--- a/gcc/rust/typecheck/rust-tyty-subst.cc
+++ b/gcc/rust/typecheck/rust-tyty-subst.cc
@@ -238,11 +238,11 @@ SubstitutionParamMapping::override_context ()
   auto &mappings = Analysis::Mappings::get ();
   auto context = Resolver::TypeCheckContext::get ();
 
-  context->insert_type (Analysis::NodeMapping (mappings.get_current_crate (),
-                                              UNKNOWN_NODEID,
-                                              param->get_ref (),
-                                              UNKNOWN_LOCAL_DEFID),
-                       param->resolve ());
+  context->insert_type (
+    Analysis::NodeMapping (mappings.crate_mapping.get_current_crate (),
+                          UNKNOWN_NODEID, param->get_ref (),
+                          UNKNOWN_LOCAL_DEFID),
+    param->resolve ());
 }
 
 SubstitutionArg::SubstitutionArg (const SubstitutionParamMapping *param,
diff --git a/gcc/rust/typecheck/rust-tyty-util.cc 
b/gcc/rust/typecheck/rust-tyty-util.cc
index c9f8becb12c..d63f4549587 100644
--- a/gcc/rust/typecheck/rust-tyty-util.cc
+++ b/gcc/rust/typecheck/rust-tyty-util.cc
@@ -120,10 +120,10 @@ TyVar::monomorphized_clone () const
   c->set_ref (mappings.get_next_hir_id ());
 
   // insert it
-  context->insert_type (Analysis::NodeMapping (mappings.get_current_crate (),
-                                              UNKNOWN_NODEID, c->get_ref (),
-                                              UNKNOWN_LOCAL_DEFID),
-                       c);
+  context->insert_type (
+    Analysis::NodeMapping (mappings.crate_mapping.get_current_crate (),
+                          UNKNOWN_NODEID, c->get_ref (), UNKNOWN_LOCAL_DEFID),
+    c);
 
   return TyVar (c->get_ref ());
 }
diff --git a/gcc/rust/typecheck/rust-tyty.cc b/gcc/rust/typecheck/rust-tyty.cc
index a9b3dcc5e6a..b3696afa160 100644
--- a/gcc/rust/typecheck/rust-tyty.cc
+++ b/gcc/rust/typecheck/rust-tyty.cc
@@ -1371,11 +1371,11 @@ InferType::clone () const
     = new InferType (mappings.get_next_hir_id (), get_infer_kind (),
                     default_hint, get_ident ().locus, get_combined_refs ());
 
-  context->insert_type (Analysis::NodeMapping (mappings.get_current_crate (),
-                                              UNKNOWN_NODEID,
-                                              clone->get_ref (),
-                                              UNKNOWN_LOCAL_DEFID),
-                       clone);
+  context->insert_type (
+    Analysis::NodeMapping (mappings.crate_mapping.get_current_crate (),
+                          UNKNOWN_NODEID, clone->get_ref (),
+                          UNKNOWN_LOCAL_DEFID),
+    clone);
   mappings.insert_location (clone->get_ref (),
                            mappings.lookup_location (get_ref ()));
 
@@ -4212,11 +4212,11 @@ ConstInferType::clone () const
     = new ConstInferType (specified_type, mappings.get_next_hir_id (),
                          get_ty_ref (), get_combined_refs ());
 
-  context->insert_type (Analysis::NodeMapping (mappings.get_current_crate (),
-                                              UNKNOWN_NODEID,
-                                              clone->get_ref (),
-                                              UNKNOWN_LOCAL_DEFID),
-                       clone);
+  context->insert_type (
+    Analysis::NodeMapping (mappings.crate_mapping.get_current_crate (),
+                          UNKNOWN_NODEID, clone->get_ref (),
+                          UNKNOWN_LOCAL_DEFID),
+    clone);
   mappings.insert_location (clone->get_ref (),
                            mappings.lookup_location (get_ref ()));
 
diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc
index 1151c5cae19..6a96102ca3f 100644
--- a/gcc/rust/util/rust-hir-map.cc
+++ b/gcc/rust/util/rust-hir-map.cc
@@ -98,9 +98,12 @@ static const HirId kDefaultNodeIdBegin = 1;
 static const HirId kDefaultHirIdBegin = 1;
 static const HirId kDefaultCrateNumBegin = 0;
 
+CrateMappings::CrateMappings ()
+  : crateNumItr (kDefaultCrateNumBegin), currentCrateNum (UNKNOWN_CRATENUM)
+{}
+
 Mappings::Mappings ()
-  : crateNumItr (kDefaultCrateNumBegin), currentCrateNum (UNKNOWN_CRATENUM),
-    hirIdIter (kDefaultHirIdBegin), nodeIdIter (kDefaultNodeIdBegin),
+  : hirIdIter (kDefaultHirIdBegin), nodeIdIter (kDefaultNodeIdBegin),
     hirImplIndexesBuilt (false)
 {
   Analysis::NodeMapping node (0, 0, 0, 0);
@@ -121,7 +124,7 @@ Mappings::get ()
 }
 
 CrateNum
-Mappings::get_next_crate_num (const std::string &name)
+CrateMappings::get_next_crate_num (const std::string &name)
 {
   auto id = crateNumItr;
   crateNumItr++;
@@ -130,19 +133,19 @@ Mappings::get_next_crate_num (const std::string &name)
 }
 
 void
-Mappings::set_current_crate (CrateNum crateNum)
+CrateMappings::set_current_crate (CrateNum crateNum)
 {
   currentCrateNum = crateNum;
 }
 
 CrateNum
-Mappings::get_current_crate () const
+CrateMappings::get_current_crate () const
 {
   return currentCrateNum;
 }
 
 tl::optional<const std::string &>
-Mappings::get_crate_name (CrateNum crate_num) const
+CrateMappings::get_crate_name (CrateNum crate_num) const
 {
   auto it = crate_names.find (crate_num);
   if (it == crate_names.end ())
@@ -152,7 +155,7 @@ Mappings::get_crate_name (CrateNum crate_num) const
 }
 
 tl::optional<CrateNum>
-Mappings::lookup_crate_num (NodeId node_id) const
+CrateMappings::lookup_crate_num (NodeId node_id) const
 {
   auto it = crate_node_to_crate_num.find (node_id);
   if (it == crate_node_to_crate_num.end ())
@@ -162,19 +165,19 @@ Mappings::lookup_crate_num (NodeId node_id) const
 }
 
 void
-Mappings::set_crate_name (CrateNum crate_num, const std::string &name)
+CrateMappings::set_crate_name (CrateNum crate_num, const std::string &name)
 {
   crate_names[crate_num] = name;
 }
 
 const std::string &
-Mappings::get_current_crate_name () const
+CrateMappings::get_current_crate_name () const
 {
   return get_crate_name (get_current_crate ()).value ();
 }
 
 tl::optional<CrateNum>
-Mappings::lookup_crate_name (const std::string &crate_name) const
+CrateMappings::lookup_crate_name (const std::string &crate_name) const
 {
   for (const auto &it : crate_names)
     {
@@ -185,7 +188,7 @@ Mappings::lookup_crate_name (const std::string &crate_name) 
const
 }
 
 tl::optional<NodeId>
-Mappings::crate_num_to_nodeid (const CrateNum &crate_num) const
+CrateMappings::crate_num_to_nodeid (const CrateNum &crate_num) const
 {
   auto it = ast_crate_mappings.find (crate_num);
   if (it == ast_crate_mappings.end ())
@@ -195,7 +198,7 @@ Mappings::crate_num_to_nodeid (const CrateNum &crate_num) 
const
 }
 
 bool
-Mappings::node_is_crate (NodeId node_id) const
+CrateMappings::node_is_crate (NodeId node_id) const
 {
   return lookup_crate_num (node_id).has_value ();
 }
@@ -244,7 +247,7 @@ Mappings::get_next_localdef_id (CrateNum crateNum)
 }
 
 AST::Crate &
-Mappings::get_ast_crate (CrateNum crateNum)
+CrateMappings::get_ast_crate (CrateNum crateNum)
 {
   auto it = ast_crate_mappings.find (crateNum);
   rust_assert (it != ast_crate_mappings.end ());
@@ -254,11 +257,11 @@ Mappings::get_ast_crate (CrateNum crateNum)
 AST::Crate &
 Mappings::get_ast_crate_by_node_id (NodeId id)
 {
-  return *get_ast_crate_by_node_id_raw (id);
+  return *crate_mapping.get_ast_crate_by_node_id_raw (id);
 }
 
 AST::Crate *
-Mappings::get_ast_crate_by_node_id_raw (NodeId id)
+CrateMappings::get_ast_crate_by_node_id_raw (NodeId id)
 {
   CrateNum crateNum = lookup_crate_num (id).value ();
   auto it = ast_crate_mappings.find (crateNum);
@@ -267,8 +270,8 @@ Mappings::get_ast_crate_by_node_id_raw (NodeId id)
 }
 
 AST::Crate &
-Mappings::insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
-                           CrateNum crate_num)
+CrateMappings::insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
+                                CrateNum crate_num)
 {
   auto it = ast_crate_mappings.find (crate_num);
   rust_assert (it == ast_crate_mappings.end ());
@@ -1074,7 +1077,8 @@ Mappings::insert_macro_def (AST::MacroRulesDefinition 
*macro)
   auto it = macroMappings.find (macro->get_node_id ());
   rust_assert (it == macroMappings.end ());
 
-  macroMappings[macro->get_node_id ()] = {macro, currentCrateNum};
+  macroMappings[macro->get_node_id ()]
+    = {macro, crate_mapping.get_current_crate ()};
 }
 
 tl::optional<AST::MacroRulesDefinition *>
@@ -1349,7 +1353,7 @@ Mappings::insert_glob_container (NodeId id, 
AST::GlobContainer *container)
 
   // Crates have different memory managements that regular items
   if (container->get_glob_container_kind () == AST::GlobContainer::Kind::Crate)
-    glob_containers[id] = get_ast_crate_by_node_id_raw (id);
+    glob_containers[id] = crate_mapping.get_ast_crate_by_node_id_raw (id);
   else
     glob_containers[id] = container;
 }
diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h
index 344e13414fe..d92f0e0f16a 100644
--- a/gcc/rust/util/rust-hir-map.h
+++ b/gcc/rust/util/rust-hir-map.h
@@ -71,11 +71,21 @@ private:
   LocalDefId localDefId;
 };
 
-class Mappings
+class CrateMappings
 {
+  std::map<CrateNum, AST::Crate *> ast_crate_mappings;
+
+  // crate names
+  std::map<CrateNum, std::string> crate_names;
+
+  CrateNum crateNumItr;
+
+  CrateNum currentCrateNum;
+
+  std::map<NodeId, CrateNum> crate_node_to_crate_num;
+
 public:
-  static Mappings &get ();
-  ~Mappings ();
+  CrateMappings ();
 
   CrateNum get_next_crate_num (const std::string &name);
   void set_current_crate (CrateNum crateNum);
@@ -90,19 +100,35 @@ public:
   tl::optional<NodeId> crate_num_to_nodeid (const CrateNum &crate_num) const;
   bool node_is_crate (NodeId node_id) const;
 
+  AST::Crate &insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
+                               CrateNum crate_num);
+
+  AST::Crate &get_ast_crate (CrateNum crateNum);
+
+  AST::Crate *get_ast_crate_by_node_id_raw (NodeId id);
+};
+
+class Mappings
+{
+public:
+  static Mappings &get ();
+  ~Mappings ();
+
+  CrateMappings crate_mapping;
+
   NodeId get_next_node_id ();
-  HirId get_next_hir_id () { return get_next_hir_id (get_current_crate ()); }
+  HirId get_next_hir_id ()
+  {
+    return get_next_hir_id (crate_mapping.get_current_crate ());
+  }
   HirId get_next_hir_id (CrateNum crateNum);
   LocalDefId get_next_localdef_id ()
   {
-    return get_next_localdef_id (get_current_crate ());
+    return get_next_localdef_id (crate_mapping.get_current_crate ());
   }
   LocalDefId get_next_localdef_id (CrateNum crateNum);
 
-  AST::Crate &get_ast_crate (CrateNum crateNum);
   AST::Crate &get_ast_crate_by_node_id (NodeId id);
-  AST::Crate &insert_ast_crate (std::unique_ptr<AST::Crate> &&crate,
-                               CrateNum crate_num);
   HIR::Crate &insert_hir_crate (std::unique_ptr<HIR::Crate> &&crate);
   HIR::Crate &get_hir_crate (CrateNum crateNum);
   bool is_local_hirid_crate (HirId crateNum);
@@ -403,17 +429,11 @@ public:
 private:
   Mappings ();
 
-  CrateNum crateNumItr;
-  CrateNum currentCrateNum;
   HirId hirIdIter;
   NodeId nodeIdIter;
   std::map<CrateNum, LocalDefId> localIdIter;
   HIR::ImplBlock *builtinMarker;
 
-  AST::Crate *get_ast_crate_by_node_id_raw (NodeId id);
-
-  std::map<NodeId, CrateNum> crate_node_to_crate_num;
-  std::map<CrateNum, AST::Crate *> ast_crate_mappings;
   std::map<CrateNum, HIR::Crate *> hir_crate_mappings;
   std::map<DefId, HIR::Item *> defIdMappings;
   std::map<DefId, HIR::TraitItem *> defIdTraitItemMappings;
@@ -485,9 +505,6 @@ private:
   std::map<NodeId, BangProcMacro> procmacroBangInvocations;
   std::map<NodeId, AttributeProcMacro> procmacroAttributeInvocations;
 
-  // crate names
-  std::map<CrateNum, std::string> crate_names;
-
   // Low level visibility map for each DefId
   std::map<NodeId, Privacy::ModuleVisibility> visibility_map;
 
-- 
2.55.0

Reply via email to