This should allow for 'if let' expressions to be lowered more easily.
gcc/rust/ChangeLog:
* backend/rust-compile-block.h
(CompileConditionalBlocks::visit): Remove IfLetExprConseqIf{,Let} visitors.
(CompileExprWithBlock::visit): Remove IfLetExprConseqIf{,Let} visitors.
* backend/rust-compile-expr.h
(CompileExpr::visit): Remove IfLetExprConseqIf{,Let} visitors.
* checks/errors/rust-unsafe-checker.cc
(UnsafeChecker::visit): Remove IfLetExprConseqIf{,Let} visitors.
* checks/errors/rust-unsafe-checker.h
(UnsafeChecker::visit): Remove IfLetExprConseqIf{,Let} visitors.
* checks/errors/rust-const-checker.cc
(ConstChecker::visit): Remove IfLetExprConseqIf{,Let} visitors.
* checks/errors/rust-const-checker.h
(ConstChecker::visit): Remove IfLetExprConseqIf{,Let} visitors.
* checks/errors/privacy/rust-privacy-reporter.cc
(PrivacyReporter::visit): Remove IfLetExprConseqIf{,Let} visitors.
* checks/errors/privacy/rust-privacy-reporter.h
(PrivacyReporter::visit): Remove IfLetExprConseqIf{,Let} visitors.
* hir/tree/rust-hir-expr.h
(class IfLetExprConseqElse): Make else_block ExprWithBlock.
(class IfLetExprConseqIf): Remove.
(class IfLetExprConseqIfLet): Remove.
* hir/tree/rust-hir-full-decls.h
(class IfLetExprConseqIf): Remove.
(class IfLetExprConseqIfLet): Remove.
* hir/tree/rust-hir.cc
(IfLetExprConseqElse::as_string): Adjust output.
(IfLetExprConseqIf::as_string): Remove.
(IfLetExprConseqIfLet::as_string): Remove.
(IfLetExprConseqIf::accept_vis): Remove.
(IfLetExprConseqIfLet::accept_vis): Remove.
* hir/tree/rust-hir-visitor.h
(HIRFullVisitor::visit): Remove IfLetExprConseqIf{,Let} visitors.
(HIRFullVisitorBase::visit): Remove IfLetExprConseqIf{,Let} visitors.
(HIRExpressionVisitor::visit): Remove IfLetExprConseqIf{,Let} visitors.
* hir/rust-hir-dump.cc
(Dump::visit): Remove IfLetExprConseqIf{,Let} visitors.
* hir/rust-hir-dump.h
(Dump::visit): Remove IfLetExprConseqIf{,Let} visitors.
* typecheck/rust-hir-type-check-expr.h
(TypeCheckExpr::visit): Remove IfLetExprConseqIf{,Let} visitors.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
void visit (HIR::ForLoopExpr &) override {}
void visit (HIR::IfLetExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
- void visit (HIR::IfLetExprConseqIf &) override {}
- void visit (HIR::IfLetExprConseqIfLet &) override {}
void visit (HIR::MatchExpr &) override {}
void visit (HIR::AwaitExpr &) override {}
void visit (HIR::AsyncBlockExpr &) override {}
void visit (HIR::ForLoopExpr &) override {}
void visit (HIR::IfLetExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
- void visit (HIR::IfLetExprConseqIf &) override {}
- void visit (HIR::IfLetExprConseqIfLet &) override {}
void visit (HIR::MatchExpr &) override {}
void visit (HIR::AwaitExpr &) override {}
void visit (HIR::AsyncBlockExpr &) override {}
void visit (HIR::WhileLetLoopExpr &) override {}
void visit (HIR::IfLetExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
- void visit (HIR::IfLetExprConseqIf &) override {}
- void visit (HIR::IfLetExprConseqIfLet &) override {}
// lets not worry about async yet....
void visit (HIR::AwaitExpr &) override {}
// TODO: We need to visit the else_block as well
}
-void
-PrivacyReporter::visit (HIR::IfLetExprConseqIf &)
-{
- // TODO: We need to visit the if_let_expr
- // TODO: We need to visit the if_block as well
- // TODO: We need to visit the else_block as well
-}
-
-void
-PrivacyReporter::visit (HIR::IfLetExprConseqIfLet &)
-{
- // TODO: We need to visit the if_let_expr
- // TODO: We need to visit the if_block as well
- // TODO: We need to visit the else_block as well
-}
-
void
PrivacyReporter::visit (HIR::MatchExpr &expr)
{
virtual void visit (HIR::IfExprConseqElse &expr);
virtual void visit (HIR::IfLetExpr &expr);
virtual void visit (HIR::IfLetExprConseqElse &expr);
- virtual void visit (HIR::IfLetExprConseqIf &expr);
- virtual void visit (HIR::IfLetExprConseqIfLet &expr);
virtual void visit (HIR::MatchExpr &expr);
virtual void visit (HIR::AwaitExpr &expr);
virtual void visit (HIR::AsyncBlockExpr &expr);
// TODO: Visit else expression
}
-void
-ConstChecker::visit (IfLetExprConseqIf &expr)
-{
- expr.get_scrutinee_expr ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-}
-
-void
-ConstChecker::visit (IfLetExprConseqIfLet &expr)
-{
- expr.get_scrutinee_expr ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-
- // TODO: Visit conseq if let expression
-}
-
void
ConstChecker::visit (MatchExpr &expr)
{
virtual void visit (IfExprConseqElse &expr) override;
virtual void visit (IfLetExpr &expr) override;
virtual void visit (IfLetExprConseqElse &expr) override;
- virtual void visit (IfLetExprConseqIf &expr) override;
- virtual void visit (IfLetExprConseqIfLet &expr) override;
virtual void visit (MatchExpr &expr) override;
virtual void visit (AwaitExpr &expr) override;
virtual void visit (AsyncBlockExpr &expr) override;
// TODO: Visit else expression
}
-void
-UnsafeChecker::visit (IfLetExprConseqIf &expr)
-{
- expr.get_scrutinee_expr ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-}
-
-void
-UnsafeChecker::visit (IfLetExprConseqIfLet &expr)
-{
- expr.get_scrutinee_expr ()->accept_vis (*this);
- expr.get_if_block ()->accept_vis (*this);
-
- // TODO: Visit conseq if let expression
-}
-
void
UnsafeChecker::visit (MatchExpr &expr)
{
virtual void visit (IfExprConseqElse &expr) override;
virtual void visit (IfLetExpr &expr) override;
virtual void visit (IfLetExprConseqElse &expr) override;
- virtual void visit (IfLetExprConseqIf &expr) override;
- virtual void visit (IfLetExprConseqIfLet &expr) override;
virtual void visit (MatchExpr &expr) override;
virtual void visit (AwaitExpr &expr) override;
virtual void visit (AsyncBlockExpr &expr) override;
void
Dump::visit (IfLetExprConseqElse &)
{}
-void
-Dump::visit (IfLetExprConseqIf &)
-{}
-void
-Dump::visit (IfLetExprConseqIfLet &)
-{}
void
Dump::visit (MatchExpr &)
virtual void visit (IfExprConseqElse &) override;
virtual void visit (IfLetExpr &) override;
virtual void visit (IfLetExprConseqElse &) override;
- virtual void visit (IfLetExprConseqIf &) override;
- virtual void visit (IfLetExprConseqIfLet &) override;
virtual void visit (MatchExpr &) override;
virtual void visit (AwaitExpr &) override;
* end */
class IfLetExprConseqElse : public IfLetExpr
{
- std::unique_ptr<BlockExpr> else_block;
+ std::unique_ptr<ExprWithBlock> else_block;
public:
std::string as_string () const override;
// copy constructor with clone
IfLetExprConseqElse (IfLetExprConseqElse const &other)
- : IfLetExpr (other), else_block (other.else_block->clone_block_expr ())
+ : IfLetExpr (other), else_block (other.else_block->clone_expr_with_block ())
{}
// overload assignment operator to clone
// match_arm_patterns = other.match_arm_patterns;
// value = other.value->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 ();
// outer_attrs = other.outer_attrs;
return *this;
}
};
-/* HIR node representing "if let" expression with an "else if" expression at the
- * end */
-class IfLetExprConseqIf : public IfLetExpr
-{
- std::unique_ptr<IfExpr> if_expr;
-
-public:
- std::string as_string () const override;
-
- IfLetExprConseqIf (Analysis::NodeMapping mappings,
- std::vector<std::unique_ptr<Pattern> > match_arm_patterns,
- std::unique_ptr<Expr> value,
- std::unique_ptr<BlockExpr> if_block,
- std::unique_ptr<IfExpr> if_expr, Location locus)
- : IfLetExpr (std::move (mappings), std::move (match_arm_patterns),
- std::move (value), std::move (if_block), locus),
- if_expr (std::move (if_expr))
- {}
- // again, outer attributes not allowed
-
- // copy constructor with clone
- IfLetExprConseqIf (IfLetExprConseqIf const &other)
- : IfLetExpr (other), if_expr (other.if_expr->clone_if_expr ())
- {}
-
- // overload assignment operator to clone
- IfLetExprConseqIf &operator= (IfLetExprConseqIf const &other)
- {
- IfLetExpr::operator= (other);
- // match_arm_patterns = other.match_arm_patterns;
- // value = other.value->clone_expr();
- // if_block = other.if_block->clone_block_expr();
- if_expr = other.if_expr->clone_if_expr ();
-
- return *this;
- }
-
- // move constructors
- IfLetExprConseqIf (IfLetExprConseqIf &&other) = default;
- IfLetExprConseqIf &operator= (IfLetExprConseqIf &&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 */
- IfLetExprConseqIf *clone_expr_impl () const override
- {
- return new IfLetExprConseqIf (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfLetExprConseqIf *clone_expr_with_block_impl () const override
- {
- return new IfLetExprConseqIf (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfLetExprConseqIf *clone_if_let_expr_impl () const override
- {
- return new IfLetExprConseqIf (*this);
- }
-};
-
-/* HIR node representing "if let" expression with an "else if let" expression at
- * the end */
-class IfLetExprConseqIfLet : public IfLetExpr
-{
- std::unique_ptr<IfLetExpr> if_let_expr;
-
-public:
- std::string as_string () const override;
-
- IfLetExprConseqIfLet (
- Analysis::NodeMapping mappings,
- std::vector<std::unique_ptr<Pattern> > match_arm_patterns,
- std::unique_ptr<Expr> value, std::unique_ptr<BlockExpr> if_block,
- std::unique_ptr<IfLetExpr> if_let_expr, Location locus)
- : IfLetExpr (std::move (mappings), std::move (match_arm_patterns),
- std::move (value), std::move (if_block), locus),
- if_let_expr (std::move (if_let_expr))
- {}
- // outer attributes not allowed
-
- // copy constructor with clone
- IfLetExprConseqIfLet (IfLetExprConseqIfLet const &other)
- : IfLetExpr (other), if_let_expr (other.if_let_expr->clone_if_let_expr ())
- {}
-
- // overload assignment operator to clone
- IfLetExprConseqIfLet &operator= (IfLetExprConseqIfLet const &other)
- {
- IfLetExpr::operator= (other);
- // match_arm_patterns = other.match_arm_patterns;
- // value = other.value->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
- IfLetExprConseqIfLet (IfLetExprConseqIfLet &&other) = default;
- IfLetExprConseqIfLet &operator= (IfLetExprConseqIfLet &&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 */
- IfLetExprConseqIfLet *clone_expr_impl () const override
- {
- return new IfLetExprConseqIfLet (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfLetExprConseqIfLet *clone_expr_with_block_impl () const override
- {
- return new IfLetExprConseqIfLet (*this);
- }
-
- /* Use covariance to implement clone function as returning this object rather
- * than base */
- IfLetExprConseqIfLet *clone_if_let_expr_impl () const override
- {
- return new IfLetExprConseqIfLet (*this);
- }
-};
-
// Match arm expression
struct MatchArm
{
class IfExprConseqElse;
class IfLetExpr;
class IfLetExprConseqElse;
-class IfLetExprConseqIf;
-class IfLetExprConseqIfLet;
struct MatchArm;
// class MatchCase;
// class MatchCaseBlockExpr;
virtual void visit (IfExprConseqElse &expr) = 0;
virtual void visit (IfLetExpr &expr) = 0;
virtual void visit (IfLetExprConseqElse &expr) = 0;
- virtual void visit (IfLetExprConseqIf &expr) = 0;
- virtual void visit (IfLetExprConseqIfLet &expr) = 0;
virtual void visit (MatchExpr &expr) = 0;
virtual void visit (AwaitExpr &expr) = 0;
virtual void visit (AsyncBlockExpr &expr) = 0;
virtual void visit (IfExprConseqElse &) override {}
virtual void visit (IfLetExpr &) override {}
virtual void visit (IfLetExprConseqElse &) override {}
- virtual void visit (IfLetExprConseqIf &) override {}
- virtual void visit (IfLetExprConseqIfLet &) override {}
virtual void visit (MatchExpr &) override {}
virtual void visit (AwaitExpr &) override {}
virtual void visit (IfExprConseqElse &expr) = 0;
virtual void visit (IfLetExpr &expr) = 0;
virtual void visit (IfLetExprConseqElse &expr) = 0;
- virtual void visit (IfLetExprConseqIf &expr) = 0;
- virtual void visit (IfLetExprConseqIfLet &expr) = 0;
virtual void visit (MatchExpr &expr) = 0;
virtual void visit (AwaitExpr &expr) = 0;
virtual void visit (AsyncBlockExpr &expr) = 0;
{
std::string str = IfLetExpr::as_string ();
- str += "\n Else block expr: " + else_block->as_string ();
-
- return str;
-}
-
-std::string
-IfLetExprConseqIf::as_string () const
-{
- std::string str = IfLetExpr::as_string ();
-
- str += "\n Else if expr: \n " + if_expr->as_string ();
-
- return str;
-}
-
-std::string
-IfLetExprConseqIfLet::as_string () const
-{
- std::string str = IfLetExpr::as_string ();
-
- str += "\n Else if let expr: \n " + if_let_expr->as_string ();
+ str += "\n Else expr: " + else_block->as_string ();
return str;
}
vis.visit (*this);
}
-void
-IfLetExprConseqIf::accept_vis (HIRFullVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
-IfLetExprConseqIfLet::accept_vis (HIRFullVisitor &vis)
-{
- vis.visit (*this);
-}
-
void
MatchExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
-void
-IfLetExprConseqIfLet::accept_vis (HIRExpressionVisitor &vis)
-{
- vis.visit (*this);
-}
-
-void
-IfLetExprConseqIf::accept_vis (HIRExpressionVisitor &vis)
-{
- vis.visit (*this);
-}
-
void
IfLetExprConseqElse::accept_vis (HIRExpressionVisitor &vis)
{
void visit (HIR::WhileLetLoopExpr &) override {}
void visit (HIR::ForLoopExpr &) override {}
void visit (HIR::IfLetExprConseqElse &) override {}
- void visit (HIR::IfLetExprConseqIf &) override {}
- void visit (HIR::IfLetExprConseqIfLet &) override {}
void visit (HIR::AwaitExpr &) override {}
void visit (HIR::AsyncBlockExpr &) override {}