From 0406170acb40eb2eb029438565e64b895e6e02d6 Mon Sep 17 00:00:00 2001 From: Tim Keith Date: Mon, 26 Feb 2018 14:22:58 -0800 Subject: [PATCH] [flang] Reorder the Walk functions. Group the Walk functions that call WalkTupleClass, WalkUnionClass, WalkWrapperClass all together, after the ones that don't follow a simple pattern like that. Fix the name of the include guard macro. Original-commit: flang-compiler/f18@711613a4adaaf6083966b3993472dc74e97ba026 Reviewed-on: https://github.com/flang-compiler/f18/pull/15 Tree-same-pre-rewrite: false --- flang/lib/parser/parse-tree-visitor.h | 2273 ++++++++++++++------------------- 1 file changed, 926 insertions(+), 1347 deletions(-) diff --git a/flang/lib/parser/parse-tree-visitor.h b/flang/lib/parser/parse-tree-visitor.h index 5808d6e..4ec12e9 100644 --- a/flang/lib/parser/parse-tree-visitor.h +++ b/flang/lib/parser/parse-tree-visitor.h @@ -1,5 +1,5 @@ -#ifndef FORTRAN_PARSE_TREE_VISITOR_H_ -#define FORTRAN_PARSE_TREE_VISITOR_H_ +#ifndef FORTRAN_PARSER_PARSE_TREE_VISITOR_H_ +#define FORTRAN_PARSER_PARSE_TREE_VISITOR_H_ #include "format-specification.h" #include "parse-tree.h" @@ -33,32 +33,28 @@ ForEachInTuple(const std::tuple &tuple, Func func) { // Helpers: generic visitor that is called if there is no specific one // and visitors for std::optional, std::list, and Indirection. - template void Walk(const T &x, V &visitor) { if (visitor.Pre(x)) { visitor.Post(x); } } - template void Walk(const std::optional &x, V &visitor) { if (x) { Walk(*x, visitor); } } - template void Walk(const std::list &x, V &visitor) { for (const auto &elem : x) { Walk(elem, visitor); } } - template void Walk(const Indirection &x, V &visitor) { Walk(*x, visitor); } -// Walk the single field 'v' in the class +// Walk a class with a single field 'v'. template void WalkWrapperClass(const T &x, V &visitor) { if (visitor.Pre(x)) { Walk(x.v, visitor); @@ -66,7 +62,7 @@ template void WalkWrapperClass(const T &x, V &visitor) { } } -// Walk the single tuple field 't' in the class +// Walk a class with a single tuple field 't'. template void WalkTupleClass(const T &x, V &visitor) { if (visitor.Pre(x)) { ForEachInTuple(x.t, [&](const auto &y) { Walk(y, visitor); }); @@ -74,7 +70,7 @@ template void WalkTupleClass(const T &x, V &visitor) { } } -// Walk the single variant field 'u' in the class +// Walk a class with a single variant field 'u'. template void WalkUnionClass(const T &x, V &visitor) { if (visitor.Pre(x)) { std::visit([&](const auto &y) { Walk(y, visitor); }, x.u); @@ -82,22 +78,19 @@ template void WalkUnionClass(const T &x, V &visitor) { } } +// Walk a class with a single field 'thing'. template void Walk(const Scalar &x, V &visitor) { Walk(x.thing, visitor); } - template void Walk(const Constant &x, V &visitor) { Walk(x.thing, visitor); } - template void Walk(const Integer &x, V &visitor) { Walk(x.thing, visitor); } - template void Walk(const Logical &x, V &visitor) { Walk(x.thing, visitor); } - template void Walk(const DefaultChar &x, V &visitor) { Walk(x.thing, visitor); @@ -120,14 +113,6 @@ template void Walk(const LoopBounds &x, V &visitor) { } } -template void Walk(const AcImpliedDo &x, V &visitor) { - WalkTupleClass(x, visitor); -} - -template void Walk(const AcImpliedDoControl &x, V &visitor) { - WalkTupleClass(x, visitor); -} - template void Walk(const AcSpec &x, V &visitor) { if (visitor.Pre(x)) { Walk(x.type, visitor); @@ -135,1853 +120,1447 @@ template void Walk(const AcSpec &x, V &visitor) { visitor.Post(x); } } - -template void Walk(const AcValue &x, V &visitor) { - WalkUnionClass(x, visitor); -} - -template void Walk(const AcValue::Triplet &x, V &visitor) { - WalkTupleClass(x, visitor); -} - -template void Walk(const AccessId &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ArrayElement &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.base, visitor); + Walk(x.subscripts, visitor); + visitor.Post(x); + } } - -template void Walk(const AccessSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template +void Walk(const CharSelector::LengthAndKind &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.length, visitor); + Walk(x.kind, visitor); + visitor.Post(x); + } } - -template void Walk(const AccessStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const CoindexedNamedObject &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.base, visitor); + Walk(x.imageSelector, visitor); + visitor.Post(x); + } } - -template void Walk(const ActionStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template +void Walk(const DeclarationTypeSpec::Class &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.derived, visitor); + visitor.Post(x); + } } - -template void Walk(const ActualArg &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DeclarationTypeSpec::Type &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.derived, visitor); + visitor.Post(x); + } } - -template void Walk(const ActualArg::PercentRef &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::AND &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const ActualArg::PercentVal &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::Add &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const ActualArgSpec &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::ComplexConstructor &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocOpt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Expr::Concat &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocOpt::Mold &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::Divide &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocOpt::Source &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::EQ &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocatableStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::EQV &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocateCoarraySpec &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::GE &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocateObject &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Expr::GT &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocateShapeSpec &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::LE &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AllocateStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::LT &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const Allocation &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::Multiply &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AltReturnSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::NE &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const ArithmeticIfStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::NEQV &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const ArrayConstructor &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::NOT &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const ArrayElement &x, V &visitor) { +template void Walk(const Expr::Negate &x, V &visitor) { if (visitor.Pre(x)) { - Walk(x.base, visitor); - Walk(x.subscripts, visitor); + Walk(static_cast(x), visitor); visitor.Post(x); } } - -template void Walk(const ArraySection &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Expr::OR &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const ArraySpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Expr::Parentheses &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AssignStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::Power &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AssignedGotoStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::Subtract &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AssignmentStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::UnaryPlus &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(static_cast(x), visitor); + visitor.Post(x); + } } - -template void Walk(const AssociateConstruct &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Fortran::ControlEditDesc &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.kind, visitor); + visitor.Post(x); + } } - -template void Walk(const AssociateStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template +void Walk(const Fortran::DerivedTypeDataEditDesc &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.type, visitor); + Walk(x.parameters, visitor); + visitor.Post(x); + } } - -template void Walk(const Association &x, V &visitor) { - WalkTupleClass(x, visitor); +template +void Walk(const Fortran::IntrinsicTypeDataEditDesc &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.kind, visitor); + Walk(x.width, visitor); + Walk(x.digits, visitor); + Walk(x.exponentWidth, visitor); + visitor.Post(x); + } } - -template void Walk(const AssumedImpliedSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ImportStmt &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.names, visitor); + visitor.Post(x); + } } - -template void Walk(const AssumedShapeSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template +void Walk(const IntrinsicTypeSpec::Character &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.selector, visitor); + visitor.Post(x); + } +} +template +void Walk(const IntrinsicTypeSpec::Complex &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.kind, visitor); + visitor.Post(x); + } +} +template +void Walk(const IntrinsicTypeSpec::Logical &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.kind, visitor); + visitor.Post(x); + } +} +template void Walk(const IntrinsicTypeSpec::Real &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.kind, visitor); + visitor.Post(x); + } +} +template void Walk(const PartRef &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.name, visitor); + Walk(x.subscripts, visitor); + Walk(x.imageSelector, visitor); + visitor.Post(x); + } +} +template void Walk(const ReadStmt &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.iounit, visitor); + Walk(x.format, visitor); + Walk(x.controls, visitor); + Walk(x.items, visitor); + visitor.Post(x); + } +} +template void Walk(const RealLiteralConstant &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.intPart, visitor); + Walk(x.fraction, visitor); + Walk(x.exponent, visitor); + Walk(x.kind, visitor); + visitor.Post(x); + } +} +template void Walk(const StructureComponent &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.base, visitor); + Walk(x.component, visitor); + visitor.Post(x); + } +} +template void Walk(const Suffix &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.binding, visitor); + Walk(x.resultName, visitor); + visitor.Post(x); + } +} +template void Walk(const TypeAttrSpec::Extends &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.name, visitor); + visitor.Post(x); + } +} +template +void Walk(const TypeBoundProcedureStmt::WithInterface &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.interfaceName, visitor); + Walk(x.attributes, visitor); + Walk(x.bindingNames, visitor); + visitor.Post(x); + } +} +template +void Walk(const TypeBoundProcedureStmt::WithoutInterface &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.attributes, visitor); + Walk(x.declarations, visitor); + visitor.Post(x); + } +} +template void Walk(const WriteStmt &x, V &visitor) { + if (visitor.Pre(x)) { + Walk(x.iounit, visitor); + Walk(x.format, visitor); + Walk(x.controls, visitor); + Walk(x.items, visitor); + visitor.Post(x); + } } -template void Walk(const AssumedSizeSpec &x, V &visitor) { +// tuple classes +template void Walk(const AcImpliedDo &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const AsynchronousStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const AcImpliedDoControl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const AttrSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const AcValue::Triplet &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const BOZLiteralConstant &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const AccessStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const BackspaceStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ActualArgSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const BasedPointerStmt &x, V &visitor) { +template void Walk(const AllocateCoarraySpec &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const BindAttr &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const AllocateShapeSpec &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AllocateStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const Allocation &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const ArithmeticIfStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AssignStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AssignedGotoStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AssignmentStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AssociateConstruct &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AssociateStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const Association &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const AssumedSizeSpec &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const BasedPointerStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - template void Walk(const BindEntity &x, V &visitor) { WalkTupleClass(x, visitor); } - template void Walk(const BindStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - template void Walk(const BlockConstruct &x, V &visitor) { WalkTupleClass(x, visitor); } - template void Walk(const BlockData &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const BlockDataStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const BlockSpecificationPart &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const BlockStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - template void Walk(const BoundsRemapping &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const BoundsSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - template void Walk(const Call &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CallStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - template void Walk(const CaseConstruct &x, V &visitor) { WalkTupleClass(x, visitor); } - template void Walk(const CaseConstruct::Case &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CaseSelector &x, V &visitor) { - WalkUnionClass(x, visitor); -} - template void Walk(const CaseStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CaseValueRange &x, V &visitor) { - WalkUnionClass(x, visitor); -} - template void Walk(const ChangeTeamConstruct &x, V &visitor) { WalkTupleClass(x, visitor); } - template void Walk(const ChangeTeamStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CharLength &x, V &visitor) { - WalkUnionClass(x, visitor); -} - template void Walk(const CharLiteralConstant &x, V &visitor) { WalkTupleClass(x, visitor); } - template void Walk(const CharLiteralConstantSubstring &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CharSelector &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const CoarrayAssociation &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template -void Walk(const CharSelector::LengthAndKind &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.length, visitor); - Walk(x.kind, visitor); - visitor.Post(x); - } +template void Walk(const CodimensionDecl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CharVariable &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const CommonBlockObject &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CloseStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const CommonStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CloseStmt::CloseSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ComplexLiteralConstant &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CoarrayAssociation &x, V &visitor) { +template void Walk(const ComponentDecl &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CoarraySpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ComponentSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CodimensionDecl &x, V &visitor) { +template void Walk(const ComputedGotoStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CodimensionStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ConcurrentControl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CoindexedNamedObject &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.base, visitor); - Walk(x.imageSelector, visitor); - visitor.Post(x); - } +template void Walk(const ConcurrentHeader &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CommonBlockObject &x, V &visitor) { +template void Walk(const ConnectSpec::CharExpr &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CommonStmt &x, V &visitor) { +template void Walk(const CriticalConstruct &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ComplexLiteralConstant &x, V &visitor) { +template void Walk(const CriticalStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ComplexPart &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DataComponentDefStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ComplexPartDesignator &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const DataImpliedDo &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ComponentArraySpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DataStmtSet &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ComponentAttrSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DataStmtValue &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ComponentDataSource &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const DeallocateStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ComponentDecl &x, V &visitor) { +template void Walk(const DerivedTypeDef &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ComponentDefStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DerivedTypeSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ComponentSpec &x, V &visitor) { +template void Walk(const DerivedTypeStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ComputedGotoStmt &x, V &visitor) { +template +void Walk(const DimensionStmt::Declaration &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ConcurrentControl &x, V &visitor) { +template void Walk(const DoConstruct &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ConcurrentHeader &x, V &visitor) { +template void Walk(const ElseIfStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ConnectSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const EndChangeTeamStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ConnectSpec::CharExpr &x, V &visitor) { +template void Walk(const EntityDecl &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ConnectSpec::Newunit &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const EntryStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ConnectSpec::Recl &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const EnumDef &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ConstantValue &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Enumerator &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ContiguousStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const EventPostStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const CriticalConstruct &x, V &visitor) { +template void Walk(const EventWaitStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CriticalStmt &x, V &visitor) { +template void Walk(const ExplicitCoshapeSpec &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const CycleStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ExplicitShapeSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataComponentDefStmt &x, V &visitor) { +template void Walk(const ExponentPart &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DataIDoObject &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Expr::DefinedBinary &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataImpliedDo &x, V &visitor) { +template void Walk(const Expr::DefinedUnary &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DataReference &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Expr::IntrinsicBinary &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ForallConstruct &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataStmtConstant &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ForallConstructStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataStmtObject &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ForallStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataStmtRepeat &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const FormTeamStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DataStmtSet &x, V &visitor) { +template void Walk(const FunctionStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DataStmtValue &x, V &visitor) { +template void Walk(const FunctionSubprogram &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DeallocateStmt &x, V &visitor) { +template void Walk(const GenericStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DeclarationConstruct &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const IfConstruct &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DeclarationTypeSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const IfConstruct::ElseBlock &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template -void Walk(const DeclarationTypeSpec::Class &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.derived, visitor); - visitor.Post(x); - } +template void Walk(const IfConstruct::ElseIfBlock &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template -void Walk(const DeclarationTypeSpec::Record &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const IfStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DeclarationTypeSpec::Type &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.derived, visitor); - visitor.Post(x); - } +template void Walk(const IfThenStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DeferredCoshapeSpecList &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ImageSelector &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DeferredShapeSpecList &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ImplicitSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DefinedOpName &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const InputImpliedDo &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DefinedOperator &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const InquireSpec::CharVar &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DerivedTypeDef &x, V &visitor) { +template void Walk(const InquireSpec::IntVar &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DerivedTypeSpec &x, V &visitor) { +template void Walk(const InquireSpec::LogVar &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DerivedTypeStmt &x, V &visitor) { +template void Walk(const InquireStmt::Iolength &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const Designator &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const IntLiteralConstant &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const DimensionStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const IntentStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template -void Walk(const DimensionStmt::Declaration &x, V &visitor) { +template void Walk(const InterfaceBlock &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DoConstruct &x, V &visitor) { +template void Walk(const InterfaceBody::Function &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const DummyArg &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const InterfaceBody::Subroutine &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ElseIfStmt &x, V &visitor) { +template void Walk(const InternalSubprogramPart &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ElseStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const IoControlSpec::CharExpr &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ElsewhereStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const LabelDoStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndAssociateStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const LetterSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndBlockDataStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const LockStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndBlockStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const LoopControl::Concurrent &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndChangeTeamStmt &x, V &visitor) { +template void Walk(const MainProgram &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const EndCriticalStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Map &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndDoStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const MaskedElsewhereStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndForallStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Module &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndFunctionStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ModuleSubprogramPart &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndIfStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const NamedConstantDef &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndInterfaceStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const NamelistStmt::Group &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndLabel &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const NonLabelDoStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndModuleStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ObjectDecl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndMpSubprogramStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const OutputImpliedDo &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndProgramStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ParentIdentifier &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndSelectStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const PointerAssignmentStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndSubmoduleStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const PointerDecl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndSubroutineStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const PrintStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndTypeStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ProcComponentDefStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndWhereStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ProcComponentRef &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EndfileStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ProcDecl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EntityDecl &x, V &visitor) { +template void Walk(const ProcedureDeclarationStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const EntryStmt &x, V &visitor) { +template void Walk(const ProcedureStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const EnumDef &x, V &visitor) { +template void Walk(const RedimensionStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const Enumerator &x, V &visitor) { +template void Walk(const Rename::Names &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const EnumeratorDefStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Rename::Operators &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EorLabel &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SavedEntity &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EquivalenceObject &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SelectCaseStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EquivalenceStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SelectRankCaseStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ErrLabel &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SelectRankConstruct &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const EventPostStmt &x, V &visitor) { +template +void Walk(const SelectRankConstruct::RankCase &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const EventWaitStmt &x, V &visitor) { +template void Walk(const SelectRankStmt &x, V &visitor) { + WalkTupleClass(x, visitor); +} +template void Walk(const SelectTypeConstruct &x, V &visitor) { WalkTupleClass(x, visitor); } - template -void Walk(const EventWaitStmt::EventWaitSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +void Walk(const SelectTypeConstruct::TypeCase &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ExecutableConstruct &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const SelectTypeStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ExecutionPartConstruct &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const SeparateModuleSubprogram &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ExitStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template +void Walk(const SignedComplexLiteralConstant &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ExplicitCoshapeSpec &x, V &visitor) { +template void Walk(const SignedIntLiteralConstant &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ExplicitShapeSpec &x, V &visitor) { +template void Walk(const SignedRealLiteralConstant &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const ExponentPart &x, V &visitor) { +template void Walk(const SpecificationPart &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const Expr &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const StmtFunctionStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::AND &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const StopStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Add &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const StructureConstructor &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::ComplexConstructor &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const StructureDef &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Concat &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const StructureStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::DefinedBinary &x, V &visitor) { +template void Walk(const Submodule &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const Expr::DefinedUnary &x, V &visitor) { +template void Walk(const SubmoduleStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Divide &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const SubroutineStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::EQ &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const SubroutineSubprogram &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::EQV &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const SubscriptTriplet &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::GE &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const Substring &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::GT &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const SubstringRange &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::IntrinsicBinary &x, V &visitor) { +template void Walk(const SyncImagesStmt &x, V &visitor) { WalkTupleClass(x, visitor); } - -template void Walk(const Expr::IntrinsicUnary &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SyncTeamStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::LE &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeBoundGenericStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::LT &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeBoundProcDecl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Multiply &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeBoundProcedurePart &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::NE &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeDeclarationStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::NEQV &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeGuardStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::NOT &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeParamDecl &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Negate &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeParamDefStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::OR &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const TypeParamSpec &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Parentheses &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const Union &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::PercentLoc &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const UnlockStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Power &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const WhereConstruct &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::Subtract &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template void Walk(const WhereConstruct::Elsewhere &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const Expr::UnaryPlus &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(static_cast(x), visitor); - visitor.Post(x); - } +template +void Walk(const WhereConstruct::MaskedElsewhere &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const ExternalStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const WhereConstructStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } - -template void Walk(const FileUnitNumber &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const WhereStmt &x, V &visitor) { + WalkTupleClass(x, visitor); } -template void Walk(const FinalProcedureStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +// union classes +template void Walk(const AcValue &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const FlushStmt &x, V &visitor) { +template void Walk(const AccessId &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ForallAssignmentStmt &x, V &visitor) { +template void Walk(const ActionStmt &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ForallBodyConstruct &x, V &visitor) { +template void Walk(const ActualArg &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ForallConstruct &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const AllocOpt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ForallConstructStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const AllocateObject &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ForallStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ArraySpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const FormTeamStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const AttrSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template -void Walk(const FormTeamStmt::FormTeamSpec &x, V &visitor) { +template void Walk(const BackspaceStmt &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const Format &x, V &visitor) { +template void Walk(const BindAttr &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const FormatStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const CaseSelector &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const Fortran::ControlEditDesc &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.kind, visitor); - visitor.Post(x); - } +template void Walk(const CaseValueRange &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template -void Walk(const Fortran::DerivedTypeDataEditDesc &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.type, visitor); - Walk(x.parameters, visitor); - visitor.Post(x); - } +template void Walk(const CharLength &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const Fortran::FormatItem &x, V &visitor) { +template void Walk(const CharSelector &x, V &visitor) { WalkUnionClass(x, visitor); } - -template -void Walk(const Fortran::IntrinsicTypeDataEditDesc &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.kind, visitor); - Walk(x.width, visitor); - Walk(x.digits, visitor); - Walk(x.exponentWidth, visitor); - visitor.Post(x); - } +template void Walk(const CloseStmt::CloseSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const FunctionReference &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const CoarraySpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const FunctionStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ComplexPart &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const FunctionSubprogram &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ComponentArraySpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const GenericSpec &x, V &visitor) { +template void Walk(const ComponentAttrSpec &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const GenericStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ComponentDefStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const GotoStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ConnectSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const HollerithLiteralConstant &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ConstantValue &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IdExpr &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const DataIDoObject &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IdVariable &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const DataReference &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IfConstruct &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DataStmtConstant &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IfConstruct::ElseBlock &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DataStmtObject &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IfConstruct::ElseIfBlock &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DataStmtRepeat &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IfStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DeclarationConstruct &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IfThenStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DeclarationTypeSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ImageSelector &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DefinedOperator &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ImageSelectorSpec &x, V &visitor) { +template void Walk(const Designator &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ImageSelectorSpec::Stat &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const DummyArg &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ImageSelectorSpec::Team &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const EndfileStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - template -void Walk(const ImageSelectorSpec::Team_Number &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const ImplicitPart &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const ImplicitPartStmt &x, V &visitor) { +void Walk(const EventWaitStmt::EventWaitSpec &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ImplicitSpec &x, V &visitor) { - WalkTupleClass(x, visitor); -} - -template void Walk(const ImplicitStmt &x, V &visitor) { +template void Walk(const ExecutableConstruct &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ImpliedShapeSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ExecutionPartConstruct &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ImportStmt &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.names, visitor); - visitor.Post(x); - } +template void Walk(const Expr &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const Initialization &x, V &visitor) { +template void Walk(const FlushStmt &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const InputImpliedDo &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ForallAssignmentStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const InputItem &x, V &visitor) { +template void Walk(const ForallBodyConstruct &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const InquireSpec &x, V &visitor) { +template +void Walk(const FormTeamStmt::FormTeamSpec &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const InquireSpec::CharVar &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Format &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const InquireSpec::IntVar &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Fortran::FormatItem &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const InquireSpec::LogVar &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const GenericSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const InquireStmt &x, V &visitor) { +template void Walk(const ImageSelectorSpec &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const InquireStmt::Iolength &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ImplicitPartStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IntLiteralConstant &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ImplicitStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IntegerTypeSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Initialization &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IntentSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const InputItem &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const IntentStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const InquireSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const InterfaceBlock &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const InquireStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - template void Walk(const InterfaceBody &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const InterfaceBody::Function &x, V &visitor) { - WalkTupleClass(x, visitor); -} - -template void Walk(const InterfaceBody::Subroutine &x, V &visitor) { - WalkTupleClass(x, visitor); -} - template void Walk(const InterfaceSpecification &x, V &visitor) { WalkUnionClass(x, visitor); } - template void Walk(const InterfaceStmt &x, V &visitor) { WalkUnionClass(x, visitor); } - template void Walk(const InternalSubprogram &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const InternalSubprogramPart &x, V &visitor) { - WalkTupleClass(x, visitor); -} - -template void Walk(const IntrinsicStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - template void Walk(const IntrinsicTypeSpec &x, V &visitor) { WalkUnionClass(x, visitor); } - -template -void Walk(const IntrinsicTypeSpec::Character &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.selector, visitor); - visitor.Post(x); - } -} - -template -void Walk(const IntrinsicTypeSpec::Complex &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.kind, visitor); - visitor.Post(x); - } -} - -template -void Walk(const IntrinsicTypeSpec::Logical &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.kind, visitor); - visitor.Post(x); - } -} - -template -void Walk(const IntrinsicTypeSpec::NCharacter &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const IntrinsicTypeSpec::Real &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.kind, visitor); - visitor.Post(x); - } -} - template void Walk(const IoControlSpec &x, V &visitor) { - WalkUnionClass(x, visitor); -} - -template -void Walk(const IoControlSpec::Asynchronous &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const IoControlSpec::CharExpr &x, V &visitor) { - WalkTupleClass(x, visitor); -} - -template void Walk(const IoControlSpec::Pos &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const IoControlSpec::Rec &x, V &visitor) { - WalkWrapperClass(x, visitor); -} - -template void Walk(const IoControlSpec::Size &x, V &visitor) { - WalkWrapperClass(x, visitor); + WalkUnionClass(x, visitor); } - template void Walk(const IoUnit &x, V &visitor) { WalkUnionClass(x, visitor); } - template void Walk(const KindParam &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const KindSelector &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const LengthSelector &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LabelDoStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const LiteralConstant &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LanguageBindingSpec &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const LocalitySpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LengthSelector &x, V &visitor) { +template void Walk(const LockStmt::LockStat &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const LetterSpec &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const LoopControl &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LiteralConstant &x, V &visitor) { +template void Walk(const ModuleSubprogram &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const LocalitySpec &x, V &visitor) { +template void Walk(const Only &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const LocalitySpec::Local &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const OtherSpecificationStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LocalitySpec::LocalInit &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const OutputItem &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LocalitySpec::Shared &x, V &visitor) { - WalkWrapperClass(x, visitor); +template +void Walk(const PointerAssignmentStmt::Bounds &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LockStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const PointerObject &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LockStmt::LockStat &x, V &visitor) { +template void Walk(const PositionOrFlushSpec &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const LogicalLiteralConstant &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const PrefixSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const LoopControl &x, V &visitor) { +template void Walk(const PrivateOrSequence &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const LoopControl::Concurrent &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ProcAttrSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const MainProgram &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ProcComponentAttrSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const Map &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ProcInterface &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const MaskedElsewhereStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ProcPointerInit &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const Module &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ProcedureDesignator &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ModuleStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const ProgramUnit &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ModuleSubprogram &x, V &visitor) { +template void Walk(const Rename &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const ModuleSubprogramPart &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const RewindStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const MpSubprogramStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SectionSubscript &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const MsgVariable &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SelectRankCaseStmt::Rank &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const NamedConstant &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const Selector &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const NamedConstantDef &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const SpecificationConstruct &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const NamelistStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const StatOrErrmsg &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const NamelistStmt::Group &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const StopCode &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const NonLabelDoStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const StructureField &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const NullifyStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const SyncImagesStmt::ImageSet &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const ObjectDecl &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const TypeAttrSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const Only &x, V &visitor) { +template void Walk(const TypeBoundProcBinding &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const OpenStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const TypeBoundProcedureStmt &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const OptionalStmt &x, V &visitor) { - WalkWrapperClass(x, visitor); +template void Walk(const TypeGuardStmt::Guard &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const OtherSpecificationStmt &x, V &visitor) { +template void Walk(const TypeParamValue &x, V &visitor) { WalkUnionClass(x, visitor); } - -template void Walk(const OutputImpliedDo &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const TypeSpec &x, V &visitor) { + WalkUnionClass(x, visitor); } - -template void Walk(const OutputItem &x, V &visitor) { +template void Walk(const UseStmt &x, V &visitor) { + WalkUnionClass(x, visitor); +} +template void Walk(const Variable &x, V &visitor) { + WalkUnionClass(x, visitor); +} +template void Walk(const WaitSpec &x, V &visitor) { + WalkUnionClass(x, visitor); +} +template void Walk(const WhereBodyConstruct &x, V &visitor) { WalkUnionClass(x, visitor); } -template void Walk(const ParameterStmt &x, V &visitor) { +// wrapper classes +template void Walk(const AccessSpec &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const ParentIdentifier &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ActualArg::PercentRef &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PartRef &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.name, visitor); - Walk(x.subscripts, visitor); - Walk(x.imageSelector, visitor); - visitor.Post(x); - } +template void Walk(const ActualArg::PercentVal &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Pass &x, V &visitor) { +template void Walk(const AllocOpt::Mold &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const PauseStmt &x, V &visitor) { +template void Walk(const AllocOpt::Source &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const PointerAssignmentStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const AllocatableStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const PointerAssignmentStmt::Bounds &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const AltReturnSpec &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PointerDecl &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ArrayConstructor &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PointerObject &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ArraySection &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PointerStmt &x, V &visitor) { +template void Walk(const AssumedImpliedSpec &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const PositionOrFlushSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const AssumedShapeSpec &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PrefixSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const AsynchronousStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PrintStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const BOZLiteralConstant &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const PrivateOrSequence &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const BlockDataStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcAttrSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const BlockSpecificationPart &x, V &visitor) { + WalkWrapperClass(x, visitor); +} +template void Walk(const BlockStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); +} +template void Walk(const BoundsSpec &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcComponentAttrSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const CallStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcComponentDefStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const CharVariable &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcComponentRef &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const CloseStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcDecl &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const CodimensionStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcInterface &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ComplexPartDesignator &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcPointerInit &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ComponentDataSource &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcedureDeclarationStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ConnectSpec::Newunit &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcedureDesignator &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ConnectSpec::Recl &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProcedureStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ContiguousStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Program &x, V &visitor) { +template void Walk(const CycleStmt &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const ProgramUnit &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DataStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ProtectedStmt &x, V &visitor) { +template +void Walk(const DeclarationTypeSpec::Record &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const ReadStmt &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.iounit, visitor); - Walk(x.format, visitor); - Walk(x.controls, visitor); - Walk(x.items, visitor); - visitor.Post(x); - } +template void Walk(const DeferredCoshapeSpecList &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const RealLiteralConstant &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.intPart, visitor); - Walk(x.fraction, visitor); - Walk(x.exponent, visitor); - Walk(x.kind, visitor); - visitor.Post(x); - } +template void Walk(const DeferredShapeSpecList &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const RedimensionStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const DefinedOpName &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Rename &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const DimensionStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Rename::Names &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ElseStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Rename::Operators &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ElsewhereStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ReturnStmt &x, V &visitor) { +template void Walk(const EndAssociateStmt &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const RewindStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const EndBlockDataStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SaveStmt &x, V &visitor) { +template void Walk(const EndBlockStmt &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const SavedEntity &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndCriticalStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SectionSubscript &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const EndDoStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectCaseStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndForallStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectRankCaseStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndFunctionStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectRankCaseStmt::Rank &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const EndIfStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectRankConstruct &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndInterfaceStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const SelectRankConstruct::RankCase &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndLabel &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectRankStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndModuleStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectTypeConstruct &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndMpSubprogramStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const SelectTypeConstruct::TypeCase &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndProgramStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SelectTypeStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndSelectStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Selector &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const EndSubmoduleStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SeparateModuleSubprogram &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndSubroutineStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const SignedComplexLiteralConstant &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndTypeStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SignedIntLiteralConstant &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EndWhereStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SignedRealLiteralConstant &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EnumeratorDefStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SpecificationConstruct &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const EorLabel &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SpecificationExpr &x, V &visitor) { +template void Walk(const EquivalenceObject &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const SpecificationPart &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const EquivalenceStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StatOrErrmsg &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ErrLabel &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StatVariable &x, V &visitor) { +template void Walk(const ExitStmt &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const StatusExpr &x, V &visitor) { +template void Walk(const Expr::IntrinsicUnary &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const StmtFunctionStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Expr::PercentLoc &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StopCode &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ExternalStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StopStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const FileUnitNumber &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StructureComponent &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.base, visitor); - Walk(x.component, visitor); - visitor.Post(x); - } +template void Walk(const FinalProcedureStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StructureConstructor &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const FormatStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StructureDef &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const FunctionReference &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StructureField &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const GotoStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const StructureStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const HollerithLiteralConstant &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Submodule &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const IdExpr &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SubmoduleStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const IdVariable &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SubroutineStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ImageSelectorSpec::Stat &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SubroutineSubprogram &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ImageSelectorSpec::Team &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SubscriptTriplet &x, V &visitor) { - WalkTupleClass(x, visitor); +template +void Walk(const ImageSelectorSpec::Team_Number &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Substring &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ImplicitPart &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SubstringRange &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ImpliedShapeSpec &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Suffix &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.binding, visitor); - Walk(x.resultName, visitor); - visitor.Post(x); - } +template void Walk(const IntegerTypeSpec &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SyncAllStmt &x, V &visitor) { +template void Walk(const IntentSpec &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const SyncImagesStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const IntrinsicStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SyncImagesStmt::ImageSet &x, V &visitor) { - WalkUnionClass(x, visitor); +template +void Walk(const IntrinsicTypeSpec::NCharacter &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const SyncMemoryStmt &x, V &visitor) { +template +void Walk(const IoControlSpec::Asynchronous &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const SyncTeamStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const IoControlSpec::Pos &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TargetStmt &x, V &visitor) { +template void Walk(const IoControlSpec::Rec &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const TypeAttrSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const IoControlSpec::Size &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeAttrSpec::Extends &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.name, visitor); - visitor.Post(x); - } +template void Walk(const KindSelector &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeBoundGenericStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const LanguageBindingSpec &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeBoundProcBinding &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const LocalitySpec::Local &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeBoundProcDecl &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const LocalitySpec::LocalInit &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeBoundProcedurePart &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const LocalitySpec::Shared &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeBoundProcedureStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const LogicalLiteralConstant &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const TypeBoundProcedureStmt::WithInterface &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.interfaceName, visitor); - Walk(x.attributes, visitor); - Walk(x.bindingNames, visitor); - visitor.Post(x); - } +template void Walk(const ModuleStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const TypeBoundProcedureStmt::WithoutInterface &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.attributes, visitor); - Walk(x.declarations, visitor); - visitor.Post(x); - } +template void Walk(const MpSubprogramStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeDeclarationStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const MsgVariable &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeGuardStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const NamedConstant &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeGuardStmt::Guard &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const NamelistStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeParamDecl &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const NullifyStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeParamDefStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const OpenStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeParamInquiry &x, V &visitor) { +template void Walk(const OptionalStmt &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const TypeParamSpec &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ParameterStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeParamValue &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const Pass &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const TypeSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const PauseStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const Union &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const PointerStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const UnlockStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const Program &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const UseStmt &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const ProtectedStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const ValueStmt &x, V &visitor) { +template void Walk(const ReturnStmt &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const Variable &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const SaveStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const VolatileStmt &x, V &visitor) { +template void Walk(const SpecificationExpr &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const WaitSpec &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const StatVariable &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const WaitStmt &x, V &visitor) { +template void Walk(const StatusExpr &x, V &visitor) { WalkWrapperClass(x, visitor); } - -template void Walk(const WhereBodyConstruct &x, V &visitor) { - WalkUnionClass(x, visitor); +template void Walk(const SyncAllStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const WhereConstruct &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const SyncMemoryStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const WhereConstruct::Elsewhere &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const TargetStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template -void Walk(const WhereConstruct::MaskedElsewhere &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const TypeParamInquiry &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const WhereConstructStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const ValueStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const WhereStmt &x, V &visitor) { - WalkTupleClass(x, visitor); +template void Walk(const VolatileStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } - -template void Walk(const WriteStmt &x, V &visitor) { - if (visitor.Pre(x)) { - Walk(x.iounit, visitor); - Walk(x.format, visitor); - Walk(x.controls, visitor); - Walk(x.items, visitor); - visitor.Post(x); - } +template void Walk(const WaitStmt &x, V &visitor) { + WalkWrapperClass(x, visitor); } } // namespace parser } // namespace Fortran -#endif // FORTRAN_PARSE_TREE_VISITOR_H_ +#endif // FORTRAN_PARSER_PARSE_TREE_VISITOR_H_ -- 2.7.4