summaryrefslogtreecommitdiff
path: root/src/ast/crate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast/crate.cpp')
-rw-r--r--src/ast/crate.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/src/ast/crate.cpp b/src/ast/crate.cpp
index d6992ca4..332ee2b8 100644
--- a/src/ast/crate.cpp
+++ b/src/ast/crate.cpp
@@ -52,13 +52,12 @@ Crate::Crate():
void Crate::load_externs()
{
auto cb = [this](Module& mod) {
- for( const auto& it : mod.items() )
+ for( /*const*/ auto& it : mod.items() )
{
TU_IFLET(AST::Item, it.data, Crate, c,
- auto name = c.name;
if( check_item_cfg(it.data.attrs) )
{
- name = load_extern_crate( it.data.span, name );
+ c.name = load_extern_crate( it.data.span, c.name );
}
)
}
@@ -142,7 +141,10 @@ void Crate::load_externs()
}
// NOTE: Creating `ExternCrate` loads the crate from the specified path
- auto res = m_extern_crates.insert(::std::make_pair( name, ExternCrate { name, path } ));
+ auto ec = ExternCrate { name, path };
+ auto real_name = ec.m_hir->m_crate_name;
+ assert(!real_name.empty());
+ auto res = m_extern_crates.insert(::std::make_pair( real_name, mv$(ec) ));
if( !res.second ) {
// Crate already loaded?
}
@@ -164,9 +166,8 @@ void Crate::load_externs()
}
}
- assert(!ext_crate.m_hir->m_crate_name.empty());
- DEBUG("Loaded '" << name << "' from '" << basename << "' (actual name is '" << ext_crate.m_hir->m_crate_name << "')");
- return ext_crate.m_hir->m_crate_name;
+ DEBUG("Loaded '" << name << "' from '" << basename << "' (actual name is '" << real_name << "')");
+ return real_name;
}
ExternCrate::ExternCrate(const ::std::string& name, const ::std::string& path):
@@ -177,6 +178,7 @@ ExternCrate::ExternCrate(const ::std::string& name, const ::std::string& path):
m_hir = HIR_Deserialise(path, name);
m_hir->post_load_update(name);
+ m_name = m_hir->m_crate_name;
}
void ExternCrate::with_all_macros(::std::function<void(const ::std::string& , const MacroRules&)> cb) const