aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/rust-ast-lower-block.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/hir/rust-ast-lower-block.h')
-rw-r--r--gcc/rust/hir/rust-ast-lower-block.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-block.h b/gcc/rust/hir/rust-ast-lower-block.h
index 512f4709..5c328b5 100644
--- a/gcc/rust/hir/rust-ast-lower-block.h
+++ b/gcc/rust/hir/rust-ast-lower-block.h
@@ -120,6 +120,35 @@ private:
bool terminated;
};
+class ASTLoweringIfLetBlock : public ASTLoweringBase
+{
+ using Rust::HIR::ASTLoweringBase::visit;
+
+public:
+ static HIR::IfLetExpr *translate (AST::IfLetExpr *expr)
+ {
+ ASTLoweringIfLetBlock resolver;
+ expr->accept_vis (resolver);
+ if (resolver.translated != nullptr)
+ {
+ resolver.mappings->insert_hir_expr (
+ resolver.translated->get_mappings ().get_crate_num (),
+ resolver.translated->get_mappings ().get_hirid (),
+ resolver.translated);
+ }
+ return resolver.translated;
+ }
+
+ ~ASTLoweringIfLetBlock () {}
+
+ void visit (AST::IfLetExpr &expr) override;
+
+private:
+ ASTLoweringIfLetBlock () : ASTLoweringBase (), translated (nullptr) {}
+
+ HIR::IfLetExpr *translated;
+};
+
class ASTLoweringExprWithBlock : public ASTLoweringBase
{
using Rust::HIR::ASTLoweringBase::visit;
@@ -159,6 +188,11 @@ public:
translated = ASTLoweringIfBlock::translate (&expr, &terminated);
}
+ void visit (AST::IfLetExpr &expr) override
+ {
+ translated = ASTLoweringIfLetBlock::translate (&expr);
+ }
+
void visit (AST::BlockExpr &expr) override
{
translated = ASTLoweringBlock::translate (&expr, &terminated);