summaryrefslogtreecommitdiff
path: root/src/ast
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast')
-rw-r--r--src/ast/ast.cpp3
-rw-r--r--src/ast/ast.hpp21
-rw-r--r--src/ast/crate.cpp2
-rw-r--r--src/ast/crate.hpp4
4 files changed, 17 insertions, 13 deletions
diff --git a/src/ast/ast.cpp b/src/ast/ast.cpp
index 23e9bfea..84218591 100644
--- a/src/ast/ast.cpp
+++ b/src/ast/ast.cpp
@@ -313,6 +313,9 @@ void Module::add_submod(bool is_public, ::std::string name, Module mod, MetaItem
DEBUG("mod.m_name = " << name << ", attrs = " << attrs);
this->add_item( is_public, mv$(name), Item::make_Module({mv$(mod)}), mv$(attrs) );
}
+void Module::add_macro(bool is_exported, ::std::string name, MacroRulesPtr macro) {
+ m_macros.push_back( Named<MacroRulesPtr>( mv$(name), mv$(macro), is_exported ) );
+}
void Module::prescan()
{
diff --git a/src/ast/ast.hpp b/src/ast/ast.hpp
index b7de73ac..d1e8c6a2 100644
--- a/src/ast/ast.hpp
+++ b/src/ast/ast.hpp
@@ -19,17 +19,18 @@
#include "../parse/tokentree.hpp"
#include "../types.hpp"
-#include "../macros.hpp"
#include <serialise.hpp>
-#include "pattern.hpp"
-#include "attrs.hpp"
-#include "expr.hpp"
-#include "macro.hpp"
-#include "item.hpp"
+#include <ast/pattern.hpp>
+#include <ast/attrs.hpp>
+#include <ast/expr.hpp>
+#include <ast/item.hpp>
+#include <ast/macro.hpp>
#include "generics.hpp"
+#include <macro_rules/macro_rules_ptr.hpp>
+
namespace AST {
class Crate;
@@ -551,7 +552,7 @@ private:
::std::vector<Module*> m_anon_modules;
::std::vector< NamedNS<const MacroRules*> > m_macro_import_res; // Vec of imported macros (not serialised)
- ::std::vector< Named<MacroRules> > m_macros;
+ ::std::vector< Named<MacroRulesPtr> > m_macros;
public:
char m_index_populated = 0; // 0 = no, 1 = partial, 2 = complete
@@ -599,9 +600,7 @@ public:
void add_neg_impl(ImplDef impl) {
m_neg_impls.emplace_back( ::std::move(impl) );
}
- void add_macro(bool is_exported, ::std::string name, MacroRules macro) {
- m_macros.push_back( Named<MacroRules>( move(name), move(macro), is_exported ) );
- }
+ void add_macro(bool is_exported, ::std::string name, MacroRulesPtr macro);
void add_macro_import(::std::string name, const MacroRules& mr) {
m_macro_import_res.push_back( NamedNS<const MacroRules*>( mv$(name), &mr, false ) );
}
@@ -641,7 +640,7 @@ public:
::std::vector<MacroInvocation>& macro_invs() { return m_macro_invocations; }
- const NamedList<MacroRules>& macros() const { return m_macros; }
+ const NamedList<MacroRulesPtr>& macros() const { return m_macros; }
const ::std::vector<NamedNS<const MacroRules*> > macro_imports_res() const { return m_macro_import_res; }
diff --git a/src/ast/crate.cpp b/src/ast/crate.cpp
index d40879f3..500598b0 100644
--- a/src/ast/crate.cpp
+++ b/src/ast/crate.cpp
@@ -325,7 +325,7 @@ const MacroRules* ExternCrate::find_macro_rules(const ::std::string& name)
{
auto i = m_mr_macros.find(name);
if(i != m_mr_macros.end())
- return &i->second;
+ return &*i->second;
return nullptr;
}
diff --git a/src/ast/crate.hpp b/src/ast/crate.hpp
index dbb9ca0d..b88b9307 100644
--- a/src/ast/crate.hpp
+++ b/src/ast/crate.hpp
@@ -79,7 +79,7 @@ private:
class ExternCrate:
public Serialisable
{
- ::std::map< ::std::string, MacroRules > m_mr_macros;
+ ::std::map< ::std::string, MacroRulesPtr > m_mr_macros;
//::MIR::Module m_root_module;
@@ -87,6 +87,8 @@ class ExternCrate:
public:
ExternCrate();
ExternCrate(const char *path);
+ ExternCrate(const ExternCrate&) = delete;
+ ExternCrate(ExternCrate&&) = default;
const MacroRules* find_macro_rules(const ::std::string& name);