Line data Source code
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 0 : struct TernaryExpression : public Expression {
20 0 : TernaryExpression(Position position, std::unique_ptr<Expression> test,
21 : std::unique_ptr<Expression> ifTrue, std::unique_ptr<Expression> ifFalse)
22 0 : : INHERITED(position, kTernary_Kind, ifTrue->fType)
23 0 : , fTest(std::move(test))
24 0 : , fIfTrue(std::move(ifTrue))
25 0 : , fIfFalse(std::move(ifFalse)) {
26 0 : ASSERT(fIfTrue->fType == fIfFalse->fType);
27 0 : }
28 :
29 0 : String description() const override {
30 0 : return "(" + fTest->description() + " ? " + fIfTrue->description() + " : " +
31 0 : 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
|