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(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 : INHERITED(position, 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