From 265d8555fe3ad38755e64a6b9880521c7f3a3cc7 Mon Sep 17 00:00:00 2001 From: Owen Avery Date: Wed, 15 Mar 2023 16:35:47 -0400 Subject: [PATCH] gccrs: 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 --- gcc/rust/backend/rust-compile-block.cc | 22 +-- gcc/rust/backend/rust-compile-block.h | 8 +- gcc/rust/backend/rust-compile-expr.cc | 37 ----- gcc/rust/backend/rust-compile-expr.h | 2 - .../errors/privacy/rust-privacy-reporter.cc | 17 -- .../errors/privacy/rust-privacy-reporter.h | 2 - gcc/rust/checks/errors/rust-const-checker.cc | 17 -- gcc/rust/checks/errors/rust-const-checker.h | 2 - gcc/rust/checks/errors/rust-unsafe-checker.cc | 17 -- gcc/rust/checks/errors/rust-unsafe-checker.h | 2 - gcc/rust/checks/lints/rust-lint-marklive.h | 7 - gcc/rust/hir/rust-ast-lower.cc | 9 +- gcc/rust/hir/rust-hir-dump.cc | 6 - gcc/rust/hir/rust-hir-dump.h | 2 - gcc/rust/hir/tree/rust-hir-expr.h | 146 +----------------- gcc/rust/hir/tree/rust-hir-full-decls.h | 2 - gcc/rust/hir/tree/rust-hir-visitor.h | 6 - gcc/rust/hir/tree/rust-hir.cc | 46 +----- .../typecheck/rust-hir-type-check-expr.cc | 23 --- gcc/rust/typecheck/rust-hir-type-check-expr.h | 2 - 20 files changed, 16 insertions(+), 359 deletions(-) diff --git a/gcc/rust/backend/rust-compile-block.cc b/gcc/rust/backend/rust-compile-block.cc index 3942571ae7de..470ece21853f 100644 --- a/gcc/rust/backend/rust-compile-block.cc +++ b/gcc/rust/backend/rust-compile-block.cc @@ -113,20 +113,6 @@ CompileConditionalBlocks::visit (HIR::IfExpr &expr) void CompileConditionalBlocks::visit (HIR::IfExprConseqElse &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); - 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; @@ -135,16 +121,16 @@ CompileConditionalBlocks::visit (HIR::IfExprConseqIf &expr) // else block std::vector 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 8c23d027b534..4f293af80980 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 e138e41e5593..962135bad49e 100644 --- a/gcc/rust/backend/rust-compile-expr.cc +++ b/gcc/rust/backend/rust-compile-expr.cc @@ -344,43 +344,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) { diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h index 8bac0bcaea0d..363dc4962c0d 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 {} diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc index 1ea9fa634154..41d4d3a6fcb0 100644 --- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc +++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc @@ -546,23 +546,6 @@ PrivacyReporter::visit (HIR::IfExprConseqElse &expr) expr.get_else_block ()->accept_vis (*this); } -void -PrivacyReporter::visit (HIR::IfExprConseqIf &expr) -{ - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - expr.get_conseq_if_expr ()->accept_vis (*this); -} - -void -PrivacyReporter::visit (HIR::IfExprConseqIfLet &expr) -{ - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - - // TODO: We need to visit the if_let_expr as well -} - void PrivacyReporter::visit (HIR::IfLetExpr &) { diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h index 7ebd0a85ac70..8843bf5acdf5 100644 --- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h +++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h @@ -122,8 +122,6 @@ types virtual void visit (HIR::ForLoopExpr &expr); virtual void visit (HIR::IfExpr &expr); virtual void visit (HIR::IfExprConseqElse &expr); - virtual void visit (HIR::IfExprConseqIf &expr); - virtual void visit (HIR::IfExprConseqIfLet &expr); virtual void visit (HIR::IfLetExpr &expr); virtual void visit (HIR::IfLetExprConseqElse &expr); virtual void visit (HIR::IfLetExprConseqIf &expr); diff --git a/gcc/rust/checks/errors/rust-const-checker.cc b/gcc/rust/checks/errors/rust-const-checker.cc index 99f092e837b7..c05101961205 100644 --- a/gcc/rust/checks/errors/rust-const-checker.cc +++ b/gcc/rust/checks/errors/rust-const-checker.cc @@ -499,23 +499,6 @@ ConstChecker::visit (IfExprConseqElse &expr) expr.get_else_block ()->accept_vis (*this); } -void -ConstChecker::visit (IfExprConseqIf &expr) -{ - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - expr.get_conseq_if_expr ()->accept_vis (*this); -} - -void -ConstChecker::visit (IfExprConseqIfLet &expr) -{ - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - - // TODO: Visit conseq if let expression -} - void ConstChecker::visit (IfLetExpr &expr) { diff --git a/gcc/rust/checks/errors/rust-const-checker.h b/gcc/rust/checks/errors/rust-const-checker.h index 8d60b3093805..1ad494423f61 100644 --- a/gcc/rust/checks/errors/rust-const-checker.h +++ b/gcc/rust/checks/errors/rust-const-checker.h @@ -129,8 +129,6 @@ private: virtual void visit (ForLoopExpr &expr) override; virtual void visit (IfExpr &expr) override; virtual void visit (IfExprConseqElse &expr) override; - virtual void visit (IfExprConseqIf &expr) override; - virtual void visit (IfExprConseqIfLet &expr) override; virtual void visit (IfLetExpr &expr) override; virtual void visit (IfLetExprConseqElse &expr) override; virtual void visit (IfLetExprConseqIf &expr) override; diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.cc b/gcc/rust/checks/errors/rust-unsafe-checker.cc index bf416485a637..558b8ee9d6d8 100644 --- a/gcc/rust/checks/errors/rust-unsafe-checker.cc +++ b/gcc/rust/checks/errors/rust-unsafe-checker.cc @@ -601,23 +601,6 @@ UnsafeChecker::visit (IfExprConseqElse &expr) expr.get_else_block ()->accept_vis (*this); } -void -UnsafeChecker::visit (IfExprConseqIf &expr) -{ - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - expr.get_conseq_if_expr ()->accept_vis (*this); -} - -void -UnsafeChecker::visit (IfExprConseqIfLet &expr) -{ - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - - // TODO: Visit conseq if let expression -} - void UnsafeChecker::visit (IfLetExpr &expr) { diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.h b/gcc/rust/checks/errors/rust-unsafe-checker.h index 257cb458caee..b81f59d68ee3 100644 --- a/gcc/rust/checks/errors/rust-unsafe-checker.h +++ b/gcc/rust/checks/errors/rust-unsafe-checker.h @@ -111,8 +111,6 @@ private: virtual void visit (ForLoopExpr &expr) override; virtual void visit (IfExpr &expr) override; virtual void visit (IfExprConseqElse &expr) override; - virtual void visit (IfExprConseqIf &expr) override; - virtual void visit (IfExprConseqIfLet &expr) override; virtual void visit (IfLetExpr &expr) override; virtual void visit (IfLetExprConseqElse &expr) override; virtual void visit (IfLetExprConseqIf &expr) override; diff --git a/gcc/rust/checks/lints/rust-lint-marklive.h b/gcc/rust/checks/lints/rust-lint-marklive.h index 386f3004d172..6fb4467f12dd 100644 --- a/gcc/rust/checks/lints/rust-lint-marklive.h +++ b/gcc/rust/checks/lints/rust-lint-marklive.h @@ -222,13 +222,6 @@ public: } } - void visit (HIR::IfExprConseqIf &expr) override - { - expr.get_if_condition ()->accept_vis (*this); - expr.get_if_block ()->accept_vis (*this); - expr.get_conseq_if_expr ()->accept_vis (*this); - } - void visit (HIR::TraitItemFunc &item) override { item.get_block_expr ()->accept_vis (*this); diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc index e5f66397c4d3..e3e6a21863a0 100644 --- a/gcc/rust/hir/rust-ast-lower.cc +++ b/gcc/rust/hir/rust-ast-lower.cc @@ -221,11 +221,10 @@ ASTLoweringIfBlock::visit (AST::IfExprConseqIf &expr) mappings->get_next_hir_id (crate_num), UNKNOWN_LOCAL_DEFID); - translated - = new HIR::IfExprConseqIf (mapping, std::unique_ptr (condition), - std::unique_ptr (block), - std::unique_ptr (conseq_if_expr), - expr.get_locus ()); + translated = new HIR::IfExprConseqElse ( + mapping, std::unique_ptr (condition), + std::unique_ptr (block), + std::unique_ptr (conseq_if_expr), expr.get_locus ()); } void diff --git a/gcc/rust/hir/rust-hir-dump.cc b/gcc/rust/hir/rust-hir-dump.cc index dba154447c5e..ca8bc5768bea 100644 --- a/gcc/rust/hir/rust-hir-dump.cc +++ b/gcc/rust/hir/rust-hir-dump.cc @@ -309,12 +309,6 @@ void Dump::visit (IfExprConseqElse &) {} void -Dump::visit (IfExprConseqIf &) -{} -void -Dump::visit (IfExprConseqIfLet &) -{} -void Dump::visit (IfLetExpr &) {} void diff --git a/gcc/rust/hir/rust-hir-dump.h b/gcc/rust/hir/rust-hir-dump.h index 5f9ee1e1189a..1ace2bec851c 100644 --- a/gcc/rust/hir/rust-hir-dump.h +++ b/gcc/rust/hir/rust-hir-dump.h @@ -96,8 +96,6 @@ private: virtual void visit (ForLoopExpr &) override; virtual void visit (IfExpr &) override; virtual void visit (IfExprConseqElse &) override; - virtual void visit (IfExprConseqIf &) override; - virtual void visit (IfExprConseqIfLet &) override; virtual void visit (IfLetExpr &) override; virtual void visit (IfLetExprConseqElse &) override; virtual void visit (IfLetExprConseqIf &) override; diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h index 1ed97eff9c79..b93040a6e17f 100644 --- a/gcc/rust/hir/tree/rust-hir-expr.h +++ b/gcc/rust/hir/tree/rust-hir-expr.h @@ -3276,7 +3276,7 @@ protected: // If expression with an ending "else" expression HIR node (trailing) class IfExprConseqElse : public IfExpr { - std::unique_ptr else_block; + std::unique_ptr else_block; public: std::string as_string () const override; @@ -3284,7 +3284,7 @@ public: IfExprConseqElse (Analysis::NodeMapping mappings, std::unique_ptr condition, std::unique_ptr if_block, - std::unique_ptr else_block, Location locus) + std::unique_ptr else_block, Location locus) : IfExpr (std::move (mappings), std::move (condition), std::move (if_block), locus), else_block (std::move (else_block)) @@ -3293,7 +3293,7 @@ public: // Copy constructor with clone IfExprConseqElse (IfExprConseqElse const &other) - : IfExpr (other), else_block (other.else_block->clone_block_expr ()) + : IfExpr (other), else_block (other.else_block->clone_expr_with_block ()) {} // Overloaded assignment operator with cloning @@ -3302,7 +3302,7 @@ public: IfExpr::operator= (other); // condition = other.condition->clone_expr(); // if_block = other.if_block->clone_block_expr(); - else_block = other.else_block->clone_block_expr (); + else_block = other.else_block->clone_expr_with_block (); return *this; } @@ -3316,7 +3316,7 @@ public: void vis_else_block (HIRFullVisitor &vis) { else_block->accept_vis (vis); } - BlockExpr *get_else_block () { return else_block.get (); } + ExprWithBlock *get_else_block () { return else_block.get (); } protected: /* Use covariance to implement clone function as returning this object rather @@ -3341,77 +3341,6 @@ protected: } }; -// If expression with an ending "else if" expression HIR node -class IfExprConseqIf : public IfExpr -{ - std::unique_ptr conseq_if_expr; - -public: - std::string as_string () const override; - - IfExprConseqIf (Analysis::NodeMapping mappings, - std::unique_ptr condition, - std::unique_ptr if_block, - std::unique_ptr conseq_if_expr, Location locus) - : IfExpr (std::move (mappings), std::move (condition), std::move (if_block), - locus), - conseq_if_expr (std::move (conseq_if_expr)) - {} - // outer attributes not allowed - - // Copy constructor with clone - IfExprConseqIf (IfExprConseqIf const &other) - : IfExpr (other), conseq_if_expr (other.conseq_if_expr->clone_if_expr ()) - {} - - // Overloaded assignment operator to use clone - IfExprConseqIf &operator= (IfExprConseqIf const &other) - { - IfExpr::operator= (other); - // condition = other.condition->clone_expr(); - // if_block = other.if_block->clone_block_expr(); - conseq_if_expr = other.conseq_if_expr->clone_if_expr (); - - return *this; - } - - // move constructors - IfExprConseqIf (IfExprConseqIf &&other) = default; - IfExprConseqIf &operator= (IfExprConseqIf &&other) = default; - - void accept_vis (HIRFullVisitor &vis) override; - void accept_vis (HIRExpressionVisitor &vis) override; - - void vis_conseq_if_expr (HIRFullVisitor &vis) - { - conseq_if_expr->accept_vis (vis); - } - - IfExpr *get_conseq_if_expr () { return conseq_if_expr.get (); } - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - IfExprConseqIf *clone_expr_impl () const override - { - return new IfExprConseqIf (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - IfExprConseqIf *clone_expr_with_block_impl () const override - { - return new IfExprConseqIf (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - IfExprConseqIf *clone_if_expr_impl () const override - { - return new IfExprConseqIf (*this); - } -}; - // Basic "if let" expression HIR node with no else class IfLetExpr : public ExprWithBlock { @@ -3515,71 +3444,6 @@ protected: } }; -// If expression with an ending "else if let" expression HIR node -class IfExprConseqIfLet : public IfExpr -{ - std::unique_ptr if_let_expr; - -public: - std::string as_string () const override; - - IfExprConseqIfLet (Analysis::NodeMapping mappings, - std::unique_ptr condition, - std::unique_ptr if_block, - std::unique_ptr conseq_if_let_expr, - Location locus) - : IfExpr (std::move (mappings), std::move (condition), std::move (if_block), - locus), - if_let_expr (std::move (conseq_if_let_expr)) - {} - // outer attributes not allowed - - // Copy constructor with clone - IfExprConseqIfLet (IfExprConseqIfLet const &other) - : IfExpr (other), if_let_expr (other.if_let_expr->clone_if_let_expr ()) - {} - - // Overloaded assignment operator to use clone - IfExprConseqIfLet &operator= (IfExprConseqIfLet const &other) - { - IfExpr::operator= (other); - // condition = other.condition->clone_expr(); - // if_block = other.if_block->clone_block_expr(); - if_let_expr = other.if_let_expr->clone_if_let_expr (); - - return *this; - } - - // move constructors - IfExprConseqIfLet (IfExprConseqIfLet &&other) = default; - IfExprConseqIfLet &operator= (IfExprConseqIfLet &&other) = default; - - void accept_vis (HIRFullVisitor &vis) override; - void accept_vis (HIRExpressionVisitor &vis) override; - -protected: - /* Use covariance to implement clone function as returning this object rather - * than base */ - IfExprConseqIfLet *clone_expr_impl () const override - { - return new IfExprConseqIfLet (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - IfExprConseqIfLet *clone_expr_with_block_impl () const override - { - return new IfExprConseqIfLet (*this); - } - - /* Use covariance to implement clone function as returning this object rather - * than base */ - IfExprConseqIfLet *clone_if_expr_impl () const override - { - return new IfExprConseqIfLet (*this); - } -}; - /* HIR node representing "if let" expression with an "else" expression at the * end */ class IfLetExprConseqElse : public IfLetExpr diff --git a/gcc/rust/hir/tree/rust-hir-full-decls.h b/gcc/rust/hir/tree/rust-hir-full-decls.h index 32c5c430ea02..64ffe5f6b8b0 100644 --- a/gcc/rust/hir/tree/rust-hir-full-decls.h +++ b/gcc/rust/hir/tree/rust-hir-full-decls.h @@ -117,9 +117,7 @@ class WhileLetLoopExpr; class ForLoopExpr; class IfExpr; class IfExprConseqElse; -class IfExprConseqIf; class IfLetExpr; -class IfExprConseqIfLet; class IfLetExprConseqElse; class IfLetExprConseqIf; class IfLetExprConseqIfLet; diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h index f516f0577d68..e597983cc75a 100644 --- a/gcc/rust/hir/tree/rust-hir-visitor.h +++ b/gcc/rust/hir/tree/rust-hir-visitor.h @@ -81,8 +81,6 @@ public: virtual void visit (ForLoopExpr &expr) = 0; virtual void visit (IfExpr &expr) = 0; virtual void visit (IfExprConseqElse &expr) = 0; - virtual void visit (IfExprConseqIf &expr) = 0; - virtual void visit (IfExprConseqIfLet &expr) = 0; virtual void visit (IfLetExpr &expr) = 0; virtual void visit (IfLetExprConseqElse &expr) = 0; virtual void visit (IfLetExprConseqIf &expr) = 0; @@ -224,8 +222,6 @@ public: virtual void visit (ForLoopExpr &) override {} virtual void visit (IfExpr &) override {} virtual void visit (IfExprConseqElse &) override {} - virtual void visit (IfExprConseqIf &) override {} - virtual void visit (IfExprConseqIfLet &) override {} virtual void visit (IfLetExpr &) override {} virtual void visit (IfLetExprConseqElse &) override {} virtual void visit (IfLetExprConseqIf &) override {} @@ -460,8 +456,6 @@ public: virtual void visit (ForLoopExpr &expr) = 0; virtual void visit (IfExpr &expr) = 0; virtual void visit (IfExprConseqElse &expr) = 0; - virtual void visit (IfExprConseqIf &expr) = 0; - virtual void visit (IfExprConseqIfLet &expr) = 0; virtual void visit (IfLetExpr &expr) = 0; virtual void visit (IfLetExprConseqElse &expr) = 0; virtual void visit (IfLetExprConseqIf &expr) = 0; diff --git a/gcc/rust/hir/tree/rust-hir.cc b/gcc/rust/hir/tree/rust-hir.cc index 926712ccfcd6..96ec5a25a4b1 100644 --- a/gcc/rust/hir/tree/rust-hir.cc +++ b/gcc/rust/hir/tree/rust-hir.cc @@ -1525,27 +1525,7 @@ IfExprConseqElse::as_string () const { std::string str = IfExpr::as_string (); - str += "\n Else block expr: " + else_block->as_string (); - - return str; -} - -std::string -IfExprConseqIf::as_string () const -{ - std::string str = IfExpr::as_string (); - - str += "\n Else if expr: \n " + conseq_if_expr->as_string (); - - return str; -} - -std::string -IfExprConseqIfLet::as_string () const -{ - std::string str = IfExpr::as_string (); - - str += "\n Else if let expr: \n " + if_let_expr->as_string (); + str += "\n Else expr: " + else_block->as_string (); return str; } @@ -4137,18 +4117,6 @@ IfExprConseqElse::accept_vis (HIRFullVisitor &vis) vis.visit (*this); } -void -IfExprConseqIf::accept_vis (HIRFullVisitor &vis) -{ - vis.visit (*this); -} - -void -IfExprConseqIfLet::accept_vis (HIRFullVisitor &vis) -{ - vis.visit (*this); -} - void IfLetExpr::accept_vis (HIRFullVisitor &vis) { @@ -4947,18 +4915,6 @@ IfLetExpr::accept_vis (HIRExpressionVisitor &vis) vis.visit (*this); } -void -IfExprConseqIfLet::accept_vis (HIRExpressionVisitor &vis) -{ - vis.visit (*this); -} - -void -IfExprConseqIf::accept_vis (HIRExpressionVisitor &vis) -{ - vis.visit (*this); -} - void IfExprConseqElse::accept_vis (HIRExpressionVisitor &vis) { diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index fc85c0102d8a..6a510eee63f8 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc @@ -469,29 +469,6 @@ TypeCheckExpr::visit (HIR::IfExprConseqElse &expr) } } -void -TypeCheckExpr::visit (HIR::IfExprConseqIf &expr) -{ - TypeCheckExpr::Resolve (expr.get_if_condition ()); - auto if_blk_resolved = TypeCheckExpr::Resolve (expr.get_if_block ()); - auto else_blk_resolved = TypeCheckExpr::Resolve (expr.get_conseq_if_expr ()); - - if (if_blk_resolved->get_kind () == TyTy::NEVER) - infered = else_blk_resolved; - else if (else_blk_resolved->get_kind () == TyTy::NEVER) - infered = if_blk_resolved; - else - { - infered = unify_site ( - expr.get_mappings ().get_hirid (), - TyTy::TyWithLocation (if_blk_resolved, - expr.get_if_block ()->get_locus ()), - TyTy::TyWithLocation (else_blk_resolved, - expr.get_conseq_if_expr ()->get_locus ()), - expr.get_locus ()); - } -} - void TypeCheckExpr::visit (HIR::IfLetExpr &expr) { diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h index 997fc5699288..0940f8d0e5c5 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.h +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.h @@ -44,7 +44,6 @@ public: void visit (HIR::NegationExpr &expr) override; void visit (HIR::IfExpr &expr) override; void visit (HIR::IfExprConseqElse &expr) override; - void visit (HIR::IfExprConseqIf &expr) override; void visit (HIR::IfLetExpr &expr) override; void visit (HIR::BlockExpr &expr) override; void visit (HIR::UnsafeBlockExpr &expr) override; @@ -76,7 +75,6 @@ public: void visit (HIR::RangeToInclExpr &) override {} void visit (HIR::WhileLetLoopExpr &) override {} void visit (HIR::ForLoopExpr &) override {} - void visit (HIR::IfExprConseqIfLet &) override {} void visit (HIR::IfLetExprConseqElse &) override {} void visit (HIR::IfLetExprConseqIf &) override {} void visit (HIR::IfLetExprConseqIfLet &) override {} -- 2.47.2