aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/rust-session-manager.cc
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-09-04 12:19:13 +0200
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:04:34 +0100
commit3713338d986b750a56ca60c9683727d972c47f90 (patch)
tree3edbe2495d92144e8dd0845c818e6f0a544e1f6e /gcc/rust/rust-session-manager.cc
parent86661b8d3d97d18a799468226f1b34d9682e9732 (diff)
downloadgcc-3713338d986b750a56ca60c9683727d972c47f90.zip
gcc-3713338d986b750a56ca60c9683727d972c47f90.tar.gz
gcc-3713338d986b750a56ca60c9683727d972c47f90.tar.bz2
gccrs: Clarify package import procedure
This part of the code is a bit tricky as it calls multiple functions with almost the same name and slightly different behaviors. It was even more with a meaningless variable name. gcc/rust/ChangeLog: * rust-session-manager.cc (Session::load_extern_crate): Change variable name, add temporaries and comments. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Diffstat (limited to 'gcc/rust/rust-session-manager.cc')
-rw-r--r--gcc/rust/rust-session-manager.cc24
1 files changed, 16 insertions, 8 deletions
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 2a8ef97..63f839e 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -1008,27 +1008,35 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus)
auto cli_extern_crate = extern_crates.find (crate_name);
std::pair<std::unique_ptr<Import::Stream>, std::vector<ProcMacro::Procmacro>>
- s;
+ package_result;
if (cli_extern_crate != extern_crates.end ())
{
auto path = cli_extern_crate->second;
- s = Import::try_package_in_directory (path, locus);
+ package_result = Import::try_package_in_directory (path, locus);
}
else
{
- s = Import::open_package (import_name, locus, relative_import_path);
+ package_result
+ = Import::open_package (import_name, locus, relative_import_path);
}
- if (s.first == NULL && s.second.empty ())
+
+ auto stream = std::move (package_result.first);
+ auto proc_macros = std::move (package_result.second);
+
+ if (stream == NULL // No stream and
+ && proc_macros.empty ()) // no proc macros
{
rust_error_at (locus, "failed to locate crate %<%s%>",
import_name.c_str ());
return UNKNOWN_NODEID;
}
- auto extern_crate = s.first == nullptr
- ? Imports::ExternCrate (crate_name, s.second)
- : Imports::ExternCrate (*s.first);
- if (s.first != nullptr)
+ auto extern_crate
+ = stream == nullptr
+ ? Imports::ExternCrate (crate_name,
+ proc_macros) // Import proc macros
+ : Imports::ExternCrate (*stream); // Import from stream
+ if (stream != nullptr)
{
bool ok = extern_crate.load (locus);
if (!ok)