1 // 2 // Copyright 2012 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef COMPILER_PREPROCESSOR_MACRO_H_ 8 #define COMPILER_PREPROCESSOR_MACRO_H_ 9 10 #include <map> 11 #include <memory> 12 #include <string> 13 #include <vector> 14 15 namespace angle 16 { 17 18 namespace pp 19 { 20 21 struct Token; 22 23 struct Macro 24 { 25 enum Type 26 { 27 kTypeObj, 28 kTypeFunc 29 }; 30 typedef std::vector<std::string> Parameters; 31 typedef std::vector<Token> Replacements; 32 33 Macro(); 34 ~Macro(); 35 bool equals(const Macro &other) const; 36 37 bool predefined; 38 mutable bool disabled; 39 mutable int expansionCount; 40 41 Type type; 42 std::string name; 43 Parameters parameters; 44 Replacements replacements; 45 }; 46 47 typedef std::map<std::string, std::shared_ptr<Macro>> MacroSet; 48 49 void PredefineMacro(MacroSet *macroSet, const char *name, int value); 50 51 } // namespace pp 52 53 } // namespace angle 54 55 #endif // COMPILER_PREPROCESSOR_MACRO_H_ 56