diff options
author | SimplyTheOther <simplytheother@gmail.com> | 2021-01-10 14:30:39 +0800 |
---|---|---|
committer | SimplyTheOther <simplytheother@gmail.com> | 2021-01-10 14:30:39 +0800 |
commit | b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52 (patch) | |
tree | 3a4d3a0b0569d28f679ecbc74928125034d50f4f /gcc/rust/hir/rust-ast-lower-block.h | |
parent | ee85db852a5a819e559ab00e7a382a34e925447a (diff) | |
parent | 0f42a240e53e932de0ae4799d54fe0bd15d06047 (diff) | |
download | gcc-b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52.zip gcc-b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52.tar.gz gcc-b247c0d5aadf6eb7323641ffbcf7cc67bedd2c52.tar.bz2 |
Merge branch 'master' of https://github.com/redbrain/gccrs
Diffstat (limited to 'gcc/rust/hir/rust-ast-lower-block.h')
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-block.h | 37 |
1 files changed, 27 insertions, 10 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-block.h b/gcc/rust/hir/rust-ast-lower-block.h index 11f1ab8..f81a242 100644 --- a/gcc/rust/hir/rust-ast-lower-block.h +++ b/gcc/rust/hir/rust-ast-lower-block.h @@ -28,7 +28,7 @@ namespace HIR { class ASTLoweringBlock : public ASTLoweringBase { public: - static HIR::BlockExpr *translate (AST::BlockExpr *expr) + static HIR::BlockExpr *translate (AST::BlockExpr *expr, bool *terminated) { ASTLoweringBlock resolver; expr->accept_vis (resolver); @@ -40,6 +40,7 @@ public: resolver.translated); } + *terminated = resolver.terminated; return resolver.translated; } @@ -48,15 +49,18 @@ public: void visit (AST::BlockExpr &expr); private: - ASTLoweringBlock () : ASTLoweringBase (), translated (nullptr) {} + ASTLoweringBlock () + : ASTLoweringBase (), translated (nullptr), terminated (false) + {} HIR::BlockExpr *translated; + bool terminated; }; class ASTLoweringIfBlock : public ASTLoweringBase { public: - static HIR::IfExpr *translate (AST::IfExpr *expr) + static HIR::IfExpr *translate (AST::IfExpr *expr, bool *terminated) { ASTLoweringIfBlock resolver; expr->accept_vis (resolver); @@ -67,7 +71,7 @@ public: resolver.translated->get_mappings ().get_hirid (), resolver.translated); } - + *terminated = resolver.terminated; return resolver.translated; } @@ -80,15 +84,19 @@ public: void visit (AST::IfExprConseqIf &expr); private: - ASTLoweringIfBlock () : ASTLoweringBase (), translated (nullptr) {} + ASTLoweringIfBlock () + : ASTLoweringBase (), translated (nullptr), terminated (false) + {} HIR::IfExpr *translated; + bool terminated; }; class ASTLoweringExprWithBlock : public ASTLoweringBase { public: - static HIR::ExprWithBlock *translate (AST::ExprWithBlock *expr) + static HIR::ExprWithBlock *translate (AST::ExprWithBlock *expr, + bool *terminated) { ASTLoweringExprWithBlock resolver; expr->accept_vis (resolver); @@ -100,6 +108,7 @@ public: resolver.translated); } + *terminated = resolver.terminated; return resolver.translated; } @@ -107,23 +116,31 @@ public: void visit (AST::IfExpr &expr) { - translated = ASTLoweringIfBlock::translate (&expr); + translated = ASTLoweringIfBlock::translate (&expr, &terminated); } void visit (AST::IfExprConseqElse &expr) { - translated = ASTLoweringIfBlock::translate (&expr); + translated = ASTLoweringIfBlock::translate (&expr, &terminated); } void visit (AST::IfExprConseqIf &expr) { - translated = ASTLoweringIfBlock::translate (&expr); + translated = ASTLoweringIfBlock::translate (&expr, &terminated); + } + + void visit (AST::BlockExpr &expr) + { + translated = ASTLoweringBlock::translate (&expr, &terminated); } private: - ASTLoweringExprWithBlock () : ASTLoweringBase (), translated (nullptr) {} + ASTLoweringExprWithBlock () + : ASTLoweringBase (), translated (nullptr), terminated (false) + {} HIR::ExprWithBlock *translated; + bool terminated; }; } // namespace HIR |