aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/backend/rust-compile-base.h4
-rw-r--r--gcc/rust/backend/rust-compile-block.h180
-rw-r--r--gcc/rust/backend/rust-compile-expr.h24
-rw-r--r--gcc/rust/backend/rust-compile-extern.h5
-rw-r--r--gcc/rust/backend/rust-compile-fnparam.h18
-rw-r--r--gcc/rust/backend/rust-compile-implitem.h9
-rw-r--r--gcc/rust/backend/rust-compile-item.h30
-rw-r--r--gcc/rust/backend/rust-compile-pattern.h37
-rw-r--r--gcc/rust/backend/rust-compile-resolve-path.h18
-rw-r--r--gcc/rust/backend/rust-compile-stmt.h28
-rw-r--r--gcc/rust/backend/rust-compile-struct-field-expr.h61
-rw-r--r--gcc/rust/backend/rust-compile-var-decl.h49
-rw-r--r--gcc/rust/hir/tree/rust-hir-expr.h59
-rw-r--r--gcc/rust/hir/tree/rust-hir-full-test.cc780
-rw-r--r--gcc/rust/hir/tree/rust-hir-item.h48
-rw-r--r--gcc/rust/hir/tree/rust-hir-path.h6
-rw-r--r--gcc/rust/hir/tree/rust-hir-pattern.h10
-rw-r--r--gcc/rust/hir/tree/rust-hir-stmt.h4
-rw-r--r--gcc/rust/hir/tree/rust-hir-type.h12
-rw-r--r--gcc/rust/hir/tree/rust-hir-visitor.h173
-rw-r--r--gcc/rust/hir/tree/rust-hir.h22
-rw-r--r--gcc/rust/lint/rust-lint-scan-deadcode.h2
22 files changed, 1485 insertions, 94 deletions
diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h
index 5d27f7b..b434168 100644
--- a/gcc/rust/backend/rust-compile-base.h
+++ b/gcc/rust/backend/rust-compile-base.h
@@ -1,3 +1,5 @@
+// Copyright (C) 2020-2022 Free Software Foundation, Inc.
+
// This file is part of GCC.
// GCC is free software; you can redistribute it and/or modify it under
@@ -25,7 +27,7 @@
namespace Rust {
namespace Compile {
-class HIRCompileBase : public HIR::HIRFullVisitorBase
+class HIRCompileBase
{
public:
virtual ~HIRCompileBase () {}
diff --git a/gcc/rust/backend/rust-compile-block.h b/gcc/rust/backend/rust-compile-block.h
index a5a5896..4a3c6f5 100644
--- a/gcc/rust/backend/rust-compile-block.h
+++ b/gcc/rust/backend/rust-compile-block.h
@@ -25,10 +25,8 @@
namespace Rust {
namespace Compile {
-class CompileBlock : public HIRCompileBase
+class CompileBlock : public HIRCompileBase, public HIR::HIRExpressionVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree compile (HIR::BlockExpr *expr, Context *ctx, Bvariable *result)
{
@@ -39,6 +37,62 @@ public:
void visit (HIR::BlockExpr &expr) override;
+ // Empty visit for unused Expression HIR nodes.
+ void visit (HIR::PathInExpression &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::ClosureExprInner &) override {}
+ void visit (HIR::ClosureExprInnerTyped &) override {}
+ void visit (HIR::StructExprFieldIdentifier &) override {}
+ void visit (HIR::StructExprFieldIdentifierValue &) override {}
+ void visit (HIR::StructExprFieldIndexValue &) override {}
+ void visit (HIR::StructExprStruct &) override {}
+ void visit (HIR::StructExprStructFields &) override {}
+ void visit (HIR::IdentifierExpr &) override {}
+ void visit (HIR::LiteralExpr &) override {}
+ void visit (HIR::BorrowExpr &) override {}
+ void visit (HIR::DereferenceExpr &) override {}
+ void visit (HIR::ErrorPropagationExpr &) override {}
+ void visit (HIR::NegationExpr &) override {}
+ void visit (HIR::ArithmeticOrLogicalExpr &) override {}
+ void visit (HIR::ComparisonExpr &) override {}
+ void visit (HIR::LazyBooleanExpr &) override {}
+ void visit (HIR::TypeCastExpr &) override {}
+ void visit (HIR::AssignmentExpr &) override {}
+ void visit (HIR::CompoundAssignmentExpr &) override {}
+ void visit (HIR::GroupedExpr &) override {}
+ void visit (HIR::ArrayExpr &) override {}
+ void visit (HIR::ArrayIndexExpr &) override {}
+ void visit (HIR::TupleExpr &) override {}
+ void visit (HIR::TupleIndexExpr &) override {}
+ void visit (HIR::CallExpr &) override {}
+ void visit (HIR::MethodCallExpr &) override {}
+ void visit (HIR::FieldAccessExpr &) override {}
+ void visit (HIR::ContinueExpr &) override {}
+ void visit (HIR::BreakExpr &) override {}
+ void visit (HIR::RangeFromToExpr &) override {}
+ void visit (HIR::RangeFromExpr &) override {}
+ void visit (HIR::RangeToExpr &) override {}
+ void visit (HIR::RangeFullExpr &) override {}
+ void visit (HIR::RangeFromToInclExpr &) override {}
+ void visit (HIR::RangeToInclExpr &) override {}
+ void visit (HIR::ReturnExpr &) override {}
+ void visit (HIR::UnsafeBlockExpr &) override {}
+ void visit (HIR::LoopExpr &) override {}
+ void visit (HIR::WhileLoopExpr &) override {}
+ void visit (HIR::WhileLetLoopExpr &) override {}
+ void visit (HIR::ForLoopExpr &) override {}
+ void visit (HIR::IfExpr &) override {}
+ void visit (HIR::IfExprConseqElse &) override {}
+ void visit (HIR::IfExprConseqIf &) override {}
+ void visit (HIR::IfExprConseqIfLet &) 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 {}
+
private:
CompileBlock (Context *ctx, Bvariable *result)
: HIRCompileBase (ctx), translated (nullptr), result (result)
@@ -48,10 +102,9 @@ private:
Bvariable *result;
};
-class CompileConditionalBlocks : public HIRCompileBase
+class CompileConditionalBlocks : public HIRCompileBase,
+ public HIR::HIRExpressionVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree compile (HIR::IfExpr *expr, Context *ctx, Bvariable *result)
{
@@ -61,11 +114,63 @@ 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 {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::ClosureExprInner &) override {}
+ void visit (HIR::ClosureExprInnerTyped &) override {}
+ void visit (HIR::StructExprFieldIdentifier &) override {}
+ void visit (HIR::StructExprFieldIdentifierValue &) override {}
+ void visit (HIR::StructExprFieldIndexValue &) override {}
+ void visit (HIR::StructExprStruct &) override {}
+ void visit (HIR::StructExprStructFields &) override {}
+ void visit (HIR::IdentifierExpr &) override {}
+ void visit (HIR::LiteralExpr &) override {}
+ void visit (HIR::BorrowExpr &) override {}
+ void visit (HIR::DereferenceExpr &) override {}
+ void visit (HIR::ErrorPropagationExpr &) override {}
+ void visit (HIR::NegationExpr &) override {}
+ void visit (HIR::ArithmeticOrLogicalExpr &) override {}
+ void visit (HIR::ComparisonExpr &) override {}
+ void visit (HIR::LazyBooleanExpr &) override {}
+ void visit (HIR::TypeCastExpr &) override {}
+ void visit (HIR::AssignmentExpr &) override {}
+ void visit (HIR::CompoundAssignmentExpr &) override {}
+ void visit (HIR::GroupedExpr &) override {}
+ void visit (HIR::ArrayExpr &) override {}
+ void visit (HIR::ArrayIndexExpr &) override {}
+ void visit (HIR::TupleExpr &) override {}
+ void visit (HIR::TupleIndexExpr &) override {}
+ 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 {}
+ void visit (HIR::RangeFromExpr &) override {}
+ void visit (HIR::RangeToExpr &) override {}
+ void visit (HIR::RangeFullExpr &) override {}
+ void visit (HIR::RangeFromToInclExpr &) override {}
+ void visit (HIR::RangeToInclExpr &) override {}
+ void visit (HIR::ReturnExpr &) override {}
+ void visit (HIR::UnsafeBlockExpr &) override {}
+ void visit (HIR::LoopExpr &) override {}
+ 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 {}
+ void visit (HIR::IfLetExprConseqIfLet &) override {}
+ void visit (HIR::MatchExpr &) override {}
+ void visit (HIR::AwaitExpr &) override {}
+ void visit (HIR::AsyncBlockExpr &) override {}
+
private:
CompileConditionalBlocks (Context *ctx, Bvariable *result)
: HIRCompileBase (ctx), translated (nullptr), result (result)
@@ -75,10 +180,9 @@ private:
Bvariable *result;
};
-class CompileExprWithBlock : public HIRCompileBase
+class CompileExprWithBlock : public HIRCompileBase,
+ public HIR::HIRExpressionVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree compile (HIR::ExprWithBlock *expr, Context *ctx,
Bvariable *result)
@@ -103,6 +207,60 @@ public:
translated = CompileConditionalBlocks::compile (&expr, ctx, result);
}
+ // Empty visit for unused Expression HIR nodes.
+ void visit (HIR::PathInExpression &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::ClosureExprInner &) override {}
+ void visit (HIR::ClosureExprInnerTyped &) override {}
+ void visit (HIR::StructExprFieldIdentifier &) override {}
+ void visit (HIR::StructExprFieldIdentifierValue &) override {}
+ void visit (HIR::StructExprFieldIndexValue &) override {}
+ void visit (HIR::StructExprStruct &) override {}
+ void visit (HIR::StructExprStructFields &) override {}
+ void visit (HIR::IdentifierExpr &) override {}
+ void visit (HIR::LiteralExpr &) override {}
+ void visit (HIR::BorrowExpr &) override {}
+ void visit (HIR::DereferenceExpr &) override {}
+ void visit (HIR::ErrorPropagationExpr &) override {}
+ void visit (HIR::NegationExpr &) override {}
+ void visit (HIR::ArithmeticOrLogicalExpr &) override {}
+ void visit (HIR::ComparisonExpr &) override {}
+ void visit (HIR::LazyBooleanExpr &) override {}
+ void visit (HIR::TypeCastExpr &) override {}
+ void visit (HIR::AssignmentExpr &) override {}
+ void visit (HIR::CompoundAssignmentExpr &) override {}
+ void visit (HIR::GroupedExpr &) override {}
+ void visit (HIR::ArrayExpr &) override {}
+ void visit (HIR::ArrayIndexExpr &) override {}
+ void visit (HIR::TupleExpr &) override {}
+ void visit (HIR::TupleIndexExpr &) override {}
+ 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 {}
+ void visit (HIR::RangeFromExpr &) override {}
+ void visit (HIR::RangeToExpr &) override {}
+ void visit (HIR::RangeFullExpr &) override {}
+ void visit (HIR::RangeFromToInclExpr &) override {}
+ void visit (HIR::RangeToInclExpr &) override {}
+ void visit (HIR::ReturnExpr &) override {}
+ void visit (HIR::UnsafeBlockExpr &) override {}
+ void visit (HIR::LoopExpr &) override {}
+ 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 {}
+ void visit (HIR::IfLetExprConseqIfLet &) override {}
+ void visit (HIR::MatchExpr &) override {}
+ void visit (HIR::AwaitExpr &) override {}
+ void visit (HIR::AsyncBlockExpr &) override {}
+
private:
CompileExprWithBlock (Context *ctx, Bvariable *result)
: HIRCompileBase (ctx), translated (nullptr), result (result)
diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h
index f2b4df8..3cc51d4 100644
--- a/gcc/rust/backend/rust-compile-expr.h
+++ b/gcc/rust/backend/rust-compile-expr.h
@@ -29,10 +29,8 @@
namespace Rust {
namespace Compile {
-class CompileExpr : public HIRCompileBase
+class CompileExpr : public HIRCompileBase, public HIR::HIRExpressionVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree Compile (HIR::Expr *expr, Context *ctx)
{
@@ -769,9 +767,7 @@ public:
}
void visit (HIR::BorrowExpr &expr) override;
-
void visit (HIR::DereferenceExpr &expr) override;
-
void visit (HIR::MatchExpr &expr) override;
void visit (HIR::RangeFromToExpr &expr) override;
@@ -784,6 +780,24 @@ public:
void visit (HIR::RangeFromToInclExpr &expr) override;
+ // Empty visit for unused Expression HIR nodes.
+ void visit (HIR::ClosureExprInner &) override {}
+ void visit (HIR::ClosureExprInnerTyped &) override {}
+ void visit (HIR::StructExprFieldIdentifier &) override {}
+ void visit (HIR::StructExprFieldIdentifierValue &) override {}
+ void visit (HIR::StructExprFieldIndexValue &) override {}
+ void visit (HIR::ErrorPropagationExpr &) override {}
+ void visit (HIR::RangeToInclExpr &) 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 {}
+ void visit (HIR::IfLetExprConseqIfLet &) override {}
+ void visit (HIR::AwaitExpr &) override {}
+ void visit (HIR::AsyncBlockExpr &) override {}
+
protected:
tree compile_dyn_dispatch_call (const TyTy::DynamicObjectType *dyn,
TyTy::BaseType *receiver,
diff --git a/gcc/rust/backend/rust-compile-extern.h b/gcc/rust/backend/rust-compile-extern.h
index 1412e7a..1987805 100644
--- a/gcc/rust/backend/rust-compile-extern.h
+++ b/gcc/rust/backend/rust-compile-extern.h
@@ -25,10 +25,9 @@
namespace Rust {
namespace Compile {
-class CompileExternItem : public HIRCompileBase
+class CompileExternItem : public HIRCompileBase,
+ public HIR::HIRExternalItemVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static void compile (HIR::ExternalItem *item, Context *ctx,
TyTy::BaseType *concrete = nullptr)
diff --git a/gcc/rust/backend/rust-compile-fnparam.h b/gcc/rust/backend/rust-compile-fnparam.h
index 4ca26ec..74df725 100644
--- a/gcc/rust/backend/rust-compile-fnparam.h
+++ b/gcc/rust/backend/rust-compile-fnparam.h
@@ -24,10 +24,8 @@
namespace Rust {
namespace Compile {
-class CompileFnParam : public HIRCompileBase
+class CompileFnParam : public HIRCompileBase, public HIR::HIRPatternVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static Bvariable *compile (Context *ctx, tree fndecl,
HIR::FunctionParam *param, tree decl_type,
@@ -57,6 +55,18 @@ public:
= ctx->get_backend ()->parameter_variable (fndecl, "_", decl_type, locus);
}
+ // Empty visit for unused Pattern HIR nodes.
+ void visit (HIR::GroupedPattern &) override {}
+ void visit (HIR::LiteralPattern &) override {}
+ void visit (HIR::PathInExpression &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::RangePattern &) override {}
+ void visit (HIR::ReferencePattern &) override {}
+ void visit (HIR::SlicePattern &) override {}
+ void visit (HIR::StructPattern &) override {}
+ void visit (HIR::TuplePattern &) override {}
+ void visit (HIR::TupleStructPattern &) override {}
+
private:
CompileFnParam (Context *ctx, tree fndecl, tree decl_type, Location locus)
: HIRCompileBase (ctx), fndecl (fndecl), decl_type (decl_type),
@@ -69,7 +79,7 @@ private:
Bvariable *compiled_param;
};
-class CompileSelfParam : public HIRCompileBase
+class CompileSelfParam : public HIRCompileBase, public HIR::HIRStmtVisitor
{
public:
static Bvariable *compile (Context *ctx, tree fndecl, HIR::SelfParam &self,
diff --git a/gcc/rust/backend/rust-compile-implitem.h b/gcc/rust/backend/rust-compile-implitem.h
index 4d49c0b..ac9478a 100644
--- a/gcc/rust/backend/rust-compile-implitem.h
+++ b/gcc/rust/backend/rust-compile-implitem.h
@@ -29,8 +29,6 @@ namespace Compile {
// this is a proxy for HIR::ImplItem's back to use the normel HIR::Item path
class CompileInherentImplItem : public CompileItem
{
- using Rust::Compile::CompileItem::visit;
-
public:
static tree Compile (HIR::ImplItem *item, Context *ctx,
TyTy::BaseType *concrete = nullptr,
@@ -54,10 +52,8 @@ private:
{}
};
-class CompileTraitItem : public HIRCompileBase
+class CompileTraitItem : public HIRCompileBase, public HIR::HIRTraitItemVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree Compile (HIR::TraitItem *item, Context *ctx,
TyTy::BaseType *concrete, bool is_query_mode = false,
@@ -74,9 +70,10 @@ public:
}
void visit (HIR::TraitItemConst &constant) override;
-
void visit (HIR::TraitItemFunc &func) override;
+ void visit (HIR::TraitItemType &typ) override {}
+
private:
CompileTraitItem (Context *ctx, TyTy::BaseType *concrete, Location ref_locus)
: HIRCompileBase (ctx), concrete (concrete), reference (error_mark_node),
diff --git a/gcc/rust/backend/rust-compile-item.h b/gcc/rust/backend/rust-compile-item.h
index 897fe85..63316b9 100644
--- a/gcc/rust/backend/rust-compile-item.h
+++ b/gcc/rust/backend/rust-compile-item.h
@@ -24,11 +24,9 @@
namespace Rust {
namespace Compile {
-class CompileItem : public HIRCompileBase
+class CompileItem : public HIRCompileBase, public HIR::HIRStmtVisitor
{
protected:
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree compile (HIR::Item *item, Context *ctx,
TyTy::BaseType *concrete = nullptr,
@@ -46,17 +44,33 @@ public:
}
void visit (HIR::StaticItem &var) override;
-
void visit (HIR::ConstantItem &constant) override;
-
void visit (HIR::Function &function) override;
-
void visit (HIR::ImplBlock &impl_block) override;
-
void visit (HIR::ExternBlock &extern_block) override;
-
void visit (HIR::Module &module) override;
+ // Empty visit for unused Stmt HIR nodes.
+ void visit (HIR::TupleStruct &) override {}
+ void visit (HIR::EnumItem &) override {}
+ void visit (HIR::EnumItemTuple &) override {}
+ void visit (HIR::EnumItemStruct &) override {}
+ void visit (HIR::EnumItemDiscriminant &) override {}
+ void visit (HIR::TypePathSegmentFunction &) override {}
+ void visit (HIR::TypePath &) override {}
+ void visit (HIR::QualifiedPathInType &) override {}
+ void visit (HIR::ExternCrate &) override {}
+ void visit (HIR::UseDeclaration &) override {}
+ void visit (HIR::TypeAlias &) override {}
+ void visit (HIR::StructStruct &) override {}
+ void visit (HIR::Enum &) override {}
+ void visit (HIR::Union &) override {}
+ void visit (HIR::Trait &) override {}
+ void visit (HIR::EmptyStmt &) override {}
+ void visit (HIR::LetStmt &) override {}
+ void visit (HIR::ExprStmtWithoutBlock &) override {}
+ void visit (HIR::ExprStmtWithBlock &) override {}
+
protected:
CompileItem (Context *ctx, TyTy::BaseType *concrete, Location ref_locus)
: HIRCompileBase (ctx), concrete (concrete), reference (error_mark_node),
diff --git a/gcc/rust/backend/rust-compile-pattern.h b/gcc/rust/backend/rust-compile-pattern.h
index 535cf36..36e4ef3 100644
--- a/gcc/rust/backend/rust-compile-pattern.h
+++ b/gcc/rust/backend/rust-compile-pattern.h
@@ -21,10 +21,9 @@
namespace Rust {
namespace Compile {
-class CompilePatternCaseLabelExpr : public HIRCompileBase
+class CompilePatternCaseLabelExpr : public HIRCompileBase,
+ public HIR::HIRPatternVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree Compile (HIR::Pattern *pattern, tree associated_case_label,
Context *ctx)
@@ -35,14 +34,20 @@ public:
}
void visit (HIR::PathInExpression &pattern) override;
-
void visit (HIR::StructPattern &pattern) override;
-
void visit (HIR::TupleStructPattern &pattern) override;
-
void visit (HIR::WildcardPattern &pattern) override;
-private:
+ // Empty visit for unused Pattern HIR nodes.
+ void visit (HIR::GroupedPattern &) override {}
+ void visit (HIR::IdentifierPattern &) override {}
+ void visit (HIR::LiteralPattern &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::RangePattern &) override {}
+ void visit (HIR::ReferencePattern &) override {}
+ void visit (HIR::SlicePattern &) override {}
+ void visit (HIR::TuplePattern &) override {}
+
CompilePatternCaseLabelExpr (Context *ctx, tree associated_case_label)
: HIRCompileBase (ctx), case_label_expr (error_mark_node),
associated_case_label (associated_case_label)
@@ -52,10 +57,9 @@ private:
tree associated_case_label;
};
-class CompilePatternBindings : public HIRCompileBase
+class CompilePatternBindings : public HIRCompileBase,
+ public HIR::HIRPatternVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static void Compile (HIR::Pattern *pattern, tree match_scrutinee_expr,
Context *ctx)
@@ -65,9 +69,20 @@ public:
}
void visit (HIR::StructPattern &pattern) override;
-
void visit (HIR::TupleStructPattern &pattern) override;
+ // Empty visit for unused Pattern HIR nodes.
+ void visit (HIR::GroupedPattern &) override {}
+ void visit (HIR::IdentifierPattern &) override {}
+ void visit (HIR::LiteralPattern &) override {}
+ void visit (HIR::PathInExpression &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::RangePattern &) override {}
+ void visit (HIR::ReferencePattern &) override {}
+ void visit (HIR::SlicePattern &) override {}
+ void visit (HIR::TuplePattern &) override {}
+ void visit (HIR::WildcardPattern &) override {}
+
private:
CompilePatternBindings (Context *ctx, tree match_scrutinee_expr)
: HIRCompileBase (ctx), match_scrutinee_expr (match_scrutinee_expr)
diff --git a/gcc/rust/backend/rust-compile-resolve-path.h b/gcc/rust/backend/rust-compile-resolve-path.h
index 9c9d7c5..37dec0b 100644
--- a/gcc/rust/backend/rust-compile-resolve-path.h
+++ b/gcc/rust/backend/rust-compile-resolve-path.h
@@ -25,10 +25,8 @@
namespace Rust {
namespace Compile {
-class ResolvePathRef : public HIRCompileBase
+class ResolvePathRef : public HIRCompileBase, public HIR::HIRPatternVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree Compile (HIR::QualifiedPathInExpression &expr, Context *ctx)
{
@@ -45,10 +43,20 @@ public:
}
void visit (HIR::PathInExpression &expr) override;
-
void visit (HIR::QualifiedPathInExpression &expr) override;
-private:
+ // Empty visit for unused Pattern HIR nodes.
+ void visit (HIR::GroupedPattern &) override {}
+ void visit (HIR::IdentifierPattern &) override {}
+ void visit (HIR::LiteralPattern &) override {}
+ void visit (HIR::RangePattern &) override {}
+ void visit (HIR::ReferencePattern &) override {}
+ void visit (HIR::SlicePattern &) override {}
+ void visit (HIR::StructPattern &) override {}
+ void visit (HIR::TuplePattern &) override {}
+ void visit (HIR::TupleStructPattern &) override {}
+ void visit (HIR::WildcardPattern &) override {}
+
ResolvePathRef (Context *ctx)
: HIRCompileBase (ctx), resolved (error_mark_node)
{}
diff --git a/gcc/rust/backend/rust-compile-stmt.h b/gcc/rust/backend/rust-compile-stmt.h
index 24a2084..2dfb520 100644
--- a/gcc/rust/backend/rust-compile-stmt.h
+++ b/gcc/rust/backend/rust-compile-stmt.h
@@ -26,10 +26,8 @@
namespace Rust {
namespace Compile {
-class CompileStmt : public HIRCompileBase
+class CompileStmt : public HIRCompileBase, public HIR::HIRStmtVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree Compile (HIR::Stmt *stmt, Context *ctx)
{
@@ -103,6 +101,30 @@ public:
}
}
+ // Empty visit for unused Stmt HIR nodes.
+ void visit (HIR::TupleStruct &) override {}
+ void visit (HIR::EnumItem &) override {}
+ void visit (HIR::EnumItemTuple &) override {}
+ void visit (HIR::EnumItemStruct &) override {}
+ void visit (HIR::EnumItemDiscriminant &) override {}
+ void visit (HIR::TypePathSegmentFunction &) override {}
+ void visit (HIR::TypePath &) override {}
+ void visit (HIR::QualifiedPathInType &) override {}
+ void visit (HIR::Module &) override {}
+ void visit (HIR::ExternCrate &) override {}
+ void visit (HIR::UseDeclaration &) override {}
+ void visit (HIR::Function &) override {}
+ void visit (HIR::TypeAlias &) override {}
+ void visit (HIR::StructStruct &) override {}
+ void visit (HIR::Enum &) override {}
+ void visit (HIR::Union &) override {}
+ void visit (HIR::ConstantItem &) override {}
+ void visit (HIR::StaticItem &) override {}
+ void visit (HIR::Trait &) override {}
+ void visit (HIR::ImplBlock &) override {}
+ void visit (HIR::ExternBlock &) override {}
+ void visit (HIR::EmptyStmt &) override {}
+
private:
CompileStmt (Context *ctx) : HIRCompileBase (ctx), translated (nullptr) {}
diff --git a/gcc/rust/backend/rust-compile-struct-field-expr.h b/gcc/rust/backend/rust-compile-struct-field-expr.h
index 0570973..c5e986e 100644
--- a/gcc/rust/backend/rust-compile-struct-field-expr.h
+++ b/gcc/rust/backend/rust-compile-struct-field-expr.h
@@ -25,10 +25,9 @@
namespace Rust {
namespace Compile {
-class CompileStructExprField : public HIRCompileBase
+class CompileStructExprField : public HIRCompileBase,
+ public HIR::HIRExpressionVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
-
public:
static tree Compile (HIR::StructExprField *field, Context *ctx)
{
@@ -39,11 +38,63 @@ public:
}
void visit (HIR::StructExprFieldIdentifierValue &field) override;
-
void visit (HIR::StructExprFieldIndexValue &field) override;
-
void visit (HIR::StructExprFieldIdentifier &field) override;
+ // Empty visit for unused Expression HIR nodes.
+ void visit (HIR::PathInExpression &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::ClosureExprInner &) override {}
+ void visit (HIR::ClosureExprInnerTyped &) override {}
+ void visit (HIR::StructExprStruct &) override {}
+ void visit (HIR::StructExprStructFields &) override {}
+ void visit (HIR::IdentifierExpr &) override {}
+ void visit (HIR::LiteralExpr &) override {}
+ void visit (HIR::BorrowExpr &) override {}
+ void visit (HIR::DereferenceExpr &) override {}
+ void visit (HIR::ErrorPropagationExpr &) override {}
+ void visit (HIR::NegationExpr &) override {}
+ void visit (HIR::ArithmeticOrLogicalExpr &) override {}
+ void visit (HIR::ComparisonExpr &) override {}
+ void visit (HIR::LazyBooleanExpr &) override {}
+ void visit (HIR::TypeCastExpr &) override {}
+ void visit (HIR::AssignmentExpr &) override {}
+ void visit (HIR::CompoundAssignmentExpr &) override {}
+ void visit (HIR::GroupedExpr &) override {}
+ void visit (HIR::ArrayExpr &) override {}
+ void visit (HIR::ArrayIndexExpr &) override {}
+ void visit (HIR::TupleExpr &) override {}
+ void visit (HIR::TupleIndexExpr &) override {}
+ 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 {}
+ void visit (HIR::RangeFromExpr &) override {}
+ void visit (HIR::RangeToExpr &) override {}
+ void visit (HIR::RangeFullExpr &) override {}
+ void visit (HIR::RangeFromToInclExpr &) override {}
+ void visit (HIR::RangeToInclExpr &) override {}
+ void visit (HIR::ReturnExpr &) override {}
+ void visit (HIR::UnsafeBlockExpr &) override {}
+ void visit (HIR::LoopExpr &) override {}
+ void visit (HIR::WhileLoopExpr &) override {}
+ void visit (HIR::WhileLetLoopExpr &) override {}
+ void visit (HIR::ForLoopExpr &) override {}
+ void visit (HIR::IfExpr &) override {}
+ void visit (HIR::IfExprConseqElse &) override {}
+ void visit (HIR::IfExprConseqIf &) override {}
+ void visit (HIR::IfExprConseqIfLet &) 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 {}
+
private:
CompileStructExprField (Context *ctx)
: HIRCompileBase (ctx), translated (nullptr)
diff --git a/gcc/rust/backend/rust-compile-var-decl.h b/gcc/rust/backend/rust-compile-var-decl.h
index c431edd..2dab39e 100644
--- a/gcc/rust/backend/rust-compile-var-decl.h
+++ b/gcc/rust/backend/rust-compile-var-decl.h
@@ -20,13 +20,17 @@
#define RUST_COMPILE_VAR_DECL
#include "rust-compile-base.h"
+#include "rust-hir-visitor.h"
namespace Rust {
namespace Compile {
-class CompileVarDecl : public HIRCompileBase
+class CompileVarDecl : public HIRCompileBase,
+ public HIR::HIRPatternVisitor,
+ public HIR::HIRStmtVisitor
{
- using Rust::Compile::HIRCompileBase::visit;
+ using HIR::HIRPatternVisitor::visit;
+ using HIR::HIRStmtVisitor::visit;
public:
static ::Bvariable *compile (tree fndecl, HIR::Stmt *stmt, Context *ctx)
@@ -47,7 +51,8 @@ public:
rust_assert (ok);
translated_type = TyTyResolveCompile::compile (ctx, resolved_type);
- stmt.get_pattern ()->accept_vis (*this);
+ stmt.get_pattern ()->accept_vis (
+ static_cast<HIR::HIRPatternVisitor &> (*this));
}
void visit (HIR::IdentifierPattern &pattern) override
@@ -70,6 +75,44 @@ public:
NULL /*decl_var*/, locus);
}
+ // Empty visit for unused Pattern HIR nodes.
+ void visit (HIR::GroupedPattern &) override {}
+ void visit (HIR::LiteralPattern &) override {}
+ void visit (HIR::PathInExpression &) override {}
+ void visit (HIR::QualifiedPathInExpression &) override {}
+ void visit (HIR::RangePattern &) override {}
+ void visit (HIR::ReferencePattern &) override {}
+ void visit (HIR::SlicePattern &) override {}
+ void visit (HIR::StructPattern &) override {}
+ void visit (HIR::TuplePattern &) override {}
+ void visit (HIR::TupleStructPattern &) override {}
+
+ // Empty visit for unused Stmt HIR nodes.
+ void visit (HIR::EnumItemTuple &) override {}
+ void visit (HIR::EnumItemStruct &) override {}
+ void visit (HIR::EnumItem &item) override {}
+ void visit (HIR::TupleStruct &tuple_struct) override {}
+ void visit (HIR::EnumItemDiscriminant &) override {}
+ void visit (HIR::TypePathSegmentFunction &segment) override {}
+ void visit (HIR::TypePath &path) override {}
+ void visit (HIR::QualifiedPathInType &path) override {}
+ void visit (HIR::Module &module) override {}
+ void visit (HIR::ExternCrate &crate) override {}
+ void visit (HIR::UseDeclaration &use_decl) override {}
+ void visit (HIR::Function &function) override {}
+ void visit (HIR::TypeAlias &type_alias) override {}
+ void visit (HIR::StructStruct &struct_item) override {}
+ void visit (HIR::Enum &enum_item) override {}
+ void visit (HIR::Union &union_item) override {}
+ void visit (HIR::ConstantItem &const_item) override {}
+ void visit (HIR::StaticItem &static_item) override {}
+ void visit (HIR::Trait &trait) override {}
+ void visit (HIR::ImplBlock &impl) override {}
+ void visit (HIR::ExternBlock &block) override {}
+ void visit (HIR::EmptyStmt &stmt) override {}
+ void visit (HIR::ExprStmtWithoutBlock &stmt) override {}
+ void visit (HIR::ExprStmtWithBlock &stmt) override {}
+
private:
CompileVarDecl (Context *ctx, tree fndecl)
: HIRCompileBase (ctx), fndecl (fndecl), translated_type (error_mark_node),
diff --git a/gcc/rust/hir/tree/rust-hir-expr.h b/gcc/rust/hir/tree/rust-hir-expr.h
index b77545a..40c9fef 100644
--- a/gcc/rust/hir/tree/rust-hir-expr.h
+++ b/gcc/rust/hir/tree/rust-hir-expr.h
@@ -97,6 +97,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Literal &get_literal () { return literal; }
const Literal &get_literal () const { return literal; }
@@ -198,6 +199,7 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Mutability get_mut () const { return mut; }
bool is_mut () const { return mut == Mutability::Mut; }
@@ -234,6 +236,7 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -266,6 +269,7 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -310,6 +314,7 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -378,6 +383,7 @@ public:
= default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
void visit_lhs (HIRFullVisitor &vis) { main_or_left_expr->accept_vis (vis); }
void visit_rhs (HIRFullVisitor &vis) { right_expr->accept_vis (vis); }
@@ -452,6 +458,7 @@ public:
ComparisonExpr &operator= (ComparisonExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Expr *get_lhs () { return main_or_left_expr.get (); }
Expr *get_rhs () { return right_expr.get (); }
@@ -525,6 +532,7 @@ public:
ExprType get_expr_type () const { return expr_type; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Expr *get_lhs () { return main_or_left_expr.get (); }
@@ -586,6 +594,7 @@ public:
TypeCastExpr &operator= (TypeCastExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_casted_expr ()
{
@@ -654,6 +663,7 @@ public:
AssignmentExpr &operator= (AssignmentExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
void visit_lhs (HIRFullVisitor &vis) { main_or_left_expr->accept_vis (vis); }
void visit_rhs (HIRFullVisitor &vis) { right_expr->accept_vis (vis); }
@@ -726,6 +736,7 @@ public:
CompoundAssignmentExpr &operator= (CompoundAssignmentExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_left_expr ()
{
@@ -798,6 +809,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_expr_in_parens ()
{
@@ -1018,6 +1030,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
ArrayElems *get_internal_elements () { return internal_elements.get (); };
@@ -1083,6 +1096,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Expr *get_array_expr () { return array_expr.get (); }
Expr *get_index_expr () { return index_expr.get (); }
@@ -1166,6 +1180,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
const std::vector<std::unique_ptr<Expr> > &get_tuple_elems () const
{
@@ -1239,6 +1254,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_tuple_expr ()
{
@@ -1315,6 +1331,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -1395,6 +1412,7 @@ public:
virtual std::string as_string () const = 0;
virtual void accept_vis (HIRFullVisitor &vis) = 0;
+ virtual void accept_vis (HIRExpressionVisitor &vis) = 0;
Analysis::NodeMapping &get_mappings () { return mappings; }
@@ -1429,6 +1447,7 @@ public:
std::string as_string () const override { return field_name; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Identifier get_field_name () const { return field_name; }
@@ -1498,6 +1517,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -1525,10 +1545,11 @@ public:
std::string as_string () const override;
- void accept_vis (HIRFullVisitor &vis) override;
-
TupleIndex get_tuple_index () const { return index; };
+ 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 */
@@ -1598,6 +1619,7 @@ public:
StructExprStructFields &operator= (StructExprStructFields &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::vector<std::unique_ptr<StructExprField> > &get_fields ()
{
@@ -1654,6 +1676,8 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
+
StructBase *get_struct_base () { return &struct_base; }
protected:
@@ -1726,6 +1750,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Expr *get_fnexpr () { return function.get (); }
@@ -1812,6 +1837,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_receiver () { return receiver; }
@@ -1893,6 +1919,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_receiver_expr ()
{
@@ -2044,6 +2071,7 @@ public:
ClosureExprInner &operator= (ClosureExprInner &&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
@@ -2144,6 +2172,7 @@ public:
Location get_end_locus () const { return end_locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
bool is_final_stmt (Stmt *stmt) { return statements.back ().get () == stmt; }
@@ -2226,6 +2255,7 @@ public:
ClosureExprInnerTyped &operator= (ClosureExprInnerTyped &&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
@@ -2265,6 +2295,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Lifetime &get_label () { return label; }
@@ -2348,6 +2379,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Lifetime &get_label () { return label; }
@@ -2429,6 +2461,7 @@ public:
RangeFromToExpr &operator= (RangeFromToExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_from_expr () { return from; }
std::unique_ptr<Expr> &get_to_expr () { return to; }
@@ -2482,6 +2515,7 @@ public:
RangeFromExpr &operator= (RangeFromExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_from_expr () { return from; }
@@ -2535,6 +2569,7 @@ public:
RangeToExpr &operator= (RangeToExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_to_expr () { return to; }
@@ -2567,6 +2602,7 @@ public:
// outer attributes not allowed
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -2623,6 +2659,7 @@ public:
RangeFromToInclExpr &operator= (RangeFromToInclExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_from_expr () { return from; }
std::unique_ptr<Expr> &get_to_expr () { return to; }
@@ -2677,6 +2714,7 @@ public:
RangeToInclExpr &operator= (RangeToInclExpr &&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
@@ -2743,6 +2781,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
Expr *get_expr () { return return_expr.get (); }
@@ -2808,6 +2847,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<BlockExpr> &get_block_expr () { return expr; }
@@ -2932,6 +2972,7 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -2987,6 +3028,7 @@ public:
WhileLoopExpr &operator= (WhileLoopExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_predicate_expr () { return condition; }
@@ -3062,6 +3104,7 @@ public:
WhileLetLoopExpr &operator= (WhileLetLoopExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_cond () { return condition; }
@@ -3127,6 +3170,7 @@ public:
ForLoopExpr &operator= (ForLoopExpr &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_iterator_expr () { return iterator_expr; }
@@ -3202,6 +3246,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
void vis_if_condition (HIRFullVisitor &vis) { condition->accept_vis (vis); }
void vis_if_block (HIRFullVisitor &vis) { if_block->accept_vis (vis); }
@@ -3266,6 +3311,7 @@ public:
IfExprConseqElse &operator= (IfExprConseqElse &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
void vis_else_block (HIRFullVisitor &vis) { else_block->accept_vis (vis); }
@@ -3333,6 +3379,7 @@ public:
IfExprConseqIf &operator= (IfExprConseqIf &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
void vis_conseq_if_expr (HIRFullVisitor &vis)
{
@@ -3428,6 +3475,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
ExprType get_expression_type () const final override
{
@@ -3493,6 +3541,7 @@ public:
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
@@ -3560,6 +3609,7 @@ public:
IfLetExprConseqElse &operator= (IfLetExprConseqElse &&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
@@ -3626,6 +3676,7 @@ public:
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
@@ -3692,6 +3743,7 @@ public:
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
@@ -3892,6 +3944,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
std::unique_ptr<Expr> &get_scrutinee_expr ()
{
@@ -3959,6 +4012,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
ExprType get_expression_type () const final override
{
@@ -4015,6 +4069,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
ExprType get_expression_type () const final override
{
diff --git a/gcc/rust/hir/tree/rust-hir-full-test.cc b/gcc/rust/hir/tree/rust-hir-full-test.cc
index 9314c1d..3f3f484 100644
--- a/gcc/rust/hir/tree/rust-hir-full-test.cc
+++ b/gcc/rust/hir/tree/rust-hir-full-test.cc
@@ -3749,6 +3749,8 @@ Module::add_crate_name (std::vector<std::string> &names) const
item->add_crate_name (names);
}
+/* All accept_vis method below */
+
void
IdentifierExpr::accept_vis (HIRFullVisitor &vis)
{
@@ -3756,6 +3758,12 @@ IdentifierExpr::accept_vis (HIRFullVisitor &vis)
}
void
+IdentifierExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
Lifetime::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
@@ -3772,6 +3780,11 @@ PathInExpression::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
+void
+PathInExpression::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
void
TypePathSegment::accept_vis (HIRFullVisitor &vis)
@@ -3802,6 +3815,11 @@ QualifiedPathInExpression::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
+void
+QualifiedPathInExpression::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
void
QualifiedPathInType::accept_vis (HIRFullVisitor &vis)
@@ -3816,121 +3834,181 @@ LiteralExpr::accept_vis (HIRFullVisitor &vis)
}
void
+LiteralExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
BorrowExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+BorrowExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
DereferenceExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+DereferenceExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
ErrorPropagationExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+ErrorPropagationExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
NegationExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+NegationExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
ArithmeticOrLogicalExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+ArithmeticOrLogicalExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
ComparisonExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+ComparisonExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
LazyBooleanExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+LazyBooleanExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
TypeCastExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+TypeCastExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
AssignmentExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
+AssignmentExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
CompoundAssignmentExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-GroupedExpr::accept_vis (HIRFullVisitor &vis)
+CompoundAssignmentExpr::accept_vis (HIRExpressionVisitor &vis)
{
vis.visit (*this);
}
void
-ArrayElemsValues::accept_vis (HIRFullVisitor &vis)
+GroupedExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-ArrayElemsCopied::accept_vis (HIRFullVisitor &vis)
+GroupedExpr::accept_vis (HIRExpressionVisitor &vis)
{
vis.visit (*this);
}
void
-ArrayExpr::accept_vis (HIRFullVisitor &vis)
+ArrayElemsValues::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-ArrayIndexExpr::accept_vis (HIRFullVisitor &vis)
+ArrayElemsCopied::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-TupleExpr::accept_vis (HIRFullVisitor &vis)
+ArrayExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-TupleIndexExpr::accept_vis (HIRFullVisitor &vis)
+ArrayIndexExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-StructExprStruct::accept_vis (HIRFullVisitor &vis)
+TupleExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-StructExprFieldIdentifier::accept_vis (HIRFullVisitor &vis)
+TupleIndexExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-StructExprFieldIdentifierValue::accept_vis (HIRFullVisitor &vis)
+StructExprStruct::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
@@ -4121,56 +4199,56 @@ IfLetExprConseqIfLet::accept_vis (HIRFullVisitor &vis)
vis.visit (*this);
}
-/*void
-MatchCaseBlockExpr::accept_vis (HIRFullVisitor &vis)
+void
+MatchExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-MatchCaseExpr::accept_vis (HIRFullVisitor &vis)
+AwaitExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
-}*/
+}
void
-MatchExpr::accept_vis (HIRFullVisitor &vis)
+AsyncBlockExpr::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-AwaitExpr::accept_vis (HIRFullVisitor &vis)
+TypeParam::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-AsyncBlockExpr::accept_vis (HIRFullVisitor &vis)
+LifetimeWhereClauseItem::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-TypeParam::accept_vis (HIRFullVisitor &vis)
+TypeBoundWhereClauseItem::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-LifetimeWhereClauseItem::accept_vis (HIRFullVisitor &vis)
+Module::accept_vis (HIRFullVisitor &vis)
{
vis.visit (*this);
}
void
-TypeBoundWhereClauseItem::accept_vis (HIRFullVisitor &vis)
+Module::accept_vis (HIRStmtVisitor &vis)
{
vis.visit (*this);
}
void
-Module::accept_vis (HIRFullVisitor &vis)
+Module::accept_vis (HIRVisItemVisitor &vis)
{
vis.visit (*this);
}
@@ -4547,5 +4625,665 @@ BareFunctionType::accept_vis (HIRFullVisitor &vis)
vis.visit (*this);
}
+void
+NeverType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ParenthesisedType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+EmptyStmt::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+GroupedPattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+WildcardPattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TraitItemType::accept_vis (HIRTraitItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TraitItemConst::accept_vis (HIRTraitItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TraitItemFunc::accept_vis (HIRTraitItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExternalFunctionItem::accept_vis (HIRExternalItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExternalStaticItem::accept_vis (HIRExternalItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+EnumItemDiscriminant::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+EnumItemStruct::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+EnumItemTuple::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+EnumItem::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprStructFields::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprFieldIndexValue::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprFieldIdentifierValue::accept_vis (HIRFullVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprFieldIdentifierValue::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprFieldIdentifier::accept_vis (HIRFullVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprFieldIdentifier::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructExprStruct::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TupleType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+SliceType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ArrayType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ImplTraitTypeOneBound::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+BareFunctionType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TraitObjectType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RawPointerType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ReferenceType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ImplTraitType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+InferredType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+LetStmt::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TupleStructPattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+IdentifierPattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ReferencePattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+LiteralPattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructPattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TuplePattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+SlicePattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangePattern::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ForLoopExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TypePath::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+QualifiedPathInType::accept_vis (HIRTypeVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExprStmtWithoutBlock::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TupleExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+MatchExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+BreakExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+AwaitExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ArrayExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+LoopExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+WhileLetLoopExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+WhileLoopExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+CallExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangeFromToInclExpr::accept_vis (HIRExpressionVisitor &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)
+{
+ vis.visit (*this);
+}
+
+void
+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)
+{
+ vis.visit (*this);
+}
+
+void
+IfExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ClosureExprInner::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+UnsafeBlockExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangeToInclExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangeFromToExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+FieldAccessExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TupleIndexExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+MethodCallExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+AsyncBlockExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ArrayIndexExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangeFullExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangeFromExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ContinueExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+RangeToExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ReturnExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+QualifiedPathInExpression::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ClosureExprInnerTyped::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExprStmtWithBlock::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+PathInExpression::accept_vis (HIRPatternVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExternBlock::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExternBlock::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TypeAlias::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TypeAlias::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TypeAlias::accept_vis (HIRImplVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+BlockExpr::accept_vis (HIRExpressionVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Function::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Function::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Function::accept_vis (HIRImplVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Union::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Union::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Trait::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Trait::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Enum::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+Enum::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+UseDeclaration::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+UseDeclaration::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructStruct::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StructStruct::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ImplBlock::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ImplBlock::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ConstantItem::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ConstantItem::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ConstantItem::accept_vis (HIRImplVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TupleStruct::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+TupleStruct::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExternCrate::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+ExternCrate::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StaticItem::accept_vis (HIRStmtVisitor &vis)
+{
+ vis.visit (*this);
+}
+
+void
+StaticItem::accept_vis (HIRVisItemVisitor &vis)
+{
+ vis.visit (*this);
+}
+
} // namespace HIR
} // namespace Rust
diff --git a/gcc/rust/hir/tree/rust-hir-item.h b/gcc/rust/hir/tree/rust-hir-item.h
index ffde1ca..54ba7d5 100644
--- a/gcc/rust/hir/tree/rust-hir-item.h
+++ b/gcc/rust/hir/tree/rust-hir-item.h
@@ -677,10 +677,14 @@ protected:
VisItem &operator= (VisItem &&other) = default;
public:
+ using HIR::Stmt::accept_vis;
+
/* Does the item have some kind of public visibility (non-default
* visibility)? */
bool has_visibility () const { return !visibility.is_error (); }
+ virtual void accept_vis (HIRVisItemVisitor &vis) = 0;
+
Visibility &get_visibility () { return visibility; }
std::string as_string () const override;
@@ -744,6 +748,8 @@ public:
Module &operator= (Module &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<std::unique_ptr<Item>> &get_items () { return items; };
@@ -804,6 +810,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
// Override that adds extern crate name in decl to passed list of names.
void add_crate_name (std::vector<std::string> &names) const override
@@ -1069,6 +1077,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object
@@ -1181,6 +1191,9 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRImplVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
Analysis::NodeMapping get_impl_mappings () const override
{
@@ -1318,6 +1331,9 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRImplVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<std::unique_ptr<GenericParam>> &get_generic_params ()
{
@@ -1541,6 +1557,8 @@ public:
bool is_unit_struct () const { return is_unit; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<StructField> &get_fields () { return fields; }
@@ -1649,6 +1667,8 @@ public:
{}
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<TupleField> &get_fields () { return fields; }
const std::vector<TupleField> &get_fields () const { return fields; }
@@ -1696,7 +1716,9 @@ public:
virtual std::string as_string () const override;
// not pure virtual as not abstract
- virtual void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ // void accept_vis (HIRVisItemVisitor &vis) override;
Location get_locus () const override { return locus; }
@@ -1727,6 +1749,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
std::vector<TupleField> &get_tuple_fields () { return tuple_fields; }
@@ -1759,6 +1782,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
std::vector<StructField> &get_struct_fields () { return struct_fields; }
@@ -1807,6 +1831,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
std::unique_ptr<Expr> &get_discriminant_expression () { return expression; }
@@ -1901,6 +1926,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
Identifier get_identifier () const { return enum_name; }
@@ -2003,6 +2030,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<StructField> &get_variants () { return variants; }
@@ -2062,6 +2091,9 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRImplVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
Type *get_type () { return type.get (); }
@@ -2143,6 +2175,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
Identifier get_identifier () const { return name; }
@@ -2311,6 +2345,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTraitItemVisitor &vis) override;
TraitFunctionDecl &get_decl () { return decl; }
@@ -2396,6 +2431,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTraitItemVisitor &vis) override;
Identifier get_name () const { return name; }
@@ -2481,6 +2517,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTraitItemVisitor &vis) override;
Identifier get_name () const { return name; }
@@ -2601,6 +2638,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<std::unique_ptr<GenericParam>> &get_generic_params ()
{
@@ -2699,6 +2738,8 @@ public:
bool has_impl_items () const { return !impl_items.empty (); }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<std::unique_ptr<ImplItem>> &get_impl_items ()
{
@@ -2774,6 +2815,7 @@ public:
Location get_locus () const { return locus; }
virtual void accept_vis (HIRFullVisitor &vis) = 0;
+ virtual void accept_vis (HIRExternalItemVisitor &vis) = 0;
Analysis::NodeMapping get_mappings () const { return mappings; }
@@ -2852,6 +2894,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExternalItemVisitor &vis) override;
bool is_mut () const { return mut == Mutability::Mut; }
@@ -2994,6 +3037,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExternalItemVisitor &vis) override;
std::vector<std::unique_ptr<GenericParam>> &get_generic_params ()
{
@@ -3087,6 +3131,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
+ void accept_vis (HIRVisItemVisitor &vis) override;
std::vector<std::unique_ptr<ExternalItem>> &get_extern_items ()
{
diff --git a/gcc/rust/hir/tree/rust-hir-path.h b/gcc/rust/hir/tree/rust-hir-path.h
index cbbf93c..9858ba3 100644
--- a/gcc/rust/hir/tree/rust-hir-path.h
+++ b/gcc/rust/hir/tree/rust-hir-path.h
@@ -323,6 +323,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
bool opening_scope_resolution () { return has_opening_scope_resolution; }
@@ -706,6 +708,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
size_t get_num_segments () const { return segments.size (); }
@@ -829,6 +832,8 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
QualifiedPathType &get_path_type () { return path_type; }
@@ -927,6 +932,7 @@ public:
std::string as_string () const override;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
QualifiedPathType &get_path_type () { return path_type; }
diff --git a/gcc/rust/hir/tree/rust-hir-pattern.h b/gcc/rust/hir/tree/rust-hir-pattern.h
index 2d9c5fb..de4a83e 100644
--- a/gcc/rust/hir/tree/rust-hir-pattern.h
+++ b/gcc/rust/hir/tree/rust-hir-pattern.h
@@ -52,6 +52,7 @@ public:
Location get_locus () const override { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -132,6 +133,7 @@ public:
bool is_mut () const { return mut == Mutability::Mut; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -170,6 +172,7 @@ public:
Location get_locus () const override { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -353,6 +356,7 @@ public:
Location get_locus () const override { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -418,6 +422,7 @@ public:
bool is_mut () const { return mut == Mutability::Mut; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -699,6 +704,7 @@ public:
Location get_locus () const override { return path.get_locus (); }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
PathInExpression &get_path () { return path; }
StructPatternElements &get_struct_pattern_elems () { return elems; }
@@ -927,6 +933,7 @@ public:
Location get_locus () const override { return path.get_locus (); }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
PathInExpression &get_path () { return path; }
@@ -1116,6 +1123,7 @@ public:
Location get_locus () const override { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -1178,6 +1186,7 @@ public:
Location get_locus () const override { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
@@ -1242,6 +1251,7 @@ public:
Location get_locus () const override { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRPatternVisitor &vis) override;
Analysis::NodeMapping get_pattern_mappings () const override final
{
diff --git a/gcc/rust/hir/tree/rust-hir-stmt.h b/gcc/rust/hir/tree/rust-hir-stmt.h
index 43be744..54d3e21 100644
--- a/gcc/rust/hir/tree/rust-hir-stmt.h
+++ b/gcc/rust/hir/tree/rust-hir-stmt.h
@@ -40,6 +40,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
bool is_item () const override final { return false; }
@@ -114,6 +115,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
HIR::Type *get_type () { return type.get (); }
@@ -181,6 +183,7 @@ public:
ExprStmtWithoutBlock &operator= (ExprStmtWithoutBlock &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
Expr *get_expr () { return expr.get (); }
@@ -228,6 +231,7 @@ public:
ExprStmtWithBlock &operator= (ExprStmtWithBlock &&other) = default;
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRStmtVisitor &vis) override;
ExprWithBlock *get_expr () { return expr.get (); }
diff --git a/gcc/rust/hir/tree/rust-hir-type.h b/gcc/rust/hir/tree/rust-hir-type.h
index 6e5e221..8692dfd 100644
--- a/gcc/rust/hir/tree/rust-hir-type.h
+++ b/gcc/rust/hir/tree/rust-hir-type.h
@@ -139,6 +139,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
};
// An opaque value of another type that implements a set of traits
@@ -196,6 +197,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
std::vector<std::unique_ptr<TypeParamBound> > &get_type_param_bounds ()
{
@@ -275,6 +277,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
};
// Impl trait with a single bound? Poor reference material here.
@@ -311,6 +314,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
};
class TypePath; // definition moved to "rust-path.h"
@@ -362,6 +366,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
std::vector<std::unique_ptr<Type> > &get_elems () { return elems; }
const std::vector<std::unique_ptr<Type> > &get_elems () const
@@ -411,6 +416,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
};
// A type consisting of a pointer without safety or liveness guarantees
@@ -453,6 +459,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
std::unique_ptr<Type> &get_type () { return type; }
@@ -532,6 +539,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
Lifetime &get_lifetime () { return lifetime; }
@@ -598,6 +606,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
Type *get_element_type () { return elem_type.get (); }
@@ -657,6 +666,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
protected:
/* Use covariance to implement clone function as returning this object rather
@@ -703,6 +713,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
};
class QualifiedPathInType; // definition moved to "rust-path.h"
@@ -845,6 +856,7 @@ public:
Location get_locus () const { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRTypeVisitor &vis) override;
std::vector<MaybeNamedParam> &get_function_params () { return params; }
const std::vector<MaybeNamedParam> &get_function_params () const
diff --git a/gcc/rust/hir/tree/rust-hir-visitor.h b/gcc/rust/hir/tree/rust-hir-visitor.h
index 4ac7c63..42cc1ab 100644
--- a/gcc/rust/hir/tree/rust-hir-visitor.h
+++ b/gcc/rust/hir/tree/rust-hir-visitor.h
@@ -315,6 +315,179 @@ public:
virtual void visit (BareFunctionType &) override {}
};
+class HIRExternalItemVisitor
+{
+public:
+ virtual void visit (ExternalStaticItem &item) = 0;
+ virtual void visit (ExternalFunctionItem &item) = 0;
+};
+
+class HIRTraitItemVisitor
+{
+public:
+ virtual void visit (TraitItemFunc &item) = 0;
+ virtual void visit (TraitItemConst &item) = 0;
+ virtual void visit (TraitItemType &item) = 0;
+};
+
+class HIRVisItemVisitor
+{
+public:
+ virtual void visit (Module &module) = 0;
+ virtual void visit (ExternCrate &crate) = 0;
+ virtual void visit (UseDeclaration &use_decl) = 0;
+ virtual void visit (Function &function) = 0;
+ virtual void visit (TypeAlias &type_alias) = 0;
+ virtual void visit (StructStruct &struct_item) = 0;
+ virtual void visit (TupleStruct &tuple_struct) = 0;
+ virtual void visit (Enum &enum_item) = 0;
+ virtual void visit (Union &union_item) = 0;
+ virtual void visit (ConstantItem &const_item) = 0;
+ virtual void visit (StaticItem &static_item) = 0;
+ virtual void visit (Trait &trait) = 0;
+ virtual void visit (ImplBlock &impl) = 0;
+ virtual void visit (ExternBlock &block) = 0;
+};
+
+class HIRImplVisitor
+{
+public:
+ virtual void visit (Function &function) = 0;
+ virtual void visit (ConstantItem &const_item) = 0;
+ virtual void visit (TypeAlias &type_alias) = 0;
+};
+
+class HIRTypeVisitor
+{
+public:
+ virtual void visit (TypePathSegmentFunction &segment) = 0;
+ virtual void visit (TypePath &path) = 0;
+ virtual void visit (QualifiedPathInType &path) = 0;
+ virtual void visit (TraitBound &bound) = 0;
+ virtual void visit (ImplTraitType &type) = 0;
+ virtual void visit (TraitObjectType &type) = 0;
+ virtual void visit (ParenthesisedType &type) = 0;
+ virtual void visit (ImplTraitTypeOneBound &type) = 0;
+ virtual void visit (TupleType &type) = 0;
+ virtual void visit (NeverType &type) = 0;
+ virtual void visit (RawPointerType &type) = 0;
+ virtual void visit (ReferenceType &type) = 0;
+ virtual void visit (ArrayType &type) = 0;
+ virtual void visit (SliceType &type) = 0;
+ virtual void visit (InferredType &type) = 0;
+ virtual void visit (BareFunctionType &type) = 0;
+};
+
+class HIRStmtVisitor
+{
+public:
+ virtual void visit (EnumItemTuple &) = 0;
+ virtual void visit (EnumItemStruct &) = 0;
+ virtual void visit (EnumItem &item) = 0;
+ virtual void visit (TupleStruct &tuple_struct) = 0;
+ virtual void visit (EnumItemDiscriminant &) = 0;
+ virtual void visit (TypePathSegmentFunction &segment) = 0;
+ virtual void visit (TypePath &path) = 0;
+ virtual void visit (QualifiedPathInType &path) = 0;
+ virtual void visit (Module &module) = 0;
+ virtual void visit (ExternCrate &crate) = 0;
+ virtual void visit (UseDeclaration &use_decl) = 0;
+ virtual void visit (Function &function) = 0;
+ virtual void visit (TypeAlias &type_alias) = 0;
+ virtual void visit (StructStruct &struct_item) = 0;
+ virtual void visit (Enum &enum_item) = 0;
+ virtual void visit (Union &union_item) = 0;
+ virtual void visit (ConstantItem &const_item) = 0;
+ virtual void visit (StaticItem &static_item) = 0;
+ virtual void visit (Trait &trait) = 0;
+ virtual void visit (ImplBlock &impl) = 0;
+ virtual void visit (ExternBlock &block) = 0;
+ virtual void visit (EmptyStmt &stmt) = 0;
+ virtual void visit (LetStmt &stmt) = 0;
+ virtual void visit (ExprStmtWithoutBlock &stmt) = 0;
+ virtual void visit (ExprStmtWithBlock &stmt) = 0;
+};
+
+class HIRExpressionVisitor
+{
+public:
+ // These are StructExprField
+ // Added because of CompileStructExprField
+ virtual void visit (StructExprFieldIdentifier &field) = 0;
+ virtual void visit (StructExprFieldIdentifierValue &field) = 0;
+ virtual void visit (StructExprFieldIndexValue &field) = 0;
+
+ virtual void visit (HIR::QualifiedPathInExpression &expr) = 0;
+ virtual void visit (HIR::PathInExpression &expr) = 0;
+ virtual void visit (ClosureExprInnerTyped &) = 0;
+ virtual void visit (ClosureExprInner &expr) = 0;
+ virtual void visit (StructExprStructFields &) = 0;
+ virtual void visit (StructExprStruct &) = 0;
+ virtual void visit (IdentifierExpr &ident_expr) = 0;
+ virtual void visit (LiteralExpr &expr) = 0;
+ virtual void visit (BorrowExpr &expr) = 0;
+ virtual void visit (DereferenceExpr &expr) = 0;
+ virtual void visit (ErrorPropagationExpr &expr) = 0;
+ virtual void visit (NegationExpr &expr) = 0;
+ virtual void visit (ArithmeticOrLogicalExpr &expr) = 0;
+ virtual void visit (ComparisonExpr &expr) = 0;
+ virtual void visit (LazyBooleanExpr &expr) = 0;
+ virtual void visit (TypeCastExpr &expr) = 0;
+ virtual void visit (AssignmentExpr &expr) = 0;
+ virtual void visit (CompoundAssignmentExpr &expr) = 0;
+ virtual void visit (GroupedExpr &expr) = 0;
+ virtual void visit (ArrayExpr &expr) = 0;
+ virtual void visit (ArrayIndexExpr &expr) = 0;
+ virtual void visit (TupleExpr &expr) = 0;
+ virtual void visit (TupleIndexExpr &expr) = 0;
+ virtual void visit (CallExpr &expr) = 0;
+ virtual void visit (MethodCallExpr &expr) = 0;
+ virtual void visit (FieldAccessExpr &expr) = 0;
+ virtual void visit (BlockExpr &expr) = 0;
+ virtual void visit (ContinueExpr &expr) = 0;
+ virtual void visit (BreakExpr &expr) = 0;
+ virtual void visit (RangeFromToExpr &expr) = 0;
+ virtual void visit (RangeFromExpr &expr) = 0;
+ virtual void visit (RangeToExpr &expr) = 0;
+ virtual void visit (RangeFullExpr &expr) = 0;
+ virtual void visit (RangeFromToInclExpr &expr) = 0;
+ virtual void visit (RangeToInclExpr &expr) = 0;
+ virtual void visit (ReturnExpr &expr) = 0;
+ virtual void visit (UnsafeBlockExpr &expr) = 0;
+ virtual void visit (LoopExpr &expr) = 0;
+ virtual void visit (WhileLoopExpr &expr) = 0;
+ virtual void visit (WhileLetLoopExpr &expr) = 0;
+ 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;
+ virtual void visit (IfLetExprConseqIfLet &expr) = 0;
+ virtual void visit (MatchExpr &expr) = 0;
+ virtual void visit (AwaitExpr &expr) = 0;
+ virtual void visit (AsyncBlockExpr &expr) = 0;
+};
+
+class HIRPatternVisitor
+{
+public:
+ virtual void visit (GroupedPattern &) = 0;
+ virtual void visit (IdentifierPattern &) = 0;
+ virtual void visit (LiteralPattern &) = 0;
+ virtual void visit (PathInExpression &) = 0;
+ virtual void visit (QualifiedPathInExpression &) = 0;
+ virtual void visit (RangePattern &) = 0;
+ virtual void visit (ReferencePattern &) = 0;
+ virtual void visit (SlicePattern &) = 0;
+ virtual void visit (StructPattern &) = 0;
+ virtual void visit (TuplePattern &) = 0;
+ virtual void visit (TupleStructPattern &) = 0;
+ virtual void visit (WildcardPattern &) = 0;
+};
+
} // namespace HIR
} // namespace Rust
diff --git a/gcc/rust/hir/tree/rust-hir.h b/gcc/rust/hir/tree/rust-hir.h
index 1f82f37..760904b 100644
--- a/gcc/rust/hir/tree/rust-hir.h
+++ b/gcc/rust/hir/tree/rust-hir.h
@@ -33,6 +33,14 @@ typedef int TupleIndex;
namespace HIR {
// foward decl: ast visitor
class HIRFullVisitor;
+class HIRStmtVisitor;
+class HIRTraitItemVisitor;
+class HIRExternalItemVisitor;
+class HIRVisItemVisitor;
+class HIRExpressionVisitor;
+class HIRPatternVisitor;
+class HIRImplVisitor;
+class HIRTypeVisitor;
// forward decl for use in token tree method
class Token;
@@ -97,6 +105,7 @@ public:
virtual std::string as_string () const = 0;
virtual void accept_vis (HIRFullVisitor &vis) = 0;
+ virtual void accept_vis (HIRStmtVisitor &vis) = 0;
virtual Location get_locus () const = 0;
@@ -137,8 +146,6 @@ public:
add_crate_name (std::vector<std::string> &names ATTRIBUTE_UNUSED) const
{}
- virtual void accept_vis (HIRFullVisitor &vis ATTRIBUTE_UNUSED) {}
-
AST::AttrVec &get_outer_attrs () { return outer_attrs; }
const AST::AttrVec &get_outer_attrs () const { return outer_attrs; }
@@ -225,8 +232,6 @@ public:
virtual Location get_locus () const = 0;
- virtual void accept_vis (HIRFullVisitor &vis) = 0;
-
const Analysis::NodeMapping &get_mappings () const { return mappings; }
// Clone function implementation as pure virtual method
@@ -236,6 +241,9 @@ public:
virtual ExprType get_expression_type () const = 0;
+ virtual void accept_vis (HIRExpressionVisitor &vis) = 0;
+ virtual void accept_vis (HIRFullVisitor &vis) = 0;
+
protected:
// Constructor
Expr (Analysis::NodeMapping mappings,
@@ -318,6 +326,7 @@ public:
Location get_locus () const override final { return locus; }
void accept_vis (HIRFullVisitor &vis) override;
+ void accept_vis (HIRExpressionVisitor &vis) override;
// Clones this object.
std::unique_ptr<IdentifierExpr> clone_identifier_expr () const
@@ -380,6 +389,7 @@ public:
virtual std::string as_string () const = 0;
virtual void accept_vis (HIRFullVisitor &vis) = 0;
+ virtual void accept_vis (HIRPatternVisitor &vis) = 0;
virtual Analysis::NodeMapping get_pattern_mappings () const = 0;
@@ -420,6 +430,7 @@ public:
* declaration. */
virtual void accept_vis (HIRFullVisitor &vis) = 0;
+ virtual void accept_vis (HIRTypeVisitor &vis) = 0;
virtual Analysis::NodeMapping get_mappings () const { return mappings; }
@@ -704,6 +715,7 @@ public:
virtual std::string as_string () const = 0;
+ virtual void accept_vis (HIRTraitItemVisitor &vis) = 0;
virtual void accept_vis (HIRFullVisitor &vis) = 0;
virtual const std::string trait_identifier () const = 0;
@@ -733,7 +745,9 @@ public:
virtual std::string as_string () const = 0;
+ virtual void accept_vis (HIRImplVisitor &vis) = 0;
virtual void accept_vis (HIRFullVisitor &vis) = 0;
+ virtual void accept_vis (HIRStmtVisitor &vis) = 0;
virtual Analysis::NodeMapping get_impl_mappings () const = 0;
diff --git a/gcc/rust/lint/rust-lint-scan-deadcode.h b/gcc/rust/lint/rust-lint-scan-deadcode.h
index 86fd7af..7bb166a 100644
--- a/gcc/rust/lint/rust-lint-scan-deadcode.h
+++ b/gcc/rust/lint/rust-lint-scan-deadcode.h
@@ -144,4 +144,4 @@ private:
} // namespace Analysis
} // namespace Rust
-#endif \ No newline at end of file
+#endif