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_ASTFORSTATEMENT
9 #define SKSL_ASTFORSTATEMENT
10 
11 #include "SkSLASTStatement.h"
12 
13 namespace SkSL {
14 
15 /**
16  * A 'for' loop.
17  */
18 struct ASTForStatement : public ASTStatement {
ASTForStatementASTForStatement19     ASTForStatement(int offset, std::unique_ptr<ASTStatement> initializer,
20                    std::unique_ptr<ASTExpression> test, std::unique_ptr<ASTExpression> next,
21                    std::unique_ptr<ASTStatement> statement)
22     : INHERITED(offset, kFor_Kind)
23     , fInitializer(std::move(initializer))
24     , fTest(std::move(test))
25     , fNext(std::move(next))
26     , fStatement(std::move(statement)) {}
27 
descriptionASTForStatement28     String description() const override {
29         String result("for (");
30         if (fInitializer) {
31             result.append(fInitializer->description());
32         }
33         result += " ";
34         if (fTest) {
35             result.append(fTest->description());
36         }
37         result += "; ";
38         if (fNext) {
39             result.append(fNext->description());
40         }
41         result += ") ";
42         result += fStatement->description();
43         return result;
44     }
45 
46     const std::unique_ptr<ASTStatement> fInitializer;
47     const std::unique_ptr<ASTExpression> fTest;
48     const std::unique_ptr<ASTExpression> fNext;
49     const std::unique_ptr<ASTStatement> fStatement;
50 
51     typedef ASTStatement INHERITED;
52 };
53 
54 } // namespace
55 
56 #endif
57