1b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas/* 2b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas * Copyright 2016 Google Inc. 3b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas * 4b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas * Use of this source code is governed by a BSD-style license that can be 5b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas * found in the LICENSE file. 6b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas */ 7b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 8b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#ifndef SKSL_ASTBINARYEXPRESSION 9b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#define SKSL_ASTBINARYEXPRESSION 10b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 11b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#include "SkSLASTExpression.h" 12b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#include "../SkSLToken.h" 13b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 14b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholasnamespace SkSL { 15b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 16b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas/** 170df1b04db87c3d86ee0b0bd6aa2cb5b6be32cac2Ethan Nicholas * Represents a binary operation, with the operator represented by the token's type. 18b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas */ 19b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholasstruct ASTBinaryExpression : public ASTExpression { 20b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas ASTBinaryExpression(std::unique_ptr<ASTExpression> left, Token op, 21b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas std::unique_ptr<ASTExpression> right) 22b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas : INHERITED(op.fPosition, kBinary_Kind) 23b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas , fLeft(std::move(left)) 24b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas , fOperator(op.fKind) 25b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas , fRight(std::move(right)) {} 26b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 270df1b04db87c3d86ee0b0bd6aa2cb5b6be32cac2Ethan Nicholas String description() const override { 28b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas return "(" + fLeft->description() + " " + Token::OperatorName(fOperator) + " " + 29b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas fRight->description() + ")"; 30b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas } 31b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 32b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas const std::unique_ptr<ASTExpression> fLeft; 33b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas const Token::Kind fOperator; 34b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas const std::unique_ptr<ASTExpression> fRight; 35b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 36b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas typedef ASTExpression INHERITED; 37b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas}; 38b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 39b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas} // namespace 40b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas 41b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#endif 42