diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2023-03-15 16:35:47 -0400 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2023-03-17 16:31:54 +0000 |
commit | 3d4b1871910e4d7b4ef171f3fdeab5ec0e78a167 (patch) | |
tree | 8f81adecf100bc4f6a4b9e5091c943b907eea0f1 /gcc/rust/backend | |
parent | dd4038083ef08ce8e8456261389d4b26f5dd7ace (diff) | |
download | gcc-3d4b1871910e4d7b4ef171f3fdeab5ec0e78a167.zip gcc-3d4b1871910e4d7b4ef171f3fdeab5ec0e78a167.tar.gz gcc-3d4b1871910e4d7b4ef171f3fdeab5ec0e78a167.tar.bz2 |
Unify HIR::IfExprConseqIf{,Let} into HIR::IfExprConseqElse
This should simplify 'if' expression handling to match
future simplifications to 'if let' expression handling.
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc
(TypeCheckExpr::visit): Remove IfExprConseqIf visitor.
* typecheck/rust-hir-type-check-expr.h
(TypeCheckExpr::visit): Remove IfExprConseqIf{,Let} visitor.
* backend/rust-compile-block.cc
(CompileConditionalBlocks::visit): Remove IfExprConseqIf visitor.
* backend/rust-compile-block.h
(CompileConditionalBlocks::visit): Remove IfExprConseqIf{,Let} visitors.
(CompileExprWithBlock::visit):
Remove IfExprConseqIf{,Let} visitors, implement BlockExpr visitor.
* backend/rust-compile-expr.cc
(CompileExpr::visit): Remove IfExprConseqIf visitor.
* backend/rust-compile-expr.h
(CompileExpr::visit): Remove IfExprConseqIf{,Let} visitors.
* checks/lints/rust-lint-marklive.h
(MarkLive::visit): Remove IfExprConseqIf visitor.
* checks/errors/rust-const-checker.cc
(ConstChecker::visit): Remove IfExprConseqIf{,Let} visitors.
* checks/errors/rust-const-checker.h
(ConstChecker::visit): Remove IfExprConseqIf{,Let} visitors.
* checks/errors/rust-unsafe-checker.cc
(UnsafeChecker::visit): Remove IfExprConseqIf{,Let} visitors.
* checks/errors/rust-unsafe-checker.h
(UnsafeChecker::visit): Remove IfExprConseqIf{,Let} visitors.
* checks/errors/privacy/rust-privacy-reporter.cc
(PrivacyReporter::visit): Remove IfExprConseqIf{,Let} visitors.
* checks/errors/privacy/rust-privacy-reporter.h
(PrivacyReporter::visit): Remove IfExprConseqIf{,Let} visitors.
* hir/tree/rust-hir-expr.h
(class IfExprConseqElse): Make else_block ExprWithBlock.
(class IfExprConseqIf): Remove.
(class IfExprConseqIfLet): Remove.
* hir/tree/rust-hir-full-decls.h
(class IfExprConseqIf): Remove.
(class IfExprConseqIfLet): Remove.
* hir/tree/rust-hir.cc
(IfExprConseqElse::as_string): Adjust output.
(IfExprConseqIf::as_string): Remove.
(IfExprConseqIfLet::as_string): Remove.
(IfExprConseqIf::accept_vis): Remove.
(IfExprConseqIfLet::accept_vis): Remove.
* hir/tree/rust-hir-visitor.h
(HIRFullVisitor::visit): Remove IfExprConseqIf{,Let} visitors.
(HIRFullVisitorBase::visit): Remove IfExprConseqIf{,Let} visitors.
(HIRExpressionVisitor::visit): Remove IfExprConseqIf{,Let} visitors.
* hir/rust-hir-dump.cc
(Dump::visit): Remove IfExprConseqIf{,Let} visitors.
* hir/rust-hir-dump.h
(Dump::visit): Remove IfExprConseqIf{,Let} visitors.
* hir/rust-ast-lower.cc
(ASTLoweringIfBlock::visit): Replace HIR::IfExprConseqIf with HIR::IfExprConseqElse.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc/rust/backend')
-rw-r--r-- | gcc/rust/backend/rust-compile-block.cc | 22 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-block.h | 8 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-expr.cc | 37 | ||||
-rw-r--r-- | gcc/rust/backend/rust-compile-expr.h | 2 |
4 files changed, 6 insertions, 63 deletions
diff --git a/gcc/rust/backend/rust-compile-block.cc b/gcc/rust/backend/rust-compile-block.cc index 83f2a37..74b6f9a 100644 --- a/gcc/rust/backend/rust-compile-block.cc +++ b/gcc/rust/backend/rust-compile-block.cc @@ -118,33 +118,19 @@ CompileConditionalBlocks::visit (HIR::IfExprConseqElse &expr) tree fndecl = fnctx.fndecl; tree condition_expr = CompileExpr::Compile (expr.get_if_condition (), ctx); tree then_block = CompileBlock::compile (expr.get_if_block (), ctx, result); - tree else_block = CompileBlock::compile (expr.get_else_block (), ctx, result); - - translated - = ctx->get_backend ()->if_statement (fndecl, condition_expr, then_block, - else_block, expr.get_locus ()); -} - -void -CompileConditionalBlocks::visit (HIR::IfExprConseqIf &expr) -{ - fncontext fnctx = ctx->peek_fn (); - tree fndecl = fnctx.fndecl; - tree condition_expr = CompileExpr::Compile (expr.get_if_condition (), ctx); - tree then_block = CompileBlock::compile (expr.get_if_block (), ctx, result); // else block std::vector<Bvariable *> locals; - Location start_location = expr.get_conseq_if_expr ()->get_locus (); - Location end_location = expr.get_conseq_if_expr ()->get_locus (); // FIXME + Location start_location = expr.get_else_block ()->get_locus (); + Location end_location = expr.get_else_block ()->get_locus (); // FIXME tree enclosing_scope = ctx->peek_enclosing_scope (); tree else_block = ctx->get_backend ()->block (fndecl, enclosing_scope, locals, start_location, end_location); ctx->push_block (else_block); tree else_stmt_decl - = CompileConditionalBlocks::compile (expr.get_conseq_if_expr (), ctx, - result); + = CompileExprWithBlock::compile (expr.get_else_block (), ctx, result); + ctx->add_statement (else_stmt_decl); ctx->pop_block (); diff --git a/gcc/rust/backend/rust-compile-block.h b/gcc/rust/backend/rust-compile-block.h index 0ccf81f..666eb09 100644 --- a/gcc/rust/backend/rust-compile-block.h +++ b/gcc/rust/backend/rust-compile-block.h @@ -52,7 +52,6 @@ public: void visit (HIR::IfExpr &expr) override; void visit (HIR::IfExprConseqElse &expr) override; - void visit (HIR::IfExprConseqIf &expr) override; // Empty visit for unused Expression HIR nodes. void visit (HIR::PathInExpression &) override {} @@ -97,7 +96,6 @@ public: void visit (HIR::WhileLoopExpr &) override {} void visit (HIR::WhileLetLoopExpr &) override {} void visit (HIR::ForLoopExpr &) override {} - void visit (HIR::IfExprConseqIfLet &) override {} void visit (HIR::IfLetExpr &) override {} void visit (HIR::IfLetExprConseqElse &) override {} void visit (HIR::IfLetExprConseqIf &) override {} @@ -137,9 +135,9 @@ public: translated = CompileConditionalBlocks::compile (&expr, ctx, result); } - void visit (HIR::IfExprConseqIf &expr) override + void visit (HIR::BlockExpr &expr) override { - translated = CompileConditionalBlocks::compile (&expr, ctx, result); + translated = CompileBlock::compile (&expr, ctx, result); } // Empty visit for unused Expression HIR nodes. @@ -170,7 +168,6 @@ public: void visit (HIR::CallExpr &) override {} void visit (HIR::MethodCallExpr &) override {} void visit (HIR::FieldAccessExpr &) override {} - void visit (HIR::BlockExpr &) override {} void visit (HIR::ContinueExpr &) override {} void visit (HIR::BreakExpr &) override {} void visit (HIR::RangeFromToExpr &) override {} @@ -185,7 +182,6 @@ public: void visit (HIR::WhileLoopExpr &) override {} void visit (HIR::WhileLetLoopExpr &) override {} void visit (HIR::ForLoopExpr &) override {} - void visit (HIR::IfExprConseqIfLet &) override {} void visit (HIR::IfLetExpr &) override {} void visit (HIR::IfLetExprConseqElse &) override {} void visit (HIR::IfLetExprConseqIf &) override {} diff --git a/gcc/rust/backend/rust-compile-expr.cc b/gcc/rust/backend/rust-compile-expr.cc index cf6802e..6a7b2eb 100644 --- a/gcc/rust/backend/rust-compile-expr.cc +++ b/gcc/rust/backend/rust-compile-expr.cc @@ -345,43 +345,6 @@ CompileExpr::visit (HIR::IfExprConseqElse &expr) } void -CompileExpr::visit (HIR::IfExprConseqIf &expr) -{ - TyTy::BaseType *if_type = nullptr; - if (!ctx->get_tyctx ()->lookup_type (expr.get_mappings ().get_hirid (), - &if_type)) - { - rust_error_at (expr.get_locus (), - "failed to lookup type of IfExprConseqElse"); - return; - } - - Bvariable *tmp = NULL; - bool needs_temp = !if_type->is_unit (); - if (needs_temp) - { - fncontext fnctx = ctx->peek_fn (); - tree enclosing_scope = ctx->peek_enclosing_scope (); - tree block_type = TyTyResolveCompile::compile (ctx, if_type); - - bool is_address_taken = false; - tree ret_var_stmt = nullptr; - tmp = ctx->get_backend ()->temporary_variable ( - fnctx.fndecl, enclosing_scope, block_type, NULL, is_address_taken, - expr.get_locus (), &ret_var_stmt); - ctx->add_statement (ret_var_stmt); - } - - auto stmt = CompileConditionalBlocks::compile (&expr, ctx, tmp); - ctx->add_statement (stmt); - - if (tmp != NULL) - { - translated = ctx->get_backend ()->var_expression (tmp, expr.get_locus ()); - } -} - -void CompileExpr::visit (HIR::BlockExpr &expr) { TyTy::BaseType *block_tyty = nullptr; diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h index 150a7a4..d23d1d1 100644 --- a/gcc/rust/backend/rust-compile-expr.h +++ b/gcc/rust/backend/rust-compile-expr.h @@ -45,7 +45,6 @@ public: void visit (HIR::NegationExpr &expr) override; void visit (HIR::TypeCastExpr &expr) override; void visit (HIR::IfExpr &expr) override; - void visit (HIR::IfExprConseqIf &expr) override; void visit (HIR::IfExprConseqElse &expr) override; void visit (HIR::BlockExpr &expr) override; void visit (HIR::UnsafeBlockExpr &expr) override; @@ -77,7 +76,6 @@ public: // TODO // these need to be sugared in the HIR to if statements and a match void visit (HIR::WhileLetLoopExpr &) override {} - void visit (HIR::IfExprConseqIfLet &) override {} void visit (HIR::IfLetExpr &) override {} void visit (HIR::IfLetExprConseqElse &) override {} void visit (HIR::IfLetExprConseqIf &) override {} |