]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Unify AST::IfExprConseqIf{,Let} into AST::IfExprConseqElse
authorOwen Avery <powerboat9.gamer@gmail.com>
Thu, 16 Mar 2023 03:05:07 +0000 (23:05 -0400)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 16 Jan 2024 17:28:46 +0000 (18:28 +0100)
This simplifies the AST's representation of if-statements
to match the HIR.

gcc/rust/ChangeLog:

* ast/rust-expr.h
(class IfExprConseqElse): Make else_block ExprWithBlock.
(class IfExprConseqIf): Remove.
(class IfExprConseqIfLet): Remove.
* ast/rust-ast-full-decls.h
(class IfExprConseqIf): Remove.
(class IfExprConseqIfLet): Remove.
* ast/rust-ast.cc
(IfExprConseqElse::as_string): Adjust output.
(IfExprConseqIf::as_string): Remove.
(IfExprConseqIfLet::as_string): Remove.
(IfExprConseqIf::accept_vis): Remove.
(IfExprConseqIfLet::accept_vis): Remove.
* ast/rust-ast-visitor.h
(ASTVisitor::visit): Remove IfExprConseqIf{,Let} visitors.
* ast/rust-ast-tokenstream.cc
(TokenStream::visit): Likewise.
* ast/rust-ast-tokenstream.h
(TokenStream::visit): Likewise.
* ast/rust-ast-dump.cc
(Dump::visit): Likewise.
* ast/rust-ast-dump.h
(Dump::visit): Likewise.
* checks/errors/rust-feature-gate.h
(FeatureGate::visit): Likewise.
* util/rust-attributes.cc
(AttributeChecker::visit): Likewise.
* util/rust-attributes.h
(AttributeChecker::visit): Likewise.
* resolve/rust-early-name-resolver.cc
(EarlyNameResolver::visit): Likewise.
* resolve/rust-early-name-resolver.h
(EarlyNameResolver::visit): Likewise.
* resolve/rust-ast-resolve-base.h
(ResolverBase::visit): Likewise.
* resolve/rust-ast-resolve-base.cc
(ResolverBase::visit): Likewise.
* resolve/rust-ast-resolve-expr.h
(ResolveExpr::visit): Remove IfExprConseqIf visitor.
* resolve/rust-ast-resolve-expr.cc
(ResolveExpr::visit): Likewise.
* expand/rust-cfg-strip.cc
(CfgStrip::visit): Remove IfExprConseqIf{,Let} visitors.
* expand/rust-cfg-strip.h
(CfgStrip::visit): Likewise.
* expand/rust-expand-visitor.cc
(ExpandVisitor::visit): Likewise.
* expand/rust-expand-visitor.h
(ExpandVisitor::visit): Likewise.
* hir/rust-ast-lower-base.cc
(ASTLoweringBase::visit): Likewise.
* hir/rust-ast-lower-base.h
(ASTLoweringBase::visit): Likewise.
* hir/rust-ast-lower-block.h
(ASTLoweringIfBlock::visit): Remove IfExprConseqIf visitor.
(ASTLoweringExprWithBlock::visit): Likewise.
* hir/rust-ast-lower.cc
(ASTLoweringIfBlock::visit):
Remove IfExprConseqIf visitor, adjust IfExprConseqElse lowering.
* hir/rust-ast-lower-expr.h
(ASTLoweringExpr::visit): Remove IfExprConseqIf visitor.
* hir/rust-ast-lower-expr.cc
(ASTLoweringExpr::visit): Likewise.
* parse/rust-parse-impl.h
(Parser::parse_if_expr): Replace IfExprConseqIf{,Let} with IfExprConseqElse.

Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
28 files changed:
gcc/rust/ast/rust-ast-dump.cc
gcc/rust/ast/rust-ast-dump.h
gcc/rust/ast/rust-ast-full-decls.h
gcc/rust/ast/rust-ast-tokenstream.cc
gcc/rust/ast/rust-ast-tokenstream.h
gcc/rust/ast/rust-ast-visitor.h
gcc/rust/ast/rust-ast.cc
gcc/rust/ast/rust-expr.h
gcc/rust/checks/errors/rust-feature-gate.h
gcc/rust/expand/rust-cfg-strip.cc
gcc/rust/expand/rust-cfg-strip.h
gcc/rust/expand/rust-expand-visitor.cc
gcc/rust/expand/rust-expand-visitor.h
gcc/rust/hir/rust-ast-lower-base.cc
gcc/rust/hir/rust-ast-lower-base.h
gcc/rust/hir/rust-ast-lower-block.h
gcc/rust/hir/rust-ast-lower-expr.cc
gcc/rust/hir/rust-ast-lower-expr.h
gcc/rust/hir/rust-ast-lower.cc
gcc/rust/parse/rust-parse-impl.h
gcc/rust/resolve/rust-ast-resolve-base.cc
gcc/rust/resolve/rust-ast-resolve-base.h
gcc/rust/resolve/rust-ast-resolve-expr.cc
gcc/rust/resolve/rust-ast-resolve-expr.h
gcc/rust/resolve/rust-early-name-resolver.cc
gcc/rust/resolve/rust-early-name-resolver.h
gcc/rust/util/rust-attributes.cc
gcc/rust/util/rust-attributes.h

index d25a2a4af1aa5f78684e52c57725348ef075c263..12cbfacb5d0006890d2637127839070393af7f56 100644 (file)
@@ -936,22 +936,6 @@ Dump::visit (IfExprConseqElse &expr)
   visit (expr.get_else_block ());
 }
 
-void
-Dump::visit (IfExprConseqIf &expr)
-{
-  stream << "if ";
-  visit (expr.get_condition_expr ());
-  stream << " ";
-  visit (expr.get_if_block ());
-  stream << indentation << "else ";
-  // The "if" part of the "else if" is printed by the next visitor
-  visit (expr.get_conseq_if_expr ());
-}
-
-void
-Dump::visit (IfExprConseqIfLet &)
-{}
-
 void
 Dump::visit (IfLetExpr &)
 {}
index 26f7208ca4e3b45c2687e9e4c99df346accd8c77..a48d4761bb6e93e4340a9ce59ecbb90e28abc0b5 100644 (file)
@@ -184,8 +184,6 @@ private:
   void visit (ForLoopExpr &expr);
   void visit (IfExpr &expr);
   void visit (IfExprConseqElse &expr);
-  void visit (IfExprConseqIf &expr);
-  void visit (IfExprConseqIfLet &expr);
   void visit (IfLetExpr &expr);
   void visit (IfLetExprConseqElse &expr);
   void visit (IfLetExprConseqIf &expr);
index b3f71c0addb73208de7699d4120c504bcf26adee..94691f980a6d368d0fdf5335abdc3f3517a03c92 100644 (file)
@@ -135,9 +135,7 @@ class WhileLetLoopExpr;
 class ForLoopExpr;
 class IfExpr;
 class IfExprConseqElse;
-class IfExprConseqIf;
 class IfLetExpr;
-class IfExprConseqIfLet;
 class IfLetExprConseqElse;
 class IfLetExprConseqIf;
 class IfLetExprConseqIfLet;
index d4e23bfec7064acc353e5547f105fc7b7e05ab92..8c54141fd7892c725feea50dd53bb0d51c5eff18 100644 (file)
@@ -1427,25 +1427,6 @@ TokenStream::visit (IfExprConseqElse &expr)
   visit (expr.get_else_block ());
 }
 
-void
-TokenStream::visit (IfExprConseqIf &expr)
-{
-  visit (static_cast<IfExpr &> (expr));
-  indentation ();
-  tokens.push_back (Rust::Token::make (ELSE, expr.get_locus ()));
-  // The "if" part of the "else if" is printed by the next visitor
-  visit (expr.get_conseq_if_expr ());
-}
-
-void
-TokenStream::visit (IfExprConseqIfLet &expr)
-{
-  visit (static_cast<IfExpr &> (expr));
-  indentation ();
-  tokens.push_back (Rust::Token::make (ELSE, expr.get_locus ()));
-  visit (expr.get_conseq_if_let_expr ());
-}
-
 void
 TokenStream::visit (IfLetExpr &expr)
 {
index 8ce25e10b93df5c2e4fe57b054c332dd28c4130c..83fdece70528c5604c948e697a609be8a25a5b0d 100644 (file)
@@ -198,8 +198,6 @@ private:
   void visit (ForLoopExpr &expr);
   void visit (IfExpr &expr);
   void visit (IfExprConseqElse &expr);
-  void visit (IfExprConseqIf &expr);
-  void visit (IfExprConseqIfLet &expr);
   void visit (IfLetExpr &expr);
   void visit (IfLetExprConseqElse &expr);
   void visit (IfLetExprConseqIf &expr);
index 6990d6144864127272c2619c2359fbcf5c24f404..621f09ef62b18c4485207f45e19adb5f1727159c 100644 (file)
@@ -115,8 +115,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 feb60ebbb109984796f6202ffb80392fc34c9f83..dbbeda38a44ab15d00251cf9cb581710c6b23475 100644 (file)
@@ -1638,27 +1638,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;
 }
@@ -4575,18 +4555,6 @@ IfExprConseqElse::accept_vis (ASTVisitor &vis)
   vis.visit (*this);
 }
 
-void
-IfExprConseqIf::accept_vis (ASTVisitor &vis)
-{
-  vis.visit (*this);
-}
-
-void
-IfExprConseqIfLet::accept_vis (ASTVisitor &vis)
-{
-  vis.visit (*this);
-}
-
 void
 IfLetExpr::accept_vis (ASTVisitor &vis)
 {
index bcf5ab3b364c36d8baddc494cb976502772ddaad..f91d9e9ceb2000859dfd364f340f8ae0523c5f6e 100644 (file)
@@ -3753,14 +3753,14 @@ protected:
 // If expression with an ending "else" expression AST 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;
 
   IfExprConseqElse (std::unique_ptr<Expr> condition,
                    std::unique_ptr<BlockExpr> if_block,
-                   std::unique_ptr<BlockExpr> else_block,
+                   std::unique_ptr<ExprWithBlock> else_block,
                    std::vector<Attribute> outer_attrs, Location locus)
     : IfExpr (std::move (condition), std::move (if_block),
              std::move (outer_attrs), locus),
@@ -3770,7 +3770,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
@@ -3779,7 +3779,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;
   }
@@ -3793,7 +3793,7 @@ public:
   void vis_else_block (ASTVisitor &vis) { else_block->accept_vis (vis); }
 
   // TODO: is this better? Or is a "vis_block" better?
-  std::unique_ptr<BlockExpr> &get_else_block ()
+  std::unique_ptr<ExprWithBlock> &get_else_block ()
   {
     rust_assert (else_block != nullptr);
     return else_block;
@@ -3808,67 +3808,6 @@ protected:
   }
 };
 
-// If expression with an ending "else if" expression AST node
-class IfExprConseqIf : public IfExpr
-{
-  std::unique_ptr<IfExpr> conseq_if_expr;
-
-public:
-  std::string as_string () const override;
-
-  IfExprConseqIf (std::unique_ptr<Expr> condition,
-                 std::unique_ptr<BlockExpr> if_block,
-                 std::unique_ptr<IfExpr> conseq_if_expr,
-                 std::vector<Attribute> outer_attrs, Location locus)
-    : IfExpr (std::move (condition), std::move (if_block),
-             std::move (outer_attrs), 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 (ASTVisitor &vis) override;
-
-  void vis_conseq_if_expr (ASTVisitor &vis)
-  {
-    conseq_if_expr->accept_vis (vis);
-  }
-
-  // TODO: is this better? Or is a "vis_block" better?
-  std::unique_ptr<IfExpr> &get_conseq_if_expr ()
-  {
-    rust_assert (conseq_if_expr != nullptr);
-    return conseq_if_expr;
-  }
-
-protected:
-  /* 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 AST node with no else
 class IfLetExpr : public ExprWithBlock
 {
@@ -4002,62 +3941,6 @@ protected:
   }
 };
 
-// If expression with an ending "else if let" expression AST node
-class IfExprConseqIfLet : public IfExpr
-{
-  std::unique_ptr<IfLetExpr> if_let_expr;
-
-public:
-  std::string as_string () const override;
-
-  IfExprConseqIfLet (std::unique_ptr<Expr> condition,
-                    std::unique_ptr<BlockExpr> if_block,
-                    std::unique_ptr<IfLetExpr> conseq_if_let_expr,
-                    std::vector<Attribute> outer_attrs, Location locus)
-    : IfExpr (std::move (condition), std::move (if_block),
-             std::move (outer_attrs), 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 (ASTVisitor &vis) override;
-
-  // TODO: is this better? Or is a "vis_block" better?
-  std::unique_ptr<IfLetExpr> &get_conseq_if_let_expr ()
-  {
-    rust_assert (if_let_expr != nullptr);
-    return if_let_expr;
-  }
-
-protected:
-  /* Use covariance to implement clone function as returning this object rather
-   * than base */
-  IfExprConseqIfLet *clone_if_expr_impl () const override
-  {
-    return new IfExprConseqIfLet (*this);
-  }
-};
-
 /* AST node representing "if let" expression with an "else" expression at the
  * end */
 class IfLetExprConseqElse : public IfLetExpr
index af1deabca82be9f3a1d5236cde90e41d936cb79f..a4e2f90f0cf178895ae197981161e29893b75d49 100644 (file)
@@ -95,8 +95,6 @@ public:
   void visit (AST::ForLoopExpr &expr) override {}
   void visit (AST::IfExpr &expr) override {}
   void visit (AST::IfExprConseqElse &expr) override {}
-  void visit (AST::IfExprConseqIf &expr) override {}
-  void visit (AST::IfExprConseqIfLet &expr) override {}
   void visit (AST::IfLetExpr &expr) override {}
   void visit (AST::IfLetExprConseqElse &expr) override {}
   void visit (AST::IfLetExprConseqIf &expr) override {}
index 9ae5f5445b8c7ef4afbcdea6dcfb306a1bea65ba..926367aff0f204ca0a480249cfa4cfeb5aee1d5c 100644 (file)
@@ -1701,77 +1701,6 @@ CfgStrip::visit (AST::IfExprConseqElse &expr)
                   "attributes not allowed");
 }
 void
-CfgStrip::visit (AST::IfExprConseqIf &expr)
-{
-  // initial strip test based on outer attrs
-  expand_cfg_attrs (expr.get_outer_attrs ());
-  if (fails_cfg_with_expand (expr.get_outer_attrs ()))
-    {
-      expr.mark_for_strip ();
-      return;
-    }
-
-  // can't strip condition expr itself, but can strip sub-expressions
-  auto &condition_expr = expr.get_condition_expr ();
-  condition_expr->accept_vis (*this);
-  if (condition_expr->is_marked_for_strip ())
-    rust_error_at (condition_expr->get_locus (),
-                  "cannot strip expression in this position - outer "
-                  "attributes not allowed");
-
-  // can't strip if block itself, but can strip sub-expressions
-  auto &if_block = expr.get_if_block ();
-  if_block->accept_vis (*this);
-  if (if_block->is_marked_for_strip ())
-    rust_error_at (if_block->get_locus (),
-                  "cannot strip block expression in this position - outer "
-                  "attributes not allowed");
-
-  // can't strip if expr itself, but can strip sub-expressions
-  auto &conseq_if_expr = expr.get_conseq_if_expr ();
-  conseq_if_expr->accept_vis (*this);
-  if (conseq_if_expr->is_marked_for_strip ())
-    rust_error_at (conseq_if_expr->get_locus (),
-                  "cannot strip consequent if expression in this "
-                  "position - outer attributes not allowed");
-}
-void
-CfgStrip::visit (AST::IfExprConseqIfLet &expr)
-{
-  // initial strip test based on outer attrs
-  expand_cfg_attrs (expr.get_outer_attrs ());
-  if (fails_cfg_with_expand (expr.get_outer_attrs ()))
-    {
-      expr.mark_for_strip ();
-      return;
-    }
-
-  // can't strip condition expr itself, but can strip sub-expressions
-  auto &condition_expr = expr.get_condition_expr ();
-  condition_expr->accept_vis (*this);
-  if (condition_expr->is_marked_for_strip ())
-    rust_error_at (condition_expr->get_locus (),
-                  "cannot strip expression in this position - outer "
-                  "attributes not allowed");
-
-  // can't strip if block itself, but can strip sub-expressions
-  auto &if_block = expr.get_if_block ();
-  if_block->accept_vis (*this);
-  if (if_block->is_marked_for_strip ())
-    rust_error_at (if_block->get_locus (),
-                  "cannot strip block expression in this position - outer "
-                  "attributes not allowed");
-
-  // can't strip if let expr itself, but can strip sub-expressions
-  auto &conseq_if_let_expr = expr.get_conseq_if_let_expr ();
-  conseq_if_let_expr->accept_vis (*this);
-  if (conseq_if_let_expr->is_marked_for_strip ())
-    rust_error_at (conseq_if_let_expr->get_locus (),
-                  "cannot strip consequent if let expression in this "
-                  "position - outer attributes not "
-                  "allowed");
-}
-void
 CfgStrip::visit (AST::IfLetExpr &expr)
 {
   // initial strip test based on outer attrs
index c5d5a475f776c6330f2d593935b6c7f42629ae02..41b548b51c26ce41bf126b2504b812d823dff0ca 100644 (file)
@@ -131,8 +131,6 @@ public:
   void visit (AST::ForLoopExpr &expr) override;
   void visit (AST::IfExpr &expr) override;
   void visit (AST::IfExprConseqElse &expr) override;
-  void visit (AST::IfExprConseqIf &expr) override;
-  void visit (AST::IfExprConseqIfLet &expr) override;
   void visit (AST::IfLetExpr &expr) override;
   void visit (AST::IfLetExprConseqElse &expr) override;
   void visit (AST::IfLetExprConseqIf &expr) override;
index be6bb06b6a4e1dc35a533a43f529ad7477aa922d..04013da8fffceed700f6ae35d85e1db3ad99faff 100644 (file)
@@ -681,24 +681,6 @@ ExpandVisitor::visit (AST::IfExprConseqElse &expr)
   visit (expr.get_else_block ());
 }
 
-void
-ExpandVisitor::visit (AST::IfExprConseqIf &expr)
-{
-  maybe_expand_expr (expr.get_condition_expr ());
-
-  visit (expr.get_if_block ());
-  visit (expr.get_conseq_if_expr ());
-}
-
-void
-ExpandVisitor::visit (AST::IfExprConseqIfLet &expr)
-{
-  maybe_expand_expr (expr.get_condition_expr ());
-
-  visit (expr.get_if_block ());
-  visit (expr.get_conseq_if_let_expr ());
-}
-
 void
 ExpandVisitor::visit (AST::IfLetExpr &expr)
 {
index c2b3e781808faef852f0bc6eb8b706024b848964..67c9a5558b6e381df988c109cec433d2cf4b73d0 100644 (file)
@@ -216,8 +216,6 @@ public:
   void visit (AST::ForLoopExpr &expr) override;
   void visit (AST::IfExpr &expr) override;
   void visit (AST::IfExprConseqElse &expr) override;
-  void visit (AST::IfExprConseqIf &expr) override;
-  void visit (AST::IfExprConseqIfLet &expr) override;
   void visit (AST::IfLetExpr &expr) override;
   void visit (AST::IfLetExprConseqElse &expr) override;
   void visit (AST::IfLetExprConseqIf &expr) override;
index 475c541107fa17c1dac3beccb6b31f6296e5570f..9c04c21881c3c58e5a243a94ef9a9f1f1575e56e 100644 (file)
@@ -230,12 +230,6 @@ void
 ASTLoweringBase::visit (AST::IfExprConseqElse &)
 {}
 void
-ASTLoweringBase::visit (AST::IfExprConseqIf &)
-{}
-void
-ASTLoweringBase::visit (AST::IfExprConseqIfLet &)
-{}
-void
 ASTLoweringBase::visit (AST::IfLetExpr &)
 {}
 void
index 699db7252ff77a1c762066ebcd0579fa48f4ddc9..212277960a6b0bf3880132896241c595c876ef22 100644 (file)
@@ -143,8 +143,6 @@ public:
   virtual void visit (AST::ForLoopExpr &expr);
   virtual void visit (AST::IfExpr &expr);
   virtual void visit (AST::IfExprConseqElse &expr);
-  virtual void visit (AST::IfExprConseqIf &expr);
-  virtual void visit (AST::IfExprConseqIfLet &expr);
   virtual void visit (AST::IfLetExpr &expr);
   virtual void visit (AST::IfLetExprConseqElse &expr);
   virtual void visit (AST::IfLetExprConseqIf &expr);
index 638298a7c7e8d24a579ab6b1e8d8ea5e6f8965b0..a12fd87956c8a484b28acec9451abc41642587d5 100644 (file)
@@ -101,8 +101,6 @@ public:
 
   void visit (AST::IfExprConseqElse &expr) override;
 
-  void visit (AST::IfExprConseqIf &expr) override;
-
 private:
   ASTLoweringIfBlock ()
     : ASTLoweringBase (), translated (nullptr), terminated (false)
@@ -169,11 +167,6 @@ public:
     translated = ASTLoweringIfBlock::translate (&expr, &terminated);
   }
 
-  void visit (AST::IfExprConseqIf &expr) override
-  {
-    translated = ASTLoweringIfBlock::translate (&expr, &terminated);
-  }
-
   void visit (AST::IfLetExpr &expr) override
   {
     translated = ASTLoweringIfLetBlock::translate (&expr);
index b98d743877e537d52ebf32c5246da23c6b013e62..c65b08e6840027adff731f9a97abfb7a52981922 100644 (file)
@@ -103,12 +103,6 @@ ASTLoweringExpr::visit (AST::IfExprConseqElse &expr)
   translated = ASTLoweringIfBlock::translate (&expr, &terminated);
 }
 
-void
-ASTLoweringExpr::visit (AST::IfExprConseqIf &expr)
-{
-  translated = ASTLoweringIfBlock::translate (&expr, &terminated);
-}
-
 void
 ASTLoweringExpr::visit (AST::BlockExpr &expr)
 {
index a3c8787dd2986bb70e3fc1fa74e5ffa5dea84b07..d3e95324145c03d3bf5354557837afbadc1419a3 100644 (file)
@@ -78,7 +78,6 @@ public:
   void visit (AST::TupleExpr &expr) override;
   void visit (AST::IfExpr &expr) override;
   void visit (AST::IfExprConseqElse &expr) override;
-  void visit (AST::IfExprConseqIf &expr) override;
   void visit (AST::BlockExpr &expr) override;
   void visit (AST::UnsafeBlockExpr &expr) override;
   void visit (AST::PathInExpression &expr) override;
index 381b02979f530a032af480df8702ee044e4bfb46..c9d5d01a7b14e08b392917464f5e9c53c1f27e77 100644 (file)
@@ -182,39 +182,12 @@ ASTLoweringIfBlock::visit (AST::IfExprConseqElse &expr)
   HIR::BlockExpr *if_block
     = ASTLoweringBlock::translate (expr.get_if_block ().get (),
                                   &if_block_terminated);
-  HIR::BlockExpr *else_block
-    = ASTLoweringBlock::translate (expr.get_else_block ().get (),
-                                  &else_block_termianted);
+  HIR::ExprWithBlock *else_block
+    = ASTLoweringExprWithBlock::translate (expr.get_else_block ().get (),
+                                          &else_block_termianted);
 
   terminated = if_block_terminated && else_block_termianted;
 
-  auto crate_num = mappings->get_current_crate ();
-  Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
-                                mappings->get_next_hir_id (crate_num),
-                                UNKNOWN_LOCAL_DEFID);
-
-  translated
-    = new HIR::IfExprConseqElse (mapping,
-                                std::unique_ptr<HIR::Expr> (condition),
-                                std::unique_ptr<HIR::BlockExpr> (if_block),
-                                std::unique_ptr<HIR::BlockExpr> (else_block),
-                                expr.get_locus ());
-}
-
-void
-ASTLoweringIfBlock::visit (AST::IfExprConseqIf &expr)
-{
-  HIR::Expr *condition
-    = ASTLoweringExpr::translate (expr.get_condition_expr ().get ());
-
-  bool ignored_terminated = false;
-  HIR::BlockExpr *block
-    = ASTLoweringBlock::translate (expr.get_if_block ().get (),
-                                  &ignored_terminated);
-  HIR::IfExpr *conseq_if_expr
-    = ASTLoweringIfBlock::translate (expr.get_conseq_if_expr ().get (),
-                                    &ignored_terminated);
-
   auto crate_num = mappings->get_current_crate ();
   Analysis::NodeMapping mapping (crate_num, expr.get_node_id (),
                                 mappings->get_next_hir_id (crate_num),
@@ -222,8 +195,8 @@ ASTLoweringIfBlock::visit (AST::IfExprConseqIf &expr)
 
   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 ());
+    std::unique_ptr<HIR::BlockExpr> (if_block),
+    std::unique_ptr<HIR::ExprWithBlock> (else_block), expr.get_locus ());
 }
 
 void
index 95278fd2ea98aa4e1d0a0bb896848a3b457fa320..67c4f6a3fabdc3bceebe9c7505b3714e80cc71ba 100644 (file)
@@ -8035,11 +8035,11 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec outer_attrs,
                    return nullptr;
                  }
 
-               return std::unique_ptr<AST::IfExprConseqIfLet> (
-                 new AST::IfExprConseqIfLet (std::move (condition),
-                                             std::move (if_body),
-                                             std::move (if_let_expr),
-                                             std::move (outer_attrs), locus));
+               return std::unique_ptr<AST::IfExprConseqElse> (
+                 new AST::IfExprConseqElse (std::move (condition),
+                                            std::move (if_body),
+                                            std::move (if_let_expr),
+                                            std::move (outer_attrs), locus));
              }
            else
              {
@@ -8056,11 +8056,11 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec outer_attrs,
                    return nullptr;
                  }
 
-               return std::unique_ptr<AST::IfExprConseqIf> (
-                 new AST::IfExprConseqIf (std::move (condition),
-                                          std::move (if_body),
-                                          std::move (if_expr),
-                                          std::move (outer_attrs), locus));
+               return std::unique_ptr<AST::IfExprConseqElse> (
+                 new AST::IfExprConseqElse (std::move (condition),
+                                            std::move (if_body),
+                                            std::move (if_expr),
+                                            std::move (outer_attrs), locus));
              }
          }
        default:
index cc09f0cc664f8c88f237cf53db57210f5c471957..06aeb06f967e63089eb10a7c61aac37342cd7ee0 100644 (file)
@@ -294,14 +294,6 @@ void
 ResolverBase::visit (AST::IfExprConseqElse &)
 {}
 
-void
-ResolverBase::visit (AST::IfExprConseqIf &)
-{}
-
-void
-ResolverBase::visit (AST::IfExprConseqIfLet &)
-{}
-
 void
 ResolverBase::visit (AST::IfLetExpr &)
 {}
index 24103c9109fc37a6ee0e839fd91c4df520b33e8c..dc8796549c2a1283c39e33ca2dae1befbc8ae76c 100644 (file)
@@ -95,8 +95,6 @@ public:
   void visit (AST::ForLoopExpr &);
   void visit (AST::IfExpr &);
   void visit (AST::IfExprConseqElse &);
-  void visit (AST::IfExprConseqIf &);
-  void visit (AST::IfExprConseqIfLet &);
   void visit (AST::IfLetExpr &);
   void visit (AST::IfLetExprConseqElse &);
   void visit (AST::IfLetExprConseqIf &);
index a2708f53b2909b979909be6fa74e189057172052..339fd8a421b31361de3faa655ff70a4f45b900f9 100644 (file)
@@ -186,14 +186,6 @@ ResolveExpr::visit (AST::IfExprConseqElse &expr)
   ResolveExpr::go (expr.get_else_block ().get (), prefix, canonical_prefix);
 }
 
-void
-ResolveExpr::visit (AST::IfExprConseqIf &expr)
-{
-  ResolveExpr::go (expr.get_condition_expr ().get (), prefix, canonical_prefix);
-  ResolveExpr::go (expr.get_if_block ().get (), prefix, canonical_prefix);
-  ResolveExpr::go (expr.get_conseq_if_expr ().get (), prefix, canonical_prefix);
-}
-
 void
 ResolveExpr::visit (AST::IfLetExpr &expr)
 {
index 68b8462d37bdb91c054b61555506870d9c9cde75..7b0beaf49dcd558099e4207641880687ee9bd97e 100644 (file)
@@ -50,7 +50,6 @@ public:
   void visit (AST::TypeCastExpr &expr) override;
   void visit (AST::IfExpr &expr) override;
   void visit (AST::IfExprConseqElse &expr) override;
-  void visit (AST::IfExprConseqIf &expr) override;
   void visit (AST::IfLetExpr &expr) override;
   void visit (AST::BlockExpr &expr) override;
   void visit (AST::UnsafeBlockExpr &expr) override;
index 1dfbff56c2f9e392c2dd666f23c4cc53c7d8c1eb..f06f1bc8198594c7eae04c5cf8d841a8354c7ec7 100644 (file)
@@ -456,22 +456,6 @@ EarlyNameResolver::visit (AST::IfExprConseqElse &expr)
   expr.get_else_block ()->accept_vis (*this);
 }
 
-void
-EarlyNameResolver::visit (AST::IfExprConseqIf &expr)
-{
-  expr.get_condition_expr ()->accept_vis (*this);
-  expr.get_if_block ()->accept_vis (*this);
-  expr.get_conseq_if_expr ()->accept_vis (*this);
-}
-
-void
-EarlyNameResolver::visit (AST::IfExprConseqIfLet &expr)
-{
-  expr.get_condition_expr ()->accept_vis (*this);
-  expr.get_if_block ()->accept_vis (*this);
-  expr.get_conseq_if_let_expr ()->accept_vis (*this);
-}
-
 void
 EarlyNameResolver::visit (AST::IfLetExpr &expr)
 {
index 39287ec0f26e7d5561cc58293f9d13bc1d50f9f9..c6f800490d7cf48a69cf4807bec4bf33c5dff0fd 100644 (file)
@@ -177,8 +177,6 @@ private:
   virtual void visit (AST::ForLoopExpr &expr);
   virtual void visit (AST::IfExpr &expr);
   virtual void visit (AST::IfExprConseqElse &expr);
-  virtual void visit (AST::IfExprConseqIf &expr);
-  virtual void visit (AST::IfExprConseqIfLet &expr);
   virtual void visit (AST::IfLetExpr &expr);
   virtual void visit (AST::IfLetExprConseqElse &expr);
   virtual void visit (AST::IfLetExprConseqIf &expr);
index 372762d5fa6fc6ccd03b43f4ddc99f436617c587..4281f298644985b4fee86a474455bd4dc04c1b3f 100644 (file)
@@ -468,14 +468,6 @@ void
 AttributeChecker::visit (AST::IfExprConseqElse &)
 {}
 
-void
-AttributeChecker::visit (AST::IfExprConseqIf &)
-{}
-
-void
-AttributeChecker::visit (AST::IfExprConseqIfLet &)
-{}
-
 void
 AttributeChecker::visit (AST::IfLetExpr &)
 {}
index bef6127ee10178147eedad4d6b766bcb3ed0b4cd..1c642cdbac92f2f5d6a8173b012fcc43d84c25ce 100644 (file)
@@ -160,8 +160,6 @@ private:
   void visit (AST::ForLoopExpr &expr);
   void visit (AST::IfExpr &expr);
   void visit (AST::IfExprConseqElse &expr);
-  void visit (AST::IfExprConseqIf &expr);
-  void visit (AST::IfExprConseqIfLet &expr);
   void visit (AST::IfLetExpr &expr);
   void visit (AST::IfLetExprConseqElse &expr);
   void visit (AST::IfLetExprConseqIf &expr);