From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id E7A173810ACC; Wed, 8 Jun 2022 12:51:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E7A173810ACC Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Add hir lowering to ForLoopExpr this will eventually all become a simple HIR::LoopExpr X-Act-Checkin: gcc X-Git-Author: Philip Herron X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: f6589ca957b2a1d0bea6c43dd60e37b06cb04ab3 X-Git-Newrev: 92f9eb46ec0ef70c808db613da4312af09f736df Message-Id: <20220608125140.E7A173810ACC@sourceware.org> Date: Wed, 8 Jun 2022 12:51:40 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2022 12:51:41 -0000 https://gcc.gnu.org/g:92f9eb46ec0ef70c808db613da4312af09f736df commit 92f9eb46ec0ef70c808db613da4312af09f736df Author: Philip Herron Date: Wed Jun 1 10:53:37 2022 +0100 Add hir lowering to ForLoopExpr this will eventually all become a simple HIR::LoopExpr Diff: --- gcc/rust/hir/rust-ast-lower-block.h | 2 ++ gcc/rust/hir/rust-ast-lower-expr.h | 5 +++++ gcc/rust/hir/rust-ast-lower.cc | 26 ++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/gcc/rust/hir/rust-ast-lower-block.h b/gcc/rust/hir/rust-ast-lower-block.h index 5c328b53446..b8f71750950 100644 --- a/gcc/rust/hir/rust-ast-lower-block.h +++ b/gcc/rust/hir/rust-ast-lower-block.h @@ -225,6 +225,8 @@ public: void visit (AST::WhileLoopExpr &expr) override; + void visit (AST::ForLoopExpr &expr) override; + void visit (AST::MatchExpr &expr) override; private: diff --git a/gcc/rust/hir/rust-ast-lower-expr.h b/gcc/rust/hir/rust-ast-lower-expr.h index 5ae538621aa..a3f8d6e24a0 100644 --- a/gcc/rust/hir/rust-ast-lower-expr.h +++ b/gcc/rust/hir/rust-ast-lower-expr.h @@ -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 ()); diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc index d8a04883232..b3b0ee8c465 100644 --- a/gcc/rust/hir/rust-ast-lower.cc +++ b/gcc/rust/hir/rust-ast-lower.cc @@ -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 (loop_pattern), + std::unique_ptr (iterator_expr), + std::unique_ptr (loop_block), + expr.get_locus (), std::move (loop_label), + expr.get_outer_attrs ()); +} + void ASTLoweringExprWithBlock::visit (AST::MatchExpr &expr) {