diff options
author | Owen Avery <powerboat9.gamer@gmail.com> | 2023-03-15 16:35:47 -0400 |
---|---|---|
committer | Arthur Cohen <arthur.cohen@embecosm.com> | 2024-01-16 18:21:12 +0100 |
commit | 265d8555fe3ad38755e64a6b9880521c7f3a3cc7 (patch) | |
tree | fff5e9683b2eb2b4da0fb2d23a5448980145dfc8 /gcc | |
parent | f821a019e624555397b539e864cc145057922a63 (diff) | |
download | gcc-265d8555fe3ad38755e64a6b9880521c7f3a3cc7.zip gcc-265d8555fe3ad38755e64a6b9880521c7f3a3cc7.tar.gz gcc-265d8555fe3ad38755e64a6b9880521c7f3a3cc7.tar.bz2 |
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 <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc')
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 3942571..470ece2 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 8c23d02..4f293af 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 e138e41..962135b 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 8bac0bc..363dc49 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 1ea9fa6..41d4d3a 100644 --- a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc +++ b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc @@ -547,23 +547,6 @@ PrivacyReporter::visit (HIR::IfExprConseqElse &expr) } 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 &) { // TODO: We need to visit the if_let_expr diff --git a/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h b/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h index 7ebd0a8..8843bf5 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 99f092e..c051019 100644 --- a/gcc/rust/checks/errors/rust-const-checker.cc +++ b/gcc/rust/checks/errors/rust-const-checker.cc @@ -500,23 +500,6 @@ ConstChecker::visit (IfExprConseqElse &expr) } 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) { expr.get_scrutinee_expr ()->accept_vis (*this); diff --git a/gcc/rust/checks/errors/rust-const-checker.h b/gcc/rust/checks/errors/rust-const-checker.h index 8d60b30..1ad4944 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 bf41648..558b8ee 100644 --- a/gcc/rust/checks/errors/rust-unsafe-checker.cc +++ b/gcc/rust/checks/errors/rust-unsafe-checker.cc @@ -602,23 +602,6 @@ UnsafeChecker::visit (IfExprConseqElse &expr) } 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) { expr.get_scrutinee_expr ()->accept_vis (*this); diff --git a/gcc/rust/checks/errors/rust-unsafe-checker.h b/gcc/rust/checks/errors/rust-unsafe-checker.h index 257cb45..b81f59d 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 386f300..6fb4467 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 e5f6639..e3e6a21 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<HIR::Expr> (condition), - std::unique_ptr<HIR::BlockExpr> (block), - std::unique_ptr<HIR::IfExpr> (conseq_if_expr), - expr.get_locus ()); + translated = new HIR::IfExprConseqElse ( + mapping, std::unique_ptr<HIR::Expr> (condition), + std::unique_ptr<HIR::BlockExpr> (block), + std::unique_ptr<HIR::ExprWithBlock> (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 dba1544..ca8bc57 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 5f9ee1e..1ace2be 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 1ed97ef..b93040a 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<BlockExpr> else_block; + std::unique_ptr<ExprWithBlock> else_block; public: std::string as_string () const override; @@ -3284,7 +3284,7 @@ public: IfExprConseqElse (Analysis::NodeMapping mappings, std::unique_ptr<Expr> condition, std::unique_ptr<BlockExpr> if_block, - std::unique_ptr<BlockExpr> else_block, Location locus) + std::unique_ptr<ExprWithBlock> 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<IfExpr> conseq_if_expr; - -public: - std::string as_string () const override; - - IfExprConseqIf (Analysis::NodeMapping mappings, - std::unique_ptr<Expr> condition, - std::unique_ptr<BlockExpr> if_block, - std::unique_ptr<IfExpr> 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<IfLetExpr> if_let_expr; - -public: - std::string as_string () const override; - - IfExprConseqIfLet (Analysis::NodeMapping mappings, - std::unique_ptr<Expr> condition, - std::unique_ptr<BlockExpr> if_block, - std::unique_ptr<IfLetExpr> 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 32c5c43..64ffe5f 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 f516f05..e597983 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 926712c..96ec5a2 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; } @@ -4138,18 +4118,6 @@ IfExprConseqElse::accept_vis (HIRFullVisitor &vis) } void -IfExprConseqIf::accept_vis (HIRFullVisitor &vis) -{ - vis.visit (*this); -} - -void -IfExprConseqIfLet::accept_vis (HIRFullVisitor &vis) -{ - vis.visit (*this); -} - -void IfLetExpr::accept_vis (HIRFullVisitor &vis) { vis.visit (*this); @@ -4948,18 +4916,6 @@ IfLetExpr::accept_vis (HIRExpressionVisitor &vis) } void -IfExprConseqIfLet::accept_vis (HIRExpressionVisitor &vis) -{ - vis.visit (*this); -} - -void -IfExprConseqIf::accept_vis (HIRExpressionVisitor &vis) -{ - vis.visit (*this); -} - -void IfExprConseqElse::accept_vis (HIRExpressionVisitor &vis) { vis.visit (*this); diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc index fc85c01..6a510ee 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc @@ -470,29 +470,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) { // this needs to perform a least upper bound coercion on the blocks and then diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.h b/gcc/rust/typecheck/rust-hir-type-check-expr.h index 997fc56..0940f8d 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 {} |