[flang] Improve dumping of enums in parse tree

Change dump-parse-tree.h to dump enumerator names rather than just type
names for data members whose types are defined with ENUM_CLASS.

Original-commit: flang-compiler/f18@57bd4f3af9
Reviewed-on: https://github.com/flang-compiler/f18/pull/175
Tree-same-pre-rewrite: false
This commit is contained in:
Tim Keith 2018-09-05 13:44:22 -07:00
parent 47d3e5d0a1
commit 8fddf6b34f

View file

@ -25,6 +25,8 @@
namespace Fortran::semantics {
using namespace std::string_literals;
//
// Dump the Parse Tree hierarchy of any node 'x' of the parse tree.
//
@ -36,6 +38,10 @@ public:
constexpr const char *GetNodeName(const char *const &) { return "char *"; }
#define NODE_NAME(T, N) \
constexpr const char *GetNodeName(const T &) { return N; }
#define NODE_ENUM(T, E) \
std::string GetNodeName(const T::E &x) { \
return #E " = "s + T::EnumToString(x); \
}
#define NODE(T1, T2) NODE_NAME(T1::T2, #T2)
NODE_NAME(bool, "bool")
NODE_NAME(int, "int")
@ -53,7 +59,7 @@ public:
NODE(parser, AccessStmt)
NODE(parser, AccessId)
NODE(parser, AccessSpec)
NODE(parser::AccessSpec, Kind)
NODE_ENUM(parser::AccessSpec, Kind)
NODE(parser, AcSpec)
NODE(parser, ActionStmt)
NODE(parser, ActualArg)
@ -96,7 +102,7 @@ public:
NODE(parser::BindAttr, Deferred)
NODE(parser::BindAttr, Non_Overridable)
NODE(parser, BindEntity)
NODE(parser::BindEntity, Kind)
NODE_ENUM(parser::BindEntity, Kind)
NODE(parser, BindStmt)
NODE(parser, Block)
NODE(parser, BlockConstruct)
@ -148,7 +154,7 @@ public:
NODE(parser, ConcurrentHeader)
NODE(parser, ConnectSpec)
NODE(parser::ConnectSpec, CharExpr)
NODE(parser::ConnectSpec::CharExpr, Kind)
NODE_ENUM(parser::ConnectSpec::CharExpr, Kind)
NODE(parser::ConnectSpec, Newunit)
NODE(parser::ConnectSpec, Recl)
NODE(parser, ConstantValue)
@ -182,7 +188,7 @@ public:
NODE(parser, DeferredShapeSpecList)
NODE(parser, DefinedOpName)
NODE(parser, DefinedOperator)
NODE(parser::DefinedOperator, IntrinsicOperator)
NODE_ENUM(parser::DefinedOperator, IntrinsicOperator)
NODE(parser, DerivedTypeDef)
NODE(parser, DerivedTypeSpec)
NODE(parser, DerivedTypeStmt)
@ -304,7 +310,7 @@ public:
NODE(parser, ImplicitPartStmt)
NODE(parser, ImplicitSpec)
NODE(parser, ImplicitStmt)
NODE(parser::ImplicitStmt, ImplicitNoneNameSpec)
NODE_ENUM(parser::ImplicitStmt, ImplicitNoneNameSpec)
NODE(parser, ImpliedShapeSpec)
NODE(parser, ImportStmt)
NODE(parser, Initialization)
@ -312,16 +318,16 @@ public:
NODE(parser, InputItem)
NODE(parser, InquireSpec)
NODE(parser::InquireSpec, CharVar)
NODE(parser::InquireSpec::CharVar, Kind)
NODE_ENUM(parser::InquireSpec::CharVar, Kind)
NODE(parser::InquireSpec, IntVar)
NODE(parser::InquireSpec::IntVar, Kind)
NODE_ENUM(parser::InquireSpec::IntVar, Kind)
NODE(parser::InquireSpec, LogVar)
NODE(parser::InquireSpec::LogVar, Kind)
NODE_ENUM(parser::InquireSpec::LogVar, Kind)
NODE(parser, InquireStmt)
NODE(parser::InquireStmt, Iolength)
NODE(parser, IntegerTypeSpec)
NODE(parser, IntentSpec)
NODE(parser::IntentSpec, Intent)
NODE_ENUM(parser::IntentSpec, Intent)
NODE(parser, IntentStmt)
NODE(parser, InterfaceBlock)
NODE(parser, InterfaceBody)
@ -345,7 +351,7 @@ public:
NODE(parser, IoControlSpec)
NODE(parser::IoControlSpec, Asynchronous)
NODE(parser::IoControlSpec, CharExpr)
NODE(parser::IoControlSpec::CharExpr, Kind)
NODE_ENUM(parser::IoControlSpec::CharExpr, Kind)
NODE(parser::IoControlSpec, Pos)
NODE(parser::IoControlSpec, Rec)
NODE(parser::IoControlSpec, Size)
@ -464,30 +470,30 @@ public:
NODE(parser::OmpClause, Untied)
NODE(parser::OmpClause, UseDevicePtr)
NODE(parser, OmpDefaultClause)
NODE(parser::OmpDefaultClause, Type)
NODE_ENUM(parser::OmpDefaultClause, Type)
NODE(parser, OmpDependClause)
NODE(parser::OmpDependClause, InOut)
NODE(parser::OmpDependClause, Sink)
NODE(parser::OmpDependClause, Source)
NODE(parser, OmpDependenceType)
NODE(parser::OmpDependenceType, Type)
NODE_ENUM(parser::OmpDependenceType, Type)
NODE(parser, OmpDependSinkVec)
NODE(parser, OmpDependSinkVecLength)
NODE(parser, OmpEndBlockDirective)
NODE(parser, OmpIfClause)
NODE(parser::OmpIfClause, DirectiveNameModifier)
NODE_ENUM(parser::OmpIfClause, DirectiveNameModifier)
NODE(parser, OmpLinearClause)
NODE(parser::OmpLinearClause, WithModifier)
NODE(parser::OmpLinearClause, WithoutModifier)
NODE(parser, OmpLinearModifier)
NODE(parser::OmpLinearModifier, Type)
NODE_ENUM(parser::OmpLinearModifier, Type)
NODE(parser, OpenMPDeclareReductionConstruct)
NODE(parser, OmpReductionInitializerClause)
NODE(parser, OmpReductionCombiner)
NODE(parser::OmpReductionCombiner, FunctionCombiner)
NODE(parser, OpenMPDeclareSimdConstruct)
NODE(parser, OmpDeclareTargetMapType)
NODE(parser::OmpDeclareTargetMapType, Type)
NODE_ENUM(parser::OmpDeclareTargetMapType, Type)
NODE(parser, OpenMPEndLoopDirective)
NODE(parser, OpenMPDeclareTargetConstruct)
NODE(parser::OpenMPDeclareTargetConstruct, Implicit)
@ -520,21 +526,21 @@ public:
NODE(parser::OmpLoopDirective, TeamsDistributeSimd)
NODE(parser, OmpNowait)
NODE(parser, OmpScheduleClause)
NODE(parser::OmpScheduleClause, ScheduleType)
NODE_ENUM(parser::OmpScheduleClause, ScheduleType)
NODE(parser, OmpScheduleModifier)
NODE(parser::OmpScheduleModifier, Modifier1)
NODE(parser::OmpScheduleModifier, Modifier2)
NODE(parser, OmpScheduleModifierType)
NODE(parser::OmpScheduleModifierType, ModType)
NODE_ENUM(parser::OmpScheduleModifierType, ModType)
NODE(parser, OmpMapClause)
NODE(parser, OmpMapType)
NODE(parser::OmpMapType, Always)
NODE(parser::OmpMapType, Type)
NODE_ENUM(parser::OmpMapType, Type)
NODE(parser, OmpObject)
NODE(parser::OmpObject, Kind)
NODE_ENUM(parser::OmpObject, Kind)
NODE(parser, OmpObjectList)
NODE(parser, OmpProcBindClause)
NODE(parser::OmpProcBindClause, Type)
NODE_ENUM(parser::OmpProcBindClause, Type)
NODE(parser, OmpReductionOperator)
NODE(parser, OmpSection)
NODE(parser, OmpStandaloneDirective)
@ -542,7 +548,7 @@ public:
NODE(parser, OpenMPCancelConstruct)
NODE(parser::OpenMPCancelConstruct, If)
NODE(parser, OmpCancelType)
NODE(parser::OmpCancelType, Type)
NODE_ENUM(parser::OmpCancelType, Type)
NODE(parser, OpenMPFlushConstruct)
NODE(parser::OmpStandaloneDirective, TargetEnterData)
NODE(parser::OmpStandaloneDirective, TargetExitData)
@ -598,7 +604,7 @@ public:
NODE(parser, ProcedureDeclarationStmt)
NODE(parser, ProcedureDesignator)
NODE(parser, ProcedureStmt)
NODE(parser::ProcedureStmt, Kind)
NODE_ENUM(parser::ProcedureStmt, Kind)
NODE(parser, Program)
NODE(parser, ProgramStmt)
NODE(parser, ProgramUnit)
@ -615,7 +621,7 @@ public:
NODE(parser, Save)
NODE(parser, SaveStmt)
NODE(parser, SavedEntity)
NODE(parser::SavedEntity, Kind)
NODE_ENUM(parser::SavedEntity, Kind)
NODE(parser, SectionSubscript)
NODE(parser, SelectCaseStmt)
NODE(parser, SelectRankCaseStmt)
@ -643,7 +649,7 @@ public:
NODE(parser, StmtFunctionStmt)
NODE(parser, StopCode)
NODE(parser, StopStmt)
NODE(parser::StopStmt, Kind)
NODE_ENUM(parser::StopStmt, Kind)
NODE(parser, StructureComponent)
NODE(parser, StructureConstructor)
NODE(parser, StructureDef)
@ -691,7 +697,7 @@ public:
NODE(parser::Union, UnionStmt)
NODE(parser, UnlockStmt)
NODE(parser, UseStmt)
NODE(parser::UseStmt, ModuleNature)
NODE_ENUM(parser::UseStmt, ModuleNature)
NODE(parser, Value)
NODE(parser, ValueStmt)
NODE(parser, Variable)