Line data Source code
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 0 : struct ASTForStatement : public ASTStatement {
19 0 : ASTForStatement(Position position, std::unique_ptr<ASTStatement> initializer,
20 : std::unique_ptr<ASTExpression> test, std::unique_ptr<ASTExpression> next,
21 : std::unique_ptr<ASTStatement> statement)
22 0 : : INHERITED(position, kFor_Kind)
23 0 : , fInitializer(std::move(initializer))
24 0 : , fTest(std::move(test))
25 0 : , fNext(std::move(next))
26 0 : , fStatement(std::move(statement)) {}
27 :
28 0 : String description() const override {
29 0 : String result("for (");
30 0 : if (fInitializer) {
31 0 : result.append(fInitializer->description());
32 : }
33 0 : result += " ";
34 0 : if (fTest) {
35 0 : result.append(fTest->description());
36 : }
37 0 : result += "; ";
38 0 : if (fNext) {
39 0 : result.append(fNext->description());
40 : }
41 0 : result += ") ";
42 0 : result += fStatement->description();
43 0 : 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
|