aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir/tree/rust-hir-expr.h
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-03-18 01:41:01 -0400
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:34:08 +0100
commit197962cb062edb41538af9f5e9b4c02f090c4ba8 (patch)
tree536c925e94418bf49faf12e7518d2acd0f7048f5 /gcc/rust/hir/tree/rust-hir-expr.h
parent694063d84e47f57c99d4558e789932c31a7bf6dd (diff)
downloadgcc-197962cb062edb41538af9f5e9b4c02f090c4ba8.zip
gcc-197962cb062edb41538af9f5e9b4c02f090c4ba8.tar.gz
gcc-197962cb062edb41538af9f5e9b4c02f090c4ba8.tar.bz2
gccrs: Add lowering for if-let expressions
gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Add implementation for IfLetExprConseqElse. * typecheck/rust-hir-type-check-expr.h: (TypeCheckExpr::visit): Remove stub implementation for IfLetExprConseqElse. * hir/rust-ast-lower-expr.cc (ASTLoweringExpr::visit): Lower IfLetExpr{,ConseqElse}. * hir/rust-ast-lower-expr.h: (ASTLoweringExpr::visit): Likewise. * hir/rust-ast-lower-block.h (ASTLoweringIfLetBlock::visit): Lower IfLetExprConseqElse. (ASTLoweringExprWithBlock::visit): Likewise. * hir/rust-ast-lower.cc (ASTLoweringIfLetBlock::visit): Lower IfLetExprConseqElse. * hir/tree/rust-hir-expr.h (IfLetExprConseqElse::IfLetExprConseqElse): Make constructor more general. (IfLetExprConseqElse::vis_else_block): Add. (IfLetExprConseqElse::get_else_block): Add. * resolve/rust-ast-resolve-expr.cc (ResolveExpr::visit): Add IfLetExprConseqElse visitor. * resolve/rust-ast-resolve-expr.h (ResolveExpr::visit): Add IfLetExprConseqElse visitor. gcc/testsuite/ChangeLog: * rust/compile/if_let_expr.rs: Increase test coverage. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc/rust/hir/tree/rust-hir-expr.h')
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index 3c9db9f..47b9897 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -3457,7 +3457,7 @@ public:
Analysis::NodeMapping mappings,
std::vector<std::unique_ptr<Pattern> > match_arm_patterns,
std::unique_ptr<Expr> value, std::unique_ptr<BlockExpr> if_block,
- std::unique_ptr<BlockExpr> else_block, Location locus)
+ std::unique_ptr<ExprWithBlock> else_block, Location locus)
: IfLetExpr (std::move (mappings), std::move (match_arm_patterns),
std::move (value), std::move (if_block), locus),
else_block (std::move (else_block))
@@ -3489,6 +3489,10 @@ public:
void accept_vis (HIRFullVisitor &vis) override;
void accept_vis (HIRExpressionVisitor &vis) override;
+ void vis_else_block (HIRFullVisitor &vis) { else_block->accept_vis (vis); }
+
+ ExprWithBlock *get_else_block () { return else_block.get (); }
+
protected:
/* Use covariance to implement clone function as returning this object rather
* than base */