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_VARIABLE_DECLARATOR_H 17 #define ES2PANDA_IR_STATEMENT_VARIABLE_DECLARATOR_H 18 19 #include <ir/expression.h> 20 #include <ir/statement.h> 21 22 namespace panda::es2panda::compiler { 23 class PandaGen; 24 } // namespace panda::es2panda::compiler 25 26 namespace panda::es2panda::checker { 27 class Checker; 28 class Type; 29 } // namespace panda::es2panda::checker 30 31 namespace panda::es2panda::ir { 32 33 class Expression; 34 35 class VariableDeclarator : public Statement { 36 public: VariableDeclarator(Expression * ident)37 explicit VariableDeclarator(Expression *ident) 38 : Statement(AstNodeType::VARIABLE_DECLARATOR), id_(ident), init_(nullptr) 39 { 40 } 41 VariableDeclarator(Expression * ident,Expression * init)42 explicit VariableDeclarator(Expression *ident, Expression *init) 43 : Statement(AstNodeType::VARIABLE_DECLARATOR), id_(ident), init_(init) 44 { 45 } 46 Init()47 Expression *Init() 48 { 49 return init_; 50 } 51 Init()52 const Expression *Init() const 53 { 54 return init_; 55 } 56 Id()57 Expression *Id() 58 { 59 return id_; 60 } 61 Id()62 const Expression *Id() const 63 { 64 return id_; 65 } 66 Definite()67 bool Definite() const 68 { 69 return definite_; 70 } 71 SetDefinite(bool definite)72 void SetDefinite(bool definite) 73 { 74 definite_ = definite; 75 } 76 77 void Iterate(const NodeTraverser &cb) const override; 78 void Dump(ir::AstDumper *dumper) const override; 79 void Compile(compiler::PandaGen *pg) const override; 80 checker::Type *Check(checker::Checker *checker) const override; 81 void UpdateSelf(const NodeUpdater &cb, [[maybe_unused]] binder::Binder *binder) override; 82 83 private: 84 Expression *id_; 85 Expression *init_; 86 // TODO(xucheng): don't use now, it will be used in type checker later 87 bool definite_; 88 }; 89 90 } // namespace panda::es2panda::ir 91 92 #endif 93