Edit

kc3-lang/angle/src/compiler/translator/ValidateSwitch.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2015-05-14 10:01:17
    Hash : 6e06b1f4
    Message : Make TParseContext a class, with private data. *re-land with build fix* BUG=angleproject:995 Change-Id: I67d3ded8f6c705b54fb372857e07ce1a86b58475 Reviewed-on: https://chromium-review.googlesource.com/271162 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Zhenyao Mo <zmo@chromium.org>

  • src/compiler/translator/ValidateSwitch.h
  • //
    // Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    #ifndef COMPILER_TRANSLATOR_VALIDATESWITCH_H_
    #define COMPILER_TRANSLATOR_VALIDATESWITCH_H_
    
    #include "compiler/translator/IntermNode.h"
    
    class TParseContext;
    
    class ValidateSwitch : public TIntermTraverser
    {
      public:
        // Check for errors and output messages any remaining errors on the context.
        // Returns true if there are no errors.
        static bool validate(TBasicType switchType, TParseContext *context,
            TIntermAggregate *statementList, const TSourceLoc &loc);
    
        void visitSymbol(TIntermSymbol *) override;
        void visitConstantUnion(TIntermConstantUnion *) override;
        bool visitBinary(Visit, TIntermBinary *) override;
        bool visitUnary(Visit, TIntermUnary *) override;
        bool visitSelection(Visit visit, TIntermSelection *) override;
        bool visitSwitch(Visit, TIntermSwitch *) override;
        bool visitCase(Visit, TIntermCase *node) override;
        bool visitAggregate(Visit, TIntermAggregate *) override;
        bool visitLoop(Visit visit, TIntermLoop *) override;
        bool visitBranch(Visit, TIntermBranch *) override;
    
      private:
        ValidateSwitch(TBasicType switchType, TParseContext *context);
    
        bool validateInternal(const TSourceLoc &loc);
    
        TBasicType mSwitchType;
        TParseContext *mContext;
        bool mCaseTypeMismatch;
        bool mFirstCaseFound;
        bool mStatementBeforeCase;
        bool mLastStatementWasCase;
        int mControlFlowDepth;
        bool mCaseInsideControlFlow;
        int mDefaultCount;
        std::set<int> mCasesSigned;
        std::set<unsigned int> mCasesUnsigned;
        bool mDuplicateCases;
    };
    
    #endif // COMPILER_TRANSLATOR_VALIDATESWITCH_H_