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;
771 EMPTY_CLASS(ClassStar);
772 EMPTY_CLASS(TypeStar);
773 WRAPPER_CLASS(Record,
Name);
784 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
791 std::tuple<CharBlock, std::optional<KindParam>> t;
797 std::tuple<CharBlock, std::optional<KindParam>> t;
803 std::tuple<CharBlock, std::optional<KindParam>> t;
807enum class Sign { Positive, Negative };
817 using EmptyTrait = std::true_type;
818 COPY_AND_ASSIGN_BOILERPLATE(Real);
822 std::tuple<Real, std::optional<KindParam>> t;
847 std::tuple<ComplexPart, ComplexPart> t;
853 std::tuple<Sign, ComplexLiteralConstant> t;
861 std::tuple<std::optional<KindParam>, std::string> t;
862 std::string GetString()
const {
return std::get<std::string>(t); }
868 std::string GetString()
const {
return v; }
875 std::tuple<bool, std::optional<KindParam>> t;
885WRAPPER_CLASS(BOZLiteralConstant, std::string);
901 ENUM_CLASS(Kind, Public, Private)
907EMPTY_CLASS(Abstract);
911 WRAPPER_CLASS(Extends,
Name);
912 std::variant<Abstract, AccessSpec, BindC, Extends> u;
919 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
923EMPTY_CLASS(SequenceStmt);
927EMPTY_CLASS(PrivateStmt);
932 std::variant<PrivateStmt, SequenceStmt> u;
938 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
946 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
951WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
958 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
963WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
971 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
977 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
982WRAPPER_CLASS(DeferredShapeSpecList,
int);
988 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
996EMPTY_CLASS(Allocatable);
998EMPTY_CLASS(Contiguous);
1019 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1020 std::list<common::Indirection<DataStmtValue>>>
1030struct ComponentDecl {
1031 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1033 std::optional<ComponentArraySpec> &&aSpec,
1034 std::optional<CoarraySpec> &&coaSpec,
1035 std::optional<Initialization> &&init)
1036 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1037 std::move(length), std::move(init)} {}
1038 std::tuple<Name, std::optional<ComponentArraySpec>,
1039 std::optional<CoarraySpec>, std::optional<CharLength>,
1040 std::optional<Initialization>>
1048 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1054 std::variant<ComponentDecl, FillDecl> u;
1062 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1063 std::list<ComponentOrFill>>
1070WRAPPER_CLASS(Pass, std::optional<Name>);
1073 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1080 std::variant<NullInit, Name> u;
1087 std::variant<Name, DeclarationTypeSpec> u;
1093 std::tuple<Name, std::optional<ProcPointerInit>> t;
1101 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1102 std::list<ProcDecl>>
1120 EMPTY_CLASS(Deferred);
1121 EMPTY_CLASS(Non_Overridable);
1122 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1128 std::tuple<Name, std::optional<Name>> t;
1140 std::tuple<std::list<BindAttr>, std::list<TypeBoundProcDecl>> t;
1144 std::tuple<Name, std::list<BindAttr>, std::list<Name>> t;
1146 std::variant<WithoutInterface, WithInterface> u;
1159WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1175 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1176 std::list<Statement<TypeBoundProcBinding>>>
1181WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1189 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1190 std::list<Statement<PrivateOrSequence>>,
1191 std::list<Statement<ComponentDefStmt>>,
1204 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1210 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1214EMPTY_CLASS(EnumDefStmt);
1219 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1223WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1226EMPTY_CLASS(EndEnumStmt);
1232 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1233 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1241 TUPLE_CLASS_BOILERPLATE(
Triplet);
1242 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1244 UNION_CLASS_BOILERPLATE(
AcValue);
1245 std::variant<Triplet, common::Indirection<Expr>,
1252 TUPLE_CLASS_BOILERPLATE(AcSpec);
1253 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1254 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1258WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1265 std::tuple<VAR, BOUND, BOUND, std::optional<BOUND>> t;
1267 const VAR &Name()
const {
return std::get<0>(t); }
1268 const BOUND &Lower()
const {
return std::get<1>(t); }
1269 const BOUND &Upper()
const {
return std::get<2>(t); }
1270 const std::optional<BOUND> &Step()
const {
return std::get<3>(t); }
1283 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1298 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1304 std::tuple<NamedConstant, ConstantExpr> t;
1308WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1311WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1314WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1319 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1326WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1329EMPTY_CLASS(AssumedRankSpec);
1337 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1338 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1344 ENUM_CLASS(Intent, In, Out, InOut)
1345 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1350WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1360EMPTY_CLASS(Asynchronous);
1361EMPTY_CLASS(External);
1362EMPTY_CLASS(Intrinsic);
1363EMPTY_CLASS(Optional);
1364EMPTY_CLASS(Parameter);
1365EMPTY_CLASS(Protected);
1369EMPTY_CLASS(Volatile);
1374 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1375 common::CUDADataAttr>
1386 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1387 EntityDecl(ObjectName &&name,
CharLength &&length,
1388 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1389 std::optional<Initialization> &&init)
1390 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1391 std::move(length), std::move(init)} {}
1392 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1393 std::optional<CharLength>, std::optional<Initialization>>
1401 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1411 std::tuple<AccessSpec, std::list<AccessId>> t;
1420 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1425WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1428WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1433 ENUM_CLASS(Kind, Object, Common)
1434 std::tuple<Kind, Name> t;
1440 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1446 std::tuple<Name, CoarraySpec> t;
1450WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1453WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1462using TypedAssignment =
1475 mutable TypedExpr typedExpr;
1476 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1489 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1495 mutable std::int64_t repetitions{1};
1503 std::variant<Scalar<common::Indirection<Designator>>,
1516 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1523 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1529 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1533WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1541 std::tuple<Name, ArraySpec> t;
1543 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1549 std::tuple<IntentSpec, std::list<Name>> t;
1553WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1559 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1563WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1566WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1572 ENUM_CLASS(Kind, Entity, Common)
1573 std::tuple<Kind, Name> t;
1577WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1580WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1583WRAPPER_CLASS(ValueStmt, std::list<Name>);
1586WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1591 std::tuple<Location, std::optional<Location>> t;
1597 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1606 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1607 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1613 std::tuple<Name, std::optional<ArraySpec>> t;
1621 TUPLE_CLASS_BOILERPLATE(
Block);
1622 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1624 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1625 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1626 std::list<Block> &&);
1635WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1640 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1644using Subscript = ScalarIntExpr;
1649 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1650 std::optional<Subscript>>
1658 std::variant<IntExpr, SubscriptTriplet> u;
1662using Cosubscript = ScalarIntExpr;
1673 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1676 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1683 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1692 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1699 UNION_CLASS_BOILERPLATE(Expr);
1703 using IntrinsicUnary::IntrinsicUnary;
1706 using IntrinsicUnary::IntrinsicUnary;
1709 using IntrinsicUnary::IntrinsicUnary;
1711 struct NOT :
public IntrinsicUnary {
1712 using IntrinsicUnary::IntrinsicUnary;
1719 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
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;
1772 using IntrinsicBinary::IntrinsicBinary;
1777 using IntrinsicBinary::IntrinsicBinary;
1782 std::tuple<DefinedOpName, common::Indirection<Expr>,
1790 mutable TypedExpr typedExpr;
1794 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1799 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1806 TUPLE_CLASS_BOILERPLATE(
PartRef);
1807 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1812 UNION_CLASS_BOILERPLATE(DataRef);
1813 explicit DataRef(std::list<PartRef> &&);
1814 std::variant<Name, common::Indirection<StructureComponent>,
1830 std::tuple<DataRef, SubstringRange> t;
1835 std::tuple<CharLiteralConstant, SubstringRange> t;
1852 bool EndsInBareName()
const;
1854 std::variant<DataRef, Substring> u;
1860 mutable TypedExpr typedExpr;
1862 std::variant<common::Indirection<Designator>,
1882 std::tuple<DataRef, Name> t;
1884 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1885 const Name &Component()
const {
return std::get<Name>(t); }
1897 std::tuple<DataRef, ImageSelector> t;
1906 std::tuple<DataRef, std::list<SectionSubscript>> t;
1908 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1909 const std::list<SectionSubscript> &Subscripts()
const {
1910 return std::get<std::list<SectionSubscript>>(t);
1917 mutable TypedExpr typedExpr;
1918 std::variant<Name, StructureComponent> u;
1923using BoundExpr = ScalarIntExpr;
1929 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1938 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1946 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1947 std::optional<AllocateCoarraySpec>>
1952WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1956WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1962 std::variant<StatVariable, MsgVariable> u;
1977 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
1984 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
1985 std::list<AllocOpt>>
1993 mutable TypedExpr typedExpr;
1994 std::variant<Name, StructureComponent> u;
1998WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2004 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2010 mutable TypedAssignment typedAssignment;
2011 std::tuple<Variable, Expr> t;
2015WRAPPER_CLASS(BoundsSpec, BoundExpr);
2020 std::tuple<BoundExpr, BoundExpr> t;
2032 UNION_CLASS_BOILERPLATE(
Bounds);
2033 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2036 mutable TypedAssignment typedAssignment;
2037 std::tuple<DataRef, Bounds, Expr> t;
2045 std::tuple<LogicalExpr, AssignmentStmt> t;
2051 std::tuple<std::optional<Name>, LogicalExpr> t;
2067 std::tuple<LogicalExpr, std::optional<Name>> t;
2071WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2074WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2083 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2087 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2090 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2091 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2106 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2112 std::tuple<common::Indirection<ConcurrentHeader>,
2129WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2135 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2143 std::variant<Expr, Variable> u;
2149 std::tuple<Name, Selector> t;
2156 std::tuple<std::optional<Name>, std::list<Association>> t;
2160WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2169WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2172WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2187 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2195 std::tuple<CodimensionDecl, Selector> t;
2203 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2204 std::list<StatOrErrmsg>>
2212 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2225 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2229WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2243 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2252 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2253 std::optional<ScalarLogicalExpr>>
2263 ENUM_CLASS(Operator, Plus, Minus, Multiply, Max, Min, Iand, Ior, Ieor, And,
2275 WRAPPER_CLASS(Local, std::list<Name>);
2276 WRAPPER_CLASS(LocalInit, std::list<Name>);
2278 TUPLE_CLASS_BOILERPLATE(
Reduce);
2280 std::tuple<Operator, std::list<Name>> t;
2282 WRAPPER_CLASS(Shared, std::list<Name>);
2283 EMPTY_CLASS(DefaultNone);
2284 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2297 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2300 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2307 std::tuple<Label, std::optional<LoopControl>> t;
2313 std::tuple<std::optional<Name>, std::optional<Label>,
2314 std::optional<LoopControl>>
2319WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2330 const std::optional<LoopControl> &GetLoopControl()
const;
2331 bool IsDoNormal()
const;
2332 bool IsDoWhile()
const;
2333 bool IsDoConcurrent()
const;
2338WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2343 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2350 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2354WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2357WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2365 std::tuple<Statement<ElseIfStmt>, Block> t;
2369 std::tuple<Statement<ElseStmt>, Block> t;
2372 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2379 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2380 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2398 TUPLE_CLASS_BOILERPLATE(
Range);
2399 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2402 std::variant<CaseValue, Range> u;
2406EMPTY_CLASS(Default);
2410 std::variant<std::list<CaseValueRange>, Default> u;
2416 std::tuple<CaseSelector, std::optional<Name>> t;
2422WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2428 TUPLE_CLASS_BOILERPLATE(
Case);
2429 std::tuple<Statement<CaseStmt>, Block> t;
2432 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2442 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2451 UNION_CLASS_BOILERPLATE(
Rank);
2452 std::variant<ScalarIntConstantExpr, Star, Default> u;
2455 std::tuple<Rank, std::optional<Name>> t;
2465 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2467 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2477 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2486 UNION_CLASS_BOILERPLATE(
Guard);
2487 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2490 std::tuple<Guard, std::optional<Name>> t;
2499 std::tuple<Statement<TypeGuardStmt>, Block> t;
2501 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2507WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2510WRAPPER_CLASS(GotoStmt, Label);
2515 std::tuple<std::list<Label>, ScalarIntExpr> t;
2528 ENUM_CLASS(Kind, Stop, ErrorStop)
2530 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2537 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2541WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2548 std::variant<IntExpr, Star> u;
2551 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2555WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2560 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2569 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2575 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2583 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2596 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2599 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2610 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2613 std::tuple<LockVariable, std::list<LockStat>> t;
2619 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2623WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2633 UNION_CLASS_BOILERPLATE(
IoUnit);
2634 std::variant<Variable, common::Indirection<Expr>, Star> u;
2638using FileNameExpr = ScalarDefaultCharExpr;
2658WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2659WRAPPER_CLASS(ErrLabel, Label);
2664 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2665 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2666 Carriagecontrol, Convert, Dispose)
2668 std::tuple<Kind, ScalarDefaultCharExpr> t;
2670 WRAPPER_CLASS(Recl, ScalarIntExpr);
2671 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2672 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2673 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2678WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2688 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2692 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2698 UNION_CLASS_BOILERPLATE(
Format);
2699 std::variant<Expr, Label, Star> u;
2703WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2719WRAPPER_CLASS(EndLabel, Label);
2720WRAPPER_CLASS(EorLabel, Label);
2725 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2727 std::tuple<Kind, ScalarDefaultCharExpr> t;
2729 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2730 WRAPPER_CLASS(Pos, ScalarIntExpr);
2731 WRAPPER_CLASS(Rec, ScalarIntExpr);
2732 WRAPPER_CLASS(Size, ScalarIntVariable);
2734 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2742 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2749 BOILERPLATE(ReadStmt);
2750 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2751 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2752 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2753 items(std::move(its)) {}
2754 std::optional<IoUnit> iounit;
2756 std::optional<Format> format;
2759 std::list<IoControlSpec> controls;
2760 std::list<InputItem> items;
2766 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2771 BOILERPLATE(WriteStmt);
2772 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2773 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2774 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2775 items(std::move(its)) {}
2776 std::optional<IoUnit> iounit;
2778 std::optional<Format> format;
2780 std::list<IoControlSpec> controls;
2781 std::list<OutputItem> items;
2787 std::tuple<Format, std::list<OutputItem>> t;
2798 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2803 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2810WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2813 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2814 MsgVariable, StatVariable>
2819WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2829 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2834WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2838WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2841WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2844WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2885 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2886 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2887 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2889 Carriagecontrol, Convert, Dispose)
2890 TUPLE_CLASS_BOILERPLATE(
CharVar);
2891 std::tuple<Kind, ScalarDefaultCharVariable> t;
2894 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2895 TUPLE_CLASS_BOILERPLATE(
IntVar);
2896 std::tuple<Kind, ScalarIntVariable> t;
2899 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2900 TUPLE_CLASS_BOILERPLATE(
LogVar);
2901 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2915 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2917 std::variant<std::list<InquireSpec>,
Iolength> u;
2924WRAPPER_CLASS(ProgramStmt,
Name);
2927WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2935 ExecutionPart, std::optional<InternalSubprogramPart>,
2941WRAPPER_CLASS(ModuleStmt,
Name);
2948 std::variant<common::Indirection<FunctionSubprogram>,
2958 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2962WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2968 TUPLE_CLASS_BOILERPLATE(
Module);
2979 UNION_CLASS_BOILERPLATE(
Rename);
2981 TUPLE_CLASS_BOILERPLATE(
Names);
2982 std::tuple<Name, Name> t;
2986 std::tuple<DefinedOpName, DefinedOpName> t;
2988 std::variant<Names, Operators> u;
2994 std::tuple<Name, std::optional<Name>> t;
3000 std::tuple<ParentIdentifier, Name> t;
3004WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3017WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3020WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3038 EMPTY_CLASS(Assignment);
3039 EMPTY_CLASS(ReadFormatted);
3040 EMPTY_CLASS(ReadUnformatted);
3041 EMPTY_CLASS(WriteFormatted);
3042 EMPTY_CLASS(WriteUnformatted);
3045 ReadUnformatted, WriteFormatted, WriteUnformatted>
3053 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3057struct InterfaceStmt {
3058 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3060 InterfaceStmt(Abstract x) : u{x} {}
3062 std::variant<std::optional<GenericSpec>, Abstract> u;
3068 UNION_CLASS_BOILERPLATE(
Only);
3069 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3077 BOILERPLATE(UseStmt);
3078 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3079 template <
typename A>
3080 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3081 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3082 std::optional<ModuleNature> nature;
3084 std::variant<std::list<Rename>, std::list<Only>> u;
3102 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3103 std::list<ProcDecl>>
3114 EMPTY_CLASS(Elemental);
3115 EMPTY_CLASS(Impure);
3117 EMPTY_CLASS(Non_Recursive);
3119 EMPTY_CLASS(Recursive);
3120 EMPTY_CLASS(Simple);
3121 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3122 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3123 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3125 Pure, Recursive, Simple, Attributes, Launch_Bounds, Cluster_Dims>
3133 TUPLE_CLASS_BOILERPLATE(Suffix);
3135 : t(std::move(rn), std::move(lbs)) {}
3136 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3145 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3146 std::optional<Suffix>>
3151WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3156 std::variant<Name, Star> u;
3164 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3165 std::optional<LanguageBindingSpec>>
3170WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3185 std::tuple<Statement<SubroutineStmt>,
3189 std::variant<Function, Subroutine> u;
3194 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3196 std::tuple<Kind, std::list<Name>> t;
3203 std::variant<InterfaceBody, Statement<ProcedureStmt>,
3209WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3215 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3221WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3224WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3230 std::variant<Name, ProcComponentRef> u;
3234WRAPPER_CLASS(AltReturnSpec, Label);
3237EMPTY_CLASS(ConditionalArgNil);
3251 std::variant<common::Indirection<Expr>, ConditionalArgNil> u;
3260 std::variant<ConditionalArg, ConditionalArg::Consequent> u;
3267 WRAPPER_CLASS(PercentRef,
Expr);
3268 WRAPPER_CLASS(PercentVal,
Expr);
3269 UNION_CLASS_BOILERPLATE(ActualArg);
3271 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal,
3279 std::tuple<std::optional<Keyword>,
ActualArg> t;
3285 TUPLE_CLASS_BOILERPLATE(
Call);
3286 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3302 TUPLE_CLASS_BOILERPLATE(CallStmt);
3303 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3306 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3307 std::optional<ScalarIntExpr>>
3311 std::list<ActualArgSpec> &&args)
3312 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3313 std::tuple<Call, std::optional<Chevrons>> t;
3315 mutable TypedCall typedCall;
3339WRAPPER_CLASS(MpSubprogramStmt,
Name);
3342WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3357 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3361WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3392 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3395 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3399 std::tuple<common::Indirection<Designator>, uint64_t> t;
3401 EMPTY_CLASS(VectorAlways);
3404 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3406 std::tuple<std::uint64_t, Kind> t;
3410 std::tuple<Name, std::optional<std::uint64_t>> t;
3413 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3416 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3419 WRAPPER_CLASS_BOILERPLATE(
3423 WRAPPER_CLASS_BOILERPLATE(
InlineAlways, std::optional<Name>);
3425 EMPTY_CLASS(NoVector);
3426 EMPTY_CLASS(NoUnroll);
3427 EMPTY_CLASS(NoUnrollAndJam);
3428 EMPTY_CLASS(ForceInline);
3429 EMPTY_CLASS(Inline);
3430 EMPTY_CLASS(NoInline);
3433 EMPTY_CLASS(Unrecognized);
3435 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3437 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3445 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3451 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3453WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3460 std::variant<Statement<DataComponentDefStmt>,
3466 EMPTY_CLASS(MapStmt);
3467 EMPTY_CLASS(EndMapStmt);
3468 TUPLE_CLASS_BOILERPLATE(
Map);
3469 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3475 EMPTY_CLASS(UnionStmt);
3476 EMPTY_CLASS(EndUnionStmt);
3477 TUPLE_CLASS_BOILERPLATE(
Union);
3483 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3487 EMPTY_CLASS(EndStructureStmt);
3489 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3496WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3501 std::tuple<Expr, Label, Label, Label> t;
3506 std::tuple<Label, Name> t;
3511 std::tuple<Name, std::list<Label>> t;
3514WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3520#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3521 using basename::basename; \
3522 classname(basename &&b) : basename(std::move(b)) {} \
3523 using TupleTrait = std::true_type; \
3524 BOILERPLATE(classname)
3526#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3527 BOILERPLATE(classname); \
3528 using basename::basename; \
3529 classname(basename &&base) : basename(std::move(base)) {} \
3530 using WrapperTrait = std::true_type
3535struct OmpDirectiveName {
3537 constexpr OmpDirectiveName() =
default;
3538 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3539 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3543 OmpDirectiveName(
const Verbatim &name);
3544 using WrapperTrait = std::true_type;
3546 bool IsExecutionPart()
const;
3549 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3557 std::variant<TypeSpec, DeclarationTypeSpec> u;
3572 ENUM_CLASS(Kind, BlankCommonBlock);
3573 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3581 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3588 using EmptyTrait = std::true_type;
3596 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3599 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3613 WRAPPER_CLASS_BOILERPLATE(
3626 std::variant<DefinedOperator, ProcedureDesignator> u;
3635 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3647 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3652inline namespace arguments {
3655 std::variant<OmpObject, FunctionReference> u;
3659 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3671 std::tuple<OmpObject, OmpObject> t;
3682 std::tuple<std::string, TypeSpec, Name> t;
3695 std::optional<OmpCombinerExpression>>
3714inline namespace traits {
3751 TUPLE_CLASS_BOILERPLATE(
Complex);
3753 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3757 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3773 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3798 std::string ToString()
const;
3801 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3802 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3803 std::variant<Value, llvm::omp::Directive, std::string> u;
3814 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3816 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3823 std::string ToString()
const;
3825 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3834 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3841 WRAPPER_CLASS_BOILERPLATE(
3846#define MODIFIER_BOILERPLATE(...) \
3848 using Variant = std::variant<__VA_ARGS__>; \
3849 UNION_CLASS_BOILERPLATE(Modifier); \
3854#define MODIFIERS() std::optional<std::list<Modifier>>
3856inline namespace modifier {
3864 ENUM_CLASS(Value, Cgroup);
3873 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3909 ENUM_CLASS(Value, Always)
3921 ENUM_CLASS(Value, Always, Never, Auto)
3931 ENUM_CLASS(Value, Automap);
3942 ENUM_CLASS(Value, Simd)
3955 ENUM_CLASS(Value, Close)
3967 ENUM_CLASS(Value, Delete)
3988 ENUM_CLASS(Value, Sink, Source);
3999 using Value = common::OmpDependenceKind;
4001 std::tuple<Value, OmpObject> t;
4009 ENUM_CLASS(Value, Ancestor, Device_Num)
4035 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4050 ENUM_CLASS(Value, Present);
4061 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4072 ENUM_CLASS(Value, Target, Targetsync)
4086 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4094 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4102 ENUM_CLASS(Value, Conditional)
4111 ENUM_CLASS(Value, Ref, Uval, Val);
4141 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4142 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4154 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4169 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4178 ENUM_CLASS(Value, Reproducible, Unconstrained)
4191 using Extensions = std::list<PreferencePropertyExtension>;
4192 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4202 using ForeignRuntimeIdentifier =
4203 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4204 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4212 WRAPPER_CLASS_BOILERPLATE(
4221 ENUM_CLASS(Value, Strict)
4234 ENUM_CLASS(Value, Present)
4243 ENUM_CLASS(Value, Default, Inscan, Task);
4253 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4263 ENUM_CLASS(Value, Self)
4290 using Value = common::OmpDependenceKind;
4301 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4314 ENUM_CLASS(Value, Ompx_Hold)
4324using OmpDirectiveList = std::list<llvm::omp::Directive>;
4337 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4340 std::tuple<OmpAdjustOp, OmpObjectList> t;
4357 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4388 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4396 ENUM_CLASS(ActionTime, Compilation, Execution);
4397 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4408 using MemoryOrder = common::OmpMemoryOrderType;
4419 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4426 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4459 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4461 std::variant<DataSharingAttribute,
4478 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4481 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4490 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4499 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4516 OmpDependenceType::Value GetDepType()
const;
4519 EMPTY_CLASS(Source);
4521 std::variant<Sink, Source> u;
4536 OmpTaskDependenceType::Value GetTaskDepType()
const;
4537 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4541 std::variant<TaskDep, OmpDoacross> u;
4578 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4594 using DeviceTypeDescription = common::OmpDeviceType;
4604 WRAPPER_CLASS_BOILERPLATE(
4611 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4628 using MemoryOrder = common::OmpMemoryOrderType;
4654 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4675 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4688 WRAPPER_CLASS_BOILERPLATE(
4701 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4754 MODIFIER_BOILERPLATE(
4765 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4802 WRAPPER_CLASS_BOILERPLATE(
4816EMPTY_CLASS(OmpNoOpenMPClause);
4821EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4826EMPTY_CLASS(OmpNoParallelismClause);
4836 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4848 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4860 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4870 ENUM_CLASS(Ordering, Concurrent)
4872 std::tuple<MODIFIERS(), Ordering> t;
4894 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4937 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4939 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4954 ENUM_CLASS(SevLevel, Fatal, Warning);
4976 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4983 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5026 WRAPPER_CLASS_BOILERPLATE(
5044 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5054 MODIFIER_BOILERPLATE(OmpContextSelector);
5055 std::tuple<MODIFIERS(),
5056 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5070 llvm::omp::Clause Id()
const;
5072#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5073#include "llvm/Frontend/OpenMP/OMP.inc"
5078#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5079#include "llvm/Frontend/OpenMP/OMP.inc"
5085 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5092 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo, ExplicitBegin)
5097 return std::get<OmpDirectiveName>(t);
5099 llvm::omp::Directive DirId()
const {
5106 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5107 std::optional<OmpClauseList>, Flags>
5116 INHERITED_TUPLE_CLASS_BOILERPLATE(
5128 return std::get<OmpBeginDirective>(t);
5130 const std::optional<OmpEndDirective> &EndDir()
const {
5131 return std::get<std::optional<OmpEndDirective>>(t);
5135 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5139 WRAPPER_CLASS_BOILERPLATE(
5144 INHERITED_TUPLE_CLASS_BOILERPLATE(
5165 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5191 INHERITED_TUPLE_CLASS_BOILERPLATE(
5206 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5214 return std::get<OmpBeginSectionsDirective>(t);
5216 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5217 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5224 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5225 std::optional<OmpEndSectionsDirective>>
5234 WRAPPER_CLASS_BOILERPLATE(
5246 WRAPPER_CLASS_BOILERPLATE(
5254 WRAPPER_CLASS_BOILERPLATE(
5263 WRAPPER_CLASS_BOILERPLATE(
5280 WRAPPER_CLASS_BOILERPLATE(
5293 WRAPPER_CLASS_BOILERPLATE(
5353 INHERITED_TUPLE_CLASS_BOILERPLATE(
5358 llvm::omp::Clause GetKind()
const;
5359 bool IsCapture()
const;
5360 bool IsCompare()
const;
5366 static constexpr int None = 0;
5367 static constexpr int Read = 1;
5368 static constexpr int Write = 2;
5369 static constexpr int Update = Read | Write;
5370 static constexpr int Action = 3;
5371 static constexpr int IfTrue = 4;
5372 static constexpr int IfFalse = 8;
5373 static constexpr int Condition = 12;
5377 TypedAssignment assign;
5379 TypedExpr atom, cond;
5388 WRAPPER_CLASS_BOILERPLATE(
5449 WRAPPER_CLASS_BOILERPLATE(
5491 INHERITED_TUPLE_CLASS_BOILERPLATE(
5497 using EmptyTrait = std::true_type;
5508WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5540 std::variant<Name, ScalarDefaultCharExpr> u;
5550 ENUM_CLASS(Modifier, ReadOnly, Zero)
5557 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5562 std::tuple<ReductionOperator, AccObjectList> t;
5567 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5571 WRAPPER_CLASS_BOILERPLATE(
5577 WRAPPER_CLASS_BOILERPLATE(
5584 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5592 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5601 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5608 WRAPPER_CLASS(Num, ScalarIntExpr);
5609 WRAPPER_CLASS(Dim, ScalarIntExpr);
5611 std::variant<Num, Dim, Static> u;
5616 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5621 std::tuple<bool, ScalarIntConstantExpr> t;
5627#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5628#include "llvm/Frontend/OpenACC/ACC.inc"
5633#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5634#include "llvm/Frontend/OpenACC/ACC.inc"
5640 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5653 std::tuple<Verbatim, AccObjectListWithModifier> t;
5659 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5664 std::tuple<AccLoopDirective, AccClauseList> t;
5671 std::tuple<AccBlockDirective, AccClauseList> t;
5680EMPTY_CLASS(AccEndAtomic);
5685 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5686 std::optional<AccEndAtomic>>
5693 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5694 std::optional<AccEndAtomic>>
5702 std::optional<AccEndAtomic>>
5711 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5716 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5723 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5729 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5735 std::tuple<AccCombinedDirective, AccClauseList> t;
5743struct OpenACCCombinedConstruct {
5744 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5747 : t({std::move(a), std::nullopt, std::nullopt}) {}
5748 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5749 std::optional<AccEndCombinedDirective>>
5756 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5761EMPTY_CLASS(AccEndLoop);
5762struct OpenACCLoopConstruct {
5763 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5765 : t({std::move(a), std::nullopt, std::nullopt}) {}
5766 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5767 std::optional<AccEndLoop>>
5779 std::tuple<AccStandaloneDirective, AccClauseList> t;
5805 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5810 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5813 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5814 std::optional<ScalarIntExpr>>
5820 std::tuple<std::optional<ScalarIntConstantExpr>,
5821 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5824 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:1280
Definition parse-tree.h:1287
Definition parse-tree.h:1251
Definition parse-tree.h:1240
Definition parse-tree.h:1239
Definition parse-tree.h:5707
Definition parse-tree.h:5683
Definition parse-tree.h:5699
Definition parse-tree.h:5691
Definition parse-tree.h:5668
Definition parse-tree.h:5732
Definition parse-tree.h:5662
Definition parse-tree.h:5538
Definition parse-tree.h:5511
Definition parse-tree.h:5639
Definition parse-tree.h:5624
Definition parse-tree.h:5619
Definition parse-tree.h:5527
Definition parse-tree.h:5549
Definition parse-tree.h:5532
Definition parse-tree.h:5544
Definition parse-tree.h:5576
Definition parse-tree.h:5570
Definition parse-tree.h:5674
Definition parse-tree.h:5738
Definition parse-tree.h:5615
Definition parse-tree.h:5606
Definition parse-tree.h:5516
Definition parse-tree.h:5555
Definition parse-tree.h:5560
Definition parse-tree.h:5503
Definition parse-tree.h:5599
Definition parse-tree.h:5595
Definition parse-tree.h:5591
Definition parse-tree.h:5521
Definition parse-tree.h:5587
Definition parse-tree.h:5581
Definition parse-tree.h:5565
Definition parse-tree.h:900
Definition parse-tree.h:1409
Definition parse-tree.h:498
Definition parse-tree.h:3277
Definition parse-tree.h:3266
Definition parse-tree.h:1971
Definition parse-tree.h:1936
Definition parse-tree.h:1915
Definition parse-tree.h:1927
Definition parse-tree.h:1982
Definition parse-tree.h:1944
Definition parse-tree.h:3499
Definition parse-tree.h:1901
Definition parse-tree.h:1335
Definition parse-tree.h:3504
Definition parse-tree.h:3509
Definition parse-tree.h:2008
Definition parse-tree.h:2163
Definition parse-tree.h:2154
Definition parse-tree.h:2147
Definition parse-tree.h:1317
Definition parse-tree.h:1370
Definition parse-tree.h:3449
Definition parse-tree.h:1118
Definition parse-tree.h:1431
Definition parse-tree.h:1438
Definition parse-tree.h:2185
Definition parse-tree.h:3023
Definition parse-tree.h:2018
Definition parse-tree.h:3443
Definition parse-tree.h:5817
Definition parse-tree.h:5811
Definition parse-tree.h:5808
Definition parse-tree.h:5802
Definition parse-tree.h:3304
Definition parse-tree.h:3301
Definition parse-tree.h:3284
Definition parse-tree.h:2427
Definition parse-tree.h:2426
Definition parse-tree.h:2408
Definition parse-tree.h:2414
Definition parse-tree.h:2397
Definition parse-tree.h:2395
Definition parse-tree.h:2216
Definition parse-tree.h:2201
Definition parse-tree.h:672
Definition parse-tree.h:1833
Definition parse-tree.h:859
Definition parse-tree.h:690
Definition parse-tree.h:688
Definition parse-tree.h:2686
Definition parse-tree.h:2685
Definition parse-tree.h:2193
Definition parse-tree.h:975
Definition parse-tree.h:1444
Definition parse-tree.h:1895
Definition parse-tree.h:1611
Definition parse-tree.h:1620
Definition parse-tree.h:1619
Definition parse-tree.h:3397
Definition parse-tree.h:3390
Definition parse-tree.h:3422
Definition parse-tree.h:3394
Definition parse-tree.h:3408
Definition parse-tree.h:3418
Definition parse-tree.h:3415
Definition parse-tree.h:3412
Definition parse-tree.h:3402
Definition parse-tree.h:3388
Definition parse-tree.h:845
Definition parse-tree.h:837
Definition parse-tree.h:986
Definition parse-tree.h:999
Definition parse-tree.h:1107
Definition parse-tree.h:1052
Definition parse-tree.h:1202
Definition parse-tree.h:2513
Definition parse-tree.h:2241
Definition parse-tree.h:3258
Definition parse-tree.h:3247
Definition parse-tree.h:3245
Definition parse-tree.h:1690
Definition parse-tree.h:2663
Definition parse-tree.h:2661
Definition parse-tree.h:305
Definition parse-tree.h:2232
Definition parse-tree.h:2223
Definition parse-tree.h:1060
Definition parse-tree.h:1501
Definition parse-tree.h:1513
Definition parse-tree.h:1811
Definition parse-tree.h:1472
Definition parse-tree.h:1521
Definition parse-tree.h:1487
Definition parse-tree.h:1527
Definition parse-tree.h:1493
Definition parse-tree.h:2002
Definition parse-tree.h:439
Definition parse-tree.h:767
Definition parse-tree.h:329
Definition parse-tree.h:614
Definition parse-tree.h:1187
Definition parse-tree.h:748
Definition parse-tree.h:917
Definition parse-tree.h:1850
Definition parse-tree.h:1539
Definition parse-tree.h:1538
Definition parse-tree.h:2328
Definition parse-tree.h:3154
Definition parse-tree.h:2348
Definition parse-tree.h:2210
Definition parse-tree.h:1385
Definition parse-tree.h:3355
Definition parse-tree.h:1231
Definition parse-tree.h:1217
Definition parse-tree.h:2567
Definition parse-tree.h:2573
Definition parse-tree.h:2581
Definition parse-tree.h:531
Definition parse-tree.h:556
Definition parse-tree.h:969
Definition parse-tree.h:956
Definition parse-tree.h:1762
Definition parse-tree.h:1735
Definition parse-tree.h:1776
Definition parse-tree.h:1741
Definition parse-tree.h:1780
Definition parse-tree.h:1717
Definition parse-tree.h:1732
Definition parse-tree.h:1768
Definition parse-tree.h:1750
Definition parse-tree.h:1756
Definition parse-tree.h:1759
Definition parse-tree.h:1722
Definition parse-tree.h:1747
Definition parse-tree.h:1744
Definition parse-tree.h:1729
Definition parse-tree.h:1771
Definition parse-tree.h:1753
Definition parse-tree.h:1711
Definition parse-tree.h:1708
Definition parse-tree.h:1765
Definition parse-tree.h:1702
Definition parse-tree.h:1726
Definition parse-tree.h:1738
Definition parse-tree.h:1705
Definition parse-tree.h:1698
Definition parse-tree.h:1046
Definition parse-tree.h:2104
Definition parse-tree.h:2120
Definition parse-tree.h:2098
Definition parse-tree.h:2133
Definition parse-tree.h:2110
Definition parse-tree.h:3289
Definition parse-tree.h:3143
Definition parse-tree.h:3321
Definition parse-tree.h:3036
Definition parse-tree.h:3051
Definition parse-tree.h:866
Definition parse-tree.h:2367
Definition parse-tree.h:2363
Definition parse-tree.h:2362
Definition parse-tree.h:2378
Definition parse-tree.h:2341
Definition parse-tree.h:1671
Definition parse-tree.h:1681
Definition parse-tree.h:421
Definition parse-tree.h:1595
Definition parse-tree.h:1604
Definition parse-tree.h:627
Definition parse-tree.h:1017
Definition parse-tree.h:2884
Definition parse-tree.h:2893
Definition parse-tree.h:2898
Definition parse-tree.h:2882
Definition parse-tree.h:2913
Definition parse-tree.h:2911
Definition parse-tree.h:795
Definition parse-tree.h:313
Definition parse-tree.h:1343
Definition parse-tree.h:1547
Definition parse-tree.h:3213
Definition parse-tree.h:3177
Definition parse-tree.h:3183
Definition parse-tree.h:3175
Definition parse-tree.h:3201
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:2723
Definition parse-tree.h:2721
Definition parse-tree.h:2632
Definition parse-tree.h:782
Definition parse-tree.h:660
Definition parse-tree.h:2305
Definition parse-tree.h:1296
Definition parse-tree.h:678
Definition parse-tree.h:1589
Definition parse-tree.h:891
Definition parse-tree.h:2277
Definition parse-tree.h:2273
Definition parse-tree.h:2608
Definition parse-tree.h:2607
Definition parse-tree.h:873
Definition parse-tree.h:321
Definition parse-tree.h:1263
Definition parse-tree.h:2295
Definition parse-tree.h:2293
Definition parse-tree.h:2932
Definition parse-tree.h:3465
Definition parse-tree.h:2065
Definition parse-tree.h:2956
Definition parse-tree.h:2946
Definition parse-tree.h:2967
Definition parse-tree.h:589
Definition parse-tree.h:1302
Definition parse-tree.h:641
Definition parse-tree.h:640
Definition parse-tree.h:2311
Definition parse-tree.h:2535
Definition parse-tree.h:1418
Definition parse-tree.h:4330
Definition parse-tree.h:4336
Definition parse-tree.h:4334
Definition parse-tree.h:4349
Definition parse-tree.h:4356
Definition parse-tree.h:4364
Definition parse-tree.h:4379
Definition parse-tree.h:5326
Definition parse-tree.h:4387
Definition parse-tree.h:4386
Definition parse-tree.h:5184
Definition parse-tree.h:5173
Definition parse-tree.h:4395
Definition parse-tree.h:4407
Definition parse-tree.h:5115
Definition parse-tree.h:5190
Definition parse-tree.h:4418
Definition parse-tree.h:5125
Definition parse-tree.h:4424
Definition parse-tree.h:5084
Definition parse-tree.h:5068
Definition parse-tree.h:4433
Definition parse-tree.h:3634
Definition parse-tree.h:4441
Definition parse-tree.h:5253
Definition parse-tree.h:5262
Definition parse-tree.h:5270
Definition parse-tree.h:5245
Definition parse-tree.h:5233
Definition parse-tree.h:4458
Definition parse-tree.h:4476
Definition parse-tree.h:4535
Definition parse-tree.h:4533
Definition parse-tree.h:4557
Definition parse-tree.h:4565
Definition parse-tree.h:4575
Definition parse-tree.h:4585
Definition parse-tree.h:4593
Definition parse-tree.h:3535
Definition parse-tree.h:5091
Definition parse-tree.h:4548
Definition parse-tree.h:4515
Definition parse-tree.h:4608
Definition parse-tree.h:4603
Definition parse-tree.h:5120
Definition parse-tree.h:5195
Definition parse-tree.h:4619
Definition parse-tree.h:5158
Definition parse-tree.h:4627
Definition parse-tree.h:4640
Definition parse-tree.h:4651
Definition parse-tree.h:4661
Definition parse-tree.h:4669
Definition parse-tree.h:5279
Definition parse-tree.h:4674
Definition parse-tree.h:4682
Definition parse-tree.h:4698
Definition parse-tree.h:4721
Definition parse-tree.h:4687
Definition parse-tree.h:4711
Definition parse-tree.h:4728
Definition parse-tree.h:3646
Definition parse-tree.h:4488
Definition parse-tree.h:4506
Definition parse-tree.h:4497
Definition parse-tree.h:4737
Definition parse-tree.h:4752
Definition parse-tree.h:4763
Definition parse-tree.h:4788
Definition parse-tree.h:4800
Definition parse-tree.h:4809
Definition parse-tree.h:5152
Definition parse-tree.h:4833
Definition parse-tree.h:4845
Definition parse-tree.h:4857
Definition parse-tree.h:3580
Definition parse-tree.h:3571
Definition parse-tree.h:3568
Definition parse-tree.h:4868
Definition parse-tree.h:4881
Definition parse-tree.h:4893
Definition parse-tree.h:4904
Definition parse-tree.h:3624
Definition parse-tree.h:4914
Definition parse-tree.h:5286
Definition parse-tree.h:4923
Definition parse-tree.h:4935
Definition parse-tree.h:5204
Definition parse-tree.h:4946
Definition parse-tree.h:4953
Definition parse-tree.h:3584
Definition parse-tree.h:3606
Definition parse-tree.h:3594
Definition parse-tree.h:3593
Definition parse-tree.h:4962
Definition parse-tree.h:4973
Definition parse-tree.h:5292
Definition parse-tree.h:4982
Definition parse-tree.h:4997
Definition parse-tree.h:5007
Definition parse-tree.h:3560
Definition parse-tree.h:3553
Definition parse-tree.h:5016
Definition parse-tree.h:5025
Definition parse-tree.h:5041
Definition parse-tree.h:5063
Definition parse-tree.h:5162
Definition parse-tree.h:5052
Definition parse-tree.h:3067
Definition parse-tree.h:5714
Definition parse-tree.h:5721
Definition parse-tree.h:5650
Definition parse-tree.h:5743
Definition parse-tree.h:5782
Definition parse-tree.h:5753
Definition parse-tree.h:5771
Definition parse-tree.h:5762
Definition parse-tree.h:5644
Definition parse-tree.h:5776
Definition parse-tree.h:5726
Definition parse-tree.h:5656
Definition parse-tree.h:5352
Definition parse-tree.h:5375
Definition parse-tree.h:5365
Definition parse-tree.h:5357
Definition parse-tree.h:5394
Definition parse-tree.h:5387
Definition parse-tree.h:5478
Definition parse-tree.h:5342
Definition parse-tree.h:5330
Definition parse-tree.h:5405
Definition parse-tree.h:5419
Definition parse-tree.h:5473
Definition parse-tree.h:5435
Definition parse-tree.h:5443
Definition parse-tree.h:5496
Definition parse-tree.h:5464
Definition parse-tree.h:5490
Definition parse-tree.h:5210
Definition parse-tree.h:5448
Definition parse-tree.h:5454
Definition parse-tree.h:378
Definition parse-tree.h:2801
Definition parse-tree.h:2764
Definition parse-tree.h:2992
Definition parse-tree.h:1805
Definition parse-tree.h:2031
Definition parse-tree.h:2030
Definition parse-tree.h:1557
Definition parse-tree.h:1991
Definition parse-tree.h:2827
Definition parse-tree.h:3112
Definition parse-tree.h:2785
Definition parse-tree.h:930
Definition parse-tree.h:3090
Definition parse-tree.h:1071
Definition parse-tree.h:1099
Definition parse-tree.h:1890
Definition parse-tree.h:1091
Definition parse-tree.h:1085
Definition parse-tree.h:1078
Definition parse-tree.h:3100
Definition parse-tree.h:3228
Definition parse-tree.h:3193
Definition parse-tree.h:573
Definition parse-tree.h:2748
Definition parse-tree.h:814
Definition parse-tree.h:2262
Definition parse-tree.h:2980
Definition parse-tree.h:2984
Definition parse-tree.h:2978
Definition parse-tree.h:1570
Definition parse-tree.h:297
Definition parse-tree.h:1656
Definition parse-tree.h:2385
Definition parse-tree.h:2450
Definition parse-tree.h:2449
Definition parse-tree.h:2463
Definition parse-tree.h:2461
Definition parse-tree.h:2440
Definition parse-tree.h:2497
Definition parse-tree.h:2495
Definition parse-tree.h:2475
Definition parse-tree.h:2141
Definition parse-tree.h:3347
Definition parse-tree.h:851
Definition parse-tree.h:788
Definition parse-tree.h:826
Definition parse-tree.h:400
Definition parse-tree.h:453
Definition parse-tree.h:1960
Definition parse-tree.h:361
Definition parse-tree.h:3365
Definition parse-tree.h:2527
Definition parse-tree.h:1880
Definition parse-tree.h:1208
Definition parse-tree.h:3486
Definition parse-tree.h:3458
Definition parse-tree.h:3481
Definition parse-tree.h:2998
Definition parse-tree.h:3009
Definition parse-tree.h:3162
Definition parse-tree.h:3331
Definition parse-tree.h:1647
Definition parse-tree.h:1842
Definition parse-tree.h:1638
Definition parse-tree.h:1828
Definition parse-tree.h:2546
Definition parse-tree.h:2545
Definition parse-tree.h:2558
Definition parse-tree.h:908
Definition parse-tree.h:1151
Definition parse-tree.h:1164
Definition parse-tree.h:1126
Definition parse-tree.h:1173
Definition parse-tree.h:1142
Definition parse-tree.h:1138
Definition parse-tree.h:1136
Definition parse-tree.h:1399
Definition parse-tree.h:2485
Definition parse-tree.h:2484
Definition parse-tree.h:936
Definition parse-tree.h:944
Definition parse-tree.h:742
Definition parse-tree.h:651
Definition parse-tree.h:755
Definition parse-tree.h:3474
Definition parse-tree.h:356
Definition parse-tree.h:2617
Definition parse-tree.h:801
Definition parse-tree.h:3076
Definition parse-tree.h:1858
Definition parse-tree.h:728
Definition parse-tree.h:733
Definition parse-tree.h:284
Definition parse-tree.h:2811
Definition parse-tree.h:2056
Definition parse-tree.h:2049
Definition parse-tree.h:2085
Definition parse-tree.h:2081
Definition parse-tree.h:2080
Definition parse-tree.h:2043
Definition parse-tree.h:2770
Definition parse-tree.h:3708
Definition parse-tree.h:3699
Definition parse-tree.h:3669
Definition parse-tree.h:3658
Definition parse-tree.h:3653
Definition parse-tree.h:3679
Definition parse-tree.h:3692
Definition parse-tree.h:3863
Definition parse-tree.h:3880
Definition parse-tree.h:3872
Definition parse-tree.h:3896
Definition parse-tree.h:3888
Definition parse-tree.h:3908
Definition parse-tree.h:3920
Definition parse-tree.h:3930
Definition parse-tree.h:3941
Definition parse-tree.h:3954
Definition parse-tree.h:3966
Definition parse-tree.h:3987
Definition parse-tree.h:3998
Definition parse-tree.h:4008
Definition parse-tree.h:4017
Definition parse-tree.h:4034
Definition parse-tree.h:4049
Definition parse-tree.h:4060
Definition parse-tree.h:4071
Definition parse-tree.h:4083
Definition parse-tree.h:4093
Definition parse-tree.h:4101
Definition parse-tree.h:4110
Definition parse-tree.h:4119
Definition parse-tree.h:4153
Definition parse-tree.h:4140
Definition parse-tree.h:4127
Definition parse-tree.h:4177
Definition parse-tree.h:4168
Definition parse-tree.h:4211
Definition parse-tree.h:4187
Definition parse-tree.h:4200
Definition parse-tree.h:4220
Definition parse-tree.h:4233
Definition parse-tree.h:4242
Definition parse-tree.h:4252
Definition parse-tree.h:4262
Definition parse-tree.h:4271
Definition parse-tree.h:4279
Definition parse-tree.h:4289
Definition parse-tree.h:4300
Definition parse-tree.h:4313
Definition parse-tree.h:3839
Definition parse-tree.h:3749
Definition parse-tree.h:3746
Definition parse-tree.h:3729
Definition parse-tree.h:3770
Definition parse-tree.h:3736
Definition parse-tree.h:3797
Definition parse-tree.h:3812
Definition parse-tree.h:3809
Definition parse-tree.h:3822
Definition parse-tree.h:3831