• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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