blob: 535dd12208d646f8f6a6f9f8a7e75d062e8e9529 [file] [log] [blame]
alokp@chromium.org04d7d222012-05-16 19:24:07 +00001//
Jamie Madill88f6e942014-02-19 10:27:53 -05002// Copyright (c) 2012-2014 The ANGLE Project Authors. All rights reserved.
alokp@chromium.org04d7d222012-05-16 19:24:07 +00003// 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 "Input.h"
11#include "Lexer.h"
12#include "pp_utils.h"
13
14namespace pp
15{
16
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000017class Diagnostics;
18
alokp@chromium.org04d7d222012-05-16 19:24:07 +000019class Tokenizer : public Lexer
20{
21 public:
22 struct Context
23 {
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000024 Diagnostics* diagnostics;
25
alokp@chromium.org04d7d222012-05-16 19:24:07 +000026 Input input;
27 // The location where yytext points to. Token location should track
28 // scanLoc instead of Input::mReadLoc because they may not be the same
29 // if text is buffered up in the scanner input buffer.
30 Input::Location scanLoc;
31
32 bool leadingSpace;
33 bool lineStart;
34 };
35
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000036 Tokenizer(Diagnostics* diagnostics);
alokp@chromium.org04d7d222012-05-16 19:24:07 +000037 ~Tokenizer();
38
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000039 bool init(size_t count, const char* const string[], const int length[]);
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000040
41 void setFileNumber(int file);
42 void setLineNumber(int line);
Jamie Madill5508f392014-02-20 13:31:36 -050043 void setMaxTokenSize(size_t maxTokenSize);
alokp@chromium.org46aa13d2012-06-15 15:40:27 +000044
alokp@chromium.org04d7d222012-05-16 19:24:07 +000045 virtual void lex(Token* token);
46
47 private:
48 PP_DISALLOW_COPY_AND_ASSIGN(Tokenizer);
49 bool initScanner();
50 void destroyScanner();
51
52 void* mHandle; // Scanner handle.
53 Context mContext; // Scanner extra.
Jamie Madill5508f392014-02-20 13:31:36 -050054 size_t mMaxTokenSize; // Maximum token size
alokp@chromium.org04d7d222012-05-16 19:24:07 +000055};
56
57} // namespace pp
58#endif // COMPILER_PREPROCESSOR_TOKENIZER_H_
59