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"
34#include "llvm/Frontend/OpenMP/OMPDescriptors.h"
54CLASS_TRAIT(EmptyTrait)
55CLASS_TRAIT(WrapperTrait)
56CLASS_TRAIT(UnionTrait)
57CLASS_TRAIT(TupleTrait)
58CLASS_TRAIT(ConstraintTrait)
63namespace Fortran::semantics {
80#define COPY_AND_ASSIGN_BOILERPLATE(classname) \
81 classname(classname &&) = default; \
82 classname &operator=(classname &&) = default; \
83 classname(const classname &) = delete; \
84 classname &operator=(const classname &) = delete
87#define BOILERPLATE(classname) \
88 COPY_AND_ASSIGN_BOILERPLATE(classname); \
93#define EMPTY_CLASS(classname) \
96 classname(const classname &) {} \
97 classname(classname &&) {} \
98 classname &operator=(const classname &) { return *this; }; \
99 classname &operator=(classname &&) { return *this; }; \
100 using EmptyTrait = std::true_type; \
105#define UNION_CLASS_BOILERPLATE(classname) \
106 template <typename A, typename = common::NoLvalue<A>> \
107 classname(A &&x) : u(std::move(x)) {} \
108 using UnionTrait = std::true_type; \
109 BOILERPLATE(classname)
113#define TUPLE_CLASS_BOILERPLATE(classname) \
114 template <typename... Ts, typename = common::NoLvalue<Ts...>> \
115 classname(Ts &&...args) : t(std::move(args)...) {} \
116 using TupleTrait = std::true_type; \
117 BOILERPLATE(classname)
121#define WRAPPER_CLASS_BOILERPLATE(classname, type) \
122 BOILERPLATE(classname); \
123 classname(type &&x) : v(std::move(x)) {} \
124 using WrapperTrait = std::true_type; \
127#define WRAPPER_CLASS(classname, type) \
129 WRAPPER_CLASS_BOILERPLATE(classname, type); \
162struct AllocatableStmt;
163struct AsynchronousStmt;
165struct CodimensionStmt;
166struct ContiguousStmt;
173struct OldParameterStmt;
183struct EquivalenceStmt;
220struct SyncMemoryStmt;
264struct BasedPointerStmt;
282using Location =
const char *;
287 constexpr Verbatim() {}
288 COPY_AND_ASSIGN_BOILERPLATE(Verbatim);
289 using EmptyTrait = std::true_type;
298template <
typename A>
struct Scalar {
299 using ConstraintTrait = std::true_type;
300 Scalar(Scalar &&that) =
default;
301 Scalar(A &&that) : thing(std::move(that)) {}
302 Scalar &operator=(Scalar &&) =
default;
306template <
typename A>
struct Constant {
307 using ConstraintTrait = std::true_type;
308 Constant(Constant &&that) =
default;
309 Constant(A &&that) : thing(std::move(that)) {}
310 Constant &operator=(Constant &&) =
default;
314template <
typename A>
struct Integer {
315 using ConstraintTrait = std::true_type;
316 Integer(Integer &&that) =
default;
317 Integer(A &&that) : thing(std::move(that)) {}
318 Integer &operator=(Integer &&) =
default;
322template <
typename A>
struct Logical {
323 using ConstraintTrait = std::true_type;
324 Logical(Logical &&that) =
default;
325 Logical(A &&that) : thing(std::move(that)) {}
326 Logical &operator=(Logical &&) =
default;
330template <
typename A>
struct DefaultChar {
331 using ConstraintTrait = std::true_type;
332 DefaultChar(DefaultChar &&that) =
default;
333 DefaultChar(A &&that) : thing(std::move(that)) {}
334 DefaultChar &operator=(DefaultChar &&) =
default;
353using Label = common::Label;
357template <
typename A>
struct UnlabeledStatement {
358 explicit UnlabeledStatement(A &&s) : statement(std::move(s)) {}
362template <
typename A>
struct Statement :
public UnlabeledStatement<A> {
363 Statement(std::optional<long> &&lab, A &&s)
364 : UnlabeledStatement<A>{std::move(s)}, label(std::move(lab)) {}
365 std::optional<Label> label;
369EMPTY_CLASS(ErrorRecovery);
381 std::variant<common::Indirection<AccessStmt>,
404 std::variant<common::Indirection<DerivedTypeDef>,
426 std::variant<Statement<common::Indirection<ImplicitStmt>>,
437WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
444 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
458 std::tuple<std::list<OpenACCDeclarativeConstruct>,
459 std::list<OpenMPDeclarativeConstruct>,
460 std::list<common::Indirection<CompilerDirective>>,
461 std::list<Statement<common::Indirection<UseStmt>>>,
462 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
463 std::list<DeclarationConstruct>>
470 std::variant<common::Indirection<FunctionSubprogram>,
477EMPTY_CLASS(ContainsStmt);
482 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
486EMPTY_CLASS(ContinueStmt);
489EMPTY_CLASS(FailImageStmt);
503 std::variant<common::Indirection<AllocateStmt>,
561 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
570using Block = std::list<ExecutionPartConstruct>;
571WRAPPER_CLASS(ExecutionPart, Block);
578 std::variant<common::Indirection<MainProgram>,
589WRAPPER_CLASS(Program, std::list<ProgramUnit>);
593 std::string ToString()
const {
return source.ToString(); }
599WRAPPER_CLASS(Keyword,
Name);
602WRAPPER_CLASS(NamedConstant,
Name);
609WRAPPER_CLASS(DefinedOpName,
Name);
619 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
620 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
621 std::variant<DefinedOpName, IntrinsicOperator> u;
625using ObjectName =
Name;
631 TUPLE_CLASS_BOILERPLATE(ImportStmt);
632 ImportStmt(common::ImportKind &&k) : t(k, std::list<Name>{}) {}
633 ImportStmt(std::list<Name> &&n)
634 : t(common::ImportKind::Default, std::move(n)) {}
635 ImportStmt(common::ImportKind &&, std::list<Name> &&);
636 std::tuple<common::ImportKind, std::list<Name>> t;
645 TUPLE_CLASS_BOILERPLATE(
Group);
646 std::tuple<Name, std::list<Name>> t;
648 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
656 EMPTY_CLASS(Deferred);
657 std::variant<ScalarIntExpr, Star, Deferred> u;
665 WRAPPER_CLASS(StarSize, std::uint64_t);
666 std::variant<ScalarIntConstantExpr, StarSize> u;
670WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
672WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
677 std::variant<TypeParamValue, std::uint64_t> u;
683 std::variant<TypeParamValue, CharLength> u;
692 UNION_CLASS_BOILERPLATE(CharSelector);
695 std::tuple<std::optional<TypeParamValue>, ScalarIntConstantExpr> t;
698 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
699 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
700 : u{LengthAndKind{std::move(l), std::move(k)}} {}
701 std::variant<LengthSelector, LengthAndKind> u;
712 WRAPPER_CLASS_BOILERPLATE(
Real, std::optional<KindSelector>);
714 EMPTY_CLASS(DoublePrecision);
716 WRAPPER_CLASS_BOILERPLATE(
Complex, std::optional<KindSelector>);
719 WRAPPER_CLASS_BOILERPLATE(
Character, std::optional<CharSelector>);
722 WRAPPER_CLASS_BOILERPLATE(
Logical, std::optional<KindSelector>);
724 EMPTY_CLASS(DoubleComplex);
725 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
733 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
738 EMPTY_CLASS(PairVectorTypeSpec);
739 EMPTY_CLASS(QuadVectorTypeSpec);
740 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
754 std::tuple<Name, std::list<TypeParamSpec>> t;
761 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
774 EMPTY_CLASS(ClassStar);
775 EMPTY_CLASS(TypeStar);
776 WRAPPER_CLASS(Record,
Name);
787 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
794 std::tuple<CharBlock, std::optional<KindParam>> t;
800 std::tuple<CharBlock, std::optional<KindParam>> t;
806 std::tuple<CharBlock, std::optional<KindParam>> t;
810enum class Sign { Positive, Negative };
820 using EmptyTrait = std::true_type;
821 COPY_AND_ASSIGN_BOILERPLATE(Real);
825 std::tuple<Real, std::optional<KindParam>> t;
850 std::tuple<ComplexPart, ComplexPart> t;
856 std::tuple<Sign, ComplexLiteralConstant> t;
864 std::tuple<std::optional<KindParam>, std::string> t;
865 std::string GetString()
const {
return std::get<std::string>(t); }
871 std::string GetString()
const {
return v; }
878 std::tuple<bool, std::optional<KindParam>> t;
888WRAPPER_CLASS(BOZLiteralConstant, std::string);
904 ENUM_CLASS(Kind, Public, Private)
910EMPTY_CLASS(Abstract);
914 WRAPPER_CLASS(Extends,
Name);
915 std::variant<Abstract, AccessSpec, BindC, Extends> u;
922 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
926EMPTY_CLASS(SequenceStmt);
930EMPTY_CLASS(PrivateStmt);
935 std::variant<PrivateStmt, SequenceStmt> u;
941 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
949 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
954WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
961 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
966WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
974 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
980 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
985WRAPPER_CLASS(DeferredShapeSpecList,
int);
991 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
999EMPTY_CLASS(Allocatable);
1000EMPTY_CLASS(Pointer);
1001EMPTY_CLASS(Contiguous);
1022 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1023 std::list<common::Indirection<DataStmtValue>>>
1033struct ComponentDecl {
1034 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1036 std::optional<ComponentArraySpec> &&aSpec,
1037 std::optional<CoarraySpec> &&coaSpec,
1038 std::optional<Initialization> &&init)
1039 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1040 std::move(length), std::move(init)} {}
1041 std::tuple<Name, std::optional<ComponentArraySpec>,
1042 std::optional<CoarraySpec>, std::optional<CharLength>,
1043 std::optional<Initialization>>
1051 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1057 std::variant<ComponentDecl, FillDecl> u;
1065 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1066 std::list<ComponentOrFill>>
1073WRAPPER_CLASS(Pass, std::optional<Name>);
1076 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1083 std::variant<NullInit, Name> u;
1090 std::variant<Name, DeclarationTypeSpec> u;
1096 std::tuple<Name, std::optional<ProcPointerInit>> t;
1104 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1105 std::list<ProcDecl>>
1123 EMPTY_CLASS(Deferred);
1124 EMPTY_CLASS(Non_Overridable);
1125 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1131 std::tuple<Name, std::optional<Name>> t;
1143 std::tuple<std::list<BindAttr>, std::list<TypeBoundProcDecl>> t;
1147 std::tuple<Name, std::list<BindAttr>, std::list<Name>> t;
1149 std::variant<WithoutInterface, WithInterface> u;
1162WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1178 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1179 std::list<Statement<TypeBoundProcBinding>>>
1184WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1192 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1193 std::list<Statement<PrivateOrSequence>>,
1194 std::list<Statement<ComponentDefStmt>>,
1207 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1213 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1217EMPTY_CLASS(EnumDefStmt);
1222 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1226WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1229EMPTY_CLASS(EndEnumStmt);
1235 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1236 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1245 std::tuple<std::optional<AccessSpec>,
Name> t;
1250WRAPPER_CLASS(EnumerationEnumeratorStmt, std::list<Name>);
1254WRAPPER_CLASS(EndEnumerationTypeStmt, std::optional<Name>);
1262 std::tuple<Statement<EnumerationTypeStmt>,
1263 std::list<Statement<EnumerationEnumeratorStmt>>,
1271 TUPLE_CLASS_BOILERPLATE(
Triplet);
1272 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1274 UNION_CLASS_BOILERPLATE(
AcValue);
1275 std::variant<Triplet, common::Indirection<Expr>,
1282 TUPLE_CLASS_BOILERPLATE(AcSpec);
1283 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1284 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1288WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1295 std::tuple<VAR, BOUND, BOUND, std::optional<BOUND>> t;
1297 const VAR &Name()
const {
return std::get<0>(t); }
1298 const BOUND &Lower()
const {
return std::get<1>(t); }
1299 const BOUND &Upper()
const {
return std::get<2>(t); }
1300 const std::optional<BOUND> &Step()
const {
return std::get<3>(t); }
1313 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1328 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1334 std::tuple<NamedConstant, ConstantExpr> t;
1338WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1341WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1344WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1349 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1356WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1359EMPTY_CLASS(AssumedRankSpec);
1367WRAPPER_CLASS(AssumedShapeBoundsSpec, IntExpr);
1371 std::tuple<std::optional<IntExpr>, IntExpr> t;
1377 std::list<AssumedShapeSpec>, AssumedShapeBoundsSpec,
1378 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1384 ENUM_CLASS(Intent, In, Out, InOut)
1385 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1390WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1400EMPTY_CLASS(Asynchronous);
1401EMPTY_CLASS(External);
1402EMPTY_CLASS(Intrinsic);
1403EMPTY_CLASS(Optional);
1404EMPTY_CLASS(Parameter);
1405EMPTY_CLASS(Protected);
1409EMPTY_CLASS(Volatile);
1414 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1415 common::CUDADataAttr>
1426 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1427 EntityDecl(ObjectName &&name,
CharLength &&length,
1428 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1429 std::optional<Initialization> &&init)
1430 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1431 std::move(length), std::move(init)} {}
1432 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1433 std::optional<CharLength>, std::optional<Initialization>>
1441 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1451 std::tuple<AccessSpec, std::list<AccessId>> t;
1460 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1465WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1468WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1473 ENUM_CLASS(Kind, Object, Common)
1474 std::tuple<Kind, Name> t;
1480 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1486 std::tuple<Name, CoarraySpec> t;
1490WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1493WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1502using TypedAssignment =
1515 mutable TypedExpr typedExpr;
1516 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1529 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1535 mutable std::int64_t repetitions{1};
1543 std::variant<Scalar<common::Indirection<Designator>>,
1556 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1563 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1569 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1573WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1581 std::tuple<Name, ArraySpec> t;
1583 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1589 std::tuple<IntentSpec, std::list<Name>> t;
1593WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1599 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1603WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1606WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1612 ENUM_CLASS(Kind, Entity, Common)
1613 std::tuple<Kind, Name> t;
1617WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1620WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1623WRAPPER_CLASS(ValueStmt, std::list<Name>);
1626WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1631 std::tuple<Location, std::optional<Location>> t;
1637 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1646 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1647 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1653 std::tuple<Name, std::optional<ArraySpec>> t;
1661 TUPLE_CLASS_BOILERPLATE(
Block);
1662 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1664 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1665 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1666 std::list<Block> &&);
1675WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1680 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1684using Subscript = ScalarIntExpr;
1689 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1690 std::optional<Subscript>>
1698 std::variant<IntExpr, SubscriptTriplet> u;
1702using Cosubscript = ScalarIntExpr;
1713 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1716 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1723 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1732 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1739 UNION_CLASS_BOILERPLATE(Expr);
1743 using IntrinsicUnary::IntrinsicUnary;
1746 using IntrinsicUnary::IntrinsicUnary;
1749 using IntrinsicUnary::IntrinsicUnary;
1751 struct NOT :
public IntrinsicUnary {
1752 using IntrinsicUnary::IntrinsicUnary;
1759 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
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;
1812 using IntrinsicBinary::IntrinsicBinary;
1817 using IntrinsicBinary::IntrinsicBinary;
1822 std::tuple<DefinedOpName, common::Indirection<Expr>,
1830 mutable TypedExpr typedExpr;
1834 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1839 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1846 TUPLE_CLASS_BOILERPLATE(
PartRef);
1847 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1852 UNION_CLASS_BOILERPLATE(DataRef);
1853 explicit DataRef(std::list<PartRef> &&);
1854 std::variant<Name, common::Indirection<StructureComponent>,
1870 std::tuple<DataRef, SubstringRange> t;
1875 std::tuple<CharLiteralConstant, SubstringRange> t;
1892 bool EndsInBareName()
const;
1894 std::variant<DataRef, Substring> u;
1900 mutable TypedExpr typedExpr;
1902 std::variant<common::Indirection<Designator>,
1922 std::tuple<DataRef, Name> t;
1924 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1925 const Name &Component()
const {
return std::get<Name>(t); }
1937 std::tuple<DataRef, ImageSelector> t;
1946 std::tuple<DataRef, std::list<SectionSubscript>> t;
1948 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1949 const std::list<SectionSubscript> &Subscripts()
const {
1950 return std::get<std::list<SectionSubscript>>(t);
1957 mutable TypedExpr typedExpr;
1958 std::variant<Name, StructureComponent> u;
1963using BoundExpr = ScalarIntExpr;
1969 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1978 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1986 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1987 std::optional<AllocateCoarraySpec>>
1992WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1996WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
2002 std::variant<StatVariable, MsgVariable> u;
2017 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
2024 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
2025 std::list<AllocOpt>>
2033 mutable TypedExpr typedExpr;
2034 std::variant<Name, StructureComponent> u;
2038WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2044 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2050 mutable TypedAssignment typedAssignment;
2051 std::tuple<Variable, Expr> t;
2055WRAPPER_CLASS(BoundsSpec, BoundExpr);
2060 std::tuple<BoundExpr, BoundExpr> t;
2072 UNION_CLASS_BOILERPLATE(
Bounds);
2073 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2076 mutable TypedAssignment typedAssignment;
2077 std::tuple<DataRef, Bounds, Expr> t;
2085 std::tuple<LogicalExpr, AssignmentStmt> t;
2091 std::tuple<std::optional<Name>, LogicalExpr> t;
2107 std::tuple<LogicalExpr, std::optional<Name>> t;
2111WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2114WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2123 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2127 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2130 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2131 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2146 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2152 std::tuple<common::Indirection<ConcurrentHeader>,
2169WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2175 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2183 std::variant<Expr, Variable> u;
2189 std::tuple<Name, Selector> t;
2196 std::tuple<std::optional<Name>, std::list<Association>> t;
2200WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2209WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2212WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2227 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2235 std::tuple<CodimensionDecl, Selector> t;
2243 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2244 std::list<StatOrErrmsg>>
2252 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2265 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2269WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2283 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2292 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2293 std::optional<ScalarLogicalExpr>>
2303 ENUM_CLASS(Operator, Plus, Minus, Multiply, Max, Min, Iand, Ior, Ieor, And,
2315 WRAPPER_CLASS(Local, std::list<Name>);
2316 WRAPPER_CLASS(LocalInit, std::list<Name>);
2318 TUPLE_CLASS_BOILERPLATE(
Reduce);
2320 std::tuple<Operator, std::list<Name>> t;
2322 WRAPPER_CLASS(Shared, std::list<Name>);
2323 EMPTY_CLASS(DefaultNone);
2324 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2337 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2340 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2347 std::tuple<Label, std::optional<LoopControl>> t;
2353 std::tuple<std::optional<Name>, std::optional<Label>,
2354 std::optional<LoopControl>>
2359WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2370 const std::optional<LoopControl> &GetLoopControl()
const;
2371 bool IsDoNormal()
const;
2372 bool IsDoWhile()
const;
2373 bool IsDoConcurrent()
const;
2378WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2383 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2390 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2394WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2397WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2405 std::tuple<Statement<ElseIfStmt>, Block> t;
2409 std::tuple<Statement<ElseStmt>, Block> t;
2412 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2419 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2420 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2438 TUPLE_CLASS_BOILERPLATE(
Range);
2439 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2442 std::variant<CaseValue, Range> u;
2446EMPTY_CLASS(Default);
2450 std::variant<std::list<CaseValueRange>, Default> u;
2456 std::tuple<CaseSelector, std::optional<Name>> t;
2462WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2468 TUPLE_CLASS_BOILERPLATE(
Case);
2469 std::tuple<Statement<CaseStmt>, Block> t;
2472 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2482 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2491 UNION_CLASS_BOILERPLATE(
Rank);
2492 std::variant<ScalarIntConstantExpr, Star, Default> u;
2495 std::tuple<Rank, std::optional<Name>> t;
2505 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2507 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2517 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2526 UNION_CLASS_BOILERPLATE(
Guard);
2527 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2530 std::tuple<Guard, std::optional<Name>> t;
2539 std::tuple<Statement<TypeGuardStmt>, Block> t;
2541 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2547WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2550WRAPPER_CLASS(GotoStmt, Label);
2555 std::tuple<std::list<Label>, ScalarIntExpr> t;
2568 ENUM_CLASS(Kind, Stop, ErrorStop)
2570 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2577 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2581WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2588 std::variant<IntExpr, Star> u;
2591 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2595WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2600 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2609 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2615 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2623 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2636 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2639 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2650 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2653 std::tuple<LockVariable, std::list<LockStat>> t;
2659 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2663WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2673 UNION_CLASS_BOILERPLATE(
IoUnit);
2674 std::variant<Variable, common::Indirection<Expr>, Star> u;
2678using FileNameExpr = ScalarDefaultCharExpr;
2698WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2699WRAPPER_CLASS(ErrLabel, Label);
2704 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2705 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2706 Carriagecontrol, Convert, Dispose)
2708 std::tuple<Kind, ScalarDefaultCharExpr> t;
2710 WRAPPER_CLASS(Recl, ScalarIntExpr);
2711 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2712 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2713 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2718WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2728 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2732 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2738 UNION_CLASS_BOILERPLATE(
Format);
2739 std::variant<Expr, Label, Star> u;
2743WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2759WRAPPER_CLASS(EndLabel, Label);
2760WRAPPER_CLASS(EorLabel, Label);
2765 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2767 std::tuple<Kind, ScalarDefaultCharExpr> t;
2769 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2770 WRAPPER_CLASS(Pos, ScalarIntExpr);
2771 WRAPPER_CLASS(Rec, ScalarIntExpr);
2772 WRAPPER_CLASS(Size, ScalarIntVariable);
2774 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2782 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2789 BOILERPLATE(ReadStmt);
2790 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2791 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2792 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2793 items(std::move(its)) {}
2794 std::optional<IoUnit> iounit;
2796 std::optional<Format> format;
2799 std::list<IoControlSpec> controls;
2800 std::list<InputItem> items;
2806 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2811 BOILERPLATE(WriteStmt);
2812 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2813 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2814 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2815 items(std::move(its)) {}
2816 std::optional<IoUnit> iounit;
2818 std::optional<Format> format;
2820 std::list<IoControlSpec> controls;
2821 std::list<OutputItem> items;
2827 std::tuple<Format, std::list<OutputItem>> t;
2838 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2843 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2850WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2853 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2854 MsgVariable, StatVariable>
2859WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2869 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2874WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2878WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2881WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2884WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2925 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2926 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2927 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2929 Carriagecontrol, Convert, Dispose)
2930 TUPLE_CLASS_BOILERPLATE(
CharVar);
2931 std::tuple<Kind, ScalarDefaultCharVariable> t;
2934 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2935 TUPLE_CLASS_BOILERPLATE(
IntVar);
2936 std::tuple<Kind, ScalarIntVariable> t;
2939 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2940 TUPLE_CLASS_BOILERPLATE(
LogVar);
2941 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2955 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2957 std::variant<std::list<InquireSpec>,
Iolength> u;
2964WRAPPER_CLASS(ProgramStmt,
Name);
2967WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2975 ExecutionPart, std::optional<InternalSubprogramPart>,
2981WRAPPER_CLASS(ModuleStmt,
Name);
2988 std::variant<common::Indirection<FunctionSubprogram>,
2999 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
3003WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
3009 TUPLE_CLASS_BOILERPLATE(
Module);
3020 UNION_CLASS_BOILERPLATE(
Rename);
3022 TUPLE_CLASS_BOILERPLATE(
Names);
3023 std::tuple<Name, Name> t;
3027 std::tuple<DefinedOpName, DefinedOpName> t;
3029 std::variant<Names, Operators> u;
3035 std::tuple<Name, std::optional<Name>> t;
3041 std::tuple<ParentIdentifier, Name> t;
3045WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3058WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3061WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3079 EMPTY_CLASS(Assignment);
3080 EMPTY_CLASS(ReadFormatted);
3081 EMPTY_CLASS(ReadUnformatted);
3082 EMPTY_CLASS(WriteFormatted);
3083 EMPTY_CLASS(WriteUnformatted);
3086 ReadUnformatted, WriteFormatted, WriteUnformatted>
3094 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3098struct InterfaceStmt {
3099 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3101 InterfaceStmt(Abstract x) : u{x} {}
3103 std::variant<std::optional<GenericSpec>, Abstract> u;
3109 UNION_CLASS_BOILERPLATE(
Only);
3110 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3118 BOILERPLATE(UseStmt);
3119 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3120 template <
typename A>
3121 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3122 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3123 std::optional<ModuleNature> nature;
3125 std::variant<std::list<Rename>, std::list<Only>> u;
3143 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3144 std::list<ProcDecl>>
3155 EMPTY_CLASS(Elemental);
3156 EMPTY_CLASS(Impure);
3158 EMPTY_CLASS(Non_Recursive);
3160 EMPTY_CLASS(Recursive);
3161 EMPTY_CLASS(Simple);
3162 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3163 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3164 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3166 Pure, Recursive, Simple, Attributes, Launch_Bounds, Cluster_Dims>
3174 TUPLE_CLASS_BOILERPLATE(Suffix);
3176 : t(std::move(rn), std::move(lbs)) {}
3177 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3186 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3187 std::optional<Suffix>>
3192WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3197 std::variant<Name, Star> u;
3205 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3206 std::optional<LanguageBindingSpec>>
3211WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3226 std::tuple<Statement<SubroutineStmt>,
3230 std::variant<Function, Subroutine> u;
3235 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3237 std::tuple<Kind, std::list<Name>> t;
3247 std::variant<InterfaceBody, Statement<ProcedureStmt>,
3254WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3260 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3266WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3269WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3275 std::variant<Name, ProcComponentRef> u;
3279WRAPPER_CLASS(AltReturnSpec, Label);
3282EMPTY_CLASS(ConditionalArgNil);
3296 std::variant<common::Indirection<Expr>, ConditionalArgNil> u;
3305 std::variant<ConditionalArg, ConditionalArg::Consequent> u;
3312 WRAPPER_CLASS(PercentRef,
Expr);
3313 WRAPPER_CLASS(PercentVal,
Expr);
3314 UNION_CLASS_BOILERPLATE(ActualArg);
3316 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal,
3324 std::tuple<std::optional<Keyword>,
ActualArg> t;
3330 TUPLE_CLASS_BOILERPLATE(
Call);
3331 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3347 TUPLE_CLASS_BOILERPLATE(CallStmt);
3348 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3351 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3352 std::optional<ScalarIntExpr>>
3356 std::list<ActualArgSpec> &&args)
3357 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3358 std::tuple<Call, std::optional<Chevrons>> t;
3360 mutable TypedCall typedCall;
3384WRAPPER_CLASS(MpSubprogramStmt,
Name);
3387WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3402 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3406WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3437 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3440 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3444 std::tuple<common::Indirection<Designator>, uint64_t> t;
3446 EMPTY_CLASS(VectorAlways);
3449 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3451 std::tuple<std::uint64_t, Kind> t;
3455 std::tuple<Name, std::optional<std::uint64_t>> t;
3458 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3461 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3464 WRAPPER_CLASS_BOILERPLATE(
3468 WRAPPER_CLASS_BOILERPLATE(
InlineAlways, std::optional<Name>);
3470 EMPTY_CLASS(NoVector);
3471 EMPTY_CLASS(NoUnroll);
3472 EMPTY_CLASS(NoUnrollAndJam);
3473 EMPTY_CLASS(ForceInline);
3474 EMPTY_CLASS(Inline);
3475 EMPTY_CLASS(NoInline);
3478 EMPTY_CLASS(Unrecognized);
3480 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3482 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3490 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3496 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3498WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3505 std::variant<Statement<DataComponentDefStmt>,
3511 EMPTY_CLASS(MapStmt);
3512 EMPTY_CLASS(EndMapStmt);
3513 TUPLE_CLASS_BOILERPLATE(
Map);
3514 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3520 EMPTY_CLASS(UnionStmt);
3521 EMPTY_CLASS(EndUnionStmt);
3522 TUPLE_CLASS_BOILERPLATE(
Union);
3528 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3532 EMPTY_CLASS(EndStructureStmt);
3534 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3541WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3546 std::tuple<Expr, Label, Label, Label> t;
3551 std::tuple<Label, Name> t;
3556 std::tuple<Name, std::list<Label>> t;
3559WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3565#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3566 using basename::basename; \
3567 classname(basename &&b) : basename(std::move(b)) {} \
3568 using TupleTrait = std::true_type; \
3569 BOILERPLATE(classname)
3571#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3572 BOILERPLATE(classname); \
3573 using basename::basename; \
3574 classname(basename &&base) : basename(std::move(base)) {} \
3575 using WrapperTrait = std::true_type
3580struct OmpDirectiveName {
3582 constexpr OmpDirectiveName() =
default;
3583 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3584 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3588 OmpDirectiveName(
const Verbatim &name);
3589 using WrapperTrait = std::true_type;
3591 bool IsExecutionPart()
const;
3594 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3602 std::variant<TypeSpec, DeclarationTypeSpec> u;
3616 std::variant<FunctionReference, OmpReservedIdentifier> u;
3627 ENUM_CLASS(Kind, BlankCommonBlock);
3628 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3632 std::variant<Designator, OmpLocator, Name, Invalid> u;
3636 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3643 using EmptyTrait = std::true_type;
3651 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3654 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3668 WRAPPER_CLASS_BOILERPLATE(
3680 static constexpr auto Id = llvm::omp::Modifier::ReductionIdentifier;
3682 std::variant<DefinedOperator, ProcedureDesignator> u;
3691 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3703 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3708inline namespace arguments {
3718 std::tuple<OmpObject, OmpObject> t;
3729 std::tuple<std::string, TypeSpec, Name> t;
3742 std::optional<OmpCombinerExpression>>
3761inline namespace traits {
3798 TUPLE_CLASS_BOILERPLATE(
Complex);
3800 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3804 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3820 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3845 std::string ToString()
const;
3848 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3849 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3850 std::variant<Value, llvm::omp::Directive, std::string> u;
3861 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3863 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3870 std::string ToString()
const;
3872 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3881 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3887 static constexpr auto Id = llvm::omp::Modifier::ContextSelector;
3889 WRAPPER_CLASS_BOILERPLATE(
3894#define MODIFIER_BOILERPLATE(...) \
3896 using Variant = std::variant<__VA_ARGS__>; \
3897 UNION_CLASS_BOILERPLATE(Modifier); \
3902#define MODIFIERS() std::optional<std::list<Modifier>>
3904inline namespace modifier {
3912 static constexpr auto Id = llvm::omp::Modifier::AccessGroup;
3913 ENUM_CLASS(Value, Cgroup);
3923 static constexpr auto Id = llvm::omp::Modifier::AdjustOp;
3924 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
3933 static constexpr auto Id = llvm::omp::Modifier::Alignment;
3934 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3942 static constexpr auto Id = llvm::omp::Modifier::AlignModifier;
3951 static constexpr auto Id = llvm::omp::Modifier::AllocatorSimpleModifier;
3960 static constexpr auto Id = llvm::omp::Modifier::AllocatorComplexModifier;
3973 static constexpr auto Id = llvm::omp::Modifier::AlwaysModifier;
3974 ENUM_CLASS(Value, Always)
3986 static constexpr auto Id = llvm::omp::Modifier::AttachModifier;
3987 ENUM_CLASS(Value, Always, Never, Auto)
3997 static constexpr auto Id = llvm::omp::Modifier::AutomapModifier;
3998 ENUM_CLASS(Value, Automap);
4009 static constexpr auto Id = llvm::omp::Modifier::ChunkModifier;
4010 ENUM_CLASS(Value, Simd)
4023 static constexpr auto Id = llvm::omp::Modifier::CloseModifier;
4024 ENUM_CLASS(Value, Close)
4036 static constexpr auto Id = llvm::omp::Modifier::DeleteModifier;
4037 ENUM_CLASS(Value, Delete)
4058 static constexpr auto Id = llvm::omp::Modifier::DependenceType;
4059 ENUM_CLASS(Value, Sink, Source);
4070 static constexpr auto Id = llvm::omp::Modifier::DepinfoModifier;
4071 using Value = common::OmpDependenceKind;
4073 std::tuple<Value, OmpObject> t;
4081 static constexpr auto Id = llvm::omp::Modifier::DeviceModifier;
4082 ENUM_CLASS(Value, Ancestor, Device_Num)
4091 static constexpr auto Id = llvm::omp::Modifier::DimsModifier;
4109 static constexpr auto Id = llvm::omp::Modifier::DirectiveNameModifier;
4110 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4121 static constexpr auto Id = llvm::omp::Modifier::Expectation;
4122 ENUM_CLASS(Value, Present);
4133 static constexpr auto Id = llvm::omp::Modifier::FallbackModifier;
4134 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4145 static constexpr auto Id = llvm::omp::Modifier::InteropType;
4146 ENUM_CLASS(Value, Target, Targetsync)
4160 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4168 static constexpr auto Id = llvm::omp::Modifier::Iterator;
4169 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4177 static constexpr auto Id = llvm::omp::Modifier::LastprivateModifier;
4178 ENUM_CLASS(Value, Conditional)
4187 static constexpr auto Id = llvm::omp::Modifier::LinearModifier;
4188 ENUM_CLASS(Value, Ref, Uval, Val);
4197 static constexpr auto Id = llvm::omp::Modifier::LinearStep;
4212 static constexpr auto Id = llvm::omp::Modifier::LoopModifier;
4214 std::tuple<llvm::omp::LoopModifier,
4215 std::optional<std::list<ScalarIntConstantExpr>>>
4225 static constexpr auto Id = llvm::omp::Modifier::LowerBound;
4234 static constexpr auto Id = llvm::omp::Modifier::Mapper;
4248 static constexpr auto Id = llvm::omp::Modifier::MapType;
4249 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4250 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4261 static constexpr auto Id = llvm::omp::Modifier::MapTypeModifier;
4262 ENUM_CLASS(Value, Always, Close, Present)
4271 static constexpr auto Id = llvm::omp::Modifier::MemSpace;
4272 WRAPPER_CLASS_BOILERPLATE(
OmpMemSpace, ScalarIntExpr);
4284 static constexpr auto Id = llvm::omp::Modifier::MotionModifier;
4285 ENUM_CLASS(Value, Present)
4300 static constexpr auto Id = llvm::omp::Modifier::OrderingModifier;
4301 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4310 static constexpr auto Id = llvm::omp::Modifier::OrderModifier;
4311 ENUM_CLASS(Value, Reproducible, Unconstrained)
4324 using Extensions = std::list<PreferencePropertyExtension>;
4325 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4335 using ForeignRuntimeIdentifier =
4336 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4337 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4345 static constexpr auto Id = llvm::omp::Modifier::PreferType;
4346 WRAPPER_CLASS_BOILERPLATE(
4355 static constexpr auto Id = llvm::omp::Modifier::Prescriptiveness;
4356 ENUM_CLASS(Value, Strict)
4365 static constexpr auto Id = llvm::omp::Modifier::PresentModifier;
4366 ENUM_CLASS(Value, Present)
4375 static constexpr auto Id = llvm::omp::Modifier::ReductionModifier;
4376 ENUM_CLASS(Value, Default, Inscan, Task);
4386 static constexpr auto Id = llvm::omp::Modifier::RefModifier;
4387 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4397 static constexpr auto Id = llvm::omp::Modifier::SelfModifier;
4398 ENUM_CLASS(Value, Self)
4407 static constexpr auto Id = llvm::omp::Modifier::StepComplexModifier;
4416 static constexpr auto Id = llvm::omp::Modifier::StepSimpleModifier;
4427 static constexpr auto Id = llvm::omp::Modifier::TaskDependenceType;
4428 using Value = common::OmpDependenceKind;
4437 static constexpr auto Id = llvm::omp::Modifier::TraitsArray;
4448 static constexpr auto Id = llvm::omp::Modifier::VariableCategory;
4449 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4459 static constexpr auto Id = llvm::omp::Modifier::OmpxHoldModifier;
4460 ENUM_CLASS(Value, Ompx_Hold)
4470using OmpDirectiveList = std::list<llvm::omp::Directive>;
4500 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4531 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4539 ENUM_CLASS(ActionTime, Compilation, Execution);
4540 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4551 using MemoryOrder = common::OmpMemoryOrderType;
4562 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4569 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4595 std::tuple<MODIFIERS(), std::list<OmpDirectiveSpecification>> t;
4607 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4623 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4626 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4635 WRAPPER_CLASS_BOILERPLATE(
4645 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4654 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4671 OmpDependenceType::Value GetDepType()
const;
4674 std::tuple<MODIFIERS(), std::optional<OmpIterationVector>> t;
4689 OmpTaskDependenceType::Value GetTaskDepType()
const;
4690 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4694 std::variant<TaskDep, OmpDoacross> u;
4731 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4747 using DeviceTypeDescription = common::OmpDeviceType;
4757 WRAPPER_CLASS_BOILERPLATE(
4764 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4781 using MemoryOrder = common::OmpMemoryOrderType;
4814 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4835 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4848 WRAPPER_CLASS_BOILERPLATE(
4861 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4928 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4965 WRAPPER_CLASS_BOILERPLATE(
4979EMPTY_CLASS(OmpNoOpenMPClause);
4984EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4989EMPTY_CLASS(OmpNoParallelismClause);
4999 std::tuple<MODIFIERS(), ScalarIntExpr> t;
5011 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5023 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5033 ENUM_CLASS(Ordering, Concurrent)
5035 std::tuple<MODIFIERS(), Ordering> t;
5057 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
5100 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
5102 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
5117 ENUM_CLASS(SevLevel, Fatal, Warning);
5139 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5146 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5196 WRAPPER_CLASS_BOILERPLATE(
5214 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5224 MODIFIER_BOILERPLATE(OmpContextSelector);
5225 std::tuple<MODIFIERS(),
5226 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5254 std::tuple<MODIFIERS(), ScalarIntExpr,
bool> t;
5262 llvm::omp::Clause Id()
const;
5264#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5265#include "llvm/Frontend/OpenMP/OMP.inc"
5270#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5271#include "llvm/Frontend/OpenMP/OMP.inc"
5277 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5284 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo, ExplicitBegin)
5289 return std::get<OmpDirectiveName>(t);
5291 llvm::omp::Directive DirId()
const {
5298 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5299 std::optional<OmpClauseList>, Flags>
5308 INHERITED_TUPLE_CLASS_BOILERPLATE(
5320 return std::get<OmpBeginDirective>(t);
5322 const std::optional<OmpEndDirective> &EndDir()
const {
5323 return std::get<std::optional<OmpEndDirective>>(t);
5327 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5331 WRAPPER_CLASS_BOILERPLATE(
5336 INHERITED_TUPLE_CLASS_BOILERPLATE(
5357 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5383 INHERITED_TUPLE_CLASS_BOILERPLATE(
5398 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5406 return std::get<OmpBeginSectionsDirective>(t);
5408 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5409 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5416 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5417 std::optional<OmpEndSectionsDirective>>
5426 WRAPPER_CLASS_BOILERPLATE(
5438 WRAPPER_CLASS_BOILERPLATE(
5446 WRAPPER_CLASS_BOILERPLATE(
5455 WRAPPER_CLASS_BOILERPLATE(
5472 WRAPPER_CLASS_BOILERPLATE(
5485 WRAPPER_CLASS_BOILERPLATE(
5545 INHERITED_TUPLE_CLASS_BOILERPLATE(
5550 llvm::omp::Clause GetKind()
const;
5551 bool IsCapture()
const;
5552 bool IsCompare()
const;
5558 static constexpr int None = 0;
5559 static constexpr int Read = 1;
5560 static constexpr int Write = 2;
5561 static constexpr int Update = Read | Write;
5562 static constexpr int Action = 3;
5563 static constexpr int IfTrue = 4;
5564 static constexpr int IfFalse = 8;
5565 static constexpr int Condition = 12;
5569 TypedAssignment assign;
5571 TypedExpr atom, cond;
5580 WRAPPER_CLASS_BOILERPLATE(
5641 WRAPPER_CLASS_BOILERPLATE(
5683 INHERITED_TUPLE_CLASS_BOILERPLATE(
5694struct OpenMPInvalidDirective {
5695 using EmptyTrait = std::true_type;
5696 OpenMPInvalidDirective() =
default;
5697 explicit OpenMPInvalidDirective(
bool isExtension)
5698 : isExtensionSentinel{isExtension} {}
5699 bool isExtensionSentinel{
false};
5710WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5742 std::variant<Name, ScalarDefaultCharExpr> u;
5752 ENUM_CLASS(Modifier, ReadOnly, Zero)
5759 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5764 std::tuple<ReductionOperator, AccObjectList> t;
5769 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5773 WRAPPER_CLASS_BOILERPLATE(
5779 WRAPPER_CLASS_BOILERPLATE(
5786 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5794 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5803 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5810 WRAPPER_CLASS(Num, ScalarIntExpr);
5811 WRAPPER_CLASS(Dim, ScalarIntExpr);
5813 std::variant<Num, Dim, Static> u;
5818 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5823 std::tuple<bool, ScalarIntConstantExpr> t;
5829#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5830#include "llvm/Frontend/OpenACC/ACC.inc"
5835#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5836#include "llvm/Frontend/OpenACC/ACC.inc"
5842 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5855 std::tuple<Verbatim, AccObjectListWithModifier> t;
5861 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5866 std::tuple<AccLoopDirective, AccClauseList> t;
5873 std::tuple<AccBlockDirective, AccClauseList> t;
5882EMPTY_CLASS(AccEndAtomic);
5887 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5888 std::optional<AccEndAtomic>>
5895 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5896 std::optional<AccEndAtomic>>
5904 std::optional<AccEndAtomic>>
5913 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5918 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5925 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5931 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5937 std::tuple<AccCombinedDirective, AccClauseList> t;
5945struct OpenACCCombinedConstruct {
5946 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5949 : t({std::move(a), std::nullopt, std::nullopt}) {}
5950 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5951 std::optional<AccEndCombinedDirective>>
5958 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5963EMPTY_CLASS(AccEndLoop);
5964struct OpenACCLoopConstruct {
5965 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5967 : t({std::move(a), std::nullopt, std::nullopt}) {}
5968 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5969 std::optional<AccEndLoop>>
5981 std::tuple<AccStandaloneDirective, AccClauseList> t;
6007 std::tuple<Operator, std::list<Scalar<Variable>>> t;
6012 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
6015 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
6016 std::optional<ScalarIntExpr>>
6022 std::tuple<std::optional<ScalarIntConstantExpr>,
6023 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
6026 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:1310
Definition parse-tree.h:1317
Definition parse-tree.h:1281
Definition parse-tree.h:1270
Definition parse-tree.h:1269
Definition parse-tree.h:5909
Definition parse-tree.h:5885
Definition parse-tree.h:5901
Definition parse-tree.h:5893
Definition parse-tree.h:5870
Definition parse-tree.h:5934
Definition parse-tree.h:5864
Definition parse-tree.h:5740
Definition parse-tree.h:5713
Definition parse-tree.h:5841
Definition parse-tree.h:5826
Definition parse-tree.h:5821
Definition parse-tree.h:5729
Definition parse-tree.h:5751
Definition parse-tree.h:5734
Definition parse-tree.h:5746
Definition parse-tree.h:5778
Definition parse-tree.h:5772
Definition parse-tree.h:5876
Definition parse-tree.h:5940
Definition parse-tree.h:5817
Definition parse-tree.h:5808
Definition parse-tree.h:5718
Definition parse-tree.h:5757
Definition parse-tree.h:5762
Definition parse-tree.h:5705
Definition parse-tree.h:5801
Definition parse-tree.h:5797
Definition parse-tree.h:5793
Definition parse-tree.h:5723
Definition parse-tree.h:5789
Definition parse-tree.h:5783
Definition parse-tree.h:5767
Definition parse-tree.h:903
Definition parse-tree.h:1449
Definition parse-tree.h:501
Definition parse-tree.h:3322
Definition parse-tree.h:3311
Definition parse-tree.h:2011
Definition parse-tree.h:1976
Definition parse-tree.h:1955
Definition parse-tree.h:1967
Definition parse-tree.h:2022
Definition parse-tree.h:1984
Definition parse-tree.h:3544
Definition parse-tree.h:1941
Definition parse-tree.h:1374
Definition parse-tree.h:3549
Definition parse-tree.h:3554
Definition parse-tree.h:2048
Definition parse-tree.h:2203
Definition parse-tree.h:2194
Definition parse-tree.h:2187
Definition parse-tree.h:1347
Definition parse-tree.h:1410
Definition parse-tree.h:3494
Definition parse-tree.h:1121
Definition parse-tree.h:1471
Definition parse-tree.h:1478
Definition parse-tree.h:2225
Definition parse-tree.h:3064
Definition parse-tree.h:2058
Definition parse-tree.h:3488
Definition parse-tree.h:6019
Definition parse-tree.h:6013
Definition parse-tree.h:6010
Definition parse-tree.h:6004
Definition parse-tree.h:3349
Definition parse-tree.h:3346
Definition parse-tree.h:3329
Definition parse-tree.h:2467
Definition parse-tree.h:2466
Definition parse-tree.h:2448
Definition parse-tree.h:2454
Definition parse-tree.h:2437
Definition parse-tree.h:2435
Definition parse-tree.h:2256
Definition parse-tree.h:2241
Definition parse-tree.h:675
Definition parse-tree.h:1873
Definition parse-tree.h:862
Definition parse-tree.h:693
Definition parse-tree.h:691
Definition parse-tree.h:2726
Definition parse-tree.h:2725
Definition parse-tree.h:2233
Definition parse-tree.h:978
Definition parse-tree.h:1484
Definition parse-tree.h:1935
Definition parse-tree.h:1651
Definition parse-tree.h:1660
Definition parse-tree.h:1659
Definition parse-tree.h:3442
Definition parse-tree.h:3435
Definition parse-tree.h:3467
Definition parse-tree.h:3439
Definition parse-tree.h:3453
Definition parse-tree.h:3463
Definition parse-tree.h:3460
Definition parse-tree.h:3457
Definition parse-tree.h:3447
Definition parse-tree.h:3433
Definition parse-tree.h:848
Definition parse-tree.h:840
Definition parse-tree.h:989
Definition parse-tree.h:1002
Definition parse-tree.h:1110
Definition parse-tree.h:1055
Definition parse-tree.h:1205
Definition parse-tree.h:2553
Definition parse-tree.h:2281
Definition parse-tree.h:3303
Definition parse-tree.h:3292
Definition parse-tree.h:3290
Definition parse-tree.h:1730
Definition parse-tree.h:2703
Definition parse-tree.h:2701
Definition parse-tree.h:306
Definition parse-tree.h:2272
Definition parse-tree.h:2263
Definition parse-tree.h:1063
Definition parse-tree.h:1541
Definition parse-tree.h:1553
Definition parse-tree.h:1851
Definition parse-tree.h:1512
Definition parse-tree.h:1561
Definition parse-tree.h:1527
Definition parse-tree.h:1567
Definition parse-tree.h:1533
Definition parse-tree.h:2042
Definition parse-tree.h:442
Definition parse-tree.h:770
Definition parse-tree.h:330
Definition parse-tree.h:617
Definition parse-tree.h:1190
Definition parse-tree.h:751
Definition parse-tree.h:920
Definition parse-tree.h:1890
Definition parse-tree.h:1579
Definition parse-tree.h:1578
Definition parse-tree.h:2368
Definition parse-tree.h:3195
Definition parse-tree.h:2388
Definition parse-tree.h:2250
Definition parse-tree.h:1425
Definition parse-tree.h:3400
Definition parse-tree.h:1234
Definition parse-tree.h:1260
Definition parse-tree.h:1243
Definition parse-tree.h:1220
Definition parse-tree.h:2607
Definition parse-tree.h:2613
Definition parse-tree.h:2621
Definition parse-tree.h:534
Definition parse-tree.h:559
Definition parse-tree.h:972
Definition parse-tree.h:1369
Definition parse-tree.h:959
Definition parse-tree.h:1802
Definition parse-tree.h:1775
Definition parse-tree.h:1816
Definition parse-tree.h:1781
Definition parse-tree.h:1820
Definition parse-tree.h:1757
Definition parse-tree.h:1772
Definition parse-tree.h:1808
Definition parse-tree.h:1790
Definition parse-tree.h:1796
Definition parse-tree.h:1799
Definition parse-tree.h:1762
Definition parse-tree.h:1787
Definition parse-tree.h:1784
Definition parse-tree.h:1769
Definition parse-tree.h:1811
Definition parse-tree.h:1793
Definition parse-tree.h:1751
Definition parse-tree.h:1748
Definition parse-tree.h:1805
Definition parse-tree.h:1742
Definition parse-tree.h:1766
Definition parse-tree.h:1778
Definition parse-tree.h:1745
Definition parse-tree.h:1738
Definition parse-tree.h:1049
Definition parse-tree.h:2144
Definition parse-tree.h:2160
Definition parse-tree.h:2138
Definition parse-tree.h:2173
Definition parse-tree.h:2150
Definition parse-tree.h:3334
Definition parse-tree.h:3184
Definition parse-tree.h:3366
Definition parse-tree.h:3077
Definition parse-tree.h:3092
Definition parse-tree.h:869
Definition parse-tree.h:2407
Definition parse-tree.h:2403
Definition parse-tree.h:2402
Definition parse-tree.h:2418
Definition parse-tree.h:2381
Definition parse-tree.h:1711
Definition parse-tree.h:1721
Definition parse-tree.h:424
Definition parse-tree.h:1635
Definition parse-tree.h:1644
Definition parse-tree.h:630
Definition parse-tree.h:1020
Definition parse-tree.h:2924
Definition parse-tree.h:2933
Definition parse-tree.h:2938
Definition parse-tree.h:2922
Definition parse-tree.h:2953
Definition parse-tree.h:2951
Definition parse-tree.h:798
Definition parse-tree.h:314
Definition parse-tree.h:1383
Definition parse-tree.h:1587
Definition parse-tree.h:3258
Definition parse-tree.h:3218
Definition parse-tree.h:3224
Definition parse-tree.h:3216
Definition parse-tree.h:3245
Definition parse-tree.h:480
Definition parse-tree.h:468
Definition parse-tree.h:718
Definition parse-tree.h:715
Definition parse-tree.h:721
Definition parse-tree.h:711
Definition parse-tree.h:709
Definition parse-tree.h:2763
Definition parse-tree.h:2761
Definition parse-tree.h:2672
Definition parse-tree.h:785
Definition parse-tree.h:663
Definition parse-tree.h:2345
Definition parse-tree.h:1326
Definition parse-tree.h:681
Definition parse-tree.h:1629
Definition parse-tree.h:894
Definition parse-tree.h:2317
Definition parse-tree.h:2313
Definition parse-tree.h:2648
Definition parse-tree.h:2647
Definition parse-tree.h:876
Definition parse-tree.h:322
Definition parse-tree.h:1293
Definition parse-tree.h:2335
Definition parse-tree.h:2333
Definition parse-tree.h:2972
Definition parse-tree.h:3510
Definition parse-tree.h:2105
Definition parse-tree.h:2997
Definition parse-tree.h:2986
Definition parse-tree.h:3008
Definition parse-tree.h:592
Definition parse-tree.h:1332
Definition parse-tree.h:644
Definition parse-tree.h:643
Definition parse-tree.h:2351
Definition parse-tree.h:2575
Definition parse-tree.h:1458
Definition parse-tree.h:4476
Definition parse-tree.h:4480
Definition parse-tree.h:4492
Definition parse-tree.h:4499
Definition parse-tree.h:4507
Definition parse-tree.h:4522
Definition parse-tree.h:5518
Definition parse-tree.h:4530
Definition parse-tree.h:4529
Definition parse-tree.h:4592
Definition parse-tree.h:5376
Definition parse-tree.h:5365
Definition parse-tree.h:4538
Definition parse-tree.h:4550
Definition parse-tree.h:5307
Definition parse-tree.h:5382
Definition parse-tree.h:4561
Definition parse-tree.h:5317
Definition parse-tree.h:4567
Definition parse-tree.h:5276
Definition parse-tree.h:5260
Definition parse-tree.h:4576
Definition parse-tree.h:3690
Definition parse-tree.h:4584
Definition parse-tree.h:5445
Definition parse-tree.h:5454
Definition parse-tree.h:5462
Definition parse-tree.h:5437
Definition parse-tree.h:5425
Definition parse-tree.h:4606
Definition parse-tree.h:4634
Definition parse-tree.h:4621
Definition parse-tree.h:4688
Definition parse-tree.h:4686
Definition parse-tree.h:4710
Definition parse-tree.h:4718
Definition parse-tree.h:4728
Definition parse-tree.h:4738
Definition parse-tree.h:4746
Definition parse-tree.h:3580
Definition parse-tree.h:5283
Definition parse-tree.h:4701
Definition parse-tree.h:4670
Definition parse-tree.h:4761
Definition parse-tree.h:4756
Definition parse-tree.h:5312
Definition parse-tree.h:5387
Definition parse-tree.h:4772
Definition parse-tree.h:5350
Definition parse-tree.h:4780
Definition parse-tree.h:4799
Definition parse-tree.h:4811
Definition parse-tree.h:4821
Definition parse-tree.h:4829
Definition parse-tree.h:5471
Definition parse-tree.h:4834
Definition parse-tree.h:4842
Definition parse-tree.h:4858
Definition parse-tree.h:4881
Definition parse-tree.h:4847
Definition parse-tree.h:4871
Definition parse-tree.h:4888
Definition parse-tree.h:3702
Definition parse-tree.h:4643
Definition parse-tree.h:4661
Definition parse-tree.h:4652
Definition parse-tree.h:4897
Definition parse-tree.h:4915
Definition parse-tree.h:3614
Definition parse-tree.h:4926
Definition parse-tree.h:4951
Definition parse-tree.h:4963
Definition parse-tree.h:4972
Definition parse-tree.h:5344
Definition parse-tree.h:4996
Definition parse-tree.h:5008
Definition parse-tree.h:5020
Definition parse-tree.h:3635
Definition parse-tree.h:3626
Definition parse-tree.h:3623
Definition parse-tree.h:5031
Definition parse-tree.h:5044
Definition parse-tree.h:5056
Definition parse-tree.h:5067
Definition parse-tree.h:3679
Definition parse-tree.h:5077
Definition parse-tree.h:5478
Definition parse-tree.h:3609
Definition parse-tree.h:5086
Definition parse-tree.h:5098
Definition parse-tree.h:5396
Definition parse-tree.h:5109
Definition parse-tree.h:5116
Definition parse-tree.h:3639
Definition parse-tree.h:3661
Definition parse-tree.h:3649
Definition parse-tree.h:3648
Definition parse-tree.h:5125
Definition parse-tree.h:5136
Definition parse-tree.h:5484
Definition parse-tree.h:5145
Definition parse-tree.h:5166
Definition parse-tree.h:5177
Definition parse-tree.h:3605
Definition parse-tree.h:3598
Definition parse-tree.h:5186
Definition parse-tree.h:5195
Definition parse-tree.h:5211
Definition parse-tree.h:5233
Definition parse-tree.h:5247
Definition parse-tree.h:5246
Definition parse-tree.h:5354
Definition parse-tree.h:5222
Definition parse-tree.h:3108
Definition parse-tree.h:5916
Definition parse-tree.h:5923
Definition parse-tree.h:5852
Definition parse-tree.h:5945
Definition parse-tree.h:5984
Definition parse-tree.h:5955
Definition parse-tree.h:5973
Definition parse-tree.h:5964
Definition parse-tree.h:5846
Definition parse-tree.h:5978
Definition parse-tree.h:5928
Definition parse-tree.h:5858
Definition parse-tree.h:5544
Definition parse-tree.h:5567
Definition parse-tree.h:5557
Definition parse-tree.h:5549
Definition parse-tree.h:5586
Definition parse-tree.h:5579
Definition parse-tree.h:5670
Definition parse-tree.h:5534
Definition parse-tree.h:5522
Definition parse-tree.h:5597
Definition parse-tree.h:5611
Definition parse-tree.h:5665
Definition parse-tree.h:5627
Definition parse-tree.h:5635
Definition parse-tree.h:5694
Definition parse-tree.h:5656
Definition parse-tree.h:5682
Definition parse-tree.h:5402
Definition parse-tree.h:5640
Definition parse-tree.h:5646
Definition parse-tree.h:379
Definition parse-tree.h:2841
Definition parse-tree.h:2804
Definition parse-tree.h:3033
Definition parse-tree.h:1845
Definition parse-tree.h:2071
Definition parse-tree.h:2070
Definition parse-tree.h:1597
Definition parse-tree.h:2031
Definition parse-tree.h:2867
Definition parse-tree.h:3153
Definition parse-tree.h:2825
Definition parse-tree.h:933
Definition parse-tree.h:3131
Definition parse-tree.h:1074
Definition parse-tree.h:1102
Definition parse-tree.h:1930
Definition parse-tree.h:1094
Definition parse-tree.h:1088
Definition parse-tree.h:1081
Definition parse-tree.h:3141
Definition parse-tree.h:3273
Definition parse-tree.h:3234
Definition parse-tree.h:576
Definition parse-tree.h:2788
Definition parse-tree.h:817
Definition parse-tree.h:2302
Definition parse-tree.h:3021
Definition parse-tree.h:3025
Definition parse-tree.h:3019
Definition parse-tree.h:1610
Definition parse-tree.h:298
Definition parse-tree.h:1696
Definition parse-tree.h:2425
Definition parse-tree.h:2490
Definition parse-tree.h:2489
Definition parse-tree.h:2503
Definition parse-tree.h:2501
Definition parse-tree.h:2480
Definition parse-tree.h:2537
Definition parse-tree.h:2535
Definition parse-tree.h:2515
Definition parse-tree.h:2181
Definition parse-tree.h:3392
Definition parse-tree.h:854
Definition parse-tree.h:791
Definition parse-tree.h:829
Definition parse-tree.h:402
Definition parse-tree.h:456
Definition parse-tree.h:2000
Definition parse-tree.h:362
Definition parse-tree.h:3410
Definition parse-tree.h:2567
Definition parse-tree.h:1920
Definition parse-tree.h:1211
Definition parse-tree.h:3531
Definition parse-tree.h:3503
Definition parse-tree.h:3526
Definition parse-tree.h:3039
Definition parse-tree.h:3050
Definition parse-tree.h:3203
Definition parse-tree.h:3376
Definition parse-tree.h:1687
Definition parse-tree.h:1882
Definition parse-tree.h:1678
Definition parse-tree.h:1868
Definition parse-tree.h:2586
Definition parse-tree.h:2585
Definition parse-tree.h:2598
Definition parse-tree.h:911
Definition parse-tree.h:1154
Definition parse-tree.h:1167
Definition parse-tree.h:1129
Definition parse-tree.h:1176
Definition parse-tree.h:1145
Definition parse-tree.h:1141
Definition parse-tree.h:1139
Definition parse-tree.h:1439
Definition parse-tree.h:2525
Definition parse-tree.h:2524
Definition parse-tree.h:939
Definition parse-tree.h:947
Definition parse-tree.h:745
Definition parse-tree.h:654
Definition parse-tree.h:758
Definition parse-tree.h:3519
Definition parse-tree.h:357
Definition parse-tree.h:2657
Definition parse-tree.h:804
Definition parse-tree.h:3117
Definition parse-tree.h:1898
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:285
Definition parse-tree.h:2851
Definition parse-tree.h:2096
Definition parse-tree.h:2089
Definition parse-tree.h:2125
Definition parse-tree.h:2121
Definition parse-tree.h:2120
Definition parse-tree.h:2083
Definition parse-tree.h:2810
Definition parse-tree.h:3755
Definition parse-tree.h:3746
Definition parse-tree.h:3716
Definition parse-tree.h:3726
Definition parse-tree.h:3739
Definition parse-tree.h:3911
Definition parse-tree.h:3922
Definition parse-tree.h:3941
Definition parse-tree.h:3932
Definition parse-tree.h:3959
Definition parse-tree.h:3950
Definition parse-tree.h:3972
Definition parse-tree.h:3985
Definition parse-tree.h:3996
Definition parse-tree.h:4008
Definition parse-tree.h:4022
Definition parse-tree.h:4035
Definition parse-tree.h:4057
Definition parse-tree.h:4069
Definition parse-tree.h:4080
Definition parse-tree.h:4090
Definition parse-tree.h:4108
Definition parse-tree.h:4120
Definition parse-tree.h:4132
Definition parse-tree.h:4144
Definition parse-tree.h:4157
Definition parse-tree.h:4167
Definition parse-tree.h:4176
Definition parse-tree.h:4186
Definition parse-tree.h:4196
Definition parse-tree.h:4211
Definition parse-tree.h:4224
Definition parse-tree.h:4260
Definition parse-tree.h:4247
Definition parse-tree.h:4233
Definition parse-tree.h:4270
Definition parse-tree.h:4283
Definition parse-tree.h:4309
Definition parse-tree.h:4299
Definition parse-tree.h:4344
Definition parse-tree.h:4320
Definition parse-tree.h:4333
Definition parse-tree.h:4354
Definition parse-tree.h:4364
Definition parse-tree.h:4374
Definition parse-tree.h:4385
Definition parse-tree.h:4396
Definition parse-tree.h:4406
Definition parse-tree.h:4415
Definition parse-tree.h:4426
Definition parse-tree.h:4436
Definition parse-tree.h:4447
Definition parse-tree.h:4458
Definition parse-tree.h:3886
Definition parse-tree.h:3796
Definition parse-tree.h:3793
Definition parse-tree.h:3776
Definition parse-tree.h:3817
Definition parse-tree.h:3783
Definition parse-tree.h:3844
Definition parse-tree.h:3859
Definition parse-tree.h:3856
Definition parse-tree.h:3869
Definition parse-tree.h:3878