1 /* 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_FUNCTIONDEFINITION 9 #define SKSL_FUNCTIONDEFINITION 10 11 #include "SkSLBlock.h" 12 #include "SkSLFunctionDeclaration.h" 13 #include "SkSLProgramElement.h" 14 15 namespace SkSL { 16 17 /** 18 * A function definition (a declaration plus an associated block of code). 19 */ 20 struct FunctionDefinition : public ProgramElement { FunctionDefinitionFunctionDefinition21 FunctionDefinition(int offset, const FunctionDeclaration& declaration, 22 std::unique_ptr<Statement> body) 23 : INHERITED(offset, kFunction_Kind) 24 , fDeclaration(declaration) 25 , fBody(std::move(body)) {} 26 cloneFunctionDefinition27 std::unique_ptr<ProgramElement> clone() const override { 28 return std::unique_ptr<ProgramElement>(new FunctionDefinition(fOffset, fDeclaration, 29 fBody->clone())); 30 } 31 descriptionFunctionDefinition32 String description() const override { 33 return fDeclaration.description() + " " + fBody->description(); 34 } 35 36 const FunctionDeclaration& fDeclaration; 37 std::unique_ptr<Statement> fBody; 38 39 typedef ProgramElement INHERITED; 40 }; 41 42 } // namespace 43 44 #endif 45