aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/rust-ast-lower-block.h
diff options
context:
space:
mode:
authorSimplyTheOther <simplytheother@gmail.com>2021-01-10 14:30:39 +0800
committerSimplyTheOther <simplytheother@gmail.com>2021-01-10 14:30:39 +0800
commitb247c0d5aadf6eb7323641ffbcf7cc67bedd2c52 (patch)
tree3a4d3a0b0569d28f679ecbc74928125034d50f4f /gcc/rust/hir/rust-ast-lower-block.h
parentee85db852a5a819e559ab00e7a382a34e925447a (diff)
parent0f42a240e53e932de0ae4799d54fe0bd15d06047 (diff)
downloadgcc-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.h37
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