9#ifndef FORTRAN_PARSER_PARSE_TREE_H_
10#define FORTRAN_PARSER_PARSE_TREE_H_
20#include "char-block.h"
21#include "characters.h"
22#include "format-specification.h"
24#include "provenance.h"
25#include "flang/Common/enum-set.h"
26#include "flang/Common/idioms.h"
27#include "flang/Common/indirection.h"
28#include "flang/Common/reference.h"
29#include "flang/Support/Fortran.h"
30#include "llvm/ADT/ArrayRef.h"
31#include "llvm/Frontend/OpenACC/ACC.h.inc"
32#include "llvm/Frontend/OpenMP/OMP.h"
33#include "llvm/Frontend/OpenMP/OMPConstants.h"
54CLASS_TRAIT(EmptyTrait)
55CLASS_TRAIT(WrapperTrait)
56CLASS_TRAIT(UnionTrait)
57CLASS_TRAIT(TupleTrait)
58CLASS_TRAIT(ConstraintTrait)
63namespace Fortran::semantics {
80#define COPY_AND_ASSIGN_BOILERPLATE(classname) \
81 classname(classname &&) = default; \
82 classname &operator=(classname &&) = default; \
83 classname(const classname &) = delete; \
84 classname &operator=(const classname &) = delete
87#define BOILERPLATE(classname) \
88 COPY_AND_ASSIGN_BOILERPLATE(classname); \
93#define EMPTY_CLASS(classname) \
96 classname(const classname &) {} \
97 classname(classname &&) {} \
98 classname &operator=(const classname &) { return *this; }; \
99 classname &operator=(classname &&) { return *this; }; \
100 using EmptyTrait = std::true_type; \
105#define UNION_CLASS_BOILERPLATE(classname) \
106 template <typename A, typename = common::NoLvalue<A>> \
107 classname(A &&x) : u(std::move(x)) {} \
108 using UnionTrait = std::true_type; \
109 BOILERPLATE(classname)
113#define TUPLE_CLASS_BOILERPLATE(classname) \
114 template <typename... Ts, typename = common::NoLvalue<Ts...>> \
115 classname(Ts &&...args) : t(std::move(args)...) {} \
116 using TupleTrait = std::true_type; \
117 BOILERPLATE(classname)
121#define WRAPPER_CLASS_BOILERPLATE(classname, type) \
122 BOILERPLATE(classname); \
123 classname(type &&x) : v(std::move(x)) {} \
124 using WrapperTrait = std::true_type; \
127#define WRAPPER_CLASS(classname, type) \
129 WRAPPER_CLASS_BOILERPLATE(classname, type); \
161struct AllocatableStmt;
162struct AsynchronousStmt;
164struct CodimensionStmt;
165struct ContiguousStmt;
172struct OldParameterStmt;
182struct EquivalenceStmt;
219struct SyncMemoryStmt;
263struct BasedPointerStmt;
281using Location =
const char *;
286 constexpr Verbatim() {}
287 COPY_AND_ASSIGN_BOILERPLATE(Verbatim);
288 using EmptyTrait = std::true_type;
297template <
typename A>
struct Scalar {
298 using ConstraintTrait = std::true_type;
299 Scalar(Scalar &&that) =
default;
300 Scalar(A &&that) : thing(std::move(that)) {}
301 Scalar &operator=(Scalar &&) =
default;
305template <
typename A>
struct Constant {
306 using ConstraintTrait = std::true_type;
307 Constant(Constant &&that) =
default;
308 Constant(A &&that) : thing(std::move(that)) {}
309 Constant &operator=(Constant &&) =
default;
313template <
typename A>
struct Integer {
314 using ConstraintTrait = std::true_type;
315 Integer(Integer &&that) =
default;
316 Integer(A &&that) : thing(std::move(that)) {}
317 Integer &operator=(Integer &&) =
default;
321template <
typename A>
struct Logical {
322 using ConstraintTrait = std::true_type;
323 Logical(Logical &&that) =
default;
324 Logical(A &&that) : thing(std::move(that)) {}
325 Logical &operator=(Logical &&) =
default;
329template <
typename A>
struct DefaultChar {
330 using ConstraintTrait = std::true_type;
331 DefaultChar(DefaultChar &&that) =
default;
332 DefaultChar(A &&that) : thing(std::move(that)) {}
333 DefaultChar &operator=(DefaultChar &&) =
default;
352using Label = common::Label;
356template <
typename A>
struct UnlabeledStatement {
357 explicit UnlabeledStatement(A &&s) : statement(std::move(s)) {}
361template <
typename A>
struct Statement :
public UnlabeledStatement<A> {
362 Statement(std::optional<long> &&lab, A &&s)
363 : UnlabeledStatement<A>{std::move(s)}, label(std::move(lab)) {}
364 std::optional<Label> label;
368EMPTY_CLASS(ErrorRecovery);
380 std::variant<common::Indirection<AccessStmt>,
402 std::variant<common::Indirection<DerivedTypeDef>,
423 std::variant<Statement<common::Indirection<ImplicitStmt>>,
434WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
441 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
455 std::tuple<std::list<OpenACCDeclarativeConstruct>,
456 std::list<OpenMPDeclarativeConstruct>,
457 std::list<common::Indirection<CompilerDirective>>,
458 std::list<Statement<common::Indirection<UseStmt>>>,
459 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
460 std::list<DeclarationConstruct>>
467 std::variant<common::Indirection<FunctionSubprogram>,
474EMPTY_CLASS(ContainsStmt);
479 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
483EMPTY_CLASS(ContinueStmt);
486EMPTY_CLASS(FailImageStmt);
500 std::variant<common::Indirection<AllocateStmt>,
558 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
567using Block = std::list<ExecutionPartConstruct>;
568WRAPPER_CLASS(ExecutionPart, Block);
575 std::variant<common::Indirection<MainProgram>,
586WRAPPER_CLASS(Program, std::list<ProgramUnit>);
590 std::string ToString()
const {
return source.ToString(); }
596WRAPPER_CLASS(Keyword,
Name);
599WRAPPER_CLASS(NamedConstant,
Name);
606WRAPPER_CLASS(DefinedOpName,
Name);
616 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
617 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
618 std::variant<DefinedOpName, IntrinsicOperator> u;
622using ObjectName =
Name;
628 TUPLE_CLASS_BOILERPLATE(ImportStmt);
629 ImportStmt(common::ImportKind &&k) : t(k, std::list<Name>{}) {}
630 ImportStmt(std::list<Name> &&n)
631 : t(common::ImportKind::Default, std::move(n)) {}
632 ImportStmt(common::ImportKind &&, std::list<Name> &&);
633 std::tuple<common::ImportKind, std::list<Name>> t;
642 TUPLE_CLASS_BOILERPLATE(
Group);
643 std::tuple<Name, std::list<Name>> t;
645 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
653 EMPTY_CLASS(Deferred);
654 std::variant<ScalarIntExpr, Star, Deferred> u;
662 WRAPPER_CLASS(StarSize, std::uint64_t);
663 std::variant<ScalarIntConstantExpr, StarSize> u;
667WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
669WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
674 std::variant<TypeParamValue, std::uint64_t> u;
680 std::variant<TypeParamValue, CharLength> u;
689 UNION_CLASS_BOILERPLATE(CharSelector);
692 std::tuple<std::optional<TypeParamValue>, ScalarIntConstantExpr> t;
695 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
696 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
697 : u{LengthAndKind{std::move(l), std::move(k)}} {}
698 std::variant<LengthSelector, LengthAndKind> u;
709 WRAPPER_CLASS_BOILERPLATE(
Real, std::optional<KindSelector>);
711 EMPTY_CLASS(DoublePrecision);
713 WRAPPER_CLASS_BOILERPLATE(
Complex, std::optional<KindSelector>);
716 WRAPPER_CLASS_BOILERPLATE(
Character, std::optional<CharSelector>);
719 WRAPPER_CLASS_BOILERPLATE(
Logical, std::optional<KindSelector>);
721 EMPTY_CLASS(DoubleComplex);
722 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
730 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
735 EMPTY_CLASS(PairVectorTypeSpec);
736 EMPTY_CLASS(QuadVectorTypeSpec);
737 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
751 std::tuple<Name, std::list<TypeParamSpec>> t;
758 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
770 EMPTY_CLASS(ClassStar);
771 EMPTY_CLASS(TypeStar);
772 WRAPPER_CLASS(Record,
Name);
781 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
788 std::tuple<CharBlock, std::optional<KindParam>> t;
794 std::tuple<CharBlock, std::optional<KindParam>> t;
800 std::tuple<CharBlock, std::optional<KindParam>> t;
804enum class Sign { Positive, Negative };
814 using EmptyTrait = std::true_type;
815 COPY_AND_ASSIGN_BOILERPLATE(Real);
819 std::tuple<Real, std::optional<KindParam>> t;
844 std::tuple<ComplexPart, ComplexPart> t;
850 std::tuple<Sign, ComplexLiteralConstant> t;
858 std::tuple<std::optional<KindParam>, std::string> t;
859 std::string GetString()
const {
return std::get<std::string>(t); }
865 std::string GetString()
const {
return v; }
872 std::tuple<bool, std::optional<KindParam>> t;
882WRAPPER_CLASS(BOZLiteralConstant, std::string);
898 ENUM_CLASS(Kind, Public, Private)
904EMPTY_CLASS(Abstract);
908 WRAPPER_CLASS(Extends,
Name);
909 std::variant<Abstract, AccessSpec, BindC, Extends> u;
916 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
920EMPTY_CLASS(SequenceStmt);
924EMPTY_CLASS(PrivateStmt);
929 std::variant<PrivateStmt, SequenceStmt> u;
935 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
943 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
948WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
955 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
960WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
968 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
974 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
979WRAPPER_CLASS(DeferredShapeSpecList,
int);
985 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
993EMPTY_CLASS(Allocatable);
995EMPTY_CLASS(Contiguous);
1016 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1017 std::list<common::Indirection<DataStmtValue>>>
1027struct ComponentDecl {
1028 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1030 std::optional<ComponentArraySpec> &&aSpec,
1031 std::optional<CoarraySpec> &&coaSpec,
1032 std::optional<Initialization> &&init)
1033 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1034 std::move(length), std::move(init)} {}
1035 std::tuple<Name, std::optional<ComponentArraySpec>,
1036 std::optional<CoarraySpec>, std::optional<CharLength>,
1037 std::optional<Initialization>>
1045 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1051 std::variant<ComponentDecl, FillDecl> u;
1059 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1060 std::list<ComponentOrFill>>
1067WRAPPER_CLASS(Pass, std::optional<Name>);
1070 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1077 std::variant<NullInit, Name> u;
1084 std::variant<Name, DeclarationTypeSpec> u;
1090 std::tuple<Name, std::optional<ProcPointerInit>> t;
1098 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1099 std::list<ProcDecl>>
1117 EMPTY_CLASS(Deferred);
1118 EMPTY_CLASS(Non_Overridable);
1119 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1125 std::tuple<Name, std::optional<Name>> t;
1137 std::tuple<std::list<BindAttr>, std::list<TypeBoundProcDecl>> t;
1141 std::tuple<Name, std::list<BindAttr>, std::list<Name>> t;
1143 std::variant<WithoutInterface, WithInterface> u;
1156WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1172 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1173 std::list<Statement<TypeBoundProcBinding>>>
1178WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1186 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1187 std::list<Statement<PrivateOrSequence>>,
1188 std::list<Statement<ComponentDefStmt>>,
1201 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1207 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1211EMPTY_CLASS(EnumDefStmt);
1216 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1220WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1223EMPTY_CLASS(EndEnumStmt);
1229 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1230 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1238 TUPLE_CLASS_BOILERPLATE(
Triplet);
1239 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1241 UNION_CLASS_BOILERPLATE(
AcValue);
1242 std::variant<Triplet, common::Indirection<Expr>,
1249 TUPLE_CLASS_BOILERPLATE(AcSpec);
1250 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1251 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1255WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1262 std::tuple<VAR, BOUND, BOUND, std::optional<BOUND>> t;
1264 const VAR &Name()
const {
return std::get<0>(t); }
1265 const BOUND &Lower()
const {
return std::get<1>(t); }
1266 const BOUND &Upper()
const {
return std::get<2>(t); }
1267 const std::optional<BOUND> &Step()
const {
return std::get<3>(t); }
1280 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1295 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1301 std::tuple<NamedConstant, ConstantExpr> t;
1305WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1308WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1311WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1316 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1323WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1326EMPTY_CLASS(AssumedRankSpec);
1334 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1335 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1341 ENUM_CLASS(Intent, In, Out, InOut)
1342 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1347WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1357EMPTY_CLASS(Asynchronous);
1358EMPTY_CLASS(External);
1359EMPTY_CLASS(Intrinsic);
1360EMPTY_CLASS(Optional);
1361EMPTY_CLASS(Parameter);
1362EMPTY_CLASS(Protected);
1366EMPTY_CLASS(Volatile);
1371 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1372 common::CUDADataAttr>
1383 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1384 EntityDecl(ObjectName &&name,
CharLength &&length,
1385 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1386 std::optional<Initialization> &&init)
1387 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1388 std::move(length), std::move(init)} {}
1389 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1390 std::optional<CharLength>, std::optional<Initialization>>
1398 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1408 std::tuple<AccessSpec, std::list<AccessId>> t;
1417 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1422WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1425WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1430 ENUM_CLASS(Kind, Object, Common)
1431 std::tuple<Kind, Name> t;
1437 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1443 std::tuple<Name, CoarraySpec> t;
1447WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1450WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1459using TypedAssignment =
1472 mutable TypedExpr typedExpr;
1473 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1486 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1492 mutable std::int64_t repetitions{1};
1500 std::variant<Scalar<common::Indirection<Designator>>,
1513 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1520 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1526 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1530WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1538 std::tuple<Name, ArraySpec> t;
1540 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1546 std::tuple<IntentSpec, std::list<Name>> t;
1550WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1556 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1560WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1563WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1569 ENUM_CLASS(Kind, Entity, Common)
1570 std::tuple<Kind, Name> t;
1574WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1577WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1580WRAPPER_CLASS(ValueStmt, std::list<Name>);
1583WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1588 std::tuple<Location, std::optional<Location>> t;
1594 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1603 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1604 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1610 std::tuple<Name, std::optional<ArraySpec>> t;
1618 TUPLE_CLASS_BOILERPLATE(
Block);
1619 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1621 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1622 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1623 std::list<Block> &&);
1632WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1637 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1641using Subscript = ScalarIntExpr;
1646 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1647 std::optional<Subscript>>
1655 std::variant<IntExpr, SubscriptTriplet> u;
1659using Cosubscript = ScalarIntExpr;
1670 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1673 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1680 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1689 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1696 UNION_CLASS_BOILERPLATE(Expr);
1700 using IntrinsicUnary::IntrinsicUnary;
1703 using IntrinsicUnary::IntrinsicUnary;
1706 using IntrinsicUnary::IntrinsicUnary;
1708 struct NOT :
public IntrinsicUnary {
1709 using IntrinsicUnary::IntrinsicUnary;
1716 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1724 using IntrinsicBinary::IntrinsicBinary;
1727 using IntrinsicBinary::IntrinsicBinary;
1730 using IntrinsicBinary::IntrinsicBinary;
1733 using IntrinsicBinary::IntrinsicBinary;
1736 using IntrinsicBinary::IntrinsicBinary;
1739 using IntrinsicBinary::IntrinsicBinary;
1742 using IntrinsicBinary::IntrinsicBinary;
1745 using IntrinsicBinary::IntrinsicBinary;
1748 using IntrinsicBinary::IntrinsicBinary;
1751 using IntrinsicBinary::IntrinsicBinary;
1754 using IntrinsicBinary::IntrinsicBinary;
1757 using IntrinsicBinary::IntrinsicBinary;
1760 using IntrinsicBinary::IntrinsicBinary;
1763 using IntrinsicBinary::IntrinsicBinary;
1766 using IntrinsicBinary::IntrinsicBinary;
1769 using IntrinsicBinary::IntrinsicBinary;
1774 using IntrinsicBinary::IntrinsicBinary;
1779 std::tuple<DefinedOpName, common::Indirection<Expr>,
1787 mutable TypedExpr typedExpr;
1791 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1796 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1803 TUPLE_CLASS_BOILERPLATE(
PartRef);
1804 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1809 UNION_CLASS_BOILERPLATE(DataRef);
1810 explicit DataRef(std::list<PartRef> &&);
1811 std::variant<Name, common::Indirection<StructureComponent>,
1827 std::tuple<DataRef, SubstringRange> t;
1832 std::tuple<CharLiteralConstant, SubstringRange> t;
1849 bool EndsInBareName()
const;
1851 std::variant<DataRef, Substring> u;
1857 mutable TypedExpr typedExpr;
1859 std::variant<common::Indirection<Designator>,
1879 std::tuple<DataRef, Name> t;
1881 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1882 const Name &Component()
const {
return std::get<Name>(t); }
1894 std::tuple<DataRef, ImageSelector> t;
1903 std::tuple<DataRef, std::list<SectionSubscript>> t;
1905 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1906 const std::list<SectionSubscript> &Subscripts()
const {
1907 return std::get<std::list<SectionSubscript>>(t);
1914 mutable TypedExpr typedExpr;
1915 std::variant<Name, StructureComponent> u;
1920using BoundExpr = ScalarIntExpr;
1926 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1935 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1943 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1944 std::optional<AllocateCoarraySpec>>
1949WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1953WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1959 std::variant<StatVariable, MsgVariable> u;
1974 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
1981 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
1982 std::list<AllocOpt>>
1990 mutable TypedExpr typedExpr;
1991 std::variant<Name, StructureComponent> u;
1995WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2001 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2007 mutable TypedAssignment typedAssignment;
2008 std::tuple<Variable, Expr> t;
2012WRAPPER_CLASS(BoundsSpec, BoundExpr);
2017 std::tuple<BoundExpr, BoundExpr> t;
2029 UNION_CLASS_BOILERPLATE(
Bounds);
2030 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2033 mutable TypedAssignment typedAssignment;
2034 std::tuple<DataRef, Bounds, Expr> t;
2042 std::tuple<LogicalExpr, AssignmentStmt> t;
2048 std::tuple<std::optional<Name>, LogicalExpr> t;
2064 std::tuple<LogicalExpr, std::optional<Name>> t;
2068WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2071WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2080 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2084 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2087 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2088 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2103 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2109 std::tuple<common::Indirection<ConcurrentHeader>,
2126WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2132 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2140 std::variant<Expr, Variable> u;
2146 std::tuple<Name, Selector> t;
2153 std::tuple<std::optional<Name>, std::list<Association>> t;
2157WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2166WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2169WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2184 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2192 std::tuple<CodimensionDecl, Selector> t;
2200 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2201 std::list<StatOrErrmsg>>
2209 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2222 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2226WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2240 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2249 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2250 std::optional<ScalarLogicalExpr>>
2261 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2272 WRAPPER_CLASS(Local, std::list<Name>);
2273 WRAPPER_CLASS(LocalInit, std::list<Name>);
2275 TUPLE_CLASS_BOILERPLATE(
Reduce);
2277 std::tuple<Operator, std::list<Name>> t;
2279 WRAPPER_CLASS(Shared, std::list<Name>);
2280 EMPTY_CLASS(DefaultNone);
2281 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2294 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2297 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2304 std::tuple<Label, std::optional<LoopControl>> t;
2310 std::tuple<std::optional<Name>, std::optional<Label>,
2311 std::optional<LoopControl>>
2316WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2327 const std::optional<LoopControl> &GetLoopControl()
const;
2328 bool IsDoNormal()
const;
2329 bool IsDoWhile()
const;
2330 bool IsDoConcurrent()
const;
2335WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2340 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2347 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2351WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2354WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2362 std::tuple<Statement<ElseIfStmt>, Block> t;
2366 std::tuple<Statement<ElseStmt>, Block> t;
2369 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2376 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2377 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2395 TUPLE_CLASS_BOILERPLATE(
Range);
2396 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2399 std::variant<CaseValue, Range> u;
2403EMPTY_CLASS(Default);
2407 std::variant<std::list<CaseValueRange>, Default> u;
2413 std::tuple<CaseSelector, std::optional<Name>> t;
2419WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2425 TUPLE_CLASS_BOILERPLATE(
Case);
2426 std::tuple<Statement<CaseStmt>, Block> t;
2429 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2439 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2448 UNION_CLASS_BOILERPLATE(
Rank);
2449 std::variant<ScalarIntConstantExpr, Star, Default> u;
2452 std::tuple<Rank, std::optional<Name>> t;
2462 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2464 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2474 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2483 UNION_CLASS_BOILERPLATE(
Guard);
2484 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2487 std::tuple<Guard, std::optional<Name>> t;
2496 std::tuple<Statement<TypeGuardStmt>, Block> t;
2498 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2504WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2507WRAPPER_CLASS(GotoStmt, Label);
2512 std::tuple<std::list<Label>, ScalarIntExpr> t;
2525 ENUM_CLASS(Kind, Stop, ErrorStop)
2527 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2534 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2538WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2545 std::variant<IntExpr, Star> u;
2548 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2552WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2557 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2566 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2572 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2580 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2593 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2596 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2607 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2610 std::tuple<LockVariable, std::list<LockStat>> t;
2616 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2620WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2630 UNION_CLASS_BOILERPLATE(
IoUnit);
2631 std::variant<Variable, common::Indirection<Expr>, Star> u;
2635using FileNameExpr = ScalarDefaultCharExpr;
2655WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2656WRAPPER_CLASS(ErrLabel, Label);
2661 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2662 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2663 Carriagecontrol, Convert, Dispose)
2665 std::tuple<Kind, ScalarDefaultCharExpr> t;
2667 WRAPPER_CLASS(Recl, ScalarIntExpr);
2668 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2669 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2670 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2675WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2685 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2689 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2695 UNION_CLASS_BOILERPLATE(
Format);
2696 std::variant<Expr, Label, Star> u;
2700WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2716WRAPPER_CLASS(EndLabel, Label);
2717WRAPPER_CLASS(EorLabel, Label);
2722 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2724 std::tuple<Kind, ScalarDefaultCharExpr> t;
2726 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2727 WRAPPER_CLASS(Pos, ScalarIntExpr);
2728 WRAPPER_CLASS(Rec, ScalarIntExpr);
2729 WRAPPER_CLASS(Size, ScalarIntVariable);
2731 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2739 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2746 BOILERPLATE(ReadStmt);
2747 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2748 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2749 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2750 items(std::move(its)) {}
2751 std::optional<IoUnit> iounit;
2753 std::optional<Format> format;
2756 std::list<IoControlSpec> controls;
2757 std::list<InputItem> items;
2763 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2768 BOILERPLATE(WriteStmt);
2769 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2770 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2771 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2772 items(std::move(its)) {}
2773 std::optional<IoUnit> iounit;
2775 std::optional<Format> format;
2777 std::list<IoControlSpec> controls;
2778 std::list<OutputItem> items;
2784 std::tuple<Format, std::list<OutputItem>> t;
2795 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2800 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2807WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2810 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2811 MsgVariable, StatVariable>
2816WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2826 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2831WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2835WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2838WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2841WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2882 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2883 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2884 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2886 Carriagecontrol, Convert, Dispose)
2887 TUPLE_CLASS_BOILERPLATE(
CharVar);
2888 std::tuple<Kind, ScalarDefaultCharVariable> t;
2891 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2892 TUPLE_CLASS_BOILERPLATE(
IntVar);
2893 std::tuple<Kind, ScalarIntVariable> t;
2896 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2897 TUPLE_CLASS_BOILERPLATE(
LogVar);
2898 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2912 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2914 std::variant<std::list<InquireSpec>,
Iolength> u;
2921WRAPPER_CLASS(ProgramStmt,
Name);
2924WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2932 ExecutionPart, std::optional<InternalSubprogramPart>,
2938WRAPPER_CLASS(ModuleStmt,
Name);
2945 std::variant<common::Indirection<FunctionSubprogram>,
2955 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2959WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2965 TUPLE_CLASS_BOILERPLATE(
Module);
2976 UNION_CLASS_BOILERPLATE(
Rename);
2978 TUPLE_CLASS_BOILERPLATE(
Names);
2979 std::tuple<Name, Name> t;
2983 std::tuple<DefinedOpName, DefinedOpName> t;
2985 std::variant<Names, Operators> u;
2991 std::tuple<Name, std::optional<Name>> t;
2997 std::tuple<ParentIdentifier, Name> t;
3001WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3014WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3017WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3035 EMPTY_CLASS(Assignment);
3036 EMPTY_CLASS(ReadFormatted);
3037 EMPTY_CLASS(ReadUnformatted);
3038 EMPTY_CLASS(WriteFormatted);
3039 EMPTY_CLASS(WriteUnformatted);
3042 ReadUnformatted, WriteFormatted, WriteUnformatted>
3050 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3054struct InterfaceStmt {
3055 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3057 InterfaceStmt(Abstract x) : u{x} {}
3059 std::variant<std::optional<GenericSpec>, Abstract> u;
3065 UNION_CLASS_BOILERPLATE(
Only);
3066 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3074 BOILERPLATE(UseStmt);
3075 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3076 template <
typename A>
3077 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3078 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3079 std::optional<ModuleNature> nature;
3081 std::variant<std::list<Rename>, std::list<Only>> u;
3099 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3100 std::list<ProcDecl>>
3111 EMPTY_CLASS(Elemental);
3112 EMPTY_CLASS(Impure);
3114 EMPTY_CLASS(Non_Recursive);
3116 EMPTY_CLASS(Recursive);
3117 EMPTY_CLASS(Simple);
3118 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3119 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3120 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3122 Pure, Recursive, Simple, Attributes, Launch_Bounds, Cluster_Dims>
3130 TUPLE_CLASS_BOILERPLATE(Suffix);
3132 : t(std::move(rn), std::move(lbs)) {}
3133 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3142 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3143 std::optional<Suffix>>
3148WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3153 std::variant<Name, Star> u;
3161 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3162 std::optional<LanguageBindingSpec>>
3167WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3182 std::tuple<Statement<SubroutineStmt>,
3186 std::variant<Function, Subroutine> u;
3191 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3193 std::tuple<Kind, std::list<Name>> t;
3199 std::variant<InterfaceBody, Statement<ProcedureStmt>> u;
3203WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3209 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3215WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3218WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3224 std::variant<Name, ProcComponentRef> u;
3228WRAPPER_CLASS(AltReturnSpec, Label);
3231EMPTY_CLASS(ConditionalArgNil);
3245 std::variant<common::Indirection<Expr>, ConditionalArgNil> u;
3254 std::variant<ConditionalArg, ConditionalArg::Consequent> u;
3261 WRAPPER_CLASS(PercentRef,
Expr);
3262 WRAPPER_CLASS(PercentVal,
Expr);
3263 UNION_CLASS_BOILERPLATE(ActualArg);
3265 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal,
3273 std::tuple<std::optional<Keyword>,
ActualArg> t;
3279 TUPLE_CLASS_BOILERPLATE(
Call);
3280 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3296 TUPLE_CLASS_BOILERPLATE(CallStmt);
3297 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3300 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3301 std::optional<ScalarIntExpr>>
3305 std::list<ActualArgSpec> &&args)
3306 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3307 std::tuple<Call, std::optional<Chevrons>> t;
3309 mutable TypedCall typedCall;
3333WRAPPER_CLASS(MpSubprogramStmt,
Name);
3336WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3351 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3355WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3386 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3389 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3393 std::tuple<common::Indirection<Designator>, uint64_t> t;
3395 EMPTY_CLASS(VectorAlways);
3398 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3400 std::tuple<std::uint64_t, Kind> t;
3404 std::tuple<Name, std::optional<std::uint64_t>> t;
3407 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3410 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3413 WRAPPER_CLASS_BOILERPLATE(
3417 WRAPPER_CLASS_BOILERPLATE(
InlineAlways, std::optional<Name>);
3419 EMPTY_CLASS(NoVector);
3420 EMPTY_CLASS(NoUnroll);
3421 EMPTY_CLASS(NoUnrollAndJam);
3422 EMPTY_CLASS(ForceInline);
3423 EMPTY_CLASS(Inline);
3424 EMPTY_CLASS(NoInline);
3427 EMPTY_CLASS(Unrecognized);
3429 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3431 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3439 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3445 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3447WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3454 std::variant<Statement<DataComponentDefStmt>,
3460 EMPTY_CLASS(MapStmt);
3461 EMPTY_CLASS(EndMapStmt);
3462 TUPLE_CLASS_BOILERPLATE(
Map);
3463 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3469 EMPTY_CLASS(UnionStmt);
3470 EMPTY_CLASS(EndUnionStmt);
3471 TUPLE_CLASS_BOILERPLATE(
Union);
3477 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3481 EMPTY_CLASS(EndStructureStmt);
3483 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3490WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3495 std::tuple<Expr, Label, Label, Label> t;
3500 std::tuple<Label, Name> t;
3505 std::tuple<Name, std::list<Label>> t;
3508WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3514#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3515 using basename::basename; \
3516 classname(basename &&b) : basename(std::move(b)) {} \
3517 using TupleTrait = std::true_type; \
3518 BOILERPLATE(classname)
3520#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3521 BOILERPLATE(classname); \
3522 using basename::basename; \
3523 classname(basename &&base) : basename(std::move(base)) {} \
3524 using WrapperTrait = std::true_type
3529struct OmpDirectiveName {
3531 constexpr OmpDirectiveName() =
default;
3532 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3533 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3537 OmpDirectiveName(
const Verbatim &name);
3538 using WrapperTrait = std::true_type;
3540 bool IsExecutionPart()
const;
3543 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3551 std::variant<TypeSpec, DeclarationTypeSpec> u;
3566 ENUM_CLASS(Kind, BlankCommonBlock);
3567 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3575 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3582 using EmptyTrait = std::true_type;
3590 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3593 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3607 WRAPPER_CLASS_BOILERPLATE(
3620 std::variant<DefinedOperator, ProcedureDesignator> u;
3629 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3641 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3646inline namespace arguments {
3649 std::variant<OmpObject, FunctionReference> u;
3653 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3665 std::tuple<OmpObject, OmpObject> t;
3676 std::tuple<std::string, TypeSpec, Name> t;
3689 std::optional<OmpCombinerExpression>>
3708inline namespace traits {
3745 TUPLE_CLASS_BOILERPLATE(
Complex);
3747 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3751 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3767 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3792 std::string ToString()
const;
3795 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3796 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3797 std::variant<Value, llvm::omp::Directive, std::string> u;
3808 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3810 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3817 std::string ToString()
const;
3819 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3828 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3835 WRAPPER_CLASS_BOILERPLATE(
3840#define MODIFIER_BOILERPLATE(...) \
3842 using Variant = std::variant<__VA_ARGS__>; \
3843 UNION_CLASS_BOILERPLATE(Modifier); \
3848#define MODIFIERS() std::optional<std::list<Modifier>>
3850inline namespace modifier {
3858 ENUM_CLASS(Value, Cgroup);
3867 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3903 ENUM_CLASS(Value, Always)
3915 ENUM_CLASS(Value, Always, Never, Auto)
3925 ENUM_CLASS(Value, Automap);
3936 ENUM_CLASS(Value, Simd)
3949 ENUM_CLASS(Value, Close)
3961 ENUM_CLASS(Value, Delete)
3982 ENUM_CLASS(Value, Sink, Source);
3993 using Value = common::OmpDependenceKind;
3995 std::tuple<Value, OmpObject> t;
4003 ENUM_CLASS(Value, Ancestor, Device_Num)
4029 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4044 ENUM_CLASS(Value, Present);
4055 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4066 ENUM_CLASS(Value, Target, Targetsync)
4080 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4088 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4096 ENUM_CLASS(Value, Conditional)
4105 ENUM_CLASS(Value, Ref, Uval, Val);
4135 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4136 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4148 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4163 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4172 ENUM_CLASS(Value, Reproducible, Unconstrained)
4185 using Extensions = std::list<PreferencePropertyExtension>;
4186 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4196 using ForeignRuntimeIdentifier =
4197 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4198 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4206 WRAPPER_CLASS_BOILERPLATE(
4215 ENUM_CLASS(Value, Strict)
4228 ENUM_CLASS(Value, Present)
4237 ENUM_CLASS(Value, Default, Inscan, Task);
4247 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4257 ENUM_CLASS(Value, Self)
4284 using Value = common::OmpDependenceKind;
4295 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4308 ENUM_CLASS(Value, Ompx_Hold)
4318using OmpDirectiveList = std::list<llvm::omp::Directive>;
4331 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4334 std::tuple<OmpAdjustOp, OmpObjectList> t;
4351 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4382 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4390 ENUM_CLASS(ActionTime, Compilation, Execution);
4391 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4402 using MemoryOrder = common::OmpMemoryOrderType;
4413 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4420 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4453 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4455 std::variant<DataSharingAttribute,
4472 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4475 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4484 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4493 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4510 OmpDependenceType::Value GetDepType()
const;
4513 EMPTY_CLASS(Source);
4515 std::variant<Sink, Source> u;
4530 OmpTaskDependenceType::Value GetTaskDepType()
const;
4531 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4535 std::variant<TaskDep, OmpDoacross> u;
4572 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4588 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4598 WRAPPER_CLASS_BOILERPLATE(
4605 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4622 using MemoryOrder = common::OmpMemoryOrderType;
4648 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4669 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4682 WRAPPER_CLASS_BOILERPLATE(
4695 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4748 MODIFIER_BOILERPLATE(
4759 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4796 WRAPPER_CLASS_BOILERPLATE(
4810EMPTY_CLASS(OmpNoOpenMPClause);
4815EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4820EMPTY_CLASS(OmpNoParallelismClause);
4830 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4842 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4854 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4864 ENUM_CLASS(Ordering, Concurrent)
4866 std::tuple<MODIFIERS(), Ordering> t;
4888 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4931 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4933 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4948 ENUM_CLASS(SevLevel, Fatal, Warning);
4970 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4977 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5020 WRAPPER_CLASS_BOILERPLATE(
5038 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5048 MODIFIER_BOILERPLATE(OmpContextSelector);
5049 std::tuple<MODIFIERS(),
5050 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5064 llvm::omp::Clause Id()
const;
5066#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5067#include "llvm/Frontend/OpenMP/OMP.inc"
5072#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5073#include "llvm/Frontend/OpenMP/OMP.inc"
5079 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5086 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo, ExplicitBegin)
5091 return std::get<OmpDirectiveName>(t);
5093 llvm::omp::Directive DirId()
const {
5100 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5101 std::optional<OmpClauseList>, Flags>
5110 INHERITED_TUPLE_CLASS_BOILERPLATE(
5122 return std::get<OmpBeginDirective>(t);
5124 const std::optional<OmpEndDirective> &EndDir()
const {
5125 return std::get<std::optional<OmpEndDirective>>(t);
5129 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5133 WRAPPER_CLASS_BOILERPLATE(
5138 INHERITED_TUPLE_CLASS_BOILERPLATE(
5159 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5185 INHERITED_TUPLE_CLASS_BOILERPLATE(
5200 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5208 return std::get<OmpBeginSectionsDirective>(t);
5210 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5211 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5218 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5219 std::optional<OmpEndSectionsDirective>>
5228 WRAPPER_CLASS_BOILERPLATE(
5240 WRAPPER_CLASS_BOILERPLATE(
5248 WRAPPER_CLASS_BOILERPLATE(
5257 WRAPPER_CLASS_BOILERPLATE(
5274 WRAPPER_CLASS_BOILERPLATE(
5287 WRAPPER_CLASS_BOILERPLATE(
5347 INHERITED_TUPLE_CLASS_BOILERPLATE(
5352 llvm::omp::Clause GetKind()
const;
5353 bool IsCapture()
const;
5354 bool IsCompare()
const;
5360 static constexpr int None = 0;
5361 static constexpr int Read = 1;
5362 static constexpr int Write = 2;
5363 static constexpr int Update = Read | Write;
5364 static constexpr int Action = 3;
5365 static constexpr int IfTrue = 4;
5366 static constexpr int IfFalse = 8;
5367 static constexpr int Condition = 12;
5371 TypedAssignment assign;
5373 TypedExpr atom, cond;
5382 WRAPPER_CLASS_BOILERPLATE(
5443 WRAPPER_CLASS_BOILERPLATE(
5485 INHERITED_TUPLE_CLASS_BOILERPLATE(
5491 using EmptyTrait = std::true_type;
5502WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5534 std::variant<Name, ScalarDefaultCharExpr> u;
5544 ENUM_CLASS(Modifier, ReadOnly, Zero)
5551 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5556 std::tuple<ReductionOperator, AccObjectList> t;
5561 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5565 WRAPPER_CLASS_BOILERPLATE(
5571 WRAPPER_CLASS_BOILERPLATE(
5578 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5586 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5595 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5602 WRAPPER_CLASS(Num, ScalarIntExpr);
5603 WRAPPER_CLASS(Dim, ScalarIntExpr);
5605 std::variant<Num, Dim, Static> u;
5610 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5615 std::tuple<bool, ScalarIntConstantExpr> t;
5621#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5622#include "llvm/Frontend/OpenACC/ACC.inc"
5627#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5628#include "llvm/Frontend/OpenACC/ACC.inc"
5634 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5647 std::tuple<Verbatim, AccObjectListWithModifier> t;
5653 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5658 std::tuple<AccLoopDirective, AccClauseList> t;
5665 std::tuple<AccBlockDirective, AccClauseList> t;
5674EMPTY_CLASS(AccEndAtomic);
5679 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5680 std::optional<AccEndAtomic>>
5687 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5688 std::optional<AccEndAtomic>>
5696 std::optional<AccEndAtomic>>
5705 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5710 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5717 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5723 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5729 std::tuple<AccCombinedDirective, AccClauseList> t;
5737struct OpenACCCombinedConstruct {
5738 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5741 : t({std::move(a), std::nullopt, std::nullopt}) {}
5742 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5743 std::optional<AccEndCombinedDirective>>
5750 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5755EMPTY_CLASS(AccEndLoop);
5756struct OpenACCLoopConstruct {
5757 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5759 : t({std::move(a), std::nullopt, std::nullopt}) {}
5760 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5761 std::optional<AccEndLoop>>
5773 std::tuple<AccStandaloneDirective, AccClauseList> t;
5799 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5804 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5807 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5808 std::optional<ScalarIntExpr>>
5814 std::tuple<std::optional<ScalarIntConstantExpr>,
5815 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5818 std::tuple<Directive, std::optional<DoConstruct>> t;
Definition indirection.h:127
Definition indirection.h:31
Definition reference.h:18
Definition char-block.h:28
Definition parse-state.h:35
Definition check-expression.h:19
Definition expression.h:949
Definition expression.h:939
Definition parse-tree.h:1277
Definition parse-tree.h:1284
Definition parse-tree.h:1248
Definition parse-tree.h:1237
Definition parse-tree.h:1236
Definition parse-tree.h:5701
Definition parse-tree.h:5677
Definition parse-tree.h:5693
Definition parse-tree.h:5685
Definition parse-tree.h:5662
Definition parse-tree.h:5726
Definition parse-tree.h:5656
Definition parse-tree.h:5532
Definition parse-tree.h:5505
Definition parse-tree.h:5633
Definition parse-tree.h:5618
Definition parse-tree.h:5613
Definition parse-tree.h:5521
Definition parse-tree.h:5543
Definition parse-tree.h:5526
Definition parse-tree.h:5538
Definition parse-tree.h:5570
Definition parse-tree.h:5564
Definition parse-tree.h:5668
Definition parse-tree.h:5732
Definition parse-tree.h:5609
Definition parse-tree.h:5600
Definition parse-tree.h:5510
Definition parse-tree.h:5549
Definition parse-tree.h:5554
Definition parse-tree.h:5497
Definition parse-tree.h:5593
Definition parse-tree.h:5589
Definition parse-tree.h:5585
Definition parse-tree.h:5515
Definition parse-tree.h:5581
Definition parse-tree.h:5575
Definition parse-tree.h:5559
Definition parse-tree.h:897
Definition parse-tree.h:1406
Definition parse-tree.h:498
Definition parse-tree.h:3271
Definition parse-tree.h:3260
Definition parse-tree.h:1968
Definition parse-tree.h:1933
Definition parse-tree.h:1912
Definition parse-tree.h:1924
Definition parse-tree.h:1979
Definition parse-tree.h:1941
Definition parse-tree.h:3493
Definition parse-tree.h:1898
Definition parse-tree.h:1332
Definition parse-tree.h:3498
Definition parse-tree.h:3503
Definition parse-tree.h:2005
Definition parse-tree.h:2160
Definition parse-tree.h:2151
Definition parse-tree.h:2144
Definition parse-tree.h:1314
Definition parse-tree.h:1367
Definition parse-tree.h:3443
Definition parse-tree.h:1115
Definition parse-tree.h:1428
Definition parse-tree.h:1435
Definition parse-tree.h:2182
Definition parse-tree.h:3020
Definition parse-tree.h:2015
Definition parse-tree.h:3437
Definition parse-tree.h:5811
Definition parse-tree.h:5805
Definition parse-tree.h:5802
Definition parse-tree.h:5796
Definition parse-tree.h:3298
Definition parse-tree.h:3295
Definition parse-tree.h:3278
Definition parse-tree.h:2424
Definition parse-tree.h:2423
Definition parse-tree.h:2405
Definition parse-tree.h:2411
Definition parse-tree.h:2394
Definition parse-tree.h:2392
Definition parse-tree.h:2213
Definition parse-tree.h:2198
Definition parse-tree.h:672
Definition parse-tree.h:1830
Definition parse-tree.h:856
Definition parse-tree.h:690
Definition parse-tree.h:688
Definition parse-tree.h:2683
Definition parse-tree.h:2682
Definition parse-tree.h:2190
Definition parse-tree.h:972
Definition parse-tree.h:1441
Definition parse-tree.h:1892
Definition parse-tree.h:1608
Definition parse-tree.h:1617
Definition parse-tree.h:1616
Definition parse-tree.h:3391
Definition parse-tree.h:3384
Definition parse-tree.h:3416
Definition parse-tree.h:3388
Definition parse-tree.h:3402
Definition parse-tree.h:3412
Definition parse-tree.h:3409
Definition parse-tree.h:3406
Definition parse-tree.h:3396
Definition parse-tree.h:3382
Definition parse-tree.h:842
Definition parse-tree.h:834
Definition parse-tree.h:983
Definition parse-tree.h:996
Definition parse-tree.h:1104
Definition parse-tree.h:1049
Definition parse-tree.h:1199
Definition parse-tree.h:2510
Definition parse-tree.h:2238
Definition parse-tree.h:3252
Definition parse-tree.h:3241
Definition parse-tree.h:3239
Definition parse-tree.h:1687
Definition parse-tree.h:2660
Definition parse-tree.h:2658
Definition parse-tree.h:305
Definition parse-tree.h:2229
Definition parse-tree.h:2220
Definition parse-tree.h:1057
Definition parse-tree.h:1498
Definition parse-tree.h:1510
Definition parse-tree.h:1808
Definition parse-tree.h:1469
Definition parse-tree.h:1518
Definition parse-tree.h:1484
Definition parse-tree.h:1524
Definition parse-tree.h:1490
Definition parse-tree.h:1999
Definition parse-tree.h:439
Definition parse-tree.h:766
Definition parse-tree.h:329
Definition parse-tree.h:614
Definition parse-tree.h:1184
Definition parse-tree.h:748
Definition parse-tree.h:914
Definition parse-tree.h:1847
Definition parse-tree.h:1536
Definition parse-tree.h:1535
Definition parse-tree.h:2325
Definition parse-tree.h:3151
Definition parse-tree.h:2345
Definition parse-tree.h:2207
Definition parse-tree.h:1382
Definition parse-tree.h:3349
Definition parse-tree.h:1228
Definition parse-tree.h:1214
Definition parse-tree.h:2564
Definition parse-tree.h:2570
Definition parse-tree.h:2578
Definition parse-tree.h:531
Definition parse-tree.h:556
Definition parse-tree.h:966
Definition parse-tree.h:953
Definition parse-tree.h:1759
Definition parse-tree.h:1732
Definition parse-tree.h:1773
Definition parse-tree.h:1738
Definition parse-tree.h:1777
Definition parse-tree.h:1714
Definition parse-tree.h:1729
Definition parse-tree.h:1765
Definition parse-tree.h:1747
Definition parse-tree.h:1753
Definition parse-tree.h:1756
Definition parse-tree.h:1719
Definition parse-tree.h:1744
Definition parse-tree.h:1741
Definition parse-tree.h:1726
Definition parse-tree.h:1768
Definition parse-tree.h:1750
Definition parse-tree.h:1708
Definition parse-tree.h:1705
Definition parse-tree.h:1762
Definition parse-tree.h:1699
Definition parse-tree.h:1723
Definition parse-tree.h:1735
Definition parse-tree.h:1702
Definition parse-tree.h:1695
Definition parse-tree.h:1043
Definition parse-tree.h:2101
Definition parse-tree.h:2117
Definition parse-tree.h:2095
Definition parse-tree.h:2130
Definition parse-tree.h:2107
Definition parse-tree.h:3283
Definition parse-tree.h:3140
Definition parse-tree.h:3315
Definition parse-tree.h:3033
Definition parse-tree.h:3048
Definition parse-tree.h:863
Definition parse-tree.h:2364
Definition parse-tree.h:2360
Definition parse-tree.h:2359
Definition parse-tree.h:2375
Definition parse-tree.h:2338
Definition parse-tree.h:1668
Definition parse-tree.h:1678
Definition parse-tree.h:421
Definition parse-tree.h:1592
Definition parse-tree.h:1601
Definition parse-tree.h:627
Definition parse-tree.h:1014
Definition parse-tree.h:2881
Definition parse-tree.h:2890
Definition parse-tree.h:2895
Definition parse-tree.h:2879
Definition parse-tree.h:2910
Definition parse-tree.h:2908
Definition parse-tree.h:792
Definition parse-tree.h:313
Definition parse-tree.h:1340
Definition parse-tree.h:1544
Definition parse-tree.h:3207
Definition parse-tree.h:3174
Definition parse-tree.h:3180
Definition parse-tree.h:3172
Definition parse-tree.h:3197
Definition parse-tree.h:477
Definition parse-tree.h:465
Definition parse-tree.h:715
Definition parse-tree.h:712
Definition parse-tree.h:718
Definition parse-tree.h:708
Definition parse-tree.h:706
Definition parse-tree.h:2720
Definition parse-tree.h:2718
Definition parse-tree.h:2629
Definition parse-tree.h:779
Definition parse-tree.h:660
Definition parse-tree.h:2302
Definition parse-tree.h:1293
Definition parse-tree.h:678
Definition parse-tree.h:1586
Definition parse-tree.h:888
Definition parse-tree.h:2274
Definition parse-tree.h:2270
Definition parse-tree.h:2605
Definition parse-tree.h:2604
Definition parse-tree.h:870
Definition parse-tree.h:321
Definition parse-tree.h:1260
Definition parse-tree.h:2292
Definition parse-tree.h:2290
Definition parse-tree.h:2929
Definition parse-tree.h:3459
Definition parse-tree.h:2062
Definition parse-tree.h:2953
Definition parse-tree.h:2943
Definition parse-tree.h:2964
Definition parse-tree.h:589
Definition parse-tree.h:1299
Definition parse-tree.h:641
Definition parse-tree.h:640
Definition parse-tree.h:2308
Definition parse-tree.h:2532
Definition parse-tree.h:1415
Definition parse-tree.h:4324
Definition parse-tree.h:4330
Definition parse-tree.h:4328
Definition parse-tree.h:4343
Definition parse-tree.h:4350
Definition parse-tree.h:4358
Definition parse-tree.h:4373
Definition parse-tree.h:5320
Definition parse-tree.h:4381
Definition parse-tree.h:4380
Definition parse-tree.h:5178
Definition parse-tree.h:5167
Definition parse-tree.h:4389
Definition parse-tree.h:4401
Definition parse-tree.h:5109
Definition parse-tree.h:5184
Definition parse-tree.h:4412
Definition parse-tree.h:5119
Definition parse-tree.h:4418
Definition parse-tree.h:5078
Definition parse-tree.h:5062
Definition parse-tree.h:4427
Definition parse-tree.h:3628
Definition parse-tree.h:4435
Definition parse-tree.h:5247
Definition parse-tree.h:5256
Definition parse-tree.h:5264
Definition parse-tree.h:5239
Definition parse-tree.h:5227
Definition parse-tree.h:4452
Definition parse-tree.h:4470
Definition parse-tree.h:4529
Definition parse-tree.h:4527
Definition parse-tree.h:4551
Definition parse-tree.h:4559
Definition parse-tree.h:4569
Definition parse-tree.h:4579
Definition parse-tree.h:4587
Definition parse-tree.h:3529
Definition parse-tree.h:5085
Definition parse-tree.h:4542
Definition parse-tree.h:4509
Definition parse-tree.h:4602
Definition parse-tree.h:4597
Definition parse-tree.h:5114
Definition parse-tree.h:5189
Definition parse-tree.h:4613
Definition parse-tree.h:5152
Definition parse-tree.h:4621
Definition parse-tree.h:4634
Definition parse-tree.h:4645
Definition parse-tree.h:4655
Definition parse-tree.h:4663
Definition parse-tree.h:5273
Definition parse-tree.h:4668
Definition parse-tree.h:4676
Definition parse-tree.h:4692
Definition parse-tree.h:4715
Definition parse-tree.h:4681
Definition parse-tree.h:4705
Definition parse-tree.h:4722
Definition parse-tree.h:3640
Definition parse-tree.h:4482
Definition parse-tree.h:4500
Definition parse-tree.h:4491
Definition parse-tree.h:4731
Definition parse-tree.h:4746
Definition parse-tree.h:4757
Definition parse-tree.h:4782
Definition parse-tree.h:4794
Definition parse-tree.h:4803
Definition parse-tree.h:5146
Definition parse-tree.h:4827
Definition parse-tree.h:4839
Definition parse-tree.h:4851
Definition parse-tree.h:3574
Definition parse-tree.h:3565
Definition parse-tree.h:3562
Definition parse-tree.h:4862
Definition parse-tree.h:4875
Definition parse-tree.h:4887
Definition parse-tree.h:4898
Definition parse-tree.h:3618
Definition parse-tree.h:4908
Definition parse-tree.h:5280
Definition parse-tree.h:4917
Definition parse-tree.h:4929
Definition parse-tree.h:5198
Definition parse-tree.h:4940
Definition parse-tree.h:4947
Definition parse-tree.h:3578
Definition parse-tree.h:3600
Definition parse-tree.h:3588
Definition parse-tree.h:3587
Definition parse-tree.h:4956
Definition parse-tree.h:4967
Definition parse-tree.h:5286
Definition parse-tree.h:4976
Definition parse-tree.h:4991
Definition parse-tree.h:5001
Definition parse-tree.h:3554
Definition parse-tree.h:3547
Definition parse-tree.h:5010
Definition parse-tree.h:5019
Definition parse-tree.h:5035
Definition parse-tree.h:5057
Definition parse-tree.h:5156
Definition parse-tree.h:5046
Definition parse-tree.h:3064
Definition parse-tree.h:5708
Definition parse-tree.h:5715
Definition parse-tree.h:5644
Definition parse-tree.h:5737
Definition parse-tree.h:5776
Definition parse-tree.h:5747
Definition parse-tree.h:5765
Definition parse-tree.h:5756
Definition parse-tree.h:5638
Definition parse-tree.h:5770
Definition parse-tree.h:5720
Definition parse-tree.h:5650
Definition parse-tree.h:5346
Definition parse-tree.h:5369
Definition parse-tree.h:5359
Definition parse-tree.h:5351
Definition parse-tree.h:5388
Definition parse-tree.h:5381
Definition parse-tree.h:5472
Definition parse-tree.h:5336
Definition parse-tree.h:5324
Definition parse-tree.h:5399
Definition parse-tree.h:5413
Definition parse-tree.h:5467
Definition parse-tree.h:5429
Definition parse-tree.h:5437
Definition parse-tree.h:5490
Definition parse-tree.h:5458
Definition parse-tree.h:5484
Definition parse-tree.h:5204
Definition parse-tree.h:5442
Definition parse-tree.h:5448
Definition parse-tree.h:378
Definition parse-tree.h:2798
Definition parse-tree.h:2761
Definition parse-tree.h:2989
Definition parse-tree.h:1802
Definition parse-tree.h:2028
Definition parse-tree.h:2027
Definition parse-tree.h:1554
Definition parse-tree.h:1988
Definition parse-tree.h:2824
Definition parse-tree.h:3109
Definition parse-tree.h:2782
Definition parse-tree.h:927
Definition parse-tree.h:3087
Definition parse-tree.h:1068
Definition parse-tree.h:1096
Definition parse-tree.h:1887
Definition parse-tree.h:1088
Definition parse-tree.h:1082
Definition parse-tree.h:1075
Definition parse-tree.h:3097
Definition parse-tree.h:3222
Definition parse-tree.h:3190
Definition parse-tree.h:573
Definition parse-tree.h:2745
Definition parse-tree.h:811
Definition parse-tree.h:2259
Definition parse-tree.h:2977
Definition parse-tree.h:2981
Definition parse-tree.h:2975
Definition parse-tree.h:1567
Definition parse-tree.h:297
Definition parse-tree.h:1653
Definition parse-tree.h:2382
Definition parse-tree.h:2447
Definition parse-tree.h:2446
Definition parse-tree.h:2460
Definition parse-tree.h:2458
Definition parse-tree.h:2437
Definition parse-tree.h:2494
Definition parse-tree.h:2492
Definition parse-tree.h:2472
Definition parse-tree.h:2138
Definition parse-tree.h:3341
Definition parse-tree.h:848
Definition parse-tree.h:785
Definition parse-tree.h:823
Definition parse-tree.h:400
Definition parse-tree.h:453
Definition parse-tree.h:1957
Definition parse-tree.h:361
Definition parse-tree.h:3359
Definition parse-tree.h:2524
Definition parse-tree.h:1877
Definition parse-tree.h:1205
Definition parse-tree.h:3480
Definition parse-tree.h:3452
Definition parse-tree.h:3475
Definition parse-tree.h:2995
Definition parse-tree.h:3006
Definition parse-tree.h:3159
Definition parse-tree.h:3325
Definition parse-tree.h:1644
Definition parse-tree.h:1839
Definition parse-tree.h:1635
Definition parse-tree.h:1825
Definition parse-tree.h:2543
Definition parse-tree.h:2542
Definition parse-tree.h:2555
Definition parse-tree.h:905
Definition parse-tree.h:1148
Definition parse-tree.h:1161
Definition parse-tree.h:1123
Definition parse-tree.h:1170
Definition parse-tree.h:1139
Definition parse-tree.h:1135
Definition parse-tree.h:1133
Definition parse-tree.h:1396
Definition parse-tree.h:2482
Definition parse-tree.h:2481
Definition parse-tree.h:933
Definition parse-tree.h:941
Definition parse-tree.h:742
Definition parse-tree.h:651
Definition parse-tree.h:755
Definition parse-tree.h:3468
Definition parse-tree.h:356
Definition parse-tree.h:2614
Definition parse-tree.h:798
Definition parse-tree.h:3073
Definition parse-tree.h:1855
Definition parse-tree.h:728
Definition parse-tree.h:733
Definition parse-tree.h:284
Definition parse-tree.h:2808
Definition parse-tree.h:2053
Definition parse-tree.h:2046
Definition parse-tree.h:2082
Definition parse-tree.h:2078
Definition parse-tree.h:2077
Definition parse-tree.h:2040
Definition parse-tree.h:2767
Definition parse-tree.h:3702
Definition parse-tree.h:3693
Definition parse-tree.h:3663
Definition parse-tree.h:3652
Definition parse-tree.h:3647
Definition parse-tree.h:3673
Definition parse-tree.h:3686
Definition parse-tree.h:3857
Definition parse-tree.h:3874
Definition parse-tree.h:3866
Definition parse-tree.h:3890
Definition parse-tree.h:3882
Definition parse-tree.h:3902
Definition parse-tree.h:3914
Definition parse-tree.h:3924
Definition parse-tree.h:3935
Definition parse-tree.h:3948
Definition parse-tree.h:3960
Definition parse-tree.h:3981
Definition parse-tree.h:3992
Definition parse-tree.h:4002
Definition parse-tree.h:4011
Definition parse-tree.h:4028
Definition parse-tree.h:4043
Definition parse-tree.h:4054
Definition parse-tree.h:4065
Definition parse-tree.h:4077
Definition parse-tree.h:4087
Definition parse-tree.h:4095
Definition parse-tree.h:4104
Definition parse-tree.h:4113
Definition parse-tree.h:4147
Definition parse-tree.h:4134
Definition parse-tree.h:4121
Definition parse-tree.h:4171
Definition parse-tree.h:4162
Definition parse-tree.h:4205
Definition parse-tree.h:4181
Definition parse-tree.h:4194
Definition parse-tree.h:4214
Definition parse-tree.h:4227
Definition parse-tree.h:4236
Definition parse-tree.h:4246
Definition parse-tree.h:4256
Definition parse-tree.h:4265
Definition parse-tree.h:4273
Definition parse-tree.h:4283
Definition parse-tree.h:4294
Definition parse-tree.h:4307
Definition parse-tree.h:3833
Definition parse-tree.h:3743
Definition parse-tree.h:3740
Definition parse-tree.h:3723
Definition parse-tree.h:3764
Definition parse-tree.h:3730
Definition parse-tree.h:3791
Definition parse-tree.h:3806
Definition parse-tree.h:3803
Definition parse-tree.h:3816
Definition parse-tree.h:3825