]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Unify HIR::IfExprConseqIf{,Let} into HIR::IfExprConseqElse
authorOwen Avery <powerboat9.gamer@gmail.com>
Wed, 15 Mar 2023 20:35:47 +0000 (16:35 -0400)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:21:12 +0000 (18:21 +0100)
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>
20 files changed:
gcc/rust/backend/rust-compile-block.cc
gcc/rust/backend/rust-compile-block.h
gcc/rust/backend/rust-compile-expr.cc
gcc/rust/backend/rust-compile-expr.h
gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
gcc/rust/checks/errors/rust-const-checker.cc
gcc/rust/checks/errors/rust-const-checker.h
gcc/rust/checks/errors/rust-unsafe-checker.cc
gcc/rust/checks/errors/rust-unsafe-checker.h
gcc/rust/checks/lints/rust-lint-marklive.h
gcc/rust/hir/rust-ast-lower.cc
gcc/rust/hir/rust-hir-dump.cc
gcc/rust/hir/rust-hir-dump.h
gcc/rust/hir/tree/rust-hir-expr.h
gcc/rust/hir/tree/rust-hir-full-decls.h
gcc/rust/hir/tree/rust-hir-visitor.h
gcc/rust/hir/tree/rust-hir.cc
gcc/rust/typecheck/rust-hir-type-check-expr.cc
gcc/rust/typecheck/rust-hir-type-check-expr.h

index 3942571ae7de4e5bc4da756c50435bb3726a9255..470ece21853f59dc8310cdac91f8719c02d7faa6 100644 (file)
@@ -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<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 ();
index 8c23d027b5343c6488ed74def4f6833351f95690..4f293af80980c34a17608e2d9ef6e05942614484 100644 (file)
@@ -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 {}
index e138e41e5593b3ffab00849bbc1764b00e5b1b30..962135bad49edbbec6ed1eb5f04e12cc1aee9857 100644 (file)
@@ -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)
 {
index 8bac0bcaea0dd53660234f6485700836af46a703..363dc4962c0d72159743bd098013bde854db4af6 100644 (file)
@@ -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 {}
index 1ea9fa634154053f4f540abd825fab223f6407fd..41d4d3a6fcb01b11ed023d377f76d311b8f03b86 100644 (file)
@@ -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 &)
 {
index 7ebd0a85ac7030559340e350712ab6d17dcf3658..8843bf5acdf52c950c8548600a7a00d2ffc1e876 100644 (file)
@@ -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);
index 99f092e837b7e431869e460e842f3ff04537cbd7..c05101961205677f2beaedc72d2d86f5707a1ed5 100644 (file)
@@ -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)
 {
index 8d60b3093805a86a1b902c70646d73eb49de2b61..1ad494423f612ee000f819895e82045b18cac508 100644 (file)
@@ -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;
index bf416485a63778e5127167b1d2a521fb5334340e..558b8ee9d6d874508325a786f54b36768018aadf 100644 (file)
@@ -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)
 {
index 257cb458caee5f4f9c6d043ca27161d610f0a346..b81f59d68ee33af95b05d7b5b696ba61873cb8e5 100644 (file)
@@ -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;
index 386f3004d172b134c5a7249d554135e443b14428..6fb4467f12ddcf9a55cdb303293d533c8bf376bd 100644 (file)
@@ -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);
index e5f66397c4d3d111d4b67fb15d75d1e991e58d00..e3e6a21863a04b08875bcad55522c7b68601f200 100644 (file)
@@ -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
index dba154447c5e29003de27caf1b0deb7d4594912c..ca8bc5768bea1665d31134580fc3edd69586b023 100644 (file)
@@ -309,12 +309,6 @@ void
 Dump::visit (IfExprConseqElse &)
 {}
 void
-Dump::visit (IfExprConseqIf &)
-{}
-void
-Dump::visit (IfExprConseqIfLet &)
-{}
-void
 Dump::visit (IfLetExpr &)
 {}
 void
index 5f9ee1e1189a53a2045e9213dc4775edba8bf434..1ace2bec851cbf8f40cb133ac4371bdc84712628 100644 (file)
@@ -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;
index 1ed97eff9c7978a010a264b2a94e7f1a87dc5472..b93040a6e17fd59c5bbda19dde3cef86550cce88 100644 (file)
@@ -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
index 32c5c430ea021ade7c220b753c7e14f0ac5de3f7..64ffe5f6b8b087b4861dc664ec536f4ee4ded3b9 100644 (file)
@@ -117,9 +117,7 @@ class WhileLetLoopExpr;
 class ForLoopExpr;
 class IfExpr;
 class IfExprConseqElse;
-class IfExprConseqIf;
 class IfLetExpr;
-class IfExprConseqIfLet;
 class IfLetExprConseqElse;
 class IfLetExprConseqIf;
 class IfLetExprConseqIfLet;
index f516f0577d680539e5bd0570d74f3151301961b8..e597983cc75a60c5c6b59eeab420d240faf1d9ee 100644 (file)
@@ -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;
index 926712ccfcd691c63d2055f955553f3e3c92cd6b..96ec5a25a4b1580966ac5ea3b3f0b1514ee0dbd6 100644 (file)
@@ -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)
 {
index fc85c0102d8a0b930c2da49c35f2b44b053f0587..6a510eee63f8356b8a2463ce9e301091dbd388fb 100644 (file)
@@ -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)
 {
index 997fc5699288ee79b2f47d34fa24b422f47fb34f..0940f8d0e5c56b4afbbdae2274a76550cf64d081 100644 (file)
@@ -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 {}