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_ASTBINARYEXPRESSION 9 #define SKSL_ASTBINARYEXPRESSION 10 11 #include "SkSLASTExpression.h" 12 #include "../SkSLToken.h" 13 14 namespace SkSL { 15 16 /** 17 * Represents a binary operation, with the operator represented by the token's type. 18 */ 19 struct ASTBinaryExpression : public ASTExpression { ASTBinaryExpressionASTBinaryExpression20 ASTBinaryExpression(std::unique_ptr<ASTExpression> left, Token op, 21 std::unique_ptr<ASTExpression> right) 22 : INHERITED(op.fPosition, kBinary_Kind) 23 , fLeft(std::move(left)) 24 , fOperator(op.fKind) 25 , fRight(std::move(right)) {} 26 descriptionASTBinaryExpression27 String description() const override { 28 return "(" + fLeft->description() + " " + Token::OperatorName(fOperator) + " " + 29 fRight->description() + ")"; 30 } 31 32 const std::unique_ptr<ASTExpression> fLeft; 33 const Token::Kind fOperator; 34 const std::unique_ptr<ASTExpression> fRight; 35 36 typedef ASTExpression INHERITED; 37 }; 38 39 } // namespace 40 41 #endif 42