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 22 namespace pp 23 { 24 25 class Diagnostics; 26 class DirectiveHandler; 27 struct PreprocessorImpl; 28 struct Token; 29 30 struct PreprocessorSettings 31 { PreprocessorSettingsPreprocessorSettings32 PreprocessorSettings() : maxMacroExpansionDepth(1000) {} 33 int maxMacroExpansionDepth; 34 }; 35 36 class Preprocessor 37 { 38 public: 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 62 private: 63 PP_DISALLOW_COPY_AND_ASSIGN(Preprocessor); 64 65 PreprocessorImpl *mImpl; 66 }; 67 68 } // namespace pp 69 #endif // COMPILER_PREPROCESSOR_PREPROCESSOR_H_ 70 71