diff options
Diffstat (limited to 'src/convert/resolve.cpp')
-rw-r--r-- | src/convert/resolve.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/convert/resolve.cpp b/src/convert/resolve.cpp index 1ff0daab..02b3ea78 100644 --- a/src/convert/resolve.cpp +++ b/src/convert/resolve.cpp @@ -479,8 +479,25 @@ void ResolvePaths_HandleModule(const AST::Crate& crate, const AST::Path& modpath }
}
+void SetCrateName_Mod(::std::string name, AST::Module& mod)
+{
+ for(auto& submod : mod.submods())
+ SetCrateName_Mod(name, submod.first);
+ // Imports 'use' statements
+ for(auto& imp : mod.imports())
+ imp.data.set_crate(name);
+
+ // TODO: All other types
+}
+
void ResolvePaths(AST::Crate& crate)
{
+ // Pre-process external crates to tag all paths
+ for(auto& ec : crate.extern_crates())
+ {
+ SetCrateName_Mod(ec.first, ec.second.root_module());
+ }
+
// Handle 'use' statements in an initial parss
ResolvePaths_HandleModule_Use(crate, AST::Path(AST::Path::TagAbsolute()), crate.root_module());
|