Wed, 31 Dec 2014 07:16:47 +0100
Revert simplistic fix pending revisit of Mozilla integration attempt.
1 //
2 // Copyright (c) 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 //
7 #ifndef COMPILER_PREPROCESSOR_DIRECTIVE_PARSER_H_
8 #define COMPILER_PREPROCESSOR_DIRECTIVE_PARSER_H_
10 #include "Lexer.h"
11 #include "Macro.h"
12 #include "pp_utils.h"
13 #include "SourceLocation.h"
15 namespace pp
16 {
18 class Diagnostics;
19 class DirectiveHandler;
20 class Tokenizer;
22 class DirectiveParser : public Lexer
23 {
24 public:
25 DirectiveParser(Tokenizer* tokenizer,
26 MacroSet* macroSet,
27 Diagnostics* diagnostics,
28 DirectiveHandler* directiveHandler);
30 virtual void lex(Token* token);
32 private:
33 PP_DISALLOW_COPY_AND_ASSIGN(DirectiveParser);
35 void parseDirective(Token* token);
36 void parseDefine(Token* token);
37 void parseUndef(Token* token);
38 void parseIf(Token* token);
39 void parseIfdef(Token* token);
40 void parseIfndef(Token* token);
41 void parseElse(Token* token);
42 void parseElif(Token* token);
43 void parseEndif(Token* token);
44 void parseError(Token* token);
45 void parsePragma(Token* token);
46 void parseExtension(Token* token);
47 void parseVersion(Token* token);
48 void parseLine(Token* token);
50 bool skipping() const;
51 void parseConditionalIf(Token* token);
52 int parseExpressionIf(Token* token);
53 int parseExpressionIfdef(Token* token);
55 struct ConditionalBlock
56 {
57 std::string type;
58 SourceLocation location;
59 bool skipBlock;
60 bool skipGroup;
61 bool foundValidGroup;
62 bool foundElseGroup;
64 ConditionalBlock() :
65 skipBlock(false),
66 skipGroup(false),
67 foundValidGroup(false),
68 foundElseGroup(false)
69 {
70 }
71 };
72 bool mPastFirstStatement;
73 std::vector<ConditionalBlock> mConditionalStack;
74 Tokenizer* mTokenizer;
75 MacroSet* mMacroSet;
76 Diagnostics* mDiagnostics;
77 DirectiveHandler* mDirectiveHandler;
78 };
80 } // namespace pp
81 #endif // COMPILER_PREPROCESSOR_DIRECTIVE_PARSER_H_