aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>2023-06-14 15:20:21 +0200
committerP-E-P <32375388+P-E-P@users.noreply.github.com>2023-07-21 09:06:09 +0000
commit3dab250b5e28dd9ad3370a2f0a642ee71a6e6474 (patch)
tree9dace2245475e568a2a32eec2fbb82edc1cef1dc
parent6df293b14a8bde213159bc1ce9ab3c3165d90179 (diff)
downloadgcc-3dab250b5e28dd9ad3370a2f0a642ee71a6e6474.zip
gcc-3dab250b5e28dd9ad3370a2f0a642ee71a6e6474.tar.gz
gcc-3dab250b5e28dd9ad3370a2f0a642ee71a6e6474.tar.bz2
import: Add cli extern crate resolution
This commit add the ability to specify the path to an extern crate through the -frust-extern cli option. Path given as cli argument shall resolve to the exact extern crate location. gcc/rust/ChangeLog: * metadata/rust-imports.h: Make the function to load a given file public. * rust-session-manager.cc (Session::load_extern_crate): Change path resolution depending on extern crate declaration in cli arguments. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r--gcc/rust/metadata/rust-imports.h4
-rw-r--r--gcc/rust/rust-session-manager.cc20
2 files changed, 19 insertions, 5 deletions
diff --git a/gcc/rust/metadata/rust-imports.h b/gcc/rust/metadata/rust-imports.h
index 51cc4fc..c728adb 100644
--- a/gcc/rust/metadata/rust-imports.h
+++ b/gcc/rust/metadata/rust-imports.h
@@ -112,6 +112,8 @@ public:
static Stream *open_package (const std::string &filename, Location location,
const std::string &relative_import_path);
+ static Stream *try_package_in_directory (const std::string &, Location);
+
// Constructor.
Import (Stream *, Location);
@@ -153,8 +155,6 @@ public:
void clear_stream () { this->stream_ = NULL; }
private:
- static Stream *try_package_in_directory (const std::string &, Location);
-
static int try_suffixes (std::string *);
static Stream *find_export_data (const std::string &filename, int fd,
diff --git a/gcc/rust/rust-session-manager.cc b/gcc/rust/rust-session-manager.cc
index 5888348..7a9e3bd 100644
--- a/gcc/rust/rust-session-manager.cc
+++ b/gcc/rust/rust-session-manager.cc
@@ -973,12 +973,26 @@ Session::load_extern_crate (const std::string &crate_name, location_t locus)
}
std::string relative_import_path = "";
- Import::Stream *s
- = Import::open_package (crate_name, locus, relative_import_path);
+ std::string import_name = crate_name;
+
+ // The path to the extern crate might have been specified by the user using
+ // -frust-extern
+ auto cli_extern_crate = extern_crates.find (crate_name);
+
+ Import::Stream *s;
+ if (cli_extern_crate != extern_crates.end ())
+ {
+ auto path = cli_extern_crate->second;
+ s = Import::try_package_in_directory (path, locus);
+ }
+ else
+ {
+ s = Import::open_package (import_name, locus, relative_import_path);
+ }
if (s == NULL)
{
rust_error_at (locus, "failed to locate crate %<%s%>",
- crate_name.c_str ());
+ import_name.c_str ());
return UNKNOWN_NODEID;
}