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_ASTSUFFIXEXPRESSION
9b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#define SKSL_ASTSUFFIXEXPRESSION
10b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
11b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#include "SkSLASTSuffix.h"
12b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#include "SkSLASTExpression.h"
13b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
14b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholasnamespace SkSL {
15b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
16b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas/**
17b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas * An expression with an associated suffix.
18b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas */
19b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholasstruct ASTSuffixExpression : public ASTExpression {
20b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    ASTSuffixExpression(std::unique_ptr<ASTExpression> base, std::unique_ptr<ASTSuffix> suffix)
21b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    : INHERITED(base->fPosition, kSuffix_Kind)
22b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    , fBase(std::move(base))
23b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    , fSuffix(std::move(suffix)) {}
24b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
259e1138d56665d13641f8805cd72ae81adc255f79Ethan Nicholas    SkString description() const override {
26b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas        return fBase->description() + fSuffix->description();
27b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    }
28b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
29b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    const std::unique_ptr<ASTExpression> fBase;
30b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    const std::unique_ptr<ASTSuffix> fSuffix;
31b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
32b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas    typedef ASTExpression INHERITED;
33b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas};
34b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
35b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas} // namespace
36b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas
37b3058bdb1049ca75d526eb9f11e1a42a49e63585ethannicholas#endif
38