blob: d7880f4eb3cd86cfabb8caae5057e7a5b67e440f [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>
Olli Etuaho47c27e82017-01-17 15:29:35 +000011#include <memory>
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000012#include <string>
alokp@chromium.org3a01d1b2011-08-30 05:10:53 +000013#include <vector>
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000014
Geoff Lang197d5292018-04-25 14:29:00 -040015namespace angle
16{
17
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000018namespace pp
19{
20
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000021struct Token;
22
23struct Macro
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000024{
25 enum Type
26 {
27 kTypeObj,
28 kTypeFunc
29 };
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000030 typedef std::vector<std::string> Parameters;
31 typedef std::vector<Token> Replacements;
alokp@chromium.org3a01d1b2011-08-30 05:10:53 +000032
Jamie Madillacf2f3a2017-11-21 19:22:44 -050033 Macro();
34 ~Macro();
Zhenyao Mod526f982014-05-13 14:51:19 -070035 bool equals(const Macro &other) const;
alokp@chromium.org3a01d1b2011-08-30 05:10:53 +000036
alokp@chromium.orgf3cdb462012-06-19 18:39:48 +000037 bool predefined;
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000038 mutable bool disabled;
Corentin Wallezd2f195b2016-09-19 15:53:33 -040039 mutable int expansionCount;
alokp@chromium.orgf3cdb462012-06-19 18:39:48 +000040
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000041 Type type;
42 std::string name;
alokp@chromium.org7fc38dd2012-06-14 18:23:23 +000043 Parameters parameters;
44 Replacements replacements;
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000045};
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000046
Olli Etuaho47c27e82017-01-17 15:29:35 +000047typedef std::map<std::string, std::shared_ptr<Macro>> MacroSet;
alokp@chromium.org98d04ec2012-05-21 22:47:20 +000048
Olli Etuaho6cb4c7f2015-08-13 11:27:17 +030049void PredefineMacro(MacroSet *macroSet, const char *name, int value);
50
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000051} // namespace pp
Geoff Lang0a73dd82014-11-19 16:18:08 -050052
Geoff Lang197d5292018-04-25 14:29:00 -040053} // namespace angle
54
alokp@chromium.org51b96852012-05-30 20:25:05 +000055#endif // COMPILER_PREPROCESSOR_MACRO_H_