aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/hir
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-03-15 23:05:07 -0400
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 18:28:46 +0100
commitd88234af9ffa2f51e498dc518ccab8b1c293a148 (patch)
tree30eb657d2ad209077f4317b305d5c5b26f9720dd /gcc/rust/hir
parent5444ed27a8139d5d584859321a88cadaafdb1cb0 (diff)
downloadgcc-d88234af9ffa2f51e498dc518ccab8b1c293a148.zip
gcc-d88234af9ffa2f51e498dc518ccab8b1c293a148.tar.gz
gcc-d88234af9ffa2f51e498dc518ccab8b1c293a148.tar.bz2
gccrs: Unify AST::IfExprConseqIf{,Let} into AST::IfExprConseqElse
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>
Diffstat (limited to 'gcc/rust/hir')
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.cc6
-rw-r--r--gcc/rust/hir/rust-ast-lower-base.h2
-rw-r--r--gcc/rust/hir/rust-ast-lower-block.h7
-rw-r--r--gcc/rust/hir/rust-ast-lower-expr.cc6
-rw-r--r--gcc/rust/hir/rust-ast-lower-expr.h1
-rw-r--r--gcc/rust/hir/rust-ast-lower.cc37
6 files changed, 5 insertions, 54 deletions
diff --git a/gcc/rust/hir/rust-ast-lower-base.cc b/gcc/rust/hir/rust-ast-lower-base.cc
index 475c541..9c04c21 100644
--- a/gcc/rust/hir/rust-ast-lower-base.cc
+++ b/gcc/rust/hir/rust-ast-lower-base.cc
@@ -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
diff --git a/gcc/rust/hir/rust-ast-lower-base.h b/gcc/rust/hir/rust-ast-lower-base.h
index 699db72..2122779 100644
--- a/gcc/rust/hir/rust-ast-lower-base.h
+++ b/gcc/rust/hir/rust-ast-lower-base.h
@@ -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);
diff --git a/gcc/rust/hir/rust-ast-lower-block.h b/gcc/rust/hir/rust-ast-lower-block.h
index 638298a..a12fd87 100644
--- a/gcc/rust/hir/rust-ast-lower-block.h
+++ b/gcc/rust/hir/rust-ast-lower-block.h
@@ -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);
diff --git a/gcc/rust/hir/rust-ast-lower-expr.cc b/gcc/rust/hir/rust-ast-lower-expr.cc
index b98d743..c65b08e 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.cc
+++ b/gcc/rust/hir/rust-ast-lower-expr.cc
@@ -104,12 +104,6 @@ ASTLoweringExpr::visit (AST::IfExprConseqElse &expr)
}
void
-ASTLoweringExpr::visit (AST::IfExprConseqIf &expr)
-{
- translated = ASTLoweringIfBlock::translate (&expr, &terminated);
-}
-
-void
ASTLoweringExpr::visit (AST::BlockExpr &expr)
{
translated = ASTLoweringBlock::translate (&expr, &terminated);
diff --git a/gcc/rust/hir/rust-ast-lower-expr.h b/gcc/rust/hir/rust-ast-lower-expr.h
index a3c8787..d3e9532414 100644
--- a/gcc/rust/hir/rust-ast-lower-expr.h
+++ b/gcc/rust/hir/rust-ast-lower-expr.h
@@ -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;
diff --git a/gcc/rust/hir/rust-ast-lower.cc b/gcc/rust/hir/rust-ast-lower.cc
index 381b0297..c9d5d01 100644
--- a/gcc/rust/hir/rust-ast-lower.cc
+++ b/gcc/rust/hir/rust-ast-lower.cc
@@ -182,9 +182,9 @@ 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;
@@ -193,37 +193,10 @@ ASTLoweringIfBlock::visit (AST::IfExprConseqElse &expr)
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),
- UNKNOWN_LOCAL_DEFID);
-
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