Home | History | Annotate | Download | only in ir
      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 {
     21     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 
     27     std::unique_ptr<ProgramElement> clone() const override {
     28         return std::unique_ptr<ProgramElement>(new FunctionDefinition(fOffset, fDeclaration,
     29                                                                       fBody->clone()));
     30     }
     31 
     32     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