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 "../SkSLCompiler.h" 13 #include "../SkSLLexer.h" 14 15 namespace SkSL { 16 17 /** 18 * Represents a binary operation, with the operator represented by the token's type. 19 */ 20 struct ASTBinaryExpression : public ASTExpression { ASTBinaryExpressionASTBinaryExpression21 ASTBinaryExpression(std::unique_ptr<ASTExpression> left, Token op, 22 std::unique_ptr<ASTExpression> right) 23 : INHERITED(op.fOffset, kBinary_Kind) 24 , fLeft(std::move(left)) 25 , fOperator(op.fKind) 26 , fRight(std::move(right)) {} 27 descriptionASTBinaryExpression28 String description() const override { 29 return "(" + fLeft->description() + " " + Compiler::OperatorName(fOperator) + " " + 30 fRight->description() + ")"; 31 } 32 33 const std::unique_ptr<ASTExpression> fLeft; 34 const Token::Kind fOperator; 35 const std::unique_ptr<ASTExpression> fRight; 36 37 typedef ASTExpression INHERITED; 38 }; 39 40 } // namespace 41 42 #endif 43