NODE(parser, ObjectDecl)
NODE(parser, OldParameterStmt)
NODE(parser, OmpAlignedClause)
- NODE(parser, OpenMPAtomicConstruct)
NODE(parser, OmpEndAtomic)
- NODE(parser, OpenMPCriticalConstruct)
- NODE(parser::OpenMPCriticalConstruct, Hint)
NODE(parser, OmpEndCritical)
NODE(parser, OmpAtomic)
NODE(parser::OmpAtomic, SeqCst)
NODE(parser::OmpBlockDirective, Ordered)
NODE(parser::OmpBlockDirective, Parallel)
NODE(parser::OmpBlockDirective, ParallelWorkshare)
- NODE(parser, OpenMPSingleConstruct)
NODE(parser, OmpEndSingle)
- NODE(parser, OpenMPWorkshareConstruct)
NODE(parser, OmpEndDo)
NODE(parser, OmpEndDoSimd)
NODE(parser::OmpBlockDirective, Target)
NODE(parser::OmpLinearClause, WithoutModifier)
NODE(parser, OmpLinearModifier)
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_ENUM(parser::OmpDeclareTargetMapType, Type)
- NODE(parser, OpenMPEndLoopDirective)
- NODE(parser, OpenMPDeclareTargetConstruct)
- NODE(parser::OpenMPDeclareTargetConstruct, Implicit)
- NODE(parser::OpenMPDeclareTargetConstruct, WithClause)
- NODE(parser::OpenMPDeclareTargetConstruct, WithExtendedList)
- NODE(parser::OpenMPDeclarativeConstruct, Threadprivate)
- NODE(parser, OpenMPLoopConstruct)
NODE(parser, OmpLoopDirective)
NODE(parser::OmpLoopDirective, Distribute)
NODE(parser::OmpLoopDirective, DistributeParallelDo)
NODE(parser, OmpReductionOperator)
NODE(parser, OmpSection)
NODE(parser, OmpStandaloneDirective)
- NODE(parser, OpenMPCancellationPointConstruct)
- NODE(parser, OpenMPCancelConstruct)
- NODE(parser::OpenMPCancelConstruct, If)
NODE(parser, OmpCancelType)
NODE_ENUM(parser::OmpCancelType, Type)
- NODE(parser, OpenMPFlushConstruct)
NODE(parser::OmpStandaloneDirective, TargetEnterData)
NODE(parser::OmpStandaloneDirective, TargetExitData)
NODE(parser::OmpStandaloneDirective, TargetUpdate)
+ NODE(parser, OmpReductionClause)
+ NODE(parser, OmpEndSections)
+ NODE(parser, OmpEndParallelSections)
+ NODE(parser, Only)
+ NODE(parser, OpenMPAtomicConstruct)
NODE(parser, OpenMPBarrierConstruct)
- NODE(parser, OpenMPTaskwaitConstruct)
- NODE(parser, OpenMPTaskyieldConstruct)
- NODE(parser, OpenMPConstruct)
NODE(parser, OpenMPBlockConstruct)
+ NODE(parser, OpenMPCancelConstruct)
+ NODE(parser::OpenMPCancelConstruct, If)
+ NODE(parser, OpenMPCancellationPointConstruct)
+ NODE(parser, OpenMPConstruct)
+ NODE(parser, OpenMPConstructDirective)
+ NODE(parser, OpenMPCriticalConstruct)
+ NODE(parser::OpenMPCriticalConstruct, Hint)
NODE(parser, OpenMPDeclarativeConstruct)
+ NODE(parser::OpenMPDeclarativeConstruct, Threadprivate)
+ NODE(parser, OpenMPDeclareReductionConstruct)
+ NODE(parser, OpenMPDeclareSimdConstruct)
+ NODE(parser, OpenMPDeclareTargetConstruct)
+ NODE(parser::OpenMPDeclareTargetConstruct, Implicit)
+ NODE(parser::OpenMPDeclareTargetConstruct, WithClause)
+ NODE(parser::OpenMPDeclareTargetConstruct, WithExtendedList)
+ NODE(parser, OpenMPEndLoopDirective)
+ NODE(parser, OpenMPFlushConstruct)
+ NODE(parser, OpenMPLoopConstruct)
NODE(parser, OpenMPStandaloneConstruct)
- NODE(parser, OmpReductionClause)
NODE(parser, OpenMPSectionsConstruct)
+ NODE(parser, OpenMPSingleConstruct)
NODE(parser, OpenMPParallelSectionsConstruct)
- NODE(parser, OmpEndSections)
- NODE(parser, OmpEndParallelSections)
- NODE(parser, Only)
+ NODE(parser, OpenMPTaskwaitConstruct)
+ NODE(parser, OpenMPTaskyieldConstruct)
+ NODE(parser, OpenMPWorkshareConstruct)
NODE(parser, OpenStmt)
NODE(parser, Optional)
NODE(parser, OptionalStmt)
// map-type -> TO | FROM | TOFROM | ALLOC | RELEASE | DELETE
TYPE_PARSER(construct<OmpMapType>(
maybe("ALWAYS" >> construct<OmpMapType::Always>() / maybe(","_tok)),
- "TO"_id >> pure(OmpMapType::Type::To) / ":"_tok ||
- "FROM" >> pure(OmpMapType::Type::From) / ":"_tok ||
- "TOFROM" >> pure(OmpMapType::Type::Tofrom) / ":"_tok ||
- "ALLOC" >> pure(OmpMapType::Type::Alloc) / ":"_tok ||
- "RELEASE" >> pure(OmpMapType::Type::Release) / ":"_tok ||
- "DELETE" >> pure(OmpMapType::Type::Delete) / ":"_tok))
+ ("TO"_id >> pure(OmpMapType::Type::To) ||
+ "FROM" >> pure(OmpMapType::Type::From) ||
+ "TOFROM" >> pure(OmpMapType::Type::Tofrom) ||
+ "ALLOC" >> pure(OmpMapType::Type::Alloc) ||
+ "RELEASE" >> pure(OmpMapType::Type::Release) ||
+ "DELETE" >> pure(OmpMapType::Type::Delete)) /
+ ":"))
TYPE_PARSER(construct<OmpMapClause>(
maybe(Parser<OmpMapType>{}), Parser<OmpObjectList>{}))
construct<OmpEndSections>(
maybe("NOWAIT" >> construct<OmpNowait>()) / endOmpLine))
+template<typename A> constexpr decltype(auto) OmpConstructDirective(A keyword) {
+ return sourced(construct<OpenMPConstructDirective>(
+ keyword >> Parser<OmpClauseList>{})) /
+ endOmpLine;
+}
+
// OMP SECTIONS
-TYPE_PARSER("SECTIONS" >>
- construct<OpenMPSectionsConstruct>(
- Parser<OmpClauseList>{} / endOmpLine, block, Parser<OmpEndSections>{}))
+TYPE_PARSER(construct<OpenMPSectionsConstruct>(
+ OmpConstructDirective("SECTIONS"_tok), block, Parser<OmpEndSections>{}))
// OMP END PARALLEL SECTIONS [NOWAIT]
TYPE_PARSER(startOmpLine >> "END PARALLEL SECTIONS"_tok >>