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);
1368 std::tuple<std::optional<IntExpr>, IntExpr> t;
1375 ImpliedShapeSpec, AssumedRankSpec>
1381 ENUM_CLASS(Intent, In, Out, InOut)
1382 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1387WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1397EMPTY_CLASS(Asynchronous);
1398EMPTY_CLASS(External);
1399EMPTY_CLASS(Intrinsic);
1400EMPTY_CLASS(Optional);
1401EMPTY_CLASS(Parameter);
1402EMPTY_CLASS(Protected);
1406EMPTY_CLASS(Volatile);
1411 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1412 common::CUDADataAttr>
1423 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1424 EntityDecl(ObjectName &&name,
CharLength &&length,
1425 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1426 std::optional<Initialization> &&init)
1427 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1428 std::move(length), std::move(init)} {}
1429 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1430 std::optional<CharLength>, std::optional<Initialization>>
1438 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1448 std::tuple<AccessSpec, std::list<AccessId>> t;
1457 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1462WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1465WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1470 ENUM_CLASS(Kind, Object, Common)
1471 std::tuple<Kind, Name> t;
1477 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1483 std::tuple<Name, CoarraySpec> t;
1487WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1490WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1499using TypedAssignment =
1512 mutable TypedExpr typedExpr;
1513 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1526 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1532 mutable std::int64_t repetitions{1};
1540 std::variant<Scalar<common::Indirection<Designator>>,
1553 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1560 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1566 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1570WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1578 std::tuple<Name, ArraySpec> t;
1580 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1586 std::tuple<IntentSpec, std::list<Name>> t;
1590WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1596 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1600WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1603WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1609 ENUM_CLASS(Kind, Entity, Common)
1610 std::tuple<Kind, Name> t;
1614WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1617WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1620WRAPPER_CLASS(ValueStmt, std::list<Name>);
1623WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1628 std::tuple<Location, std::optional<Location>> t;
1634 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1643 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1644 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1650 std::tuple<Name, std::optional<ArraySpec>> t;
1658 TUPLE_CLASS_BOILERPLATE(
Block);
1659 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1661 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1662 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1663 std::list<Block> &&);
1672WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1677 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1681using Subscript = ScalarIntExpr;
1686 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1687 std::optional<Subscript>>
1695 std::variant<IntExpr, SubscriptTriplet> u;
1699using Cosubscript = ScalarIntExpr;
1710 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1713 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1720 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1729 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1736 UNION_CLASS_BOILERPLATE(Expr);
1740 using IntrinsicUnary::IntrinsicUnary;
1743 using IntrinsicUnary::IntrinsicUnary;
1746 using IntrinsicUnary::IntrinsicUnary;
1748 struct NOT :
public IntrinsicUnary {
1749 using IntrinsicUnary::IntrinsicUnary;
1756 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1764 using IntrinsicBinary::IntrinsicBinary;
1767 using IntrinsicBinary::IntrinsicBinary;
1770 using IntrinsicBinary::IntrinsicBinary;
1773 using IntrinsicBinary::IntrinsicBinary;
1776 using IntrinsicBinary::IntrinsicBinary;
1779 using IntrinsicBinary::IntrinsicBinary;
1782 using IntrinsicBinary::IntrinsicBinary;
1785 using IntrinsicBinary::IntrinsicBinary;
1788 using IntrinsicBinary::IntrinsicBinary;
1791 using IntrinsicBinary::IntrinsicBinary;
1794 using IntrinsicBinary::IntrinsicBinary;
1797 using IntrinsicBinary::IntrinsicBinary;
1800 using IntrinsicBinary::IntrinsicBinary;
1803 using IntrinsicBinary::IntrinsicBinary;
1806 using IntrinsicBinary::IntrinsicBinary;
1809 using IntrinsicBinary::IntrinsicBinary;
1814 using IntrinsicBinary::IntrinsicBinary;
1819 std::tuple<DefinedOpName, common::Indirection<Expr>,
1827 mutable TypedExpr typedExpr;
1831 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1836 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1843 TUPLE_CLASS_BOILERPLATE(
PartRef);
1844 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1849 UNION_CLASS_BOILERPLATE(DataRef);
1850 explicit DataRef(std::list<PartRef> &&);
1851 std::variant<Name, common::Indirection<StructureComponent>,
1867 std::tuple<DataRef, SubstringRange> t;
1872 std::tuple<CharLiteralConstant, SubstringRange> t;
1889 bool EndsInBareName()
const;
1891 std::variant<DataRef, Substring> u;
1897 mutable TypedExpr typedExpr;
1899 std::variant<common::Indirection<Designator>,
1919 std::tuple<DataRef, Name> t;
1921 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1922 const Name &Component()
const {
return std::get<Name>(t); }
1934 std::tuple<DataRef, ImageSelector> t;
1943 std::tuple<DataRef, std::list<SectionSubscript>> t;
1945 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1946 const std::list<SectionSubscript> &Subscripts()
const {
1947 return std::get<std::list<SectionSubscript>>(t);
1954 mutable TypedExpr typedExpr;
1955 std::variant<Name, StructureComponent> u;
1960using BoundExpr = ScalarIntExpr;
1966 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1975 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1983 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1984 std::optional<AllocateCoarraySpec>>
1989WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1993WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1999 std::variant<StatVariable, MsgVariable> u;
2014 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
2021 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
2022 std::list<AllocOpt>>
2030 mutable TypedExpr typedExpr;
2031 std::variant<Name, StructureComponent> u;
2035WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2041 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2047 mutable TypedAssignment typedAssignment;
2048 std::tuple<Variable, Expr> t;
2052WRAPPER_CLASS(BoundsSpec, BoundExpr);
2057 std::tuple<BoundExpr, BoundExpr> t;
2069 UNION_CLASS_BOILERPLATE(
Bounds);
2070 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2073 mutable TypedAssignment typedAssignment;
2074 std::tuple<DataRef, Bounds, Expr> t;
2082 std::tuple<LogicalExpr, AssignmentStmt> t;
2088 std::tuple<std::optional<Name>, LogicalExpr> t;
2104 std::tuple<LogicalExpr, std::optional<Name>> t;
2108WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2111WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2120 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2124 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2127 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2128 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2143 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2149 std::tuple<common::Indirection<ConcurrentHeader>,
2166WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2172 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2180 std::variant<Expr, Variable> u;
2186 std::tuple<Name, Selector> t;
2193 std::tuple<std::optional<Name>, std::list<Association>> t;
2197WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2206WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2209WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2224 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2232 std::tuple<CodimensionDecl, Selector> t;
2240 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2241 std::list<StatOrErrmsg>>
2249 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2262 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2266WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2280 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2289 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2290 std::optional<ScalarLogicalExpr>>
2300 ENUM_CLASS(Operator, Plus, Minus, Multiply, Max, Min, Iand, Ior, Ieor, And,
2312 WRAPPER_CLASS(Local, std::list<Name>);
2313 WRAPPER_CLASS(LocalInit, std::list<Name>);
2315 TUPLE_CLASS_BOILERPLATE(
Reduce);
2317 std::tuple<Operator, std::list<Name>> t;
2319 WRAPPER_CLASS(Shared, std::list<Name>);
2320 EMPTY_CLASS(DefaultNone);
2321 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2334 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2337 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2344 std::tuple<Label, std::optional<LoopControl>> t;
2350 std::tuple<std::optional<Name>, std::optional<Label>,
2351 std::optional<LoopControl>>
2356WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2367 const std::optional<LoopControl> &GetLoopControl()
const;
2368 bool IsDoNormal()
const;
2369 bool IsDoWhile()
const;
2370 bool IsDoConcurrent()
const;
2375WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2380 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2387 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2391WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2394WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2402 std::tuple<Statement<ElseIfStmt>, Block> t;
2406 std::tuple<Statement<ElseStmt>, Block> t;
2409 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2416 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2417 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2435 TUPLE_CLASS_BOILERPLATE(
Range);
2436 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2439 std::variant<CaseValue, Range> u;
2443EMPTY_CLASS(Default);
2447 std::variant<std::list<CaseValueRange>, Default> u;
2453 std::tuple<CaseSelector, std::optional<Name>> t;
2459WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2465 TUPLE_CLASS_BOILERPLATE(
Case);
2466 std::tuple<Statement<CaseStmt>, Block> t;
2469 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2479 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2488 UNION_CLASS_BOILERPLATE(
Rank);
2489 std::variant<ScalarIntConstantExpr, Star, Default> u;
2492 std::tuple<Rank, std::optional<Name>> t;
2502 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2504 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2514 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2523 UNION_CLASS_BOILERPLATE(
Guard);
2524 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2527 std::tuple<Guard, std::optional<Name>> t;
2536 std::tuple<Statement<TypeGuardStmt>, Block> t;
2538 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2544WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2547WRAPPER_CLASS(GotoStmt, Label);
2552 std::tuple<std::list<Label>, ScalarIntExpr> t;
2565 ENUM_CLASS(Kind, Stop, ErrorStop)
2567 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2574 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2578WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2585 std::variant<IntExpr, Star> u;
2588 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2592WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2597 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2606 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2612 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2620 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2633 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2636 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2647 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2650 std::tuple<LockVariable, std::list<LockStat>> t;
2656 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2660WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2670 UNION_CLASS_BOILERPLATE(
IoUnit);
2671 std::variant<Variable, common::Indirection<Expr>, Star> u;
2675using FileNameExpr = ScalarDefaultCharExpr;
2695WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2696WRAPPER_CLASS(ErrLabel, Label);
2701 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2702 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2703 Carriagecontrol, Convert, Dispose)
2705 std::tuple<Kind, ScalarDefaultCharExpr> t;
2707 WRAPPER_CLASS(Recl, ScalarIntExpr);
2708 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2709 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2710 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2715WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2725 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2729 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2735 UNION_CLASS_BOILERPLATE(
Format);
2736 std::variant<Expr, Label, Star> u;
2740WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2756WRAPPER_CLASS(EndLabel, Label);
2757WRAPPER_CLASS(EorLabel, Label);
2762 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2764 std::tuple<Kind, ScalarDefaultCharExpr> t;
2766 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2767 WRAPPER_CLASS(Pos, ScalarIntExpr);
2768 WRAPPER_CLASS(Rec, ScalarIntExpr);
2769 WRAPPER_CLASS(Size, ScalarIntVariable);
2771 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2779 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2786 BOILERPLATE(ReadStmt);
2787 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2788 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2789 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2790 items(std::move(its)) {}
2791 std::optional<IoUnit> iounit;
2793 std::optional<Format> format;
2796 std::list<IoControlSpec> controls;
2797 std::list<InputItem> items;
2803 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2808 BOILERPLATE(WriteStmt);
2809 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2810 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2811 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2812 items(std::move(its)) {}
2813 std::optional<IoUnit> iounit;
2815 std::optional<Format> format;
2817 std::list<IoControlSpec> controls;
2818 std::list<OutputItem> items;
2824 std::tuple<Format, std::list<OutputItem>> t;
2835 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2840 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2847WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2850 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2851 MsgVariable, StatVariable>
2856WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2866 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2871WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2875WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2878WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2881WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2922 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2923 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2924 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2926 Carriagecontrol, Convert, Dispose)
2927 TUPLE_CLASS_BOILERPLATE(
CharVar);
2928 std::tuple<Kind, ScalarDefaultCharVariable> t;
2931 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2932 TUPLE_CLASS_BOILERPLATE(
IntVar);
2933 std::tuple<Kind, ScalarIntVariable> t;
2936 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2937 TUPLE_CLASS_BOILERPLATE(
LogVar);
2938 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2952 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2954 std::variant<std::list<InquireSpec>,
Iolength> u;
2961WRAPPER_CLASS(ProgramStmt,
Name);
2964WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2972 ExecutionPart, std::optional<InternalSubprogramPart>,
2978WRAPPER_CLASS(ModuleStmt,
Name);
2985 std::variant<common::Indirection<FunctionSubprogram>,
2996 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
3000WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
3006 TUPLE_CLASS_BOILERPLATE(
Module);
3017 UNION_CLASS_BOILERPLATE(
Rename);
3019 TUPLE_CLASS_BOILERPLATE(
Names);
3020 std::tuple<Name, Name> t;
3024 std::tuple<DefinedOpName, DefinedOpName> t;
3026 std::variant<Names, Operators> u;
3032 std::tuple<Name, std::optional<Name>> t;
3038 std::tuple<ParentIdentifier, Name> t;
3042WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3055WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3058WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3076 EMPTY_CLASS(Assignment);
3077 EMPTY_CLASS(ReadFormatted);
3078 EMPTY_CLASS(ReadUnformatted);
3079 EMPTY_CLASS(WriteFormatted);
3080 EMPTY_CLASS(WriteUnformatted);
3083 ReadUnformatted, WriteFormatted, WriteUnformatted>
3091 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3095struct InterfaceStmt {
3096 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3098 InterfaceStmt(Abstract x) : u{x} {}
3100 std::variant<std::optional<GenericSpec>, Abstract> u;
3106 UNION_CLASS_BOILERPLATE(
Only);
3107 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3115 BOILERPLATE(UseStmt);
3116 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3117 template <
typename A>
3118 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3119 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3120 std::optional<ModuleNature> nature;
3122 std::variant<std::list<Rename>, std::list<Only>> u;
3140 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3141 std::list<ProcDecl>>
3152 EMPTY_CLASS(Elemental);
3153 EMPTY_CLASS(Impure);
3155 EMPTY_CLASS(Non_Recursive);
3157 EMPTY_CLASS(Recursive);
3158 EMPTY_CLASS(Simple);
3159 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3160 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3161 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3163 Pure, Recursive, Simple, Attributes, Launch_Bounds, Cluster_Dims>
3171 TUPLE_CLASS_BOILERPLATE(Suffix);
3173 : t(std::move(rn), std::move(lbs)) {}
3174 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3183 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3184 std::optional<Suffix>>
3189WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3194 std::variant<Name, Star> u;
3202 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3203 std::optional<LanguageBindingSpec>>
3208WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3223 std::tuple<Statement<SubroutineStmt>,
3227 std::variant<Function, Subroutine> u;
3232 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3234 std::tuple<Kind, std::list<Name>> t;
3244 std::variant<InterfaceBody, Statement<ProcedureStmt>,
3251WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3257 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3263WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3266WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3272 std::variant<Name, ProcComponentRef> u;
3276WRAPPER_CLASS(AltReturnSpec, Label);
3279EMPTY_CLASS(ConditionalArgNil);
3293 std::variant<common::Indirection<Expr>, ConditionalArgNil> u;
3302 std::variant<ConditionalArg, ConditionalArg::Consequent> u;
3309 WRAPPER_CLASS(PercentRef,
Expr);
3310 WRAPPER_CLASS(PercentVal,
Expr);
3311 UNION_CLASS_BOILERPLATE(ActualArg);
3313 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal,
3321 std::tuple<std::optional<Keyword>,
ActualArg> t;
3327 TUPLE_CLASS_BOILERPLATE(
Call);
3328 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3344 TUPLE_CLASS_BOILERPLATE(CallStmt);
3345 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3348 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3349 std::optional<ScalarIntExpr>>
3353 std::list<ActualArgSpec> &&args)
3354 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3355 std::tuple<Call, std::optional<Chevrons>> t;
3357 mutable TypedCall typedCall;
3381WRAPPER_CLASS(MpSubprogramStmt,
Name);
3384WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3399 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3403WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3434 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3437 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3441 std::tuple<common::Indirection<Designator>, uint64_t> t;
3443 EMPTY_CLASS(VectorAlways);
3446 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3448 std::tuple<std::uint64_t, Kind> t;
3452 std::tuple<Name, std::optional<std::uint64_t>> t;
3455 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3458 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3461 WRAPPER_CLASS_BOILERPLATE(
3465 WRAPPER_CLASS_BOILERPLATE(
InlineAlways, std::optional<Name>);
3467 EMPTY_CLASS(NoVector);
3468 EMPTY_CLASS(NoUnroll);
3469 EMPTY_CLASS(NoUnrollAndJam);
3470 EMPTY_CLASS(ForceInline);
3471 EMPTY_CLASS(Inline);
3472 EMPTY_CLASS(NoInline);
3475 EMPTY_CLASS(Unrecognized);
3477 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3479 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3487 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3493 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3495WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3502 std::variant<Statement<DataComponentDefStmt>,
3508 EMPTY_CLASS(MapStmt);
3509 EMPTY_CLASS(EndMapStmt);
3510 TUPLE_CLASS_BOILERPLATE(
Map);
3511 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3517 EMPTY_CLASS(UnionStmt);
3518 EMPTY_CLASS(EndUnionStmt);
3519 TUPLE_CLASS_BOILERPLATE(
Union);
3525 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3529 EMPTY_CLASS(EndStructureStmt);
3531 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3538WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3543 std::tuple<Expr, Label, Label, Label> t;
3548 std::tuple<Label, Name> t;
3553 std::tuple<Name, std::list<Label>> t;
3556WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3562#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3563 using basename::basename; \
3564 classname(basename &&b) : basename(std::move(b)) {} \
3565 using TupleTrait = std::true_type; \
3566 BOILERPLATE(classname)
3568#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3569 BOILERPLATE(classname); \
3570 using basename::basename; \
3571 classname(basename &&base) : basename(std::move(base)) {} \
3572 using WrapperTrait = std::true_type
3577struct OmpDirectiveName {
3579 constexpr OmpDirectiveName() =
default;
3580 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3581 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3585 OmpDirectiveName(
const Verbatim &name);
3586 using WrapperTrait = std::true_type;
3588 bool IsExecutionPart()
const;
3591 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3599 std::variant<TypeSpec, DeclarationTypeSpec> u;
3613 std::variant<FunctionReference, OmpReservedIdentifier> u;
3624 ENUM_CLASS(Kind, BlankCommonBlock);
3625 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3629 std::variant<Designator, OmpLocator, Name, Invalid> u;
3633 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3640 using EmptyTrait = std::true_type;
3648 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3651 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3665 WRAPPER_CLASS_BOILERPLATE(
3678 std::variant<DefinedOperator, ProcedureDesignator> u;
3687 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3699 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3704inline namespace arguments {
3714 std::tuple<OmpObject, OmpObject> t;
3725 std::tuple<std::string, TypeSpec, Name> t;
3738 std::optional<OmpCombinerExpression>>
3757inline namespace traits {
3794 TUPLE_CLASS_BOILERPLATE(
Complex);
3796 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3800 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3816 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3841 std::string ToString()
const;
3844 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3845 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3846 std::variant<Value, llvm::omp::Directive, std::string> u;
3857 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3859 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3866 std::string ToString()
const;
3868 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3877 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3884 WRAPPER_CLASS_BOILERPLATE(
3889#define MODIFIER_BOILERPLATE(...) \
3891 using Variant = std::variant<__VA_ARGS__>; \
3892 UNION_CLASS_BOILERPLATE(Modifier); \
3897#define MODIFIERS() std::optional<std::list<Modifier>>
3899inline namespace modifier {
3907 ENUM_CLASS(Value, Cgroup);
3916 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3952 ENUM_CLASS(Value, Always)
3964 ENUM_CLASS(Value, Always, Never, Auto)
3974 ENUM_CLASS(Value, Automap);
3985 ENUM_CLASS(Value, Simd)
3998 ENUM_CLASS(Value, Close)
4010 ENUM_CLASS(Value, Delete)
4031 ENUM_CLASS(Value, Sink, Source);
4042 using Value = common::OmpDependenceKind;
4044 std::tuple<Value, OmpObject> t;
4052 ENUM_CLASS(Value, Ancestor, Device_Num)
4078 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4093 ENUM_CLASS(Value, Present);
4104 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4115 ENUM_CLASS(Value, Target, Targetsync)
4129 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4137 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4145 ENUM_CLASS(Value, Conditional)
4154 ENUM_CLASS(Value, Ref, Uval, Val);
4184 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4185 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4197 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4212 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4221 ENUM_CLASS(Value, Reproducible, Unconstrained)
4234 using Extensions = std::list<PreferencePropertyExtension>;
4235 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4245 using ForeignRuntimeIdentifier =
4246 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4247 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4255 WRAPPER_CLASS_BOILERPLATE(
4264 ENUM_CLASS(Value, Strict)
4277 ENUM_CLASS(Value, Present)
4286 ENUM_CLASS(Value, Default, Inscan, Task);
4296 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4306 ENUM_CLASS(Value, Self)
4333 using Value = common::OmpDependenceKind;
4344 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4357 ENUM_CLASS(Value, Ompx_Hold)
4367using OmpDirectiveList = std::list<llvm::omp::Directive>;
4380 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4383 std::tuple<OmpAdjustOp, OmpObjectList> t;
4400 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4431 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4439 ENUM_CLASS(ActionTime, Compilation, Execution);
4440 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4451 using MemoryOrder = common::OmpMemoryOrderType;
4462 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4469 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4502 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4504 std::variant<DataSharingAttribute,
4521 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4524 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4533 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4542 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4559 OmpDependenceType::Value GetDepType()
const;
4562 EMPTY_CLASS(Source);
4564 std::variant<Sink, Source> u;
4579 OmpTaskDependenceType::Value GetTaskDepType()
const;
4580 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4584 std::variant<TaskDep, OmpDoacross> u;
4621 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4637 using DeviceTypeDescription = common::OmpDeviceType;
4647 WRAPPER_CLASS_BOILERPLATE(
4654 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4671 using MemoryOrder = common::OmpMemoryOrderType;
4697 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4718 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4731 WRAPPER_CLASS_BOILERPLATE(
4744 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4797 MODIFIER_BOILERPLATE(
4808 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4845 WRAPPER_CLASS_BOILERPLATE(
4859EMPTY_CLASS(OmpNoOpenMPClause);
4864EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4869EMPTY_CLASS(OmpNoParallelismClause);
4879 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4891 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4903 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4913 ENUM_CLASS(Ordering, Concurrent)
4915 std::tuple<MODIFIERS(), Ordering> t;
4937 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4980 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4982 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4997 ENUM_CLASS(SevLevel, Fatal, Warning);
5019 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5026 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5069 WRAPPER_CLASS_BOILERPLATE(
5087 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5097 MODIFIER_BOILERPLATE(OmpContextSelector);
5098 std::tuple<MODIFIERS(),
5099 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5113 llvm::omp::Clause Id()
const;
5115#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5116#include "llvm/Frontend/OpenMP/OMP.inc"
5121#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5122#include "llvm/Frontend/OpenMP/OMP.inc"
5128 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5135 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo, ExplicitBegin)
5140 return std::get<OmpDirectiveName>(t);
5142 llvm::omp::Directive DirId()
const {
5149 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5150 std::optional<OmpClauseList>, Flags>
5159 INHERITED_TUPLE_CLASS_BOILERPLATE(
5171 return std::get<OmpBeginDirective>(t);
5173 const std::optional<OmpEndDirective> &EndDir()
const {
5174 return std::get<std::optional<OmpEndDirective>>(t);
5178 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5182 WRAPPER_CLASS_BOILERPLATE(
5187 INHERITED_TUPLE_CLASS_BOILERPLATE(
5208 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5234 INHERITED_TUPLE_CLASS_BOILERPLATE(
5249 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5257 return std::get<OmpBeginSectionsDirective>(t);
5259 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5260 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5267 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5268 std::optional<OmpEndSectionsDirective>>
5277 WRAPPER_CLASS_BOILERPLATE(
5289 WRAPPER_CLASS_BOILERPLATE(
5297 WRAPPER_CLASS_BOILERPLATE(
5306 WRAPPER_CLASS_BOILERPLATE(
5323 WRAPPER_CLASS_BOILERPLATE(
5336 WRAPPER_CLASS_BOILERPLATE(
5396 INHERITED_TUPLE_CLASS_BOILERPLATE(
5401 llvm::omp::Clause GetKind()
const;
5402 bool IsCapture()
const;
5403 bool IsCompare()
const;
5409 static constexpr int None = 0;
5410 static constexpr int Read = 1;
5411 static constexpr int Write = 2;
5412 static constexpr int Update = Read | Write;
5413 static constexpr int Action = 3;
5414 static constexpr int IfTrue = 4;
5415 static constexpr int IfFalse = 8;
5416 static constexpr int Condition = 12;
5420 TypedAssignment assign;
5422 TypedExpr atom, cond;
5431 WRAPPER_CLASS_BOILERPLATE(
5492 WRAPPER_CLASS_BOILERPLATE(
5534 INHERITED_TUPLE_CLASS_BOILERPLATE(
5540 using EmptyTrait = std::true_type;
5551WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5583 std::variant<Name, ScalarDefaultCharExpr> u;
5593 ENUM_CLASS(Modifier, ReadOnly, Zero)
5600 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5605 std::tuple<ReductionOperator, AccObjectList> t;
5610 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5614 WRAPPER_CLASS_BOILERPLATE(
5620 WRAPPER_CLASS_BOILERPLATE(
5627 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5635 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5644 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5651 WRAPPER_CLASS(Num, ScalarIntExpr);
5652 WRAPPER_CLASS(Dim, ScalarIntExpr);
5654 std::variant<Num, Dim, Static> u;
5659 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5664 std::tuple<bool, ScalarIntConstantExpr> t;
5670#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5671#include "llvm/Frontend/OpenACC/ACC.inc"
5676#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5677#include "llvm/Frontend/OpenACC/ACC.inc"
5683 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5696 std::tuple<Verbatim, AccObjectListWithModifier> t;
5702 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5707 std::tuple<AccLoopDirective, AccClauseList> t;
5714 std::tuple<AccBlockDirective, AccClauseList> t;
5723EMPTY_CLASS(AccEndAtomic);
5728 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5729 std::optional<AccEndAtomic>>
5736 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5737 std::optional<AccEndAtomic>>
5745 std::optional<AccEndAtomic>>
5754 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5759 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5766 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5772 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5778 std::tuple<AccCombinedDirective, AccClauseList> t;
5786struct OpenACCCombinedConstruct {
5787 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5790 : t({std::move(a), std::nullopt, std::nullopt}) {}
5791 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5792 std::optional<AccEndCombinedDirective>>
5799 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5804EMPTY_CLASS(AccEndLoop);
5805struct OpenACCLoopConstruct {
5806 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5808 : t({std::move(a), std::nullopt, std::nullopt}) {}
5809 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5810 std::optional<AccEndLoop>>
5822 std::tuple<AccStandaloneDirective, AccClauseList> t;
5848 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5853 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5856 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5857 std::optional<ScalarIntExpr>>
5863 std::tuple<std::optional<ScalarIntConstantExpr>,
5864 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5867 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:948
Definition expression.h:938
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:5750
Definition parse-tree.h:5726
Definition parse-tree.h:5742
Definition parse-tree.h:5734
Definition parse-tree.h:5711
Definition parse-tree.h:5775
Definition parse-tree.h:5705
Definition parse-tree.h:5581
Definition parse-tree.h:5554
Definition parse-tree.h:5682
Definition parse-tree.h:5667
Definition parse-tree.h:5662
Definition parse-tree.h:5570
Definition parse-tree.h:5592
Definition parse-tree.h:5575
Definition parse-tree.h:5587
Definition parse-tree.h:5619
Definition parse-tree.h:5613
Definition parse-tree.h:5717
Definition parse-tree.h:5781
Definition parse-tree.h:5658
Definition parse-tree.h:5649
Definition parse-tree.h:5559
Definition parse-tree.h:5598
Definition parse-tree.h:5603
Definition parse-tree.h:5546
Definition parse-tree.h:5642
Definition parse-tree.h:5638
Definition parse-tree.h:5634
Definition parse-tree.h:5564
Definition parse-tree.h:5630
Definition parse-tree.h:5624
Definition parse-tree.h:5608
Definition parse-tree.h:902
Definition parse-tree.h:1446
Definition parse-tree.h:500
Definition parse-tree.h:3319
Definition parse-tree.h:3308
Definition parse-tree.h:2008
Definition parse-tree.h:1973
Definition parse-tree.h:1952
Definition parse-tree.h:1964
Definition parse-tree.h:2019
Definition parse-tree.h:1981
Definition parse-tree.h:3541
Definition parse-tree.h:1938
Definition parse-tree.h:1371
Definition parse-tree.h:3546
Definition parse-tree.h:3551
Definition parse-tree.h:2045
Definition parse-tree.h:2200
Definition parse-tree.h:2191
Definition parse-tree.h:2184
Definition parse-tree.h:1346
Definition parse-tree.h:1407
Definition parse-tree.h:3491
Definition parse-tree.h:1120
Definition parse-tree.h:1468
Definition parse-tree.h:1475
Definition parse-tree.h:2222
Definition parse-tree.h:3061
Definition parse-tree.h:2055
Definition parse-tree.h:3485
Definition parse-tree.h:5860
Definition parse-tree.h:5854
Definition parse-tree.h:5851
Definition parse-tree.h:5845
Definition parse-tree.h:3346
Definition parse-tree.h:3343
Definition parse-tree.h:3326
Definition parse-tree.h:2464
Definition parse-tree.h:2463
Definition parse-tree.h:2445
Definition parse-tree.h:2451
Definition parse-tree.h:2434
Definition parse-tree.h:2432
Definition parse-tree.h:2253
Definition parse-tree.h:2238
Definition parse-tree.h:674
Definition parse-tree.h:1870
Definition parse-tree.h:861
Definition parse-tree.h:692
Definition parse-tree.h:690
Definition parse-tree.h:2723
Definition parse-tree.h:2722
Definition parse-tree.h:2230
Definition parse-tree.h:977
Definition parse-tree.h:1481
Definition parse-tree.h:1932
Definition parse-tree.h:1648
Definition parse-tree.h:1657
Definition parse-tree.h:1656
Definition parse-tree.h:3439
Definition parse-tree.h:3432
Definition parse-tree.h:3464
Definition parse-tree.h:3436
Definition parse-tree.h:3450
Definition parse-tree.h:3460
Definition parse-tree.h:3457
Definition parse-tree.h:3454
Definition parse-tree.h:3444
Definition parse-tree.h:3430
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:2550
Definition parse-tree.h:2278
Definition parse-tree.h:3300
Definition parse-tree.h:3289
Definition parse-tree.h:3287
Definition parse-tree.h:1727
Definition parse-tree.h:2700
Definition parse-tree.h:2698
Definition parse-tree.h:305
Definition parse-tree.h:2269
Definition parse-tree.h:2260
Definition parse-tree.h:1062
Definition parse-tree.h:1538
Definition parse-tree.h:1550
Definition parse-tree.h:1848
Definition parse-tree.h:1509
Definition parse-tree.h:1558
Definition parse-tree.h:1524
Definition parse-tree.h:1564
Definition parse-tree.h:1530
Definition parse-tree.h:2039
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:1887
Definition parse-tree.h:1576
Definition parse-tree.h:1575
Definition parse-tree.h:2365
Definition parse-tree.h:3192
Definition parse-tree.h:2385
Definition parse-tree.h:2247
Definition parse-tree.h:1422
Definition parse-tree.h:3397
Definition parse-tree.h:1233
Definition parse-tree.h:1259
Definition parse-tree.h:1242
Definition parse-tree.h:1219
Definition parse-tree.h:2604
Definition parse-tree.h:2610
Definition parse-tree.h:2618
Definition parse-tree.h:533
Definition parse-tree.h:558
Definition parse-tree.h:971
Definition parse-tree.h:1366
Definition parse-tree.h:958
Definition parse-tree.h:1799
Definition parse-tree.h:1772
Definition parse-tree.h:1813
Definition parse-tree.h:1778
Definition parse-tree.h:1817
Definition parse-tree.h:1754
Definition parse-tree.h:1769
Definition parse-tree.h:1805
Definition parse-tree.h:1787
Definition parse-tree.h:1793
Definition parse-tree.h:1796
Definition parse-tree.h:1759
Definition parse-tree.h:1784
Definition parse-tree.h:1781
Definition parse-tree.h:1766
Definition parse-tree.h:1808
Definition parse-tree.h:1790
Definition parse-tree.h:1748
Definition parse-tree.h:1745
Definition parse-tree.h:1802
Definition parse-tree.h:1739
Definition parse-tree.h:1763
Definition parse-tree.h:1775
Definition parse-tree.h:1742
Definition parse-tree.h:1735
Definition parse-tree.h:1048
Definition parse-tree.h:2141
Definition parse-tree.h:2157
Definition parse-tree.h:2135
Definition parse-tree.h:2170
Definition parse-tree.h:2147
Definition parse-tree.h:3331
Definition parse-tree.h:3181
Definition parse-tree.h:3363
Definition parse-tree.h:3074
Definition parse-tree.h:3089
Definition parse-tree.h:868
Definition parse-tree.h:2404
Definition parse-tree.h:2400
Definition parse-tree.h:2399
Definition parse-tree.h:2415
Definition parse-tree.h:2378
Definition parse-tree.h:1708
Definition parse-tree.h:1718
Definition parse-tree.h:423
Definition parse-tree.h:1632
Definition parse-tree.h:1641
Definition parse-tree.h:629
Definition parse-tree.h:1019
Definition parse-tree.h:2921
Definition parse-tree.h:2930
Definition parse-tree.h:2935
Definition parse-tree.h:2919
Definition parse-tree.h:2950
Definition parse-tree.h:2948
Definition parse-tree.h:797
Definition parse-tree.h:313
Definition parse-tree.h:1380
Definition parse-tree.h:1584
Definition parse-tree.h:3255
Definition parse-tree.h:3215
Definition parse-tree.h:3221
Definition parse-tree.h:3213
Definition parse-tree.h:3242
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:2760
Definition parse-tree.h:2758
Definition parse-tree.h:2669
Definition parse-tree.h:784
Definition parse-tree.h:662
Definition parse-tree.h:2342
Definition parse-tree.h:1325
Definition parse-tree.h:680
Definition parse-tree.h:1626
Definition parse-tree.h:893
Definition parse-tree.h:2314
Definition parse-tree.h:2310
Definition parse-tree.h:2645
Definition parse-tree.h:2644
Definition parse-tree.h:875
Definition parse-tree.h:321
Definition parse-tree.h:1292
Definition parse-tree.h:2332
Definition parse-tree.h:2330
Definition parse-tree.h:2969
Definition parse-tree.h:3507
Definition parse-tree.h:2102
Definition parse-tree.h:2994
Definition parse-tree.h:2983
Definition parse-tree.h:3005
Definition parse-tree.h:591
Definition parse-tree.h:1331
Definition parse-tree.h:643
Definition parse-tree.h:642
Definition parse-tree.h:2348
Definition parse-tree.h:2572
Definition parse-tree.h:1455
Definition parse-tree.h:4373
Definition parse-tree.h:4379
Definition parse-tree.h:4377
Definition parse-tree.h:4392
Definition parse-tree.h:4399
Definition parse-tree.h:4407
Definition parse-tree.h:4422
Definition parse-tree.h:5369
Definition parse-tree.h:4430
Definition parse-tree.h:4429
Definition parse-tree.h:5227
Definition parse-tree.h:5216
Definition parse-tree.h:4438
Definition parse-tree.h:4450
Definition parse-tree.h:5158
Definition parse-tree.h:5233
Definition parse-tree.h:4461
Definition parse-tree.h:5168
Definition parse-tree.h:4467
Definition parse-tree.h:5127
Definition parse-tree.h:5111
Definition parse-tree.h:4476
Definition parse-tree.h:3686
Definition parse-tree.h:4484
Definition parse-tree.h:5296
Definition parse-tree.h:5305
Definition parse-tree.h:5313
Definition parse-tree.h:5288
Definition parse-tree.h:5276
Definition parse-tree.h:4501
Definition parse-tree.h:4519
Definition parse-tree.h:4578
Definition parse-tree.h:4576
Definition parse-tree.h:4600
Definition parse-tree.h:4608
Definition parse-tree.h:4618
Definition parse-tree.h:4628
Definition parse-tree.h:4636
Definition parse-tree.h:3577
Definition parse-tree.h:5134
Definition parse-tree.h:4591
Definition parse-tree.h:4558
Definition parse-tree.h:4651
Definition parse-tree.h:4646
Definition parse-tree.h:5163
Definition parse-tree.h:5238
Definition parse-tree.h:4662
Definition parse-tree.h:5201
Definition parse-tree.h:4670
Definition parse-tree.h:4683
Definition parse-tree.h:4694
Definition parse-tree.h:4704
Definition parse-tree.h:4712
Definition parse-tree.h:5322
Definition parse-tree.h:4717
Definition parse-tree.h:4725
Definition parse-tree.h:4741
Definition parse-tree.h:4764
Definition parse-tree.h:4730
Definition parse-tree.h:4754
Definition parse-tree.h:4771
Definition parse-tree.h:3698
Definition parse-tree.h:4531
Definition parse-tree.h:4549
Definition parse-tree.h:4540
Definition parse-tree.h:4780
Definition parse-tree.h:4795
Definition parse-tree.h:3611
Definition parse-tree.h:4806
Definition parse-tree.h:4831
Definition parse-tree.h:4843
Definition parse-tree.h:4852
Definition parse-tree.h:5195
Definition parse-tree.h:4876
Definition parse-tree.h:4888
Definition parse-tree.h:4900
Definition parse-tree.h:3632
Definition parse-tree.h:3623
Definition parse-tree.h:3620
Definition parse-tree.h:4911
Definition parse-tree.h:4924
Definition parse-tree.h:4936
Definition parse-tree.h:4947
Definition parse-tree.h:3676
Definition parse-tree.h:4957
Definition parse-tree.h:5329
Definition parse-tree.h:3606
Definition parse-tree.h:4966
Definition parse-tree.h:4978
Definition parse-tree.h:5247
Definition parse-tree.h:4989
Definition parse-tree.h:4996
Definition parse-tree.h:3636
Definition parse-tree.h:3658
Definition parse-tree.h:3646
Definition parse-tree.h:3645
Definition parse-tree.h:5005
Definition parse-tree.h:5016
Definition parse-tree.h:5335
Definition parse-tree.h:5025
Definition parse-tree.h:5040
Definition parse-tree.h:5050
Definition parse-tree.h:3602
Definition parse-tree.h:3595
Definition parse-tree.h:5059
Definition parse-tree.h:5068
Definition parse-tree.h:5084
Definition parse-tree.h:5106
Definition parse-tree.h:5205
Definition parse-tree.h:5095
Definition parse-tree.h:3105
Definition parse-tree.h:5757
Definition parse-tree.h:5764
Definition parse-tree.h:5693
Definition parse-tree.h:5786
Definition parse-tree.h:5825
Definition parse-tree.h:5796
Definition parse-tree.h:5814
Definition parse-tree.h:5805
Definition parse-tree.h:5687
Definition parse-tree.h:5819
Definition parse-tree.h:5769
Definition parse-tree.h:5699
Definition parse-tree.h:5395
Definition parse-tree.h:5418
Definition parse-tree.h:5408
Definition parse-tree.h:5400
Definition parse-tree.h:5437
Definition parse-tree.h:5430
Definition parse-tree.h:5521
Definition parse-tree.h:5385
Definition parse-tree.h:5373
Definition parse-tree.h:5448
Definition parse-tree.h:5462
Definition parse-tree.h:5516
Definition parse-tree.h:5478
Definition parse-tree.h:5486
Definition parse-tree.h:5539
Definition parse-tree.h:5507
Definition parse-tree.h:5533
Definition parse-tree.h:5253
Definition parse-tree.h:5491
Definition parse-tree.h:5497
Definition parse-tree.h:378
Definition parse-tree.h:2838
Definition parse-tree.h:2801
Definition parse-tree.h:3030
Definition parse-tree.h:1842
Definition parse-tree.h:2068
Definition parse-tree.h:2067
Definition parse-tree.h:1594
Definition parse-tree.h:2028
Definition parse-tree.h:2864
Definition parse-tree.h:3150
Definition parse-tree.h:2822
Definition parse-tree.h:932
Definition parse-tree.h:3128
Definition parse-tree.h:1073
Definition parse-tree.h:1101
Definition parse-tree.h:1927
Definition parse-tree.h:1093
Definition parse-tree.h:1087
Definition parse-tree.h:1080
Definition parse-tree.h:3138
Definition parse-tree.h:3270
Definition parse-tree.h:3231
Definition parse-tree.h:575
Definition parse-tree.h:2785
Definition parse-tree.h:816
Definition parse-tree.h:2299
Definition parse-tree.h:3018
Definition parse-tree.h:3022
Definition parse-tree.h:3016
Definition parse-tree.h:1607
Definition parse-tree.h:297
Definition parse-tree.h:1693
Definition parse-tree.h:2422
Definition parse-tree.h:2487
Definition parse-tree.h:2486
Definition parse-tree.h:2500
Definition parse-tree.h:2498
Definition parse-tree.h:2477
Definition parse-tree.h:2534
Definition parse-tree.h:2532
Definition parse-tree.h:2512
Definition parse-tree.h:2178
Definition parse-tree.h:3389
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:1997
Definition parse-tree.h:361
Definition parse-tree.h:3407
Definition parse-tree.h:2564
Definition parse-tree.h:1917
Definition parse-tree.h:1210
Definition parse-tree.h:3528
Definition parse-tree.h:3500
Definition parse-tree.h:3523
Definition parse-tree.h:3036
Definition parse-tree.h:3047
Definition parse-tree.h:3200
Definition parse-tree.h:3373
Definition parse-tree.h:1684
Definition parse-tree.h:1879
Definition parse-tree.h:1675
Definition parse-tree.h:1865
Definition parse-tree.h:2583
Definition parse-tree.h:2582
Definition parse-tree.h:2595
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:1436
Definition parse-tree.h:2522
Definition parse-tree.h:2521
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:3516
Definition parse-tree.h:356
Definition parse-tree.h:2654
Definition parse-tree.h:803
Definition parse-tree.h:3114
Definition parse-tree.h:1895
Definition parse-tree.h:730
Definition parse-tree.h:735
Definition parse-tree.h:284
Definition parse-tree.h:2848
Definition parse-tree.h:2093
Definition parse-tree.h:2086
Definition parse-tree.h:2122
Definition parse-tree.h:2118
Definition parse-tree.h:2117
Definition parse-tree.h:2080
Definition parse-tree.h:2807
Definition parse-tree.h:3751
Definition parse-tree.h:3742
Definition parse-tree.h:3712
Definition parse-tree.h:3722
Definition parse-tree.h:3735
Definition parse-tree.h:3906
Definition parse-tree.h:3923
Definition parse-tree.h:3915
Definition parse-tree.h:3939
Definition parse-tree.h:3931
Definition parse-tree.h:3951
Definition parse-tree.h:3963
Definition parse-tree.h:3973
Definition parse-tree.h:3984
Definition parse-tree.h:3997
Definition parse-tree.h:4009
Definition parse-tree.h:4030
Definition parse-tree.h:4041
Definition parse-tree.h:4051
Definition parse-tree.h:4060
Definition parse-tree.h:4077
Definition parse-tree.h:4092
Definition parse-tree.h:4103
Definition parse-tree.h:4114
Definition parse-tree.h:4126
Definition parse-tree.h:4136
Definition parse-tree.h:4144
Definition parse-tree.h:4153
Definition parse-tree.h:4162
Definition parse-tree.h:4196
Definition parse-tree.h:4183
Definition parse-tree.h:4170
Definition parse-tree.h:4220
Definition parse-tree.h:4211
Definition parse-tree.h:4254
Definition parse-tree.h:4230
Definition parse-tree.h:4243
Definition parse-tree.h:4263
Definition parse-tree.h:4276
Definition parse-tree.h:4285
Definition parse-tree.h:4295
Definition parse-tree.h:4305
Definition parse-tree.h:4314
Definition parse-tree.h:4322
Definition parse-tree.h:4332
Definition parse-tree.h:4343
Definition parse-tree.h:4356
Definition parse-tree.h:3882
Definition parse-tree.h:3792
Definition parse-tree.h:3789
Definition parse-tree.h:3772
Definition parse-tree.h:3813
Definition parse-tree.h:3779
Definition parse-tree.h:3840
Definition parse-tree.h:3855
Definition parse-tree.h:3852
Definition parse-tree.h:3865
Definition parse-tree.h:3874