diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-29 12:49:28 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-29 12:49:28 +0800 |
commit | 8aecde47456213e13280a690a1cace4fd7dceada (patch) | |
tree | 015522fae4eb7e5cda827e9e7a48e26b002ffaa1 /src | |
parent | 6b0311dec3a645c4ff9ef664fa8d836336a2cc66 (diff) | |
download | mrust-8aecde47456213e13280a690a1cace4fd7dceada.tar.gz |
HIR - Remove dependency on macro_rules.hpp
Diffstat (limited to 'src')
-rw-r--r-- | src/ast/crate.cpp | 4 | ||||
-rw-r--r-- | src/hir/deserialise.cpp | 9 | ||||
-rw-r--r-- | src/hir/from_ast.cpp | 7 | ||||
-rw-r--r-- | src/hir/hir.hpp | 10 | ||||
-rw-r--r-- | src/hir/serialise.cpp | 5 | ||||
-rw-r--r-- | src/macro_rules/macro_rules.hpp | 10 | ||||
-rw-r--r-- | src/macro_rules/macro_rules_ptr.hpp | 14 | ||||
-rw-r--r-- | src/macro_rules/mod.cpp | 3 |
8 files changed, 43 insertions, 19 deletions
diff --git a/src/ast/crate.cpp b/src/ast/crate.cpp index ea1bbf1c..d7cce519 100644 --- a/src/ast/crate.cpp +++ b/src/ast/crate.cpp @@ -71,14 +71,14 @@ void ExternCrate::with_all_macros(::std::function<void(const ::std::string& , co { for(const auto& m : m_hir->m_exported_macros) { - cb(m.first, m.second); + cb(m.first, *m.second); } } const MacroRules* ExternCrate::find_macro_rules(const ::std::string& name) const { auto i = m_hir->m_exported_macros.find(name); if(i != m_hir->m_exported_macros.end()) - return &i->second; + return &*i->second; return nullptr; } diff --git a/src/hir/deserialise.cpp b/src/hir/deserialise.cpp index b3d2a9f6..40a98154 100644 --- a/src/hir/deserialise.cpp +++ b/src/hir/deserialise.cpp @@ -9,6 +9,7 @@ #include "main_bindings.hpp" #include <serialiser_texttree.hpp> #include <mir/mir.hpp> +#include <macro_rules/macro_rules.hpp> namespace { @@ -277,6 +278,10 @@ namespace { }; } + ::MacroRulesPtr deserialise_macrorulesptr() + { + return ::MacroRulesPtr( new MacroRules(deserialise_macrorules()) ); + } ::MacroRules deserialise_macrorules() { ::MacroRules rv; @@ -666,7 +671,7 @@ namespace { template<> DEF_D( ::MIR::BasicBlock, return d.deserialise_mir_basicblock(); ) template<> DEF_D( ::HIR::TypeImpl, return d.deserialise_typeimpl(); ) - template<> DEF_D( ::MacroRules, return d.deserialise_macrorules(); ) + template<> DEF_D( ::MacroRulesPtr, return d.deserialise_macrorulesptr(); ) ::HIR::TypeRef HirDeserialiser::deserialise_type() { @@ -1027,7 +1032,7 @@ namespace { } } - rv.m_exported_macros = deserialise_strumap< ::MacroRules>(); + rv.m_exported_macros = deserialise_strumap< ::MacroRulesPtr>(); rv.m_lang_items = deserialise_strumap< ::HIR::SimplePath>(); return rv; diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 2119424f..e015dbae 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -7,6 +7,7 @@ #include <ast/crate.hpp> #include "from_ast.hpp" #include "visitor.hpp" +#include <macro_rules/macro_rules.hpp> ::HIR::Module LowerHIR_Module(const ::AST::Module& module, ::HIR::ItemPath path, ::std::vector< ::HIR::SimplePath> traits = {}); ::HIR::Function LowerHIR_Function(::HIR::ItemPath path, const ::AST::Function& f, const ::HIR::TypeRef& self_type); @@ -1198,14 +1199,12 @@ public: // - Extract macros from root module for( /*const*/ auto& mac : crate.m_root_module.macros() ) { //if( mac.data.export ) { - MacroRulesPtr& mrp = mac.data; - MacroRules mac_data = mv$(*mrp); - macros.insert( ::std::make_pair( mac.name, mv$(mac_data) ) ); + macros.insert( ::std::make_pair( mac.name, mv$(mac.data) ) ); //} } for( auto& mac : crate.m_root_module.macro_imports_res() ) { //if( mac.data->export ) { - macros.insert( ::std::make_pair( mac.name, mv$(*const_cast<MacroRules*>(mac.data)) ) ); + macros.insert( ::std::make_pair( mac.name, MacroRulesPtr(new MacroRules( mv$(*const_cast<MacroRules*>(mac.data)) )) ) ); //} } diff --git a/src/hir/hir.hpp b/src/hir/hir.hpp index 65012c48..c7c59f48 100644 --- a/src/hir/hir.hpp +++ b/src/hir/hir.hpp @@ -1,5 +1,9 @@ /* - * High-level intermediate representation + * MRustC - Rust Compiler + * - By John Hodge (Mutabah/thePowersGang) + * + * hir/hir.hpp + * - Processed module tree (High-level Intermediate Representation) * * Contains the expanded and desugared AST */ @@ -12,7 +16,7 @@ #include <tagged_union.hpp> -#include <macro_rules/macro_rules.hpp> // DAMNIT - Why can't I have it be incomplete +#include <macro_rules/macro_rules_ptr.hpp> #include <hir/type.hpp> #include <hir/path.hpp> @@ -306,7 +310,7 @@ public: ::std::multimap< ::HIR::SimplePath, ::HIR::MarkerImpl > m_marker_impls; /// Macros exported by this crate - ::std::unordered_map< ::std::string, ::MacroRules > m_exported_macros; + ::std::unordered_map< ::std::string, ::MacroRulesPtr > m_exported_macros; /// Language items avaliable through this crate (includes ones from loaded externs) ::std::unordered_map< ::std::string, ::HIR::SimplePath> m_lang_items; diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp index 7e1c5176..79e475b6 100644 --- a/src/hir/serialise.cpp +++ b/src/hir/serialise.cpp @@ -8,6 +8,7 @@ #include "hir.hpp" #include "main_bindings.hpp" #include <serialiser_texttree.hpp> +#include <macro_rules/macro_rules.hpp> #include <mir/mir.hpp> namespace { @@ -394,6 +395,10 @@ namespace { write_string(v); } + void serialise(const ::MacroRulesPtr& mac) + { + serialise(*mac); + } void serialise(const ::MacroRules& mac) { //m_exported: IGNORE, should be set diff --git a/src/macro_rules/macro_rules.hpp b/src/macro_rules/macro_rules.hpp index 9568019a..3606bf99 100644 --- a/src/macro_rules/macro_rules.hpp +++ b/src/macro_rules/macro_rules.hpp @@ -1,3 +1,10 @@ +/*
+ * MRustC - Rust Compiler
+ * - By John Hodge (Mutabah/thePowersGang)
+ *
+ * macro_rules/macro_rules.hpp
+ * - Macros by example - `macro_rules!`
+ */
#ifndef MACROS_HPP_INCLUDED
#define MACROS_HPP_INCLUDED
@@ -139,6 +146,9 @@ class MacroRules: {
public:
bool m_exported;
+
+ ::std::string m_source_crate; // Populated on load, used for $crate
+
/// Parsing patterns
MacroRulesPatFrag m_pattern;
/// Expansion rules
diff --git a/src/macro_rules/macro_rules_ptr.hpp b/src/macro_rules/macro_rules_ptr.hpp index 512cbda2..b910d2af 100644 --- a/src/macro_rules/macro_rules_ptr.hpp +++ b/src/macro_rules/macro_rules_ptr.hpp @@ -1,11 +1,15 @@ /* + * MRustC - Rust Compiler + * - By John Hodge (Mutabah/thePowersGang) + * + * macro_rules/macro_rules_ptr.hpp + * - Pointer to a MacroRules instance */ #pragma once class MacroRules; -class MacroRulesPtr: - public Serialisable +class MacroRulesPtr { MacroRules* m_ptr; public: @@ -24,8 +28,8 @@ public: ~MacroRulesPtr(); - MacroRules& operator*() { assert(m_ptr); return *m_ptr; } const MacroRules& operator*() const { assert(m_ptr); return *m_ptr; } - - SERIALISABLE_PROTOTYPES(); + MacroRules& operator*() { assert(m_ptr); return *m_ptr; } + const MacroRules* operator->() const { assert(m_ptr); return m_ptr; } + MacroRules* operator->() { assert(m_ptr); return m_ptr; } }; diff --git a/src/macro_rules/mod.cpp b/src/macro_rules/mod.cpp index 4e914066..c5914f47 100644 --- a/src/macro_rules/mod.cpp +++ b/src/macro_rules/mod.cpp @@ -101,9 +101,6 @@ MacroRulesPtr::~MacroRulesPtr() m_ptr = nullptr;
}
}
-SERIALISE_TYPE(MacroRulesPtr::, "MacroRulesPtr", {
-},{
-})
SERIALISE_TYPE_S(MacroRulesArm, {
})
|