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 <string>
12#include <vector>
13
14namespace pp
15{
16
17struct Token;
18
19struct Macro
20{
21    enum Type
22    {
23        kTypeObj,
24        kTypeFunc
25    };
26    typedef std::vector<std::string> Parameters;
27    typedef std::vector<Token> Replacements;
28
29    Macro()
30        : predefined(false),
31          disabled(false),
32          type(kTypeObj)
33    {
34    }
35    bool equals(const Macro &other) const;
36
37    bool predefined;
38    mutable bool disabled;
39
40    Type type;
41    std::string name;
42    Parameters parameters;
43    Replacements replacements;
44};
45
46typedef std::map<std::string, Macro> MacroSet;
47
48}  // namespace pp
49#endif  // COMPILER_PREPROCESSOR_MACRO_H_
50