/* * 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_ASTFUNCTION #define SKSL_ASTFUNCTION #include "SkSLASTBlock.h" #include "SkSLASTDeclaration.h" #include "SkSLASTParameter.h" #include "SkSLASTType.h" namespace SkSL { /** * A function declaration or definition. The fBody field will be null for declarations. */ struct ASTFunction : public ASTDeclaration { ASTFunction(int offset, Modifiers modifiers, std::unique_ptr<ASTType> returnType, StringFragment name, std::vector<std::unique_ptr<ASTParameter>> parameters, std::unique_ptr<ASTBlock> body) : INHERITED(offset, kFunction_Kind) , fModifiers(modifiers) , fReturnType(std::move(returnType)) , fName(name) , fParameters(std::move(parameters)) , fBody(std::move(body)) {} String description() const override { String result = fReturnType->description() + " " + fName + "("; for (size_t i = 0; i < fParameters.size(); i++) { if (i > 0) { result += ", "; } result += fParameters[i]->description(); } if (fBody) { result += ") " + fBody->description(); } else { result += ");"; } return result; } const Modifiers fModifiers; const std::unique_ptr<ASTType> fReturnType; const StringFragment fName; const std::vector<std::unique_ptr<ASTParameter>> fParameters; const std::unique_ptr<ASTBlock> fBody; typedef ASTDeclaration INHERITED; }; } // namespace #endif