aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/rust-ast-lower.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/hir/rust-ast-lower.cc')
-rw-r--r--gcc/rust/hir/rust-ast-lower.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index d8a0488..b3b0ee8 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -324,6 +324,32 @@ ASTLoweringExprWithBlock::visit (AST::WhileLoopExpr &expr)
}
void
+ASTLoweringExprWithBlock::visit (AST::ForLoopExpr &expr)
+{
+ HIR::BlockExpr *loop_block
+ = ASTLoweringBlock::translate (expr.get_loop_block ().get (), &terminated);
+ HIR::LoopLabel loop_label = lower_loop_label (expr.get_loop_label ());
+ HIR::Expr *iterator_expr
+ = ASTLoweringExpr::translate (expr.get_iterator_expr ().get (),
+ &terminated);
+ HIR::Pattern *loop_pattern
+ = ASTLoweringPattern::translate (expr.get_pattern ().get ());
+
+ auto crate_num = mappings->get_current_crate ();
+ Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
+ mappings->get_next_hir_id (crate_num),
+ UNKNOWN_LOCAL_DEFID);
+
+ translated
+ = new HIR::ForLoopExpr (mapping,
+ std::unique_ptr<HIR::Pattern> (loop_pattern),
+ std::unique_ptr<HIR::Expr> (iterator_expr),
+ std::unique_ptr<HIR::BlockExpr> (loop_block),
+ expr.get_locus (), std::move (loop_label),
+ expr.get_outer_attrs ());
+}
+
+void
ASTLoweringExprWithBlock::visit (AST::MatchExpr &expr)
{
HIR::Expr *branch_value