/*
 * Copyright 2016 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
 
#ifndef SKSL_ASTCALLSUFFIX
#define SKSL_ASTCALLSUFFIX

#include <vector>
#include "SkSLASTSuffix.h"

namespace SkSL {

/**
 * A parenthesized list of arguments following an expression, indicating a function call. 
 */
struct ASTCallSuffix : public ASTSuffix {
    ASTCallSuffix(Position position, std::vector<std::unique_ptr<ASTExpression>> arguments) 
    : INHERITED(position, ASTSuffix::kCall_Kind)
    , fArguments(std::move(arguments)) {}

    SkString description() const override {
        SkString result("(");
        SkString separator;
        for (size_t i = 0; i < fArguments.size(); ++i) {
            result += separator;
            separator = ", ";
            result += fArguments[i]->description();
        }
        result += ")";
        return result;
    }

    std::vector<std::unique_ptr<ASTExpression>> fArguments;

    typedef ASTSuffix INHERITED;
};

} // namespace

#endif
