1 | // |
2 | // Copyright (c) 2011 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_PREPROCESSOR_H_ |
8 | #define COMPILER_PREPROCESSOR_PREPROCESSOR_H_ |
9 | |
10 | #include <cstddef> |
11 | |
12 | #include "GLSLANG/ShaderLang.h" |
13 | #include "common/angleutils.h" |
14 | |
15 | namespace angle |
16 | { |
17 | |
18 | namespace pp |
19 | { |
20 | |
21 | class Diagnostics; |
22 | class DirectiveHandler; |
23 | struct PreprocessorImpl; |
24 | struct Token; |
25 | |
26 | struct PreprocessorSettings final |
27 | { |
28 | PreprocessorSettings(ShShaderSpec shaderSpec) |
29 | : maxMacroExpansionDepth(1000), shaderSpec(shaderSpec) |
30 | {} |
31 | |
32 | PreprocessorSettings(const PreprocessorSettings &other) = default; |
33 | |
34 | int maxMacroExpansionDepth; |
35 | ShShaderSpec shaderSpec; |
36 | }; |
37 | |
38 | class Preprocessor : angle::NonCopyable |
39 | { |
40 | public: |
41 | Preprocessor(Diagnostics *diagnostics, |
42 | DirectiveHandler *directiveHandler, |
43 | const PreprocessorSettings &settings); |
44 | ~Preprocessor(); |
45 | |
46 | // count: specifies the number of elements in the string and length arrays. |
47 | // string: specifies an array of pointers to strings. |
48 | // length: specifies an array of string lengths. |
49 | // If length is NULL, each string is assumed to be null terminated. |
50 | // If length is a value other than NULL, it points to an array containing |
51 | // a string length for each of the corresponding elements of string. |
52 | // Each element in the length array may contain the length of the |
53 | // corresponding string or a value less than 0 to indicate that the string |
54 | // is null terminated. |
55 | bool init(size_t count, const char *const string[], const int length[]); |
56 | // Adds a pre-defined macro. |
57 | void predefineMacro(const char *name, int value); |
58 | |
59 | void lex(Token *token); |
60 | |
61 | // Set maximum preprocessor token size |
62 | void setMaxTokenSize(size_t maxTokenSize); |
63 | |
64 | private: |
65 | PreprocessorImpl *mImpl; |
66 | }; |
67 | |
68 | } // namespace pp |
69 | |
70 | } // namespace angle |
71 | |
72 | #endif // COMPILER_PREPROCESSOR_PREPROCESSOR_H_ |
73 | |