diff options
Diffstat (limited to 'src/parse/root.cpp')
-rw-r--r-- | src/parse/root.cpp | 24 |
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;
}
|