diff options
Diffstat (limited to 'gcc/rust/hir/rust-ast-lower-block.h')
-rw-r--r-- | gcc/rust/hir/rust-ast-lower-block.h | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-block.h b/gcc/rust/hir/rust-ast-lower-block.h index b29bd14..36b3e68 100644 --- a/gcc/rust/hir/rust-ast-lower-block.h +++ b/gcc/rust/hir/rust-ast-lower-block.h @@ -46,7 +46,31 @@ public: return resolver.translated; } - ~ASTLoweringBlock () {} + static HIR::UnsafeBlockExpr *translate (AST::UnsafeBlockExpr *expr, + bool *terminated) + { + ASTLoweringBlock resolver; + + HIR::BlockExpr *block + = ASTLoweringBlock::translate (expr->get_block_expr ().get (), + terminated); + auto crate_num = resolver.mappings->get_current_crate (); + Analysis::NodeMapping mapping (crate_num, expr->get_node_id (), + resolver.mappings->get_next_hir_id ( + crate_num), + UNKNOWN_LOCAL_DEFID); + + HIR::UnsafeBlockExpr *translated + = new HIR::UnsafeBlockExpr (mapping, + std::unique_ptr<HIR::BlockExpr> (block), + expr->get_outer_attrs (), expr->get_locus ()); + + resolver.mappings->insert_hir_expr ( + translated->get_mappings ().get_crate_num (), + translated->get_mappings ().get_hirid (), translated); + + return translated; + } void visit (AST::BlockExpr &expr) override; @@ -140,6 +164,11 @@ public: translated = ASTLoweringBlock::translate (&expr, &terminated); } + void visit (AST::UnsafeBlockExpr &expr) override + { + translated = ASTLoweringBlock::translate (&expr, &terminated); + } + void visit (AST::LoopExpr &expr) override { HIR::BlockExpr *loop_block |