diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-07-20 20:06:14 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-07-20 20:06:14 +0100 |
commit | 857953b3c70a170955afb181018b0231a16a63df (patch) | |
tree | 63ca1463f6aecb90ec27a1a32adf22ecddde799a /gcc/rust/hir/rust-ast-lower-block.h | |
parent | 02713d245aaffd45d8daaf8c914b1dda5baa6eb4 (diff) | |
download | gcc-857953b3c70a170955afb181018b0231a16a63df.zip gcc-857953b3c70a170955afb181018b0231a16a63df.tar.gz gcc-857953b3c70a170955afb181018b0231a16a63df.tar.bz2 |
HIR and GENERIC lowering for unsafe blocks
This does not implement the rules for unsafe this wires up the code so we
can compile unsafe blocks. No checks are being performed on the code yet.
Fixes #382
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 |