blob: 9ecdbc717c88abe6e56d221735b214c74e57b389 [file] [log] [blame]
ethannicholasb3058bd2016-07-01 08:22:01 -07001/*
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_BINARYEXPRESSION
9#define SKSL_BINARYEXPRESSION
10
11#include "SkSLExpression.h"
12#include "../SkSLToken.h"
13
14namespace SkSL {
15
16/**
17 * A binary operation.
18 */
19struct BinaryExpression : public Expression {
20 BinaryExpression(Position position, std::unique_ptr<Expression> left, Token::Kind op,
ethannicholasd598f792016-07-25 10:08:54 -070021 std::unique_ptr<Expression> right, const Type& type)
ethannicholasb3058bd2016-07-01 08:22:01 -070022 : INHERITED(position, kBinary_Kind, type)
23 , fLeft(std::move(left))
24 , fOperator(op)
25 , fRight(std::move(right)) {}
26
Greg Daniel792d0f12016-11-20 14:53:35 +000027 virtual std::string description() const override {
ethannicholasb3058bd2016-07-01 08:22:01 -070028 return "(" + fLeft->description() + " " + Token::OperatorName(fOperator) + " " +
29 fRight->description() + ")";
30 }
31
32 const std::unique_ptr<Expression> fLeft;
33 const Token::Kind fOperator;
34 const std::unique_ptr<Expression> fRight;
35
36 typedef Expression INHERITED;
37};
38
39} // namespace
40
41#endif