Edit

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

Branch :

  • Show log

    Commit

  • Author : Olli Etuaho
    Date : 2015-02-13 13:12:22
    Hash : a3a5cc6a
    Message : Expose the IntermNode tree generated in the compiler for testing This refactoring makes it possible for tests to access the IntermNode tree produced by compilation by calling compileTree(). Removing ParseContext usage from OutputHLSL has the additional benefit of better separation between parsing and output. BUG=angle:916 Change-Id: Ib40954832316328772a5c1dcbbe6b46b238e4e65 Reviewed-on: https://chromium-review.googlesource.com/249723 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Tested-by: Olli Etuaho <oetuaho@nvidia.com>

  • src/compiler/translator/Intermediate.h
  • //
    // Copyright (c) 2002-2014 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_INTERMEDIATE_H_
    #define COMPILER_TRANSLATOR_INTERMEDIATE_H_
    
    #include "compiler/translator/IntermNode.h"
    
    struct TVectorFields
    {
        int offsets[4];
        int num;
    };
    
    //
    // Set of helper functions to help parse and build the tree.
    //
    class TInfoSink;
    class TIntermediate
    {
      public:
        POOL_ALLOCATOR_NEW_DELETE();
        TIntermediate(TInfoSink &i)
            : mInfoSink(i) { }
    
        TIntermSymbol *addSymbol(
            int id, const TString &, const TType &, const TSourceLoc &);
        TIntermTyped *addBinaryMath(
            TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &);
        TIntermTyped *addAssign(
            TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &);
        TIntermTyped *addIndex(
            TOperator op, TIntermTyped *base, TIntermTyped *index, const TSourceLoc &);
        TIntermTyped *addUnaryMath(
            TOperator op, TIntermNode *child, const TSourceLoc &);
        TIntermAggregate *growAggregate(
            TIntermNode *left, TIntermNode *right, const TSourceLoc &);
        TIntermAggregate *makeAggregate(TIntermNode *node, const TSourceLoc &);
        TIntermAggregate *setAggregateOperator(TIntermNode *, TOperator, const TSourceLoc &);
        TIntermNode *addSelection(TIntermTyped *cond, TIntermNodePair code, const TSourceLoc &);
        TIntermTyped *addSelection(
            TIntermTyped *cond, TIntermTyped *trueBlock, TIntermTyped *falseBlock, const TSourceLoc &);
        TIntermTyped *addComma(
            TIntermTyped *left, TIntermTyped *right, const TSourceLoc &);
        TIntermConstantUnion *addConstantUnion(ConstantUnion *, const TType &, const TSourceLoc &);
        // TODO(zmo): Get rid of default value.
        bool parseConstTree(const TSourceLoc &, TIntermNode *, ConstantUnion *,
                            TOperator, TType, bool singleConstantParam = false);
        TIntermNode *addLoop(TLoopType, TIntermNode *, TIntermTyped *, TIntermTyped *,
                             TIntermNode *, const TSourceLoc &);
        TIntermBranch *addBranch(TOperator, const TSourceLoc &);
        TIntermBranch *addBranch(TOperator, TIntermTyped *, const TSourceLoc &);
        TIntermTyped *addSwizzle(TVectorFields &, const TSourceLoc &);
        bool postProcess(TIntermNode *);
    
        static void outputTree(TIntermNode *, TInfoSinkBase &);
    
      private:
        void operator=(TIntermediate &); // prevent assignments
    
        TInfoSink & mInfoSink;
    };
    
    #endif  // COMPILER_TRANSLATOR_INTERMEDIATE_H_