]> git.ipfire.org Git - people/ms/gcc.git/commitdiff
Unify HIR::IfExprConseqIf{,Let} into HIR::IfExprConseqElse
authorOwen Avery <powerboat9.gamer@gmail.com>
Wed, 15 Mar 2023 20:35:47 +0000 (16:35 -0400)
committerPhilip Herron <philip.herron@embecosm.com>
Fri, 17 Mar 2023 16:31:54 +0000 (16:31 +0000)
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 83f2a37e6e6f83c66cbc0f6411fc0496089d2995..74b6f9a92f7c05c4d3fc644b4fa7b80b607d1ab2 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 0ccf81f376bfc5e8c75383d17c3745eabf8c8a35..666eb0915b7d8faefcb8baf8b771e86328b45ee6 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 cf6802e91af64dc56a7aa8a22da47cb145acb518..6a7b2eb1394e43287b93a9cbe14ad9ac9ee759e7 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 150a7a4788a581ff8937b0e8fcdf87261bbf5435..d23d1d1d515048973a8dc89e44c25365f224dc55 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 a435d6dcade1802c1c775ae05a6d50608c65711c..06bd4284fa673b2488f2eb38e537ab6f2ad1c9b1 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 695a7e88df0315d42fdad37a000c18a7b95b1b3d..d12d3a7bc3318e319c1bbe0ac3279e29193ca64c 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 12bb62a5c4c26659be33876ec556542100e8572e..4f6987ff56de5f3b589941e16dd33114ed8b8622 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 69628411d4cdc063b7a5e6c0f08351915f2e8e3e..04130b444a081121abb3593024a37f790e9399a1 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 4374a0e2c1f857996667f5effafa2ca59f475d4d..f00df0b96717a1530d07a2f6ef753bc3f2b8a3aa 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 8f3a87f339594dc3201c82d0fbe85f8ca27040cc..ce33c95fb02301f792e56f4aa81f11b80912529d 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 dcc625d0b9d4763fd95e39dfce7c216ae748cf6b..be634a7e80c6ce3294e1d26920334119553864d0 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 2e25be75a5a7ea0c772ead8b7a7226f2392424c8..36dd1a9d8e67883409da698a06a2062784e2f445 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 a7aa16a3b0d540f45eaef29cd603407d0a970a56..f823e869fa8492b82cf4b4df11fef1a8f6f9febe 100644 (file)
@@ -309,12 +309,6 @@ void
 Dump::visit (IfExprConseqElse &)
 {}
 void
-Dump::visit (IfExprConseqIf &)
-{}
-void
-Dump::visit (IfExprConseqIfLet &)
-{}
-void
 Dump::visit (IfLetExpr &)
 {}
 void
index 145a6a1ee72086a5e0eca8cb4f9eb9ca3375662d..7aefb9e9a8dd5813f904d4c0c908af93d2577bba 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 bf103516800cc7ccc34f78eefd37adb1db5cb3a5..9b54b24146b42b467648aafdfc6035fad2d28546 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 5e35666250a9d84a6c269411916c9754d40a57c7..058e62088c42b00c1f9edf5bed7bed6d378410f0 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 037aa01ecab64cdedad3e7eb4de71b04a5d63e84..494365e1231cc1ceab146006e5c0f30cab2930f1 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 1c168db77930da2692838c5f6b13664ea404723e..c0532d8886077b8fec9c1de2614349b1c16b7c26 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 4644c074be3a65fb7dadd4d165442c011faf6f1b..117682b8a6bf58b9afcf0630a82cd3a107287539 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 796cc65ba667a141c9b1f23ed9f1559d14d33b80..1d4ce4a29280653f9e129876a8df5e3384ab402e 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 {}