diff options
Diffstat (limited to 'src/sksl/ir/SkSLBinaryExpression.h')
-rw-r--r-- | src/sksl/ir/SkSLBinaryExpression.h | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/sksl/ir/SkSLBinaryExpression.h b/src/sksl/ir/SkSLBinaryExpression.h index 132513e7f7..de85e4812b 100644 --- a/src/sksl/ir/SkSLBinaryExpression.h +++ b/src/sksl/ir/SkSLBinaryExpression.h @@ -4,17 +4,19 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ - + #ifndef SKSL_BINARYEXPRESSION #define SKSL_BINARYEXPRESSION #include "SkSLExpression.h" +#include "SkSLExpression.h" +#include "../SkSLIRGenerator.h" #include "../SkSLToken.h" namespace SkSL { /** - * A binary operation. + * A binary operation. */ struct BinaryExpression : public Expression { BinaryExpression(Position position, std::unique_ptr<Expression> left, Token::Kind op, @@ -24,14 +26,22 @@ struct BinaryExpression : public Expression { , fOperator(op) , fRight(std::move(right)) {} + virtual std::unique_ptr<Expression> constantPropagate( + const IRGenerator& irGenerator, + const DefinitionMap& definitions) override { + return irGenerator.constantFold(*fLeft, + fOperator, + *fRight); + } + virtual SkString description() const override { return "(" + fLeft->description() + " " + Token::OperatorName(fOperator) + " " + fRight->description() + ")"; } - const std::unique_ptr<Expression> fLeft; + std::unique_ptr<Expression> fLeft; const Token::Kind fOperator; - const std::unique_ptr<Expression> fRight; + std::unique_ptr<Expression> fRight; typedef Expression INHERITED; }; |