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_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 {
     20     BoolLiteral(const Context& context, int offset, bool value)
     21     : INHERITED(offset, kBoolLiteral_Kind, *context.fBool_Type)
     22     , fValue(value) {}
     23 
     24     String description() const override {
     25         return String(fValue ? "true" : "false");
     26     }
     27 
     28     bool hasSideEffects() const override {
     29         return false;
     30     }
     31 
     32     bool isConstant() const override {
     33         return true;
     34     }
     35 
     36     bool compareConstant(const Context& context, const Expression& other) const override {
     37         BoolLiteral& b = (BoolLiteral&) other;
     38         return fValue == b.fValue;
     39     }
     40 
     41     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:
     50     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