diff options
author | John Hodge <tpg@mutabah.net> | 2016-05-14 15:28:38 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-05-14 15:28:38 +0800 |
commit | e9bc74be1a7a51ed4689952f27f2b91e2bc5c7eb (patch) | |
tree | 9fd986fea39e3d60edf17431cda0ca547f311c8a /src | |
parent | d70587b729f9f982e284681d5d16794cf7209e28 (diff) | |
download | mrust-e9bc74be1a7a51ed4689952f27f2b91e2bc5c7eb.tar.gz |
Macros - Twiddling adding a struct
Diffstat (limited to 'src')
-rw-r--r-- | src/hir/from_ast.cpp | 5 | ||||
-rw-r--r-- | src/macros.cpp | 8 | ||||
-rw-r--r-- | src/macros.hpp | 23 | ||||
-rw-r--r-- | src/parse/macro_rules.cpp | 2 |
4 files changed, 31 insertions, 7 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index edb5cf7e..9f07b08e 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -20,6 +20,11 @@ macros.insert( ::std::make_pair( mac.name, mac.data ) ); //} } + for( const auto& mac : crate.m_root_module.macro_imports_res() ) { + //if( mac.data->export ) { + macros.insert( ::std::make_pair( mac.name, *mac.data ) ); + //} + } auto rootmod = LowerHIR_Module( crate.m_root_module, ::HIR::SimplePath("") ); return ::HIR::CratePtr( ::HIR::Crate { mv$(rootmod), mv$(macros) } ); } diff --git a/src/macros.cpp b/src/macros.cpp index 0624d8b2..89fcbe86 100644 --- a/src/macros.cpp +++ b/src/macros.cpp @@ -349,7 +349,7 @@ bool Macro_HandlePattern(TTStream& lex, const MacroPatEnt& pat, unsigned int lay // 3. Bind names
// 4. Return expander
int i = 0;
- for(const auto& rule : rules)
+ for(const auto& rule : rules.m_rules)
{
Token tok;
// Create token stream for input tree
@@ -872,3 +872,9 @@ SERIALISE_TYPE_S(MacroRuleEnt, { os << "=" << x.tok;
return os;
}
+
+SERIALISE_TYPE_S(MacroRules, {
+ s.item( m_exported );
+ s.item( m_rules );
+});
+
diff --git a/src/macros.hpp b/src/macros.hpp index 5646e203..606d3278 100644 --- a/src/macros.hpp +++ b/src/macros.hpp @@ -3,6 +3,7 @@ #include "parse/lex.hpp"
#include "parse/tokentree.hpp"
+#include <common.hpp>
#include <map>
#include <memory>
#include <cstring>
@@ -111,11 +112,23 @@ public: };
/// A sigle 'macro_rules!' block
-//struct MacroRules {
-// bool export;
-// ::std::vector<MacroRule> m_rules;
-//};
-typedef ::std::vector<MacroRule> MacroRules;
+class MacroRules:
+ public Serialisable
+{
+public:
+ bool m_exported;
+ ::std::vector<MacroRule> m_rules;
+
+ MacroRules()
+ {
+ }
+ MacroRules( ::std::vector<MacroRule> rules ):
+ m_rules( mv$(rules) )
+ {
+ }
+
+ SERIALISABLE_PROTOTYPES();
+};
extern ::std::unique_ptr<TokenStream> Macro_InvokeRules(const char *name, const MacroRules& rules, TokenTree input);
extern ::std::unique_ptr<TokenStream> Macro_Invoke(const TokenStream& lex, const ::std::string& name, TokenTree input);
diff --git a/src/parse/macro_rules.cpp b/src/parse/macro_rules.cpp index b4698fa7..11a4ab4e 100644 --- a/src/parse/macro_rules.cpp +++ b/src/parse/macro_rules.cpp @@ -241,5 +241,5 @@ MacroRules Parse_MacroRules(TokenStream& lex) } } - return MacroRules(mv$(rules)); + return MacroRules( mv$(rules) ); } |