diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-05-07 13:19:29 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-05-11 15:37:19 +0100 |
commit | c04343dbab902e5b8a5f047266645a5e7d40a5ed (patch) | |
tree | 96f4029948ed5263ed7ef218a58f49c774948a89 /gcc | |
parent | 299d98d8e6fcb8d014b299adc426d93cf0c8050f (diff) | |
download | gcc-c04343dbab902e5b8a5f047266645a5e7d40a5ed.zip gcc-c04343dbab902e5b8a5f047266645a5e7d40a5ed.tar.gz gcc-c04343dbab902e5b8a5f047266645a5e7d40a5ed.tar.bz2 |
Explicitly track crate names within the mappings
We need to track crate names including the translation units one for symbol
mangling purposes. This defaults to TestCrate for now and will need more
work to actually make this a compiler option as part of imports and
visbility.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/rust-session-manager.cc | 8 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.cc | 27 | ||||
-rw-r--r-- | gcc/rust/util/rust-hir-map.h | 24 |
3 files changed, 47 insertions, 12 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc index da788b5..5e9746f 100644 --- a/gcc/rust/rust-session-manager.cc +++ b/gcc/rust/rust-session-manager.cc @@ -70,6 +70,10 @@ const char *kHIRDumpFile = "gccrs.hir.dump"; const char *kHIRTypeResolutionDumpFile = "gccrs.type-resolution.dump"; const char *kTargetOptionsDumpFile = "gccrs.target-options.dump"; +// FIME in the imports/visibility milestone - this needs to be command line +// option +const std::string kDefaultCrateName = "TestCrate"; + // Implicitly enable a target_feature (and recursively enable dependencies). void Session::implicitly_enable_feature (std::string feature_name) @@ -445,6 +449,10 @@ Session::enable_dump (std::string arg) void Session::parse_files (int num_files, const char **files) { + auto mappings = Analysis::Mappings::get (); + CrateNum crate_num = mappings->setup_crate_mappings (kDefaultCrateName); + mappings->set_current_crate (crate_num); + for (int i = 0; i < num_files; i++) { printf ("Attempting to parse file: %s\n", files[i]); diff --git a/gcc/rust/util/rust-hir-map.cc b/gcc/rust/util/rust-hir-map.cc index 0dcbd4f..3a0cbb1 100644 --- a/gcc/rust/util/rust-hir-map.cc +++ b/gcc/rust/util/rust-hir-map.cc @@ -107,7 +107,7 @@ Mappings::get () { static std::unique_ptr<Mappings> instance; if (!instance) - instance = std::move (std::unique_ptr<Mappings> (new Mappings ())); + instance = std::unique_ptr<Mappings> (new Mappings ()); return instance.get (); } @@ -125,18 +125,23 @@ Mappings::set_current_crate (CrateNum crateNum) } CrateNum -Mappings::get_current_crate () +Mappings::setup_crate_mappings (std::string crate_name) { - // HACK - if (hirIdIter.find (currentCrateNum) == hirIdIter.end ()) - { - hirIdIter[currentCrateNum] = UNKNOWN_HIRID; - nodeIdIter[currentCrateNum] = UNKNOWN_NODEID; - localIdIter[currentCrateNum] = UNKNOWN_LOCAL_DEFID; - nodeIdToHirMappings[currentCrateNum] = {}; - locations[currentCrateNum] = {}; - } + CrateNum crate_num = get_next_crate_num (); + hirIdIter[crate_num] = UNKNOWN_HIRID; + nodeIdIter[crate_num] = UNKNOWN_NODEID; + localIdIter[crate_num] = UNKNOWN_LOCAL_DEFID; + nodeIdToHirMappings[crate_num] = {}; + locations[crate_num] = {}; + crate_names[crate_num] = crate_name; + + return crate_num; +} + +CrateNum +Mappings::get_current_crate () const +{ return currentCrateNum; } diff --git a/gcc/rust/util/rust-hir-map.h b/gcc/rust/util/rust-hir-map.h index 9777ee3..a198be6 100644 --- a/gcc/rust/util/rust-hir-map.h +++ b/gcc/rust/util/rust-hir-map.h @@ -83,7 +83,26 @@ public: CrateNum get_next_crate_num (); void set_current_crate (CrateNum crateNum); - CrateNum get_current_crate (); + CrateNum get_current_crate () const; + CrateNum setup_crate_mappings (std::string crate_name); + + bool get_crate_name (CrateNum crate_num, std::string &name) const + { + auto it = crate_names.find (crate_num); + if (it == crate_names.end ()) + return false; + + name.assign (it->second); + return true; + } + + std::string get_current_crate_name () const + { + std::string name; + bool ok = get_crate_name (get_current_crate (), name); + rust_assert (ok); + return name; + } NodeId get_next_node_id () { return get_next_node_id (get_current_crate ()); } NodeId get_next_node_id (CrateNum crateNum); @@ -212,6 +231,9 @@ private: // all hirid nodes std::map<CrateNum, std::set<HirId> > hirNodesWithinCrate; + + // crate names + std::map<CrateNum, std::string> crate_names; }; } // namespace Analysis |