1 /** 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ES2PANDA_IR_STATEMENT_H_DO_WHILE_STATEMENT_H 17 #define ES2PANDA_IR_STATEMENT_H_DO_WHILE_STATEMENT_H 18 19 #include "ir/statements/loopStatement.h" 20 21 namespace panda::es2panda::varbinder { 22 class LoopScope; 23 } // namespace panda::es2panda::varbinder 24 25 namespace panda::es2panda::ir { 26 class Expression; 27 28 class DoWhileStatement : public LoopStatement { 29 public: DoWhileStatement(Statement * body,Expression * test)30 explicit DoWhileStatement(Statement *body, Expression *test) 31 : LoopStatement(AstNodeType::DO_WHILE_STATEMENT), body_(body), test_(test) 32 { 33 } 34 Body()35 const Statement *Body() const 36 { 37 return body_; 38 } 39 Body()40 Statement *Body() 41 { 42 return body_; 43 } 44 Test()45 const Expression *Test() const 46 { 47 return test_; 48 } 49 Test()50 Expression *Test() 51 { 52 return test_; 53 } 54 55 void TransformChildren(const NodeTransformer &cb) override; SetReturnType(checker::ETSChecker * checker,checker::Type * type)56 void SetReturnType(checker::ETSChecker *checker, checker::Type *type) override 57 { 58 if (body_ != nullptr) { 59 body_->SetReturnType(checker, type); 60 } 61 } 62 63 void Iterate(const NodeTraverser &cb) const override; 64 void Dump(ir::AstDumper *dumper) const override; 65 void Dump(ir::SrcDumper *dumper) const override; 66 void Compile(compiler::PandaGen *pg) const override; 67 void Compile(compiler::ETSGen *etsg) const override; 68 checker::Type *Check(checker::TSChecker *checker) override; 69 checker::Type *Check(checker::ETSChecker *checker) override; 70 Accept(ASTVisitorT * v)71 void Accept(ASTVisitorT *v) override 72 { 73 v->Accept(this); 74 } 75 76 private: 77 Statement *body_; 78 Expression *test_; 79 }; 80 } // namespace panda::es2panda::ir 81 82 #endif 83