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"
53CLASS_TRAIT(EmptyTrait)
54CLASS_TRAIT(WrapperTrait)
55CLASS_TRAIT(UnionTrait)
56CLASS_TRAIT(TupleTrait)
57CLASS_TRAIT(ConstraintTrait)
62namespace Fortran::semantics {
79#define COPY_AND_ASSIGN_BOILERPLATE(classname) \
80 classname(classname &&) = default; \
81 classname &operator=(classname &&) = default; \
82 classname(const classname &) = delete; \
83 classname &operator=(const classname &) = delete
86#define BOILERPLATE(classname) \
87 COPY_AND_ASSIGN_BOILERPLATE(classname); \
92#define EMPTY_CLASS(classname) \
95 classname(const classname &) {} \
96 classname(classname &&) {} \
97 classname &operator=(const classname &) { return *this; }; \
98 classname &operator=(classname &&) { return *this; }; \
99 using EmptyTrait = std::true_type; \
104#define UNION_CLASS_BOILERPLATE(classname) \
105 template <typename A, typename = common::NoLvalue<A>> \
106 classname(A &&x) : u(std::move(x)) {} \
107 using UnionTrait = std::true_type; \
108 BOILERPLATE(classname)
112#define TUPLE_CLASS_BOILERPLATE(classname) \
113 template <typename... Ts, typename = common::NoLvalue<Ts...>> \
114 classname(Ts &&...args) : t(std::move(args)...) {} \
115 using TupleTrait = std::true_type; \
116 BOILERPLATE(classname)
120#define WRAPPER_CLASS_BOILERPLATE(classname, type) \
121 BOILERPLATE(classname); \
122 classname(type &&x) : v(std::move(x)) {} \
123 using WrapperTrait = std::true_type; \
126#define WRAPPER_CLASS(classname, type) \
128 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>,
403 std::variant<common::Indirection<DerivedTypeDef>,
425 std::variant<Statement<common::Indirection<ImplicitStmt>>,
436WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
443 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
457 std::tuple<std::list<OpenACCDeclarativeConstruct>,
458 std::list<OpenMPDeclarativeConstruct>,
459 std::list<common::Indirection<CompilerDirective>>,
460 std::list<Statement<common::Indirection<UseStmt>>>,
461 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
462 std::list<DeclarationConstruct>>
469 std::variant<common::Indirection<FunctionSubprogram>,
476EMPTY_CLASS(ContainsStmt);
481 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
485EMPTY_CLASS(ContinueStmt);
488EMPTY_CLASS(FailImageStmt);
502 std::variant<common::Indirection<AllocateStmt>,
560 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
569using Block = std::list<ExecutionPartConstruct>;
570WRAPPER_CLASS(ExecutionPart, Block);
577 std::variant<common::Indirection<MainProgram>,
588WRAPPER_CLASS(Program, std::list<ProgramUnit>);
592 std::string ToString()
const {
return source.ToString(); }
598WRAPPER_CLASS(Keyword,
Name);
601WRAPPER_CLASS(NamedConstant,
Name);
608WRAPPER_CLASS(DefinedOpName,
Name);
618 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
619 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
620 std::variant<DefinedOpName, IntrinsicOperator> u;
624using ObjectName =
Name;
630 TUPLE_CLASS_BOILERPLATE(ImportStmt);
631 ImportStmt(common::ImportKind &&k) : t(k, std::list<Name>{}) {}
632 ImportStmt(std::list<Name> &&n)
633 : t(common::ImportKind::Default, std::move(n)) {}
634 ImportStmt(common::ImportKind &&, std::list<Name> &&);
635 std::tuple<common::ImportKind, std::list<Name>> t;
644 TUPLE_CLASS_BOILERPLATE(
Group);
645 std::tuple<Name, std::list<Name>> t;
647 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
655 EMPTY_CLASS(Deferred);
656 std::variant<ScalarIntExpr, Star, Deferred> u;
664 WRAPPER_CLASS(StarSize, std::uint64_t);
665 std::variant<ScalarIntConstantExpr, StarSize> u;
669WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
671WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
676 std::variant<TypeParamValue, std::uint64_t> u;
682 std::variant<TypeParamValue, CharLength> u;
691 UNION_CLASS_BOILERPLATE(CharSelector);
694 std::tuple<std::optional<TypeParamValue>, ScalarIntConstantExpr> t;
697 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
698 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
699 : u{LengthAndKind{std::move(l), std::move(k)}} {}
700 std::variant<LengthSelector, LengthAndKind> u;
711 WRAPPER_CLASS_BOILERPLATE(
Real, std::optional<KindSelector>);
713 EMPTY_CLASS(DoublePrecision);
715 WRAPPER_CLASS_BOILERPLATE(
Complex, std::optional<KindSelector>);
718 WRAPPER_CLASS_BOILERPLATE(
Character, std::optional<CharSelector>);
721 WRAPPER_CLASS_BOILERPLATE(
Logical, std::optional<KindSelector>);
723 EMPTY_CLASS(DoubleComplex);
724 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
732 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
737 EMPTY_CLASS(PairVectorTypeSpec);
738 EMPTY_CLASS(QuadVectorTypeSpec);
739 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
753 std::tuple<Name, std::list<TypeParamSpec>> t;
760 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
773 EMPTY_CLASS(ClassStar);
774 EMPTY_CLASS(TypeStar);
775 WRAPPER_CLASS(Record,
Name);
786 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
793 std::tuple<CharBlock, std::optional<KindParam>> t;
799 std::tuple<CharBlock, std::optional<KindParam>> t;
805 std::tuple<CharBlock, std::optional<KindParam>> t;
809enum class Sign { Positive, Negative };
819 using EmptyTrait = std::true_type;
820 COPY_AND_ASSIGN_BOILERPLATE(Real);
824 std::tuple<Real, std::optional<KindParam>> t;
849 std::tuple<ComplexPart, ComplexPart> t;
855 std::tuple<Sign, ComplexLiteralConstant> t;
863 std::tuple<std::optional<KindParam>, std::string> t;
864 std::string GetString()
const {
return std::get<std::string>(t); }
870 std::string GetString()
const {
return v; }
877 std::tuple<bool, std::optional<KindParam>> t;
887WRAPPER_CLASS(BOZLiteralConstant, std::string);
903 ENUM_CLASS(Kind, Public, Private)
909EMPTY_CLASS(Abstract);
913 WRAPPER_CLASS(Extends,
Name);
914 std::variant<Abstract, AccessSpec, BindC, Extends> u;
921 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
925EMPTY_CLASS(SequenceStmt);
929EMPTY_CLASS(PrivateStmt);
934 std::variant<PrivateStmt, SequenceStmt> u;
940 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
948 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
953WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
960 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
965WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
973 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
979 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
984WRAPPER_CLASS(DeferredShapeSpecList,
int);
990 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
998EMPTY_CLASS(Allocatable);
1000EMPTY_CLASS(Contiguous);
1021 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1022 std::list<common::Indirection<DataStmtValue>>>
1032struct ComponentDecl {
1033 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1035 std::optional<ComponentArraySpec> &&aSpec,
1036 std::optional<CoarraySpec> &&coaSpec,
1037 std::optional<Initialization> &&init)
1038 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1039 std::move(length), std::move(init)} {}
1040 std::tuple<Name, std::optional<ComponentArraySpec>,
1041 std::optional<CoarraySpec>, std::optional<CharLength>,
1042 std::optional<Initialization>>
1050 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1056 std::variant<ComponentDecl, FillDecl> u;
1064 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1065 std::list<ComponentOrFill>>
1072WRAPPER_CLASS(Pass, std::optional<Name>);
1075 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1082 std::variant<NullInit, Name> u;
1089 std::variant<Name, DeclarationTypeSpec> u;
1095 std::tuple<Name, std::optional<ProcPointerInit>> t;
1103 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1104 std::list<ProcDecl>>
1122 EMPTY_CLASS(Deferred);
1123 EMPTY_CLASS(Non_Overridable);
1124 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1130 std::tuple<Name, std::optional<Name>> t;
1142 std::tuple<std::list<BindAttr>, std::list<TypeBoundProcDecl>> t;
1146 std::tuple<Name, std::list<BindAttr>, std::list<Name>> t;
1148 std::variant<WithoutInterface, WithInterface> u;
1161WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1177 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1178 std::list<Statement<TypeBoundProcBinding>>>
1183WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1191 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1192 std::list<Statement<PrivateOrSequence>>,
1193 std::list<Statement<ComponentDefStmt>>,
1206 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1212 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1216EMPTY_CLASS(EnumDefStmt);
1221 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1225WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1228EMPTY_CLASS(EndEnumStmt);
1234 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1235 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1244 std::tuple<std::optional<AccessSpec>,
Name> t;
1249WRAPPER_CLASS(EnumerationEnumeratorStmt, std::list<Name>);
1253WRAPPER_CLASS(EndEnumerationTypeStmt, std::optional<Name>);
1261 std::tuple<Statement<EnumerationTypeStmt>,
1262 std::list<Statement<EnumerationEnumeratorStmt>>,
1270 TUPLE_CLASS_BOILERPLATE(
Triplet);
1271 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1273 UNION_CLASS_BOILERPLATE(
AcValue);
1274 std::variant<Triplet, common::Indirection<Expr>,
1281 TUPLE_CLASS_BOILERPLATE(AcSpec);
1282 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1283 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1287WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1294 std::tuple<VAR, BOUND, BOUND, std::optional<BOUND>> t;
1296 const VAR &Name()
const {
return std::get<0>(t); }
1297 const BOUND &Lower()
const {
return std::get<1>(t); }
1298 const BOUND &Upper()
const {
return std::get<2>(t); }
1299 const std::optional<BOUND> &Step()
const {
return std::get<3>(t); }
1312 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1327 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1333 std::tuple<NamedConstant, ConstantExpr> t;
1337WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1340WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1343WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1348 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1355WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1358EMPTY_CLASS(AssumedRankSpec);
1366WRAPPER_CLASS(AssumedShapeBoundsSpec, IntExpr);
1370 std::tuple<std::optional<IntExpr>, IntExpr> t;
1376 std::list<AssumedShapeSpec>, AssumedShapeBoundsSpec,
1377 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1383 ENUM_CLASS(Intent, In, Out, InOut)
1384 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1389WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1399EMPTY_CLASS(Asynchronous);
1400EMPTY_CLASS(External);
1401EMPTY_CLASS(Intrinsic);
1402EMPTY_CLASS(Optional);
1403EMPTY_CLASS(Parameter);
1404EMPTY_CLASS(Protected);
1408EMPTY_CLASS(Volatile);
1413 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1414 common::CUDADataAttr>
1425 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1426 EntityDecl(ObjectName &&name,
CharLength &&length,
1427 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1428 std::optional<Initialization> &&init)
1429 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1430 std::move(length), std::move(init)} {}
1431 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1432 std::optional<CharLength>, std::optional<Initialization>>
1440 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1450 std::tuple<AccessSpec, std::list<AccessId>> t;
1459 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1464WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1467WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1472 ENUM_CLASS(Kind, Object, Common)
1473 std::tuple<Kind, Name> t;
1479 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1485 std::tuple<Name, CoarraySpec> t;
1489WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1492WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1501using TypedAssignment =
1514 mutable TypedExpr typedExpr;
1515 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1528 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1534 mutable std::int64_t repetitions{1};
1542 std::variant<Scalar<common::Indirection<Designator>>,
1555 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1562 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1568 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1572WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1580 std::tuple<Name, ArraySpec> t;
1582 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1588 std::tuple<IntentSpec, std::list<Name>> t;
1592WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1598 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1602WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1605WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1611 ENUM_CLASS(Kind, Entity, Common)
1612 std::tuple<Kind, Name> t;
1616WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1619WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1622WRAPPER_CLASS(ValueStmt, std::list<Name>);
1625WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1630 std::tuple<Location, std::optional<Location>> t;
1636 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1645 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1646 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1652 std::tuple<Name, std::optional<ArraySpec>> t;
1660 TUPLE_CLASS_BOILERPLATE(
Block);
1661 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1663 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1664 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1665 std::list<Block> &&);
1674WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1679 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1683using Subscript = ScalarIntExpr;
1688 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1689 std::optional<Subscript>>
1697 std::variant<IntExpr, SubscriptTriplet> u;
1701using Cosubscript = ScalarIntExpr;
1712 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1715 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1722 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1731 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1738 UNION_CLASS_BOILERPLATE(Expr);
1742 using IntrinsicUnary::IntrinsicUnary;
1745 using IntrinsicUnary::IntrinsicUnary;
1748 using IntrinsicUnary::IntrinsicUnary;
1750 struct NOT :
public IntrinsicUnary {
1751 using IntrinsicUnary::IntrinsicUnary;
1758 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1766 using IntrinsicBinary::IntrinsicBinary;
1769 using IntrinsicBinary::IntrinsicBinary;
1772 using IntrinsicBinary::IntrinsicBinary;
1775 using IntrinsicBinary::IntrinsicBinary;
1778 using IntrinsicBinary::IntrinsicBinary;
1781 using IntrinsicBinary::IntrinsicBinary;
1784 using IntrinsicBinary::IntrinsicBinary;
1787 using IntrinsicBinary::IntrinsicBinary;
1790 using IntrinsicBinary::IntrinsicBinary;
1793 using IntrinsicBinary::IntrinsicBinary;
1796 using IntrinsicBinary::IntrinsicBinary;
1799 using IntrinsicBinary::IntrinsicBinary;
1802 using IntrinsicBinary::IntrinsicBinary;
1805 using IntrinsicBinary::IntrinsicBinary;
1808 using IntrinsicBinary::IntrinsicBinary;
1811 using IntrinsicBinary::IntrinsicBinary;
1816 using IntrinsicBinary::IntrinsicBinary;
1821 std::tuple<DefinedOpName, common::Indirection<Expr>,
1829 mutable TypedExpr typedExpr;
1833 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1838 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1845 TUPLE_CLASS_BOILERPLATE(
PartRef);
1846 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1851 UNION_CLASS_BOILERPLATE(DataRef);
1852 explicit DataRef(std::list<PartRef> &&);
1853 std::variant<Name, common::Indirection<StructureComponent>,
1869 std::tuple<DataRef, SubstringRange> t;
1874 std::tuple<CharLiteralConstant, SubstringRange> t;
1891 bool EndsInBareName()
const;
1893 std::variant<DataRef, Substring> u;
1899 mutable TypedExpr typedExpr;
1901 std::variant<common::Indirection<Designator>,
1921 std::tuple<DataRef, Name> t;
1923 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1924 const Name &Component()
const {
return std::get<Name>(t); }
1936 std::tuple<DataRef, ImageSelector> t;
1945 std::tuple<DataRef, std::list<SectionSubscript>> t;
1947 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1948 const std::list<SectionSubscript> &Subscripts()
const {
1949 return std::get<std::list<SectionSubscript>>(t);
1956 mutable TypedExpr typedExpr;
1957 std::variant<Name, StructureComponent> u;
1962using BoundExpr = ScalarIntExpr;
1968 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1977 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1985 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1986 std::optional<AllocateCoarraySpec>>
1991WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1995WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
2001 std::variant<StatVariable, MsgVariable> u;
2016 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
2023 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
2024 std::list<AllocOpt>>
2032 mutable TypedExpr typedExpr;
2033 std::variant<Name, StructureComponent> u;
2037WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2043 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2049 mutable TypedAssignment typedAssignment;
2050 std::tuple<Variable, Expr> t;
2054WRAPPER_CLASS(BoundsSpec, BoundExpr);
2059 std::tuple<BoundExpr, BoundExpr> t;
2071 UNION_CLASS_BOILERPLATE(
Bounds);
2072 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2075 mutable TypedAssignment typedAssignment;
2076 std::tuple<DataRef, Bounds, Expr> t;
2084 std::tuple<LogicalExpr, AssignmentStmt> t;
2090 std::tuple<std::optional<Name>, LogicalExpr> t;
2106 std::tuple<LogicalExpr, std::optional<Name>> t;
2110WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2113WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2122 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2126 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2129 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2130 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2145 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2151 std::tuple<common::Indirection<ConcurrentHeader>,
2168WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2174 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2182 std::variant<Expr, Variable> u;
2188 std::tuple<Name, Selector> t;
2195 std::tuple<std::optional<Name>, std::list<Association>> t;
2199WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2208WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2211WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2226 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2234 std::tuple<CodimensionDecl, Selector> t;
2242 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2243 std::list<StatOrErrmsg>>
2251 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2264 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2268WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2282 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2291 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2292 std::optional<ScalarLogicalExpr>>
2302 ENUM_CLASS(Operator, Plus, Minus, Multiply, Max, Min, Iand, Ior, Ieor, And,
2314 WRAPPER_CLASS(Local, std::list<Name>);
2315 WRAPPER_CLASS(LocalInit, std::list<Name>);
2317 TUPLE_CLASS_BOILERPLATE(
Reduce);
2319 std::tuple<Operator, std::list<Name>> t;
2321 WRAPPER_CLASS(Shared, std::list<Name>);
2322 EMPTY_CLASS(DefaultNone);
2323 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2336 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2339 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2346 std::tuple<Label, std::optional<LoopControl>> t;
2352 std::tuple<std::optional<Name>, std::optional<Label>,
2353 std::optional<LoopControl>>
2358WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2369 const std::optional<LoopControl> &GetLoopControl()
const;
2370 bool IsDoNormal()
const;
2371 bool IsDoWhile()
const;
2372 bool IsDoConcurrent()
const;
2377WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2382 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2389 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2393WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2396WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2404 std::tuple<Statement<ElseIfStmt>, Block> t;
2408 std::tuple<Statement<ElseStmt>, Block> t;
2411 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2418 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2419 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2437 TUPLE_CLASS_BOILERPLATE(
Range);
2438 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2441 std::variant<CaseValue, Range> u;
2445EMPTY_CLASS(Default);
2449 std::variant<std::list<CaseValueRange>, Default> u;
2455 std::tuple<CaseSelector, std::optional<Name>> t;
2461WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2467 TUPLE_CLASS_BOILERPLATE(
Case);
2468 std::tuple<Statement<CaseStmt>, Block> t;
2471 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2481 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2490 UNION_CLASS_BOILERPLATE(
Rank);
2491 std::variant<ScalarIntConstantExpr, Star, Default> u;
2494 std::tuple<Rank, std::optional<Name>> t;
2504 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2506 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2516 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2525 UNION_CLASS_BOILERPLATE(
Guard);
2526 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2529 std::tuple<Guard, std::optional<Name>> t;
2538 std::tuple<Statement<TypeGuardStmt>, Block> t;
2540 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2546WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2549WRAPPER_CLASS(GotoStmt, Label);
2554 std::tuple<std::list<Label>, ScalarIntExpr> t;
2567 ENUM_CLASS(Kind, Stop, ErrorStop)
2569 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2576 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2580WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2587 std::variant<IntExpr, Star> u;
2590 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2594WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2599 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2608 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2614 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2622 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2635 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2638 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2649 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2652 std::tuple<LockVariable, std::list<LockStat>> t;
2658 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2662WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2672 UNION_CLASS_BOILERPLATE(
IoUnit);
2673 std::variant<Variable, common::Indirection<Expr>, Star> u;
2677using FileNameExpr = ScalarDefaultCharExpr;
2697WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2698WRAPPER_CLASS(ErrLabel, Label);
2703 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2704 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2705 Carriagecontrol, Convert, Dispose)
2707 std::tuple<Kind, ScalarDefaultCharExpr> t;
2709 WRAPPER_CLASS(Recl, ScalarIntExpr);
2710 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2711 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2712 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2717WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2727 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2731 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2737 UNION_CLASS_BOILERPLATE(
Format);
2738 std::variant<Expr, Label, Star> u;
2742WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2758WRAPPER_CLASS(EndLabel, Label);
2759WRAPPER_CLASS(EorLabel, Label);
2764 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2766 std::tuple<Kind, ScalarDefaultCharExpr> t;
2768 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2769 WRAPPER_CLASS(Pos, ScalarIntExpr);
2770 WRAPPER_CLASS(Rec, ScalarIntExpr);
2771 WRAPPER_CLASS(Size, ScalarIntVariable);
2773 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2781 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2788 BOILERPLATE(ReadStmt);
2789 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2790 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2791 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2792 items(std::move(its)) {}
2793 std::optional<IoUnit> iounit;
2795 std::optional<Format> format;
2798 std::list<IoControlSpec> controls;
2799 std::list<InputItem> items;
2805 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2810 BOILERPLATE(WriteStmt);
2811 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2812 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2813 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2814 items(std::move(its)) {}
2815 std::optional<IoUnit> iounit;
2817 std::optional<Format> format;
2819 std::list<IoControlSpec> controls;
2820 std::list<OutputItem> items;
2826 std::tuple<Format, std::list<OutputItem>> t;
2837 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2842 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2849WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2852 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2853 MsgVariable, StatVariable>
2858WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2868 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2873WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2877WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2880WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2883WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2924 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2925 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2926 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2928 Carriagecontrol, Convert, Dispose)
2929 TUPLE_CLASS_BOILERPLATE(
CharVar);
2930 std::tuple<Kind, ScalarDefaultCharVariable> t;
2933 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2934 TUPLE_CLASS_BOILERPLATE(
IntVar);
2935 std::tuple<Kind, ScalarIntVariable> t;
2938 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2939 TUPLE_CLASS_BOILERPLATE(
LogVar);
2940 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2954 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2956 std::variant<std::list<InquireSpec>,
Iolength> u;
2963WRAPPER_CLASS(ProgramStmt,
Name);
2966WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2974 ExecutionPart, std::optional<InternalSubprogramPart>,
2980WRAPPER_CLASS(ModuleStmt,
Name);
2987 std::variant<common::Indirection<FunctionSubprogram>,
2998 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
3002WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
3008 TUPLE_CLASS_BOILERPLATE(
Module);
3019 UNION_CLASS_BOILERPLATE(
Rename);
3021 TUPLE_CLASS_BOILERPLATE(
Names);
3022 std::tuple<Name, Name> t;
3026 std::tuple<DefinedOpName, DefinedOpName> t;
3028 std::variant<Names, Operators> u;
3034 std::tuple<Name, std::optional<Name>> t;
3040 std::tuple<ParentIdentifier, Name> t;
3044WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3057WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3060WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3078 EMPTY_CLASS(Assignment);
3079 EMPTY_CLASS(ReadFormatted);
3080 EMPTY_CLASS(ReadUnformatted);
3081 EMPTY_CLASS(WriteFormatted);
3082 EMPTY_CLASS(WriteUnformatted);
3085 ReadUnformatted, WriteFormatted, WriteUnformatted>
3093 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3097struct InterfaceStmt {
3098 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3100 InterfaceStmt(Abstract x) : u{x} {}
3102 std::variant<std::optional<GenericSpec>, Abstract> u;
3108 UNION_CLASS_BOILERPLATE(
Only);
3109 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3117 BOILERPLATE(UseStmt);
3118 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3119 template <
typename A>
3120 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3121 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3122 std::optional<ModuleNature> nature;
3124 std::variant<std::list<Rename>, std::list<Only>> u;
3142 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3143 std::list<ProcDecl>>
3154 EMPTY_CLASS(Elemental);
3155 EMPTY_CLASS(Impure);
3157 EMPTY_CLASS(Non_Recursive);
3159 EMPTY_CLASS(Recursive);
3160 EMPTY_CLASS(Simple);
3161 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3162 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3163 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3165 Pure, Recursive, Simple, Attributes, Launch_Bounds, Cluster_Dims>
3173 TUPLE_CLASS_BOILERPLATE(Suffix);
3175 : t(std::move(rn), std::move(lbs)) {}
3176 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3185 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3186 std::optional<Suffix>>
3191WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3196 std::variant<Name, Star> u;
3204 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3205 std::optional<LanguageBindingSpec>>
3210WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3225 std::tuple<Statement<SubroutineStmt>,
3229 std::variant<Function, Subroutine> u;
3234 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3236 std::tuple<Kind, std::list<Name>> t;
3246 std::variant<InterfaceBody, Statement<ProcedureStmt>,
3253WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3259 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3265WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3268WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3274 std::variant<Name, ProcComponentRef> u;
3278WRAPPER_CLASS(AltReturnSpec, Label);
3281EMPTY_CLASS(ConditionalArgNil);
3295 std::variant<common::Indirection<Expr>, ConditionalArgNil> u;
3304 std::variant<ConditionalArg, ConditionalArg::Consequent> u;
3311 WRAPPER_CLASS(PercentRef,
Expr);
3312 WRAPPER_CLASS(PercentVal,
Expr);
3313 UNION_CLASS_BOILERPLATE(ActualArg);
3315 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal,
3323 std::tuple<std::optional<Keyword>,
ActualArg> t;
3329 TUPLE_CLASS_BOILERPLATE(
Call);
3330 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3346 TUPLE_CLASS_BOILERPLATE(CallStmt);
3347 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3350 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3351 std::optional<ScalarIntExpr>>
3355 std::list<ActualArgSpec> &&args)
3356 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3357 std::tuple<Call, std::optional<Chevrons>> t;
3359 mutable TypedCall typedCall;
3383WRAPPER_CLASS(MpSubprogramStmt,
Name);
3386WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3401 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3405WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3436 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3439 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3443 std::tuple<common::Indirection<Designator>, uint64_t> t;
3445 EMPTY_CLASS(VectorAlways);
3448 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3450 std::tuple<std::uint64_t, Kind> t;
3454 std::tuple<Name, std::optional<std::uint64_t>> t;
3457 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3460 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3463 WRAPPER_CLASS_BOILERPLATE(
3467 WRAPPER_CLASS_BOILERPLATE(
InlineAlways, std::optional<Name>);
3469 EMPTY_CLASS(NoVector);
3470 EMPTY_CLASS(NoUnroll);
3471 EMPTY_CLASS(NoUnrollAndJam);
3472 EMPTY_CLASS(ForceInline);
3473 EMPTY_CLASS(Inline);
3474 EMPTY_CLASS(NoInline);
3477 EMPTY_CLASS(Unrecognized);
3479 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3481 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3489 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3495 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3497WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3504 std::variant<Statement<DataComponentDefStmt>,
3510 EMPTY_CLASS(MapStmt);
3511 EMPTY_CLASS(EndMapStmt);
3512 TUPLE_CLASS_BOILERPLATE(
Map);
3513 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3519 EMPTY_CLASS(UnionStmt);
3520 EMPTY_CLASS(EndUnionStmt);
3521 TUPLE_CLASS_BOILERPLATE(
Union);
3527 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3531 EMPTY_CLASS(EndStructureStmt);
3533 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3540WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3545 std::tuple<Expr, Label, Label, Label> t;
3550 std::tuple<Label, Name> t;
3555 std::tuple<Name, std::list<Label>> t;
3558WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3564#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3565 using basename::basename; \
3566 classname(basename &&b) : basename(std::move(b)) {} \
3567 using TupleTrait = std::true_type; \
3568 BOILERPLATE(classname)
3570#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3571 BOILERPLATE(classname); \
3572 using basename::basename; \
3573 classname(basename &&base) : basename(std::move(base)) {} \
3574 using WrapperTrait = std::true_type
3579struct OmpDirectiveName {
3581 constexpr OmpDirectiveName() =
default;
3582 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3583 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3587 OmpDirectiveName(
const Verbatim &name);
3588 using WrapperTrait = std::true_type;
3590 bool IsExecutionPart()
const;
3593 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3601 std::variant<TypeSpec, DeclarationTypeSpec> u;
3615 std::variant<FunctionReference, OmpReservedIdentifier> u;
3626 ENUM_CLASS(Kind, BlankCommonBlock);
3627 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3631 std::variant<Designator, OmpLocator, Name, Invalid> u;
3635 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3642 using EmptyTrait = std::true_type;
3650 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3653 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3667 WRAPPER_CLASS_BOILERPLATE(
3680 std::variant<DefinedOperator, ProcedureDesignator> u;
3689 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3701 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3706inline namespace arguments {
3716 std::tuple<OmpObject, OmpObject> t;
3727 std::tuple<std::string, TypeSpec, Name> t;
3740 std::optional<OmpCombinerExpression>>
3759inline namespace traits {
3796 TUPLE_CLASS_BOILERPLATE(
Complex);
3798 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3802 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3818 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3843 std::string ToString()
const;
3846 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3847 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3848 std::variant<Value, llvm::omp::Directive, std::string> u;
3859 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3861 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3868 std::string ToString()
const;
3870 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3879 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3886 WRAPPER_CLASS_BOILERPLATE(
3891#define MODIFIER_BOILERPLATE(...) \
3893 using Variant = std::variant<__VA_ARGS__>; \
3894 UNION_CLASS_BOILERPLATE(Modifier); \
3899#define MODIFIERS() std::optional<std::list<Modifier>>
3901inline namespace modifier {
3909 ENUM_CLASS(Value, Cgroup);
3919 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
3928 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3964 ENUM_CLASS(Value, Always)
3976 ENUM_CLASS(Value, Always, Never, Auto)
3986 ENUM_CLASS(Value, Automap);
3997 ENUM_CLASS(Value, Simd)
4010 ENUM_CLASS(Value, Close)
4022 ENUM_CLASS(Value, Delete)
4043 ENUM_CLASS(Value, Sink, Source);
4054 using Value = common::OmpDependenceKind;
4056 std::tuple<Value, OmpObject> t;
4064 ENUM_CLASS(Value, Ancestor, Device_Num)
4090 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4105 ENUM_CLASS(Value, Present);
4116 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4127 ENUM_CLASS(Value, Target, Targetsync)
4141 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4149 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4157 ENUM_CLASS(Value, Conditional)
4166 ENUM_CLASS(Value, Ref, Uval, Val);
4190 std::tuple<llvm::omp::LoopModifier,
4191 std::optional<std::list<ScalarIntConstantExpr>>>
4222 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4223 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4234 ENUM_CLASS(Value, Always, Close, Present)
4243 WRAPPER_CLASS_BOILERPLATE(
OmpMemSpace, ScalarIntExpr);
4255 ENUM_CLASS(Value, Present)
4270 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4279 ENUM_CLASS(Value, Reproducible, Unconstrained)
4292 using Extensions = std::list<PreferencePropertyExtension>;
4293 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4303 using ForeignRuntimeIdentifier =
4304 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4305 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4313 WRAPPER_CLASS_BOILERPLATE(
4322 ENUM_CLASS(Value, Strict)
4331 ENUM_CLASS(Value, Present)
4340 ENUM_CLASS(Value, Default, Inscan, Task);
4350 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4360 ENUM_CLASS(Value, Self)
4387 using Value = common::OmpDependenceKind;
4406 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4419 ENUM_CLASS(Value, Ompx_Hold)
4429using OmpDirectiveList = std::list<llvm::omp::Directive>;
4459 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4490 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4498 ENUM_CLASS(ActionTime, Compilation, Execution);
4499 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4510 using MemoryOrder = common::OmpMemoryOrderType;
4521 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4528 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4554 std::tuple<MODIFIERS(), std::list<OmpDirectiveSpecification>> t;
4566 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4582 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4585 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4594 WRAPPER_CLASS_BOILERPLATE(
4604 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4613 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4630 OmpDependenceType::Value GetDepType()
const;
4633 std::tuple<MODIFIERS(), std::optional<OmpIterationVector>> t;
4648 OmpTaskDependenceType::Value GetTaskDepType()
const;
4649 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4653 std::variant<TaskDep, OmpDoacross> u;
4690 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4706 using DeviceTypeDescription = common::OmpDeviceType;
4716 WRAPPER_CLASS_BOILERPLATE(
4723 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4740 using MemoryOrder = common::OmpMemoryOrderType;
4773 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4794 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4807 WRAPPER_CLASS_BOILERPLATE(
4820 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4887 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4924 WRAPPER_CLASS_BOILERPLATE(
4938EMPTY_CLASS(OmpNoOpenMPClause);
4943EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4948EMPTY_CLASS(OmpNoParallelismClause);
4958 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4970 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4982 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4992 ENUM_CLASS(Ordering, Concurrent)
4994 std::tuple<MODIFIERS(), Ordering> t;
5016 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
5059 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
5061 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
5076 ENUM_CLASS(SevLevel, Fatal, Warning);
5098 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5105 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5155 WRAPPER_CLASS_BOILERPLATE(
5173 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5183 MODIFIER_BOILERPLATE(OmpContextSelector);
5184 std::tuple<MODIFIERS(),
5185 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5213 std::tuple<MODIFIERS(), ScalarIntExpr,
bool> t;
5221 llvm::omp::Clause Id()
const;
5223#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5224#include "llvm/Frontend/OpenMP/OMP.inc"
5229#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5230#include "llvm/Frontend/OpenMP/OMP.inc"
5236 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5243 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo, ExplicitBegin)
5248 return std::get<OmpDirectiveName>(t);
5250 llvm::omp::Directive DirId()
const {
5257 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5258 std::optional<OmpClauseList>, Flags>
5267 INHERITED_TUPLE_CLASS_BOILERPLATE(
5279 return std::get<OmpBeginDirective>(t);
5281 const std::optional<OmpEndDirective> &EndDir()
const {
5282 return std::get<std::optional<OmpEndDirective>>(t);
5286 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5290 WRAPPER_CLASS_BOILERPLATE(
5295 INHERITED_TUPLE_CLASS_BOILERPLATE(
5316 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5342 INHERITED_TUPLE_CLASS_BOILERPLATE(
5357 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5365 return std::get<OmpBeginSectionsDirective>(t);
5367 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5368 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5375 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5376 std::optional<OmpEndSectionsDirective>>
5385 WRAPPER_CLASS_BOILERPLATE(
5397 WRAPPER_CLASS_BOILERPLATE(
5405 WRAPPER_CLASS_BOILERPLATE(
5414 WRAPPER_CLASS_BOILERPLATE(
5431 WRAPPER_CLASS_BOILERPLATE(
5444 WRAPPER_CLASS_BOILERPLATE(
5504 INHERITED_TUPLE_CLASS_BOILERPLATE(
5509 llvm::omp::Clause GetKind()
const;
5510 bool IsCapture()
const;
5511 bool IsCompare()
const;
5517 static constexpr int None = 0;
5518 static constexpr int Read = 1;
5519 static constexpr int Write = 2;
5520 static constexpr int Update = Read | Write;
5521 static constexpr int Action = 3;
5522 static constexpr int IfTrue = 4;
5523 static constexpr int IfFalse = 8;
5524 static constexpr int Condition = 12;
5528 TypedAssignment assign;
5530 TypedExpr atom, cond;
5539 WRAPPER_CLASS_BOILERPLATE(
5600 WRAPPER_CLASS_BOILERPLATE(
5642 INHERITED_TUPLE_CLASS_BOILERPLATE(
5653struct OpenMPInvalidDirective {
5654 using EmptyTrait = std::true_type;
5655 OpenMPInvalidDirective() =
default;
5656 explicit OpenMPInvalidDirective(
bool isExtension)
5657 : isExtensionSentinel{isExtension} {}
5658 bool isExtensionSentinel{
false};
5669WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5701 std::variant<Name, ScalarDefaultCharExpr> u;
5711 ENUM_CLASS(Modifier, ReadOnly, Zero)
5718 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5723 std::tuple<ReductionOperator, AccObjectList> t;
5728 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5732 WRAPPER_CLASS_BOILERPLATE(
5738 WRAPPER_CLASS_BOILERPLATE(
5745 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5753 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5762 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5769 WRAPPER_CLASS(Num, ScalarIntExpr);
5770 WRAPPER_CLASS(Dim, ScalarIntExpr);
5772 std::variant<Num, Dim, Static> u;
5777 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5782 std::tuple<bool, ScalarIntConstantExpr> t;
5788#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5789#include "llvm/Frontend/OpenACC/ACC.inc"
5794#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5795#include "llvm/Frontend/OpenACC/ACC.inc"
5801 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5814 std::tuple<Verbatim, AccObjectListWithModifier> t;
5820 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5825 std::tuple<AccLoopDirective, AccClauseList> t;
5832 std::tuple<AccBlockDirective, AccClauseList> t;
5841EMPTY_CLASS(AccEndAtomic);
5846 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5847 std::optional<AccEndAtomic>>
5854 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5855 std::optional<AccEndAtomic>>
5863 std::optional<AccEndAtomic>>
5872 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5877 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5884 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5890 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5896 std::tuple<AccCombinedDirective, AccClauseList> t;
5904struct OpenACCCombinedConstruct {
5905 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5908 : t({std::move(a), std::nullopt, std::nullopt}) {}
5909 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5910 std::optional<AccEndCombinedDirective>>
5917 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5922EMPTY_CLASS(AccEndLoop);
5923struct OpenACCLoopConstruct {
5924 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5926 : t({std::move(a), std::nullopt, std::nullopt}) {}
5927 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5928 std::optional<AccEndLoop>>
5940 std::tuple<AccStandaloneDirective, AccClauseList> t;
5966 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5971 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5974 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5975 std::optional<ScalarIntExpr>>
5981 std::tuple<std::optional<ScalarIntConstantExpr>,
5982 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5985 std::tuple<Directive, std::optional<DoConstruct>> t;
Definition indirection.h:127
Definition indirection.h:31
Definition reference.h:18
Definition char-block.h:26
Definition parse-state.h:31
Definition check-expression.h:19
Definition expression.h:951
Definition expression.h:941
Definition parse-tree.h:1309
Definition parse-tree.h:1316
Definition parse-tree.h:1280
Definition parse-tree.h:1269
Definition parse-tree.h:1268
Definition parse-tree.h:5868
Definition parse-tree.h:5844
Definition parse-tree.h:5860
Definition parse-tree.h:5852
Definition parse-tree.h:5829
Definition parse-tree.h:5893
Definition parse-tree.h:5823
Definition parse-tree.h:5699
Definition parse-tree.h:5672
Definition parse-tree.h:5800
Definition parse-tree.h:5785
Definition parse-tree.h:5780
Definition parse-tree.h:5688
Definition parse-tree.h:5710
Definition parse-tree.h:5693
Definition parse-tree.h:5705
Definition parse-tree.h:5737
Definition parse-tree.h:5731
Definition parse-tree.h:5835
Definition parse-tree.h:5899
Definition parse-tree.h:5776
Definition parse-tree.h:5767
Definition parse-tree.h:5677
Definition parse-tree.h:5716
Definition parse-tree.h:5721
Definition parse-tree.h:5664
Definition parse-tree.h:5760
Definition parse-tree.h:5756
Definition parse-tree.h:5752
Definition parse-tree.h:5682
Definition parse-tree.h:5748
Definition parse-tree.h:5742
Definition parse-tree.h:5726
Definition parse-tree.h:902
Definition parse-tree.h:1448
Definition parse-tree.h:500
Definition parse-tree.h:3321
Definition parse-tree.h:3310
Definition parse-tree.h:2010
Definition parse-tree.h:1975
Definition parse-tree.h:1954
Definition parse-tree.h:1966
Definition parse-tree.h:2021
Definition parse-tree.h:1983
Definition parse-tree.h:3543
Definition parse-tree.h:1940
Definition parse-tree.h:1373
Definition parse-tree.h:3548
Definition parse-tree.h:3553
Definition parse-tree.h:2047
Definition parse-tree.h:2202
Definition parse-tree.h:2193
Definition parse-tree.h:2186
Definition parse-tree.h:1346
Definition parse-tree.h:1409
Definition parse-tree.h:3493
Definition parse-tree.h:1120
Definition parse-tree.h:1470
Definition parse-tree.h:1477
Definition parse-tree.h:2224
Definition parse-tree.h:3063
Definition parse-tree.h:2057
Definition parse-tree.h:3487
Definition parse-tree.h:5978
Definition parse-tree.h:5972
Definition parse-tree.h:5969
Definition parse-tree.h:5963
Definition parse-tree.h:3348
Definition parse-tree.h:3345
Definition parse-tree.h:3328
Definition parse-tree.h:2466
Definition parse-tree.h:2465
Definition parse-tree.h:2447
Definition parse-tree.h:2453
Definition parse-tree.h:2436
Definition parse-tree.h:2434
Definition parse-tree.h:2255
Definition parse-tree.h:2240
Definition parse-tree.h:674
Definition parse-tree.h:1872
Definition parse-tree.h:861
Definition parse-tree.h:692
Definition parse-tree.h:690
Definition parse-tree.h:2725
Definition parse-tree.h:2724
Definition parse-tree.h:2232
Definition parse-tree.h:977
Definition parse-tree.h:1483
Definition parse-tree.h:1934
Definition parse-tree.h:1650
Definition parse-tree.h:1659
Definition parse-tree.h:1658
Definition parse-tree.h:3441
Definition parse-tree.h:3434
Definition parse-tree.h:3466
Definition parse-tree.h:3438
Definition parse-tree.h:3452
Definition parse-tree.h:3462
Definition parse-tree.h:3459
Definition parse-tree.h:3456
Definition parse-tree.h:3446
Definition parse-tree.h:3432
Definition parse-tree.h:847
Definition parse-tree.h:839
Definition parse-tree.h:988
Definition parse-tree.h:1001
Definition parse-tree.h:1109
Definition parse-tree.h:1054
Definition parse-tree.h:1204
Definition parse-tree.h:2552
Definition parse-tree.h:2280
Definition parse-tree.h:3302
Definition parse-tree.h:3291
Definition parse-tree.h:3289
Definition parse-tree.h:1729
Definition parse-tree.h:2702
Definition parse-tree.h:2700
Definition parse-tree.h:305
Definition parse-tree.h:2271
Definition parse-tree.h:2262
Definition parse-tree.h:1062
Definition parse-tree.h:1540
Definition parse-tree.h:1552
Definition parse-tree.h:1850
Definition parse-tree.h:1511
Definition parse-tree.h:1560
Definition parse-tree.h:1526
Definition parse-tree.h:1566
Definition parse-tree.h:1532
Definition parse-tree.h:2041
Definition parse-tree.h:441
Definition parse-tree.h:769
Definition parse-tree.h:329
Definition parse-tree.h:616
Definition parse-tree.h:1189
Definition parse-tree.h:750
Definition parse-tree.h:919
Definition parse-tree.h:1889
Definition parse-tree.h:1578
Definition parse-tree.h:1577
Definition parse-tree.h:2367
Definition parse-tree.h:3194
Definition parse-tree.h:2387
Definition parse-tree.h:2249
Definition parse-tree.h:1424
Definition parse-tree.h:3399
Definition parse-tree.h:1233
Definition parse-tree.h:1259
Definition parse-tree.h:1242
Definition parse-tree.h:1219
Definition parse-tree.h:2606
Definition parse-tree.h:2612
Definition parse-tree.h:2620
Definition parse-tree.h:533
Definition parse-tree.h:558
Definition parse-tree.h:971
Definition parse-tree.h:1368
Definition parse-tree.h:958
Definition parse-tree.h:1801
Definition parse-tree.h:1774
Definition parse-tree.h:1815
Definition parse-tree.h:1780
Definition parse-tree.h:1819
Definition parse-tree.h:1756
Definition parse-tree.h:1771
Definition parse-tree.h:1807
Definition parse-tree.h:1789
Definition parse-tree.h:1795
Definition parse-tree.h:1798
Definition parse-tree.h:1761
Definition parse-tree.h:1786
Definition parse-tree.h:1783
Definition parse-tree.h:1768
Definition parse-tree.h:1810
Definition parse-tree.h:1792
Definition parse-tree.h:1750
Definition parse-tree.h:1747
Definition parse-tree.h:1804
Definition parse-tree.h:1741
Definition parse-tree.h:1765
Definition parse-tree.h:1777
Definition parse-tree.h:1744
Definition parse-tree.h:1737
Definition parse-tree.h:1048
Definition parse-tree.h:2143
Definition parse-tree.h:2159
Definition parse-tree.h:2137
Definition parse-tree.h:2172
Definition parse-tree.h:2149
Definition parse-tree.h:3333
Definition parse-tree.h:3183
Definition parse-tree.h:3365
Definition parse-tree.h:3076
Definition parse-tree.h:3091
Definition parse-tree.h:868
Definition parse-tree.h:2406
Definition parse-tree.h:2402
Definition parse-tree.h:2401
Definition parse-tree.h:2417
Definition parse-tree.h:2380
Definition parse-tree.h:1710
Definition parse-tree.h:1720
Definition parse-tree.h:423
Definition parse-tree.h:1634
Definition parse-tree.h:1643
Definition parse-tree.h:629
Definition parse-tree.h:1019
Definition parse-tree.h:2923
Definition parse-tree.h:2932
Definition parse-tree.h:2937
Definition parse-tree.h:2921
Definition parse-tree.h:2952
Definition parse-tree.h:2950
Definition parse-tree.h:797
Definition parse-tree.h:313
Definition parse-tree.h:1382
Definition parse-tree.h:1586
Definition parse-tree.h:3257
Definition parse-tree.h:3217
Definition parse-tree.h:3223
Definition parse-tree.h:3215
Definition parse-tree.h:3244
Definition parse-tree.h:479
Definition parse-tree.h:467
Definition parse-tree.h:717
Definition parse-tree.h:714
Definition parse-tree.h:720
Definition parse-tree.h:710
Definition parse-tree.h:708
Definition parse-tree.h:2762
Definition parse-tree.h:2760
Definition parse-tree.h:2671
Definition parse-tree.h:784
Definition parse-tree.h:662
Definition parse-tree.h:2344
Definition parse-tree.h:1325
Definition parse-tree.h:680
Definition parse-tree.h:1628
Definition parse-tree.h:893
Definition parse-tree.h:2316
Definition parse-tree.h:2312
Definition parse-tree.h:2647
Definition parse-tree.h:2646
Definition parse-tree.h:875
Definition parse-tree.h:321
Definition parse-tree.h:1292
Definition parse-tree.h:2334
Definition parse-tree.h:2332
Definition parse-tree.h:2971
Definition parse-tree.h:3509
Definition parse-tree.h:2104
Definition parse-tree.h:2996
Definition parse-tree.h:2985
Definition parse-tree.h:3007
Definition parse-tree.h:591
Definition parse-tree.h:1331
Definition parse-tree.h:643
Definition parse-tree.h:642
Definition parse-tree.h:2350
Definition parse-tree.h:2574
Definition parse-tree.h:1457
Definition parse-tree.h:4435
Definition parse-tree.h:4439
Definition parse-tree.h:4451
Definition parse-tree.h:4458
Definition parse-tree.h:4466
Definition parse-tree.h:4481
Definition parse-tree.h:5477
Definition parse-tree.h:4489
Definition parse-tree.h:4488
Definition parse-tree.h:4551
Definition parse-tree.h:5335
Definition parse-tree.h:5324
Definition parse-tree.h:4497
Definition parse-tree.h:4509
Definition parse-tree.h:5266
Definition parse-tree.h:5341
Definition parse-tree.h:4520
Definition parse-tree.h:5276
Definition parse-tree.h:4526
Definition parse-tree.h:5235
Definition parse-tree.h:5219
Definition parse-tree.h:4535
Definition parse-tree.h:3688
Definition parse-tree.h:4543
Definition parse-tree.h:5404
Definition parse-tree.h:5413
Definition parse-tree.h:5421
Definition parse-tree.h:5396
Definition parse-tree.h:5384
Definition parse-tree.h:4565
Definition parse-tree.h:4593
Definition parse-tree.h:4580
Definition parse-tree.h:4647
Definition parse-tree.h:4645
Definition parse-tree.h:4669
Definition parse-tree.h:4677
Definition parse-tree.h:4687
Definition parse-tree.h:4697
Definition parse-tree.h:4705
Definition parse-tree.h:3579
Definition parse-tree.h:5242
Definition parse-tree.h:4660
Definition parse-tree.h:4629
Definition parse-tree.h:4720
Definition parse-tree.h:4715
Definition parse-tree.h:5271
Definition parse-tree.h:5346
Definition parse-tree.h:4731
Definition parse-tree.h:5309
Definition parse-tree.h:4739
Definition parse-tree.h:4758
Definition parse-tree.h:4770
Definition parse-tree.h:4780
Definition parse-tree.h:4788
Definition parse-tree.h:5430
Definition parse-tree.h:4793
Definition parse-tree.h:4801
Definition parse-tree.h:4817
Definition parse-tree.h:4840
Definition parse-tree.h:4806
Definition parse-tree.h:4830
Definition parse-tree.h:4847
Definition parse-tree.h:3700
Definition parse-tree.h:4602
Definition parse-tree.h:4620
Definition parse-tree.h:4611
Definition parse-tree.h:4856
Definition parse-tree.h:4874
Definition parse-tree.h:3613
Definition parse-tree.h:4885
Definition parse-tree.h:4910
Definition parse-tree.h:4922
Definition parse-tree.h:4931
Definition parse-tree.h:5303
Definition parse-tree.h:4955
Definition parse-tree.h:4967
Definition parse-tree.h:4979
Definition parse-tree.h:3634
Definition parse-tree.h:3625
Definition parse-tree.h:3622
Definition parse-tree.h:4990
Definition parse-tree.h:5003
Definition parse-tree.h:5015
Definition parse-tree.h:5026
Definition parse-tree.h:3678
Definition parse-tree.h:5036
Definition parse-tree.h:5437
Definition parse-tree.h:3608
Definition parse-tree.h:5045
Definition parse-tree.h:5057
Definition parse-tree.h:5355
Definition parse-tree.h:5068
Definition parse-tree.h:5075
Definition parse-tree.h:3638
Definition parse-tree.h:3660
Definition parse-tree.h:3648
Definition parse-tree.h:3647
Definition parse-tree.h:5084
Definition parse-tree.h:5095
Definition parse-tree.h:5443
Definition parse-tree.h:5104
Definition parse-tree.h:5125
Definition parse-tree.h:5136
Definition parse-tree.h:3604
Definition parse-tree.h:3597
Definition parse-tree.h:5145
Definition parse-tree.h:5154
Definition parse-tree.h:5170
Definition parse-tree.h:5192
Definition parse-tree.h:5206
Definition parse-tree.h:5205
Definition parse-tree.h:5313
Definition parse-tree.h:5181
Definition parse-tree.h:3107
Definition parse-tree.h:5875
Definition parse-tree.h:5882
Definition parse-tree.h:5811
Definition parse-tree.h:5904
Definition parse-tree.h:5943
Definition parse-tree.h:5914
Definition parse-tree.h:5932
Definition parse-tree.h:5923
Definition parse-tree.h:5805
Definition parse-tree.h:5937
Definition parse-tree.h:5887
Definition parse-tree.h:5817
Definition parse-tree.h:5503
Definition parse-tree.h:5526
Definition parse-tree.h:5516
Definition parse-tree.h:5508
Definition parse-tree.h:5545
Definition parse-tree.h:5538
Definition parse-tree.h:5629
Definition parse-tree.h:5493
Definition parse-tree.h:5481
Definition parse-tree.h:5556
Definition parse-tree.h:5570
Definition parse-tree.h:5624
Definition parse-tree.h:5586
Definition parse-tree.h:5594
Definition parse-tree.h:5653
Definition parse-tree.h:5615
Definition parse-tree.h:5641
Definition parse-tree.h:5361
Definition parse-tree.h:5599
Definition parse-tree.h:5605
Definition parse-tree.h:378
Definition parse-tree.h:2840
Definition parse-tree.h:2803
Definition parse-tree.h:3032
Definition parse-tree.h:1844
Definition parse-tree.h:2070
Definition parse-tree.h:2069
Definition parse-tree.h:1596
Definition parse-tree.h:2030
Definition parse-tree.h:2866
Definition parse-tree.h:3152
Definition parse-tree.h:2824
Definition parse-tree.h:932
Definition parse-tree.h:3130
Definition parse-tree.h:1073
Definition parse-tree.h:1101
Definition parse-tree.h:1929
Definition parse-tree.h:1093
Definition parse-tree.h:1087
Definition parse-tree.h:1080
Definition parse-tree.h:3140
Definition parse-tree.h:3272
Definition parse-tree.h:3233
Definition parse-tree.h:575
Definition parse-tree.h:2787
Definition parse-tree.h:816
Definition parse-tree.h:2301
Definition parse-tree.h:3020
Definition parse-tree.h:3024
Definition parse-tree.h:3018
Definition parse-tree.h:1609
Definition parse-tree.h:297
Definition parse-tree.h:1695
Definition parse-tree.h:2424
Definition parse-tree.h:2489
Definition parse-tree.h:2488
Definition parse-tree.h:2502
Definition parse-tree.h:2500
Definition parse-tree.h:2479
Definition parse-tree.h:2536
Definition parse-tree.h:2534
Definition parse-tree.h:2514
Definition parse-tree.h:2180
Definition parse-tree.h:3391
Definition parse-tree.h:853
Definition parse-tree.h:790
Definition parse-tree.h:828
Definition parse-tree.h:401
Definition parse-tree.h:455
Definition parse-tree.h:1999
Definition parse-tree.h:361
Definition parse-tree.h:3409
Definition parse-tree.h:2566
Definition parse-tree.h:1919
Definition parse-tree.h:1210
Definition parse-tree.h:3530
Definition parse-tree.h:3502
Definition parse-tree.h:3525
Definition parse-tree.h:3038
Definition parse-tree.h:3049
Definition parse-tree.h:3202
Definition parse-tree.h:3375
Definition parse-tree.h:1686
Definition parse-tree.h:1881
Definition parse-tree.h:1677
Definition parse-tree.h:1867
Definition parse-tree.h:2585
Definition parse-tree.h:2584
Definition parse-tree.h:2597
Definition parse-tree.h:910
Definition parse-tree.h:1153
Definition parse-tree.h:1166
Definition parse-tree.h:1128
Definition parse-tree.h:1175
Definition parse-tree.h:1144
Definition parse-tree.h:1140
Definition parse-tree.h:1138
Definition parse-tree.h:1438
Definition parse-tree.h:2524
Definition parse-tree.h:2523
Definition parse-tree.h:938
Definition parse-tree.h:946
Definition parse-tree.h:744
Definition parse-tree.h:653
Definition parse-tree.h:757
Definition parse-tree.h:3518
Definition parse-tree.h:356
Definition parse-tree.h:2656
Definition parse-tree.h:803
Definition parse-tree.h:3116
Definition parse-tree.h:1897
Definition parse-tree.h:730
Definition parse-tree.h:735
Definition parse-tree.h:284
Definition parse-tree.h:2850
Definition parse-tree.h:2095
Definition parse-tree.h:2088
Definition parse-tree.h:2124
Definition parse-tree.h:2120
Definition parse-tree.h:2119
Definition parse-tree.h:2082
Definition parse-tree.h:2809
Definition parse-tree.h:3753
Definition parse-tree.h:3744
Definition parse-tree.h:3714
Definition parse-tree.h:3724
Definition parse-tree.h:3737
Definition parse-tree.h:3908
Definition parse-tree.h:3918
Definition parse-tree.h:3935
Definition parse-tree.h:3927
Definition parse-tree.h:3951
Definition parse-tree.h:3943
Definition parse-tree.h:3963
Definition parse-tree.h:3975
Definition parse-tree.h:3985
Definition parse-tree.h:3996
Definition parse-tree.h:4009
Definition parse-tree.h:4021
Definition parse-tree.h:4042
Definition parse-tree.h:4053
Definition parse-tree.h:4063
Definition parse-tree.h:4072
Definition parse-tree.h:4089
Definition parse-tree.h:4104
Definition parse-tree.h:4115
Definition parse-tree.h:4126
Definition parse-tree.h:4138
Definition parse-tree.h:4148
Definition parse-tree.h:4156
Definition parse-tree.h:4165
Definition parse-tree.h:4174
Definition parse-tree.h:4188
Definition parse-tree.h:4200
Definition parse-tree.h:4233
Definition parse-tree.h:4221
Definition parse-tree.h:4208
Definition parse-tree.h:4242
Definition parse-tree.h:4254
Definition parse-tree.h:4278
Definition parse-tree.h:4269
Definition parse-tree.h:4312
Definition parse-tree.h:4288
Definition parse-tree.h:4301
Definition parse-tree.h:4321
Definition parse-tree.h:4330
Definition parse-tree.h:4339
Definition parse-tree.h:4349
Definition parse-tree.h:4359
Definition parse-tree.h:4368
Definition parse-tree.h:4376
Definition parse-tree.h:4386
Definition parse-tree.h:4395
Definition parse-tree.h:4405
Definition parse-tree.h:4418
Definition parse-tree.h:3884
Definition parse-tree.h:3794
Definition parse-tree.h:3791
Definition parse-tree.h:3774
Definition parse-tree.h:3815
Definition parse-tree.h:3781
Definition parse-tree.h:3842
Definition parse-tree.h:3857
Definition parse-tree.h:3854
Definition parse-tree.h:3867
Definition parse-tree.h:3876