blob: 7ec01491166476109500ed076f6eca51d48d6a1f [file] [log] [blame]
alokp@chromium.org4e4b8072011-08-07 05:36:04 +00001//
alokp@chromium.org98d04ec2012-05-21 22:47:20 +00002// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
alokp@chromium.org4e4b8072011-08-07 05:36:04 +00003// 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
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000010#include <map>
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000011#include <string>
alokp@chromium.org3a01d1b2011-08-30 05:10:53 +000012#include <vector>
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000013
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000014namespace pp
15{
16
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000017struct Token;
18
19struct Macro
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000020{
21 enum Type
22 {
23 kTypeObj,
24 kTypeFunc
25 };
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000026 typedef std::vector<std::string> Parameters;
27 typedef std::vector<Token> Replacements;
alokp@chromium.org3a01d1b2011-08-30 05:10:53 +000028
alokp@chromium.orgf3cdb462012-06-19 18:39:48 +000029 Macro() : predefined(false), disabled(false), type(kTypeObj) { }
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000030 bool equals(const Macro& other) const;
alokp@chromium.org3a01d1b2011-08-30 05:10:53 +000031
alokp@chromium.orgf3cdb462012-06-19 18:39:48 +000032 bool predefined;
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000033 mutable bool disabled;
alokp@chromium.orgf3cdb462012-06-19 18:39:48 +000034
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000035 Type type;
36 std::string name;
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000037 Parameters parameters;
38 Replacements replacements;
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000039};
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000040
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000041typedef std::map<std::string, Macro> MacroSet;
42
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000043} // namespace pp
alokp@chromium.org51b96852012-05-30 20:25:05 +000044#endif // COMPILER_PREPROCESSOR_MACRO_H_