Home | History | Annotate | Download | only in ir
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SKSL_TERNARYEXPRESSION
      9 #define SKSL_TERNARYEXPRESSION
     10 
     11 #include "SkSLExpression.h"
     12 #include "../SkSLPosition.h"
     13 
     14 namespace SkSL {
     15 
     16 /**
     17  * A ternary expression (test ? ifTrue : ifFalse).
     18  */
     19 struct TernaryExpression : public Expression {
     20     TernaryExpression(Position position, std::unique_ptr<Expression> test,
     21                       std::unique_ptr<Expression> ifTrue, std::unique_ptr<Expression> ifFalse)
     22     : INHERITED(position, kTernary_Kind, ifTrue->fType)
     23     , fTest(std::move(test))
     24     , fIfTrue(std::move(ifTrue))
     25     , fIfFalse(std::move(ifFalse)) {
     26         ASSERT(fIfTrue->fType == fIfFalse->fType);
     27     }
     28 
     29     SkString description() const override {
     30         return "(" + fTest->description() + " ? " + fIfTrue->description() + " : " +
     31                fIfFalse->description() + ")";
     32     }
     33 
     34     std::unique_ptr<Expression> fTest;
     35     std::unique_ptr<Expression> fIfTrue;
     36     std::unique_ptr<Expression> fIfFalse;
     37 
     38     typedef Expression INHERITED;
     39 };
     40 
     41 } // namespace
     42 
     43 #endif
     44