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_WHILESTATEMENT 9 #define SKSL_WHILESTATEMENT 10 11 #include "src/sksl/ir/SkSLExpression.h" 12 #include "src/sksl/ir/SkSLStatement.h" 13 14 namespace SkSL { 15 16 /** 17 * A 'while' loop. 18 */ 19 struct WhileStatement final : public Statement { 20 static constexpr Kind kStatementKind = Kind::kWhile; 21 WhileStatementfinal22 WhileStatement(int offset, std::unique_ptr<Expression> test, 23 std::unique_ptr<Statement> statement) 24 : INHERITED(offset, kStatementKind) 25 , fTest(std::move(test)) 26 , fStatement(std::move(statement)) {} 27 testfinal28 std::unique_ptr<Expression>& test() { 29 return fTest; 30 } 31 testfinal32 const std::unique_ptr<Expression>& test() const { 33 return fTest; 34 } 35 statementfinal36 std::unique_ptr<Statement>& statement() { 37 return fStatement; 38 } 39 statementfinal40 const std::unique_ptr<Statement>& statement() const { 41 return fStatement; 42 } 43 clonefinal44 std::unique_ptr<Statement> clone() const override { 45 return std::unique_ptr<Statement>(new WhileStatement(fOffset, this->test()->clone(), 46 this->statement()->clone())); 47 } 48 descriptionfinal49 String description() const override { 50 return "while (" + this->test()->description() + ") " + this->statement()->description(); 51 } 52 53 private: 54 std::unique_ptr<Expression> fTest; 55 std::unique_ptr<Statement> fStatement; 56 57 using INHERITED = Statement; 58 }; 59 60 } // namespace SkSL 61 62 #endif 63