summaryrefslogtreecommitdiff
path: root/src/parse/root.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/root.cpp')
-rw-r--r--src/parse/root.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index ec2589f6..7484609b 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -822,7 +822,29 @@ MacroRule Parse_MacroRules_Var(Preproc& lex)
TTStream slex(rep);
while(GET_TOK(tok, slex) != TOK_EOF)
- rule.m_contents.push_back( MacroRuleEnt(tok) );
+ {
+ if( tok.type() == TOK_DOLLAR )
+ {
+ GET_TOK(tok, slex);
+
+ if( tok.type() == TOK_PAREN_OPEN )
+ {
+ throw ParseError::Todo("Repetitions in macro_rules content");
+ }
+ else if( tok.type() == TOK_IDENT )
+ {
+ rule.m_contents.push_back( MacroRuleEnt(tok.str()) );
+ }
+ else
+ {
+ throw ParseError::Unexpected(lex, tok);
+ }
+ }
+ else
+ {
+ rule.m_contents.push_back( MacroRuleEnt(tok) );
+ }
+ }
return rule;
}