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 namespace pp
21 {
22 
23 class Diagnostics;
24 class DirectiveHandler;
25 struct PreprocessorImpl;
26 struct Token;
27 
28 class Preprocessor
29 {
30 public:
31 	Preprocessor(Diagnostics* diagnostics, DirectiveHandler* directiveHandler);
32 	~Preprocessor();
33 
34 	// count: specifies the number of elements in the string and length arrays.
35 	// string: specifies an array of pointers to strings.
36 	// length: specifies an array of string lengths.
37 	// If length is NULL, each string is assumed to be null terminated.
38 	// If length is a value other than NULL, it points to an array containing
39 	// a string length for each of the corresponding elements of string.
40 	// Each element in the length array may contain the length of the
41 	// corresponding string or a value less than 0 to indicate that the string
42 	// is null terminated.
43 	bool init(int count, const char* const string[], const int length[]);
44 	// Adds a pre-defined macro.
45 	void predefineMacro(const char* name, int value);
46 
47 	void lex(Token* token);
48 
49 private:
50 	PP_DISALLOW_COPY_AND_ASSIGN(Preprocessor);
51 
52 	PreprocessorImpl* mImpl;
53 };
54 
55 }  // namespace pp
56 #endif  // COMPILER_PREPROCESSOR_PREPROCESSOR_H_
57 
58