diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/preprocessor/MacroExpander.h')
-rw-r--r-- | src/3rdparty/angle/src/compiler/preprocessor/MacroExpander.h | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/src/3rdparty/angle/src/compiler/preprocessor/MacroExpander.h b/src/3rdparty/angle/src/compiler/preprocessor/MacroExpander.h index dc870f626f..fae7676fb0 100644 --- a/src/3rdparty/angle/src/compiler/preprocessor/MacroExpander.h +++ b/src/3rdparty/angle/src/compiler/preprocessor/MacroExpander.h @@ -7,13 +7,11 @@ #ifndef COMPILER_PREPROCESSOR_MACROEXPANDER_H_ #define COMPILER_PREPROCESSOR_MACROEXPANDER_H_ -#include <cassert> #include <memory> #include <vector> -#include "Lexer.h" -#include "Macro.h" -#include "pp_utils.h" +#include "compiler/preprocessor/Lexer.h" +#include "compiler/preprocessor/Macro.h" namespace pp { @@ -24,24 +22,23 @@ struct SourceLocation; class MacroExpander : public Lexer { public: - MacroExpander(Lexer *lexer, MacroSet *macroSet, Diagnostics *diagnostics, bool parseDefined); + MacroExpander(Lexer *lexer, + MacroSet *macroSet, + Diagnostics *diagnostics, + int allowedMacroExpansionDepth); ~MacroExpander() override; void lex(Token *token) override; private: - PP_DISALLOW_COPY_AND_ASSIGN(MacroExpander); - void getToken(Token *token); void ungetToken(const Token &token); bool isNextTokenLeftParen(); - bool pushMacro(const Macro ¯o, const Token &identifier); + bool pushMacro(std::shared_ptr<Macro> macro, const Token &identifier); void popMacro(); - bool expandMacro(const Macro ¯o, - const Token &identifier, - std::vector<Token> *replacements); + bool expandMacro(const Macro ¯o, const Token &identifier, std::vector<Token> *replacements); typedef std::vector<Token> MacroArg; bool collectMacroArgs(const Macro ¯o, @@ -54,37 +51,31 @@ class MacroExpander : public Lexer struct MacroContext { - const Macro *macro; + MacroContext(); + ~MacroContext(); + bool empty() const; + const Token &get(); + void unget(); + + std::shared_ptr<Macro> macro; std::size_t index; std::vector<Token> replacements; - - MacroContext() - : macro(0), - index(0) - { - } - bool empty() const - { - return index == replacements.size(); - } - const Token &get() - { - return replacements[index++]; - } - void unget() - { - assert(index > 0); - --index; - } }; Lexer *mLexer; MacroSet *mMacroSet; Diagnostics *mDiagnostics; - bool mParseDefined; std::unique_ptr<Token> mReserveToken; std::vector<MacroContext *> mContextStack; + size_t mTotalTokensInContexts; + + int mAllowedMacroExpansionDepth; + + bool mDeferReenablingMacros; + std::vector<std::shared_ptr<Macro>> mMacrosToReenable; + + class ScopedMacroReenabler; }; } // namespace pp |