diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2023-03-18 01:41:01 -0400 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:34:08 +0100 |
commit | 197962cb062edb41538af9f5e9b4c02f090c4ba8 (patch) | |
tree | 536c925e94418bf49faf12e7518d2acd0f7048f5 /gcc/rust/hir/tree/rust-hir-expr.h | |
parent | 694063d84e47f57c99d4558e789932c31a7bf6dd (diff) | |
download | gcc-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.h | 6 |
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 */ |