7 #ifndef COMPILER_PREPROCESSOR_MACRO_EXPANDER_H_
8 #define COMPILER_PREPROCESSOR_MACRO_EXPANDER_H_
34 void getToken(
Token* token);
35 void ungetToken(
const Token& token);
36 bool isNextTokenLeftParen();
38 bool pushMacro(
const Macro& macro,
const Token& identifier);
41 bool expandMacro(
const Macro& macro,
42 const Token& identifier,
43 std::vector<Token>* replacements);
45 typedef std::vector<Token> MacroArg;
46 bool collectMacroArgs(
const Macro& macro,
47 const Token& identifier,
48 std::vector<MacroArg>* args);
49 void replaceMacroParams(
const Macro& macro,
50 const std::vector<MacroArg>& args,
51 std::vector<Token>* replacements);
57 std::vector<Token> replacements;
59 MacroContext() : macro(0),
index(0) { }
60 bool empty()
const {
return index == replacements.size(); }
61 const Token&
get() {
return replacements[
index++]; }
69 std::auto_ptr<Token> mReserveToken;
70 std::vector<MacroContext*> mContextStack;
74 #endif // COMPILER_PREPROCESSOR_MACRO_EXPANDER_H_
static const char empty[1]
virtual void lex(Token *token)
std::map< std::string, Macro > MacroSet
MacroExpander(Lexer *lexer, MacroSet *macroSet, Diagnostics *diagnostics)