gfx/angle/src/compiler/preprocessor/DirectiveParser.h

changeset 0
6474c204b198
     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 +

mercurial