Add hir lowering to ForLoopExpr this will eventually all become a simple HIR::LoopExpr

This commit is contained in:
Philip Herron
2022-06-01 10:53:37 +01:00
parent f6589ca957
commit 92f9eb46ec
3 changed files with 33 additions and 0 deletions

View File

@@ -225,6 +225,8 @@ public:
void visit (AST::WhileLoopExpr &expr) override;
void visit (AST::ForLoopExpr &expr) override;
void visit (AST::MatchExpr &expr) override;
private:

View File

@@ -579,6 +579,11 @@ public:
translated = ASTLoweringExprWithBlock::translate (&expr, &terminated);
}
void visit (AST::ForLoopExpr &expr) override
{
translated = ASTLoweringExprWithBlock::translate (&expr, &terminated);
}
void visit (AST::BreakExpr &expr) override
{
HIR::Lifetime break_label = lower_lifetime (expr.get_label ());

View File

@@ -323,6 +323,32 @@ ASTLoweringExprWithBlock::visit (AST::WhileLoopExpr &expr)
expr.get_outer_attrs ());
}
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)
{