aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/rust-ast-lower-block.h
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-07-20 20:06:14 +0100
committerPhilip Herron <philip.herron@embecosm.com>2021-07-20 20:06:14 +0100
commit857953b3c70a170955afb181018b0231a16a63df (patch)
tree63ca1463f6aecb90ec27a1a32adf22ecddde799a /gcc/rust/hir/rust-ast-lower-block.h
parent02713d245aaffd45d8daaf8c914b1dda5baa6eb4 (diff)
downloadgcc-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.h31
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