mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 20:01:22 -05:00
Add hir lowering to ForLoopExpr this will eventually all become a simple HIR::LoopExpr
This commit is contained in:
@@ -225,6 +225,8 @@ public:
|
||||
|
||||
void visit (AST::WhileLoopExpr &expr) override;
|
||||
|
||||
void visit (AST::ForLoopExpr &expr) override;
|
||||
|
||||
void visit (AST::MatchExpr &expr) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -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 ());
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user