diff options
Diffstat (limited to 'gcc')
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 |