diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-06-14 15:20:21 +0200 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2023-07-21 09:06:09 +0000 |
commit | 3dab250b5e28dd9ad3370a2f0a642ee71a6e6474 (patch) | |
tree | 9dace2245475e568a2a32eec2fbb82edc1cef1dc | |
parent | 6df293b14a8bde213159bc1ce9ab3c3165d90179 (diff) | |
download | gcc-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.h | 4 | ||||
-rw-r--r-- | gcc/rust/rust-session-manager.cc | 20 |
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; } |