1 // 2 // Copyright 2012 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_TOKENIZER_H_ 8 #define COMPILER_PREPROCESSOR_TOKENIZER_H_ 9 10 #include "common/angleutils.h" 11 #include "compiler/preprocessor/Input.h" 12 #include "compiler/preprocessor/Lexer.h" 13 14 namespace angle 15 { 16 17 namespace pp 18 { 19 20 class Diagnostics; 21 22 class Tokenizer : public Lexer 23 { 24 public: 25 struct Context 26 { 27 Diagnostics *diagnostics; 28 29 Input input; 30 // The location where yytext points to. Token location should track 31 // scanLoc instead of Input::mReadLoc because they may not be the same 32 // if text is buffered up in the scanner input buffer. 33 Input::Location scanLoc; 34 35 bool leadingSpace; 36 bool lineStart; 37 }; 38 39 Tokenizer(Diagnostics *diagnostics); 40 ~Tokenizer() override; 41 42 bool init(size_t count, const char *const string[], const int length[]); 43 44 void setFileNumber(int file); 45 void setLineNumber(int line); 46 void setMaxTokenSize(size_t maxTokenSize); 47 48 void lex(Token *token) override; 49 50 private: 51 bool initScanner(); 52 void destroyScanner(); 53 54 void *mHandle; // Scanner handle. 55 Context mContext; // Scanner extra. 56 size_t mMaxTokenSize; // Maximum token size 57 }; 58 59 } // namespace pp 60 61 } // namespace angle 62 63 #endif // COMPILER_PREPROCESSOR_TOKENIZER_H_ 64