diff options
author | John Hodge <tpg@mutabah.net> | 2016-09-09 13:39:56 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-09-09 13:39:56 +0800 |
commit | 7a484c58a6a1d2ab9600384c46a1100bab42161b (patch) | |
tree | 57c83490a96f0403ad6a4e0ac84f6586a3ad9a90 /src | |
parent | f9518e5eab3797e88bb4ea7f13b5fa8ae929a783 (diff) | |
download | mrust-7a484c58a6a1d2ab9600384c46a1100bab42161b.tar.gz |
Expand - Move loading of libstd/libcore into LoadCrates for cleaner debug
Diffstat (limited to 'src')
-rw-r--r-- | src/ast/crate.cpp | 23 | ||||
-rw-r--r-- | src/expand/mod.cpp | 5 |
2 files changed, 25 insertions, 3 deletions
diff --git a/src/ast/crate.cpp b/src/ast/crate.cpp index 49f9242f..fc93a809 100644 --- a/src/ast/crate.cpp +++ b/src/ast/crate.cpp @@ -56,6 +56,29 @@ void Crate::load_externs() } }; iterate_module(m_root_module, cb); + + // Check for no_std or no_core, and load libstd/libcore + // - Duplicates some of the logic in "Expand", but also helps keep crate loading separate to most of expand + bool no_std = false; + bool no_core = false; + + for( const auto& a : this->m_attrs.m_items ) + { + if( a.name() == "no_std" ) + no_std = true; + if( a.name() == "no_core" ) + no_core = true; + } + + if( no_core ) { + // Don't load anything + } + else if( no_std ) { + this->load_extern_crate(Span(), "core"); + } + else { + this->load_extern_crate(Span(), "std"); + } } void Crate::load_extern_crate(Span sp, const ::std::string& name) { diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index a3600ce5..e6d5d60e 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -938,13 +938,13 @@ void Expand(::AST::Crate& crate) // 1. Crate attributes Expand_Attrs(crate.m_attrs, AttrStage::EarlyPre, [&](const auto& sp, const auto& d, const auto& a){ d.handle(sp, a, crate); }); - // Load libstd/libcore + // Insert magic for libstd/libcore + // NOTE: The actual crates are loaded in "LoadCrates" using magic in AST::Crate::load_externs switch( crate.m_load_std ) { case ::AST::Crate::LOAD_STD: if( crate.m_prelude_path == AST::Path() ) crate.m_prelude_path = AST::Path("std", {AST::PathNode("prelude"), AST::PathNode("v1")}); - crate.load_extern_crate(Span(), "std"); crate.m_extern_crates.at("std").with_all_macros([&](const auto& name, const auto& mac) { crate.m_root_module.add_macro_import( name, mac ); }); @@ -953,7 +953,6 @@ void Expand(::AST::Crate& crate) case ::AST::Crate::LOAD_CORE: if( crate.m_prelude_path == AST::Path() ) crate.m_prelude_path = AST::Path("core", {AST::PathNode("prelude"), AST::PathNode("v1")}); - crate.load_extern_crate(Span(), "core"); crate.m_extern_crates.at("core").with_all_macros([&](const auto& name, const auto& mac) { crate.m_root_module.add_macro_import( name, mac ); }); |