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