summaryrefslogtreecommitdiff
path: root/src/macro_rules
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2018-06-03 14:57:05 +0800
committerJohn Hodge <tpg@ucc.asn.au>2018-06-03 14:57:05 +0800
commitbf8f8b4b4a9fe273451be59f68acafbe61968b83 (patch)
tree82993550cb3c88de0edbd55d79e4ea8e8cefffac /src/macro_rules
parent39b3cf53798683e496804f8322da2254b10850f4 (diff)
parenta7fb27789a2b34543851d207120e2c0001ee9c27 (diff)
downloadmrust-bf8f8b4b4a9fe273451be59f68acafbe61968b83.tar.gz
Merge branch 'master' of https://github.com/thepowersgang/mrustc
Diffstat (limited to 'src/macro_rules')
-rw-r--r--src/macro_rules/eval.cpp5
-rw-r--r--src/macro_rules/macro_rules.hpp24
-rw-r--r--src/macro_rules/mod.cpp67
3 files changed, 7 insertions, 89 deletions
diff --git a/src/macro_rules/eval.cpp b/src/macro_rules/eval.cpp
index 9372fa6e..a393ba46 100644
--- a/src/macro_rules/eval.cpp
+++ b/src/macro_rules/eval.cpp
@@ -712,15 +712,16 @@ InterpolatedFragment Macro_HandlePatternCap(TokenStream& lex, MacroPatEnt::Type
case MacroPatEnt::PAT_ITEM: {
assert( lex.parse_state().module );
const auto& cur_mod = *lex.parse_state().module;
- return InterpolatedFragment( Parse_Mod_Item_S(lex, cur_mod.m_file_info, cur_mod.path(), AST::MetaItems{}) );
+ return InterpolatedFragment( Parse_Mod_Item_S(lex, cur_mod.m_file_info, cur_mod.path(), AST::AttributeList{}) );
} break;
case MacroPatEnt::PAT_IDENT:
- // TODO: Any reserved word is also valid as an ident
+ // NOTE: Any reserved word is also valid as an ident
GET_TOK(tok, lex);
if( tok.type() == TOK_IDENT || is_reserved_word(tok.type()) )
;
else
CHECK_TOK(tok, TOK_IDENT);
+ // TODO: TOK_INTERPOLATED_IDENT
return InterpolatedFragment( TokenTree(lex.getHygiene(), tok) );
}
throw "";
diff --git a/src/macro_rules/macro_rules.hpp b/src/macro_rules/macro_rules.hpp
index 2a588a78..c04e3548 100644
--- a/src/macro_rules/macro_rules.hpp
+++ b/src/macro_rules/macro_rules.hpp
@@ -19,7 +19,7 @@
class MacroExpander;
-TAGGED_UNION_EX(MacroExpansionEnt, (: public Serialisable), Token, (
+TAGGED_UNION(MacroExpansionEnt, Token,
// TODO: have a "raw" stream instead of just tokens
(Token, Token),
// TODO: Have a flag on `NamedValue` that indicates that it is the only/last usage of this particular value (at this level)
@@ -34,19 +34,11 @@ TAGGED_UNION_EX(MacroExpansionEnt, (: public Serialisable), Token, (
/// Boolean is true if the variable will be unconditionally expanded
::std::map< unsigned int, bool> variables;
})
- ),
- (),
- (),
- (
- public:
- SERIALISABLE_PROTOTYPES();
- )
);
extern ::std::ostream& operator<<(::std::ostream& os, const MacroExpansionEnt& x);
/// Matching pattern entry
-struct MacroPatEnt:
- public Serialisable
+struct MacroPatEnt
{
::std::string name;
unsigned int name_index = 0;
@@ -99,13 +91,10 @@ struct MacroPatEnt:
friend ::std::ostream& operator<<(::std::ostream& os, const MacroPatEnt& x);
friend ::std::ostream& operator<<(::std::ostream& os, const MacroPatEnt::Type& x);
-
- SERIALISABLE_PROTOTYPES();
};
/// An expansion arm within a macro_rules! blcok
-struct MacroRulesArm:
- public Serialisable
+struct MacroRulesArm
{
/// Names for the parameters
::std::vector< ::std::string> m_param_names;
@@ -126,13 +115,10 @@ struct MacroRulesArm:
MacroRulesArm& operator=(const MacroRulesArm&) = delete;
MacroRulesArm(MacroRulesArm&&) = default;
MacroRulesArm& operator=(MacroRulesArm&&) = default;
-
- SERIALISABLE_PROTOTYPES();
};
/// A sigle 'macro_rules!' block
-class MacroRules:
- public Serialisable
+class MacroRules
{
public:
/// Marks if this macro should be exported from the defining crate
@@ -152,8 +138,6 @@ public:
}
virtual ~MacroRules();
MacroRules(MacroRules&&) = default;
-
- SERIALISABLE_PROTOTYPES();
};
extern ::std::unique_ptr<TokenStream> Macro_InvokeRules(const char *name, const MacroRules& rules, const Span& sp, TokenTree input, AST::Module& mod);
diff --git a/src/macro_rules/mod.cpp b/src/macro_rules/mod.cpp
index 0f16a377..2613a0b4 100644
--- a/src/macro_rules/mod.cpp
+++ b/src/macro_rules/mod.cpp
@@ -161,55 +161,6 @@ MacroRulesPtr::~MacroRulesPtr()
}
}
-SERIALISE_TYPE_S(MacroRulesArm, {
-})
-
-void operator%(Serialiser& s, MacroPatEnt::Type c) {
- switch(c) {
- #define _(v) case MacroPatEnt::v: s << #v; return
- _(PAT_TOKEN);
- _(PAT_TT);
- _(PAT_PAT);
- _(PAT_TYPE);
- _(PAT_EXPR);
- _(PAT_LOOP);
- _(PAT_STMT);
- _(PAT_PATH);
- _(PAT_BLOCK);
- _(PAT_META);
- _(PAT_ITEM);
- _(PAT_IDENT);
- #undef _
- }
-}
-void operator%(::Deserialiser& s, MacroPatEnt::Type& c) {
- ::std::string n;
- s.item(n);
- #define _(v) else if(n == #v) c = MacroPatEnt::v
- if(0) ;
- _(PAT_TOKEN);
- _(PAT_TT);
- _(PAT_PAT);
- _(PAT_TYPE);
- _(PAT_EXPR);
- _(PAT_LOOP);
- //_(PAT_OPTLOOP);
- _(PAT_STMT);
- _(PAT_PATH);
- _(PAT_BLOCK);
- _(PAT_META);
- _(PAT_IDENT);
- _(PAT_ITEM);
- else
- throw ::std::runtime_error( FMT("No conversion for '" << n << "'") );
- #undef _
-}
-SERIALISE_TYPE_S(MacroPatEnt, {
- s % type;
- s.item(name);
- s.item(tok);
- s.item(subpats);
-});
::std::ostream& operator<<(::std::ostream& os, const MacroPatEnt& x)
{
switch(x.type)
@@ -257,20 +208,6 @@ SERIALISE_TYPE_S(MacroPatEnt, {
return os;
}
-SERIALISE_TU(MacroExpansionEnt, "MacroExpansionEnt", e,
-(Token,
- s.item(e);
- ),
-(NamedValue,
- s.item(e);
- ),
-(Loop,
- s.item(e.entries);
- s.item(e.joiner);
- //s.item(e.variables);
- )
-);
-
::std::ostream& operator<<(::std::ostream& os, const MacroExpansionEnt& x)
{
TU_MATCH( MacroExpansionEnt, (x), (e),
@@ -295,8 +232,4 @@ SERIALISE_TU(MacroExpansionEnt, "MacroExpansionEnt", e,
MacroRules::~MacroRules()
{
}
-SERIALISE_TYPE_S(MacroRules, {
- s.item( m_exported );
- s.item( m_rules );
-});