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_BOOLLITERAL 9 #define SKSL_BOOLLITERAL 10 11 #include "SkSLContext.h" 12 #include "SkSLExpression.h" 13 14 namespace SkSL { 15 16 /** 17 * Represents 'true' or 'false'. 18 */ 19 struct BoolLiteral : public Expression { BoolLiteralBoolLiteral20 BoolLiteral(const Context& context, int offset, bool value) 21 : INHERITED(offset, kBoolLiteral_Kind, *context.fBool_Type) 22 , fValue(value) {} 23 descriptionBoolLiteral24 String description() const override { 25 return String(fValue ? "true" : "false"); 26 } 27 hasSideEffectsBoolLiteral28 bool hasSideEffects() const override { 29 return false; 30 } 31 isConstantBoolLiteral32 bool isConstant() const override { 33 return true; 34 } 35 compareConstantBoolLiteral36 bool compareConstant(const Context& context, const Expression& other) const override { 37 BoolLiteral& b = (BoolLiteral&) other; 38 return fValue == b.fValue; 39 } 40 cloneBoolLiteral41 std::unique_ptr<Expression> clone() const override { 42 return std::unique_ptr<Expression>(new BoolLiteral(fOffset, fValue, &fType)); 43 } 44 45 const bool fValue; 46 47 typedef Expression INHERITED; 48 49 private: BoolLiteralBoolLiteral50 BoolLiteral(int offset, bool value, const Type* type) 51 : INHERITED(offset, kBoolLiteral_Kind, *type) 52 , fValue(value) {} 53 }; 54 55 } // namespace 56 57 #endif 58