1 | // |
2 | // Copyright (c) 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 | |