1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/angle/src/compiler/preprocessor/DirectiveParser.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,82 @@ 1.4 +// 1.5 +// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 1.6 +// Use of this source code is governed by a BSD-style license that can be 1.7 +// found in the LICENSE file. 1.8 +// 1.9 + 1.10 +#ifndef COMPILER_PREPROCESSOR_DIRECTIVE_PARSER_H_ 1.11 +#define COMPILER_PREPROCESSOR_DIRECTIVE_PARSER_H_ 1.12 + 1.13 +#include "Lexer.h" 1.14 +#include "Macro.h" 1.15 +#include "pp_utils.h" 1.16 +#include "SourceLocation.h" 1.17 + 1.18 +namespace pp 1.19 +{ 1.20 + 1.21 +class Diagnostics; 1.22 +class DirectiveHandler; 1.23 +class Tokenizer; 1.24 + 1.25 +class DirectiveParser : public Lexer 1.26 +{ 1.27 + public: 1.28 + DirectiveParser(Tokenizer* tokenizer, 1.29 + MacroSet* macroSet, 1.30 + Diagnostics* diagnostics, 1.31 + DirectiveHandler* directiveHandler); 1.32 + 1.33 + virtual void lex(Token* token); 1.34 + 1.35 + private: 1.36 + PP_DISALLOW_COPY_AND_ASSIGN(DirectiveParser); 1.37 + 1.38 + void parseDirective(Token* token); 1.39 + void parseDefine(Token* token); 1.40 + void parseUndef(Token* token); 1.41 + void parseIf(Token* token); 1.42 + void parseIfdef(Token* token); 1.43 + void parseIfndef(Token* token); 1.44 + void parseElse(Token* token); 1.45 + void parseElif(Token* token); 1.46 + void parseEndif(Token* token); 1.47 + void parseError(Token* token); 1.48 + void parsePragma(Token* token); 1.49 + void parseExtension(Token* token); 1.50 + void parseVersion(Token* token); 1.51 + void parseLine(Token* token); 1.52 + 1.53 + bool skipping() const; 1.54 + void parseConditionalIf(Token* token); 1.55 + int parseExpressionIf(Token* token); 1.56 + int parseExpressionIfdef(Token* token); 1.57 + 1.58 + struct ConditionalBlock 1.59 + { 1.60 + std::string type; 1.61 + SourceLocation location; 1.62 + bool skipBlock; 1.63 + bool skipGroup; 1.64 + bool foundValidGroup; 1.65 + bool foundElseGroup; 1.66 + 1.67 + ConditionalBlock() : 1.68 + skipBlock(false), 1.69 + skipGroup(false), 1.70 + foundValidGroup(false), 1.71 + foundElseGroup(false) 1.72 + { 1.73 + } 1.74 + }; 1.75 + bool mPastFirstStatement; 1.76 + std::vector<ConditionalBlock> mConditionalStack; 1.77 + Tokenizer* mTokenizer; 1.78 + MacroSet* mMacroSet; 1.79 + Diagnostics* mDiagnostics; 1.80 + DirectiveHandler* mDirectiveHandler; 1.81 +}; 1.82 + 1.83 +} // namespace pp 1.84 +#endif // COMPILER_PREPROCESSOR_DIRECTIVE_PARSER_H_ 1.85 +