Path: blob/main_old/src/compiler/preprocessor/DirectiveParser.h
1693 views
//1// Copyright 2012 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//56#ifndef COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_7#define COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_89#include "compiler/preprocessor/Lexer.h"10#include "compiler/preprocessor/Macro.h"11#include "compiler/preprocessor/Preprocessor.h"12#include "compiler/preprocessor/SourceLocation.h"1314namespace angle15{1617namespace pp18{1920class Diagnostics;21class DirectiveHandler;22class Tokenizer;2324class DirectiveParser : public Lexer25{26public:27DirectiveParser(Tokenizer *tokenizer,28MacroSet *macroSet,29Diagnostics *diagnostics,30DirectiveHandler *directiveHandler,31const PreprocessorSettings &settings);32~DirectiveParser() override;3334void lex(Token *token) override;3536private:37void parseDirective(Token *token);38void parseDefine(Token *token);39void parseUndef(Token *token);40void parseIf(Token *token);41void parseIfdef(Token *token);42void parseIfndef(Token *token);43void parseElse(Token *token);44void parseElif(Token *token);45void parseEndif(Token *token);46void parseError(Token *token);47void parsePragma(Token *token);48void parseExtension(Token *token);49void parseVersion(Token *token);50void parseLine(Token *token);5152bool skipping() const;53void parseConditionalIf(Token *token);54int parseExpressionIf(Token *token);55int parseExpressionIfdef(Token *token);5657struct ConditionalBlock58{59std::string type;60SourceLocation location;61bool skipBlock;62bool skipGroup;63bool foundValidGroup;64bool foundElseGroup;6566ConditionalBlock()67: skipBlock(false), skipGroup(false), foundValidGroup(false), foundElseGroup(false)68{}69};70bool mPastFirstStatement;71bool mSeenNonPreprocessorToken; // Tracks if a non-preprocessor token has been seen yet. Some72// macros, such as73// #extension must be declared before all shader code.74std::vector<ConditionalBlock> mConditionalStack;75Tokenizer *mTokenizer;76MacroSet *mMacroSet;77Diagnostics *mDiagnostics;78DirectiveHandler *mDirectiveHandler;79int mShaderVersion;80const PreprocessorSettings mSettings;81};8283} // namespace pp8485} // namespace angle8687#endif // COMPILER_PREPROCESSOR_DIRECTIVEPARSER_H_888990