summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-29 12:49:28 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-29 12:49:28 +0800
commit8aecde47456213e13280a690a1cace4fd7dceada (patch)
tree015522fae4eb7e5cda827e9e7a48e26b002ffaa1 /src
parent6b0311dec3a645c4ff9ef664fa8d836336a2cc66 (diff)
downloadmrust-8aecde47456213e13280a690a1cace4fd7dceada.tar.gz
HIR - Remove dependency on macro_rules.hpp
Diffstat (limited to 'src')
-rw-r--r--src/ast/crate.cpp4
-rw-r--r--src/hir/deserialise.cpp9
-rw-r--r--src/hir/from_ast.cpp7
-rw-r--r--src/hir/hir.hpp10
-rw-r--r--src/hir/serialise.cpp5
-rw-r--r--src/macro_rules/macro_rules.hpp10
-rw-r--r--src/macro_rules/macro_rules_ptr.hpp14
-rw-r--r--src/macro_rules/mod.cpp3
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, {
})