Manage preprocessor Macro objects with shared pointers
This ensures that pointers to Macros that are removed from the macro
set stay valid. Pointers to undef'd macros may need to be referred to
if reenabling the macros has been deferred.
BUG=chromium:681324
TEST=angle_unittests
Change-Id: Ibbbabbcbd6b0a84254cda717ae63712e6d404ebd
Reviewed-on: https://chromium-review.googlesource.com/427948
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/preprocessor/MacroExpander.h b/src/compiler/preprocessor/MacroExpander.h
index ef52c5e..7a4f5a9 100644
--- a/src/compiler/preprocessor/MacroExpander.h
+++ b/src/compiler/preprocessor/MacroExpander.h
@@ -35,7 +35,7 @@
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);
@@ -56,7 +56,7 @@
const Token &get();
void unget();
- const Macro *macro;
+ std::shared_ptr<Macro> macro;
std::size_t index;
std::vector<Token> replacements;
};
@@ -72,7 +72,7 @@
int mAllowedMacroExpansionDepth;
bool mDeferReenablingMacros;
- std::vector<const Macro *> mMacrosToReenable;
+ std::vector<std::shared_ptr<Macro>> mMacrosToReenable;
class ScopedMacroReenabler;
};