f49e2dfa2a
Original-commit: flang-compiler/f18@8b31a01102 Reviewed-on: https://github.com/flang-compiler/f18/pull/24 Tree-same-pre-rewrite: false
594 lines
12 KiB
C++
594 lines
12 KiB
C++
#ifndef FORTRAN_SEMA_DATA_H_
|
|
#define FORTRAN_SEMA_DATA_H_
|
|
|
|
#include <cassert>
|
|
|
|
//
|
|
//
|
|
// Declare here the members of the Semantic<T> that will
|
|
// be attached to each parse-tree class T. The default is
|
|
// an empty struct. All members added here shall be
|
|
// copiable and should be provided with a default value.
|
|
//
|
|
// Here are a few common fields
|
|
//
|
|
// Scope *scope_provider = the scope provided by a construct or statement
|
|
// int stmt_index = the index used in the StatementMap
|
|
//
|
|
// Remark: Weither we want to annotate parse-tree nodes with
|
|
// semantic information is still debatable.
|
|
//
|
|
|
|
namespace Fortran::semantics {
|
|
|
|
// Initialize the semantic information attached to a parser-tree node
|
|
//
|
|
// Ideally, the function should be called once at the begining of the corresponding Pre()
|
|
// member in Pass1. However, for the few cases where the semantic data need to be
|
|
// initialize earlier the strict argument can be set to false.
|
|
//
|
|
template <typename T> Semantic<T> & InitSema(const T &node, bool strict=true) {
|
|
|
|
// Do not use the default implementation!
|
|
// If the following assert fails, then a DECLARE_SEMANTIC_DATA is
|
|
// missing below
|
|
assert(Semantic<T>::IS_DECLARED);
|
|
|
|
if (node.s) {
|
|
if (strict) {
|
|
// TODO: emit proper message
|
|
std::cerr << "Duplicate call of " << __PRETTY_FUNCTION__ << "\n" ;
|
|
exit(1);
|
|
} else {
|
|
return *(node.s);
|
|
}
|
|
}
|
|
auto s = new Semantic<T>( const_cast<T*>(&node) ) ;
|
|
const_cast<T&>(node).s = s;
|
|
return *s ;
|
|
}
|
|
|
|
|
|
// Retreive the semantic information attached to a parser-tree node
|
|
template <typename T> Semantic<T> & GetSema(const T &node) {
|
|
// Do not use the default implementation!
|
|
// If the following assert fails, then a DECLARE_SEMANTIC is missing above
|
|
assert(Semantic<T>::IS_DECLARED);
|
|
assert(node.s) ;
|
|
return *(node.s) ;
|
|
}
|
|
|
|
|
|
#define DEFINE_SEMANTIC_DATA(Class) \
|
|
template <> struct Semantic<Fortran::parser::Class> { \
|
|
Semantic<Fortran::parser::Class>(Fortran::parser::Class *node) {} \
|
|
enum {IS_DECLARED=1};
|
|
|
|
#define END_SEMANTIC_DATA \
|
|
}
|
|
|
|
// Some fields that need to be defined for all statements
|
|
#define SEMANTIC_STMT_FIELDS \
|
|
int stmt_index=0
|
|
|
|
DEFINE_SEMANTIC_DATA(ProgramUnit)
|
|
StatementMap *statement_map=0 ;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(MainProgram)
|
|
Scope *scope_provider=0 ;
|
|
LabelTable *label_table=0 ;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SubroutineSubprogram)
|
|
Scope *scope_provider=0 ;
|
|
LabelTable *label_table=0 ;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FunctionSubprogram)
|
|
Scope *scope_provider=0 ;
|
|
LabelTable *label_table=0 ;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(Module)
|
|
Scope *scope_provider=0 ;
|
|
LabelTable *label_table=0 ;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(DerivedTypeDef)
|
|
// WARNING: there is also a sm::DerivedTypeDef defined in types.h
|
|
Scope *scope_provider=0 ;
|
|
END_SEMANTIC_DATA;
|
|
|
|
|
|
DEFINE_SEMANTIC_DATA(AssignmentStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(DataStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FunctionStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SubroutineStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ModuleStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndModuleStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(StmtFunctionStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndFunctionStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndSubroutineStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(TypeDeclarationStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(DerivedTypeStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndTypeStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(PrintStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(UseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ProgramStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndProgramStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ImplicitStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AccessStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AllocatableStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AsynchronousStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(BindStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CodimensionStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ContiguousStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ContainsStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(DimensionStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ExternalStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(IntentStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(IntrinsicStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(NamelistStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(OptionalStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(PointerStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ProtectedStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SaveStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(TargetStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ValueStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(VolatileStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CommonStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EquivalenceStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(BasedPointerStmt) // extension
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(GenericStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ParameterStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EnumDef)
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EnumDefStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndEnumStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(InterfaceStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndInterfaceStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(IfThenStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ElseIfStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ElseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndIfStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(IfStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SelectCaseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CaseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndSelectStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SelectRankStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SelectRankCaseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SelectTypeStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ProcedureDeclarationStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(StructureStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(StructureDef::EndStructureStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FormatStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EntryStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ImportStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AllocateStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(BackspaceStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CallStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CloseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ContinueStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(DeallocateStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndfileStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EventPostStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EventWaitStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CycleStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ExitStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FailImageStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FlushStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FormTeamStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(GotoStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(InquireStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(LockStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(NullifyStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(OpenStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(PointerAssignmentStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ReadStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ReturnStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(RewindStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(StopStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SyncAllStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SyncImagesStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SyncMemoryStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(SyncTeamStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(UnlockStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(WaitStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(WhereStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(WriteStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ComputedGotoStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ForallStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ForallConstructStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndForallStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ArithmeticIfStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AssignStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AssignedGotoStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(PauseStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(PrivateStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(TypeBoundProcedureStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(TypeBoundGenericStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(FinalProcedureStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ComponentDefStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EnumeratorDefStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(TypeGuardStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(NonLabelDoStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(LabelDoStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndDoStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(BlockStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndBlockStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(AssociateStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndAssociateStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(ChangeTeamStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndChangeTeamStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(CriticalStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
DEFINE_SEMANTIC_DATA(EndCriticalStmt)
|
|
SEMANTIC_STMT_FIELDS;
|
|
END_SEMANTIC_DATA;
|
|
|
|
|
|
#undef DEFINE_SEMANTIC_DATA
|
|
#undef END_SEMANTIC_DATA_SEMANTIC
|
|
#undef SEMANTIC_STMT_FIELDS
|
|
|
|
} // of namespace Fortran::semantics
|
|
|
|
#endif // FORTRAN_SEMA_DATA_H_
|