1// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef COMPILER_PREPROCESSOR_PREPROCESSOR_H_
16#define COMPILER_PREPROCESSOR_PREPROCESSOR_H_
17
18#include "pp_utils.h"
19
20#include <cstddef>
21
22namespace pp
23{
24
25class Diagnostics;
26class DirectiveHandler;
27struct PreprocessorImpl;
28struct Token;
29
30struct PreprocessorSettings
31{
32 PreprocessorSettings() : maxMacroExpansionDepth(1000) {}
33 int maxMacroExpansionDepth;
34};
35
36class Preprocessor
37{
38public:
39 Preprocessor(Diagnostics *diagnostics,
40 DirectiveHandler *directiveHandler,
41 const PreprocessorSettings &settings);
42 ~Preprocessor();
43
44 // count: specifies the number of elements in the string and length arrays.
45 // string: specifies an array of pointers to strings.
46 // length: specifies an array of string lengths.
47 // If length is NULL, each string is assumed to be null terminated.
48 // If length is a value other than NULL, it points to an array containing
49 // a string length for each of the corresponding elements of string.
50 // Each element in the length array may contain the length of the
51 // corresponding string or a value less than 0 to indicate that the string
52 // is null terminated.
53 bool init(size_t count, const char *const string[], const int length[]);
54 // Adds a pre-defined macro.
55 void predefineMacro(const char *name, int value);
56
57 void lex(Token *token);
58
59 // Set maximum preprocessor token size
60 void setMaxTokenSize(size_t maxTokenSize);
61
62private:
63 PP_DISALLOW_COPY_AND_ASSIGN(Preprocessor);
64
65 PreprocessorImpl *mImpl;
66};
67
68} // namespace pp
69#endif // COMPILER_PREPROCESSOR_PREPROCESSOR_H_
70
71