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);
1009 EMPTY_CLASS(Implicit);
1010 std::tuple<common::CUDADataAttr, std::optional<Implicit>> t;
1033 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1034 std::list<common::Indirection<DataStmtValue>>>
1044struct ComponentDecl {
1045 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1047 std::optional<ComponentArraySpec> &&aSpec,
1048 std::optional<CoarraySpec> &&coaSpec,
1049 std::optional<Initialization> &&init)
1050 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1051 std::move(length), std::move(init)} {}
1052 std::tuple<Name, std::optional<ComponentArraySpec>,
1053 std::optional<CoarraySpec>, std::optional<CharLength>,
1054 std::optional<Initialization>>
1062 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1068 std::variant<ComponentDecl, FillDecl> u;
1076 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1077 std::list<ComponentOrFill>>
1084WRAPPER_CLASS(Pass, std::optional<Name>);
1087 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1094 std::variant<NullInit, Name> u;
1101 std::variant<Name, DeclarationTypeSpec> u;
1107 std::tuple<Name, std::optional<ProcPointerInit>> t;
1115 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1116 std::list<ProcDecl>>
1134 EMPTY_CLASS(Deferred);
1135 EMPTY_CLASS(Non_Overridable);
1136 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1142 std::tuple<Name, std::optional<Name>> t;
1154 std::tuple<std::list<BindAttr>, std::list<TypeBoundProcDecl>> t;
1158 std::tuple<Name, std::list<BindAttr>, std::list<Name>> t;
1160 std::variant<WithoutInterface, WithInterface> u;
1173WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1189 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1190 std::list<Statement<TypeBoundProcBinding>>>
1195WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1203 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1204 std::list<Statement<PrivateOrSequence>>,
1205 std::list<Statement<ComponentDefStmt>>,
1218 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1224 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1228EMPTY_CLASS(EnumDefStmt);
1233 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1237WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1240EMPTY_CLASS(EndEnumStmt);
1246 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1247 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1256 std::tuple<std::optional<AccessSpec>,
Name> t;
1261WRAPPER_CLASS(EnumerationEnumeratorStmt, std::list<Name>);
1265WRAPPER_CLASS(EndEnumerationTypeStmt, std::optional<Name>);
1273 std::tuple<Statement<EnumerationTypeStmt>,
1274 std::list<Statement<EnumerationEnumeratorStmt>>,
1282 TUPLE_CLASS_BOILERPLATE(
Triplet);
1283 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1285 UNION_CLASS_BOILERPLATE(
AcValue);
1286 std::variant<Triplet, common::Indirection<Expr>,
1293 TUPLE_CLASS_BOILERPLATE(AcSpec);
1294 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1295 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1299WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1306 std::tuple<VAR, BOUND, BOUND, std::optional<BOUND>> t;
1308 const VAR &Name()
const {
return std::get<0>(t); }
1309 const BOUND &Lower()
const {
return std::get<1>(t); }
1310 const BOUND &Upper()
const {
return std::get<2>(t); }
1311 const std::optional<BOUND> &Step()
const {
return std::get<3>(t); }
1324 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1339 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1345 std::tuple<NamedConstant, ConstantExpr> t;
1349WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1352WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1355WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1360 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1367WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1370EMPTY_CLASS(AssumedRankSpec);
1378WRAPPER_CLASS(AssumedShapeBoundsSpec, IntExpr);
1382 std::tuple<std::optional<IntExpr>, IntExpr> t;
1388 std::list<AssumedShapeSpec>, AssumedShapeBoundsSpec,
1389 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1395 ENUM_CLASS(Intent, In, Out, InOut)
1396 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1401WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1411EMPTY_CLASS(Asynchronous);
1412EMPTY_CLASS(External);
1413EMPTY_CLASS(Intrinsic);
1414EMPTY_CLASS(Optional);
1415EMPTY_CLASS(Parameter);
1416EMPTY_CLASS(Protected);
1420EMPTY_CLASS(Volatile);
1425 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1437 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1438 EntityDecl(ObjectName &&name,
CharLength &&length,
1439 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1440 std::optional<Initialization> &&init)
1441 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1442 std::move(length), std::move(init)} {}
1443 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1444 std::optional<CharLength>, std::optional<Initialization>>
1452 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1462 std::tuple<AccessSpec, std::list<AccessId>> t;
1471 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1476WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1479WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1484 ENUM_CLASS(Kind, Object, Common)
1485 std::tuple<Kind, Name> t;
1491 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1497 std::tuple<Name, CoarraySpec> t;
1501WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1504WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1513using TypedAssignment =
1526 mutable TypedExpr typedExpr;
1527 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1540 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1546 mutable std::int64_t repetitions{1};
1554 std::variant<Scalar<common::Indirection<Designator>>,
1567 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1574 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1580 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1584WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1592 std::tuple<Name, ArraySpec> t;
1594 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1600 std::tuple<IntentSpec, std::list<Name>> t;
1604WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1610 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1614WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1617WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1623 ENUM_CLASS(Kind, Entity, Common)
1624 std::tuple<Kind, Name> t;
1628WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1631WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1634WRAPPER_CLASS(ValueStmt, std::list<Name>);
1637WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1642 std::tuple<Location, std::optional<Location>> t;
1648 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1657 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1658 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1664 std::tuple<Name, std::optional<ArraySpec>> t;
1672 TUPLE_CLASS_BOILERPLATE(
Block);
1673 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1675 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1676 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1677 std::list<Block> &&);
1686WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1691 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1695using Subscript = ScalarIntExpr;
1700 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1701 std::optional<Subscript>>
1709 std::variant<IntExpr, SubscriptTriplet> u;
1713using Cosubscript = ScalarIntExpr;
1724 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1727 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1734 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1743 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1750 UNION_CLASS_BOILERPLATE(Expr);
1754 using IntrinsicUnary::IntrinsicUnary;
1757 using IntrinsicUnary::IntrinsicUnary;
1760 using IntrinsicUnary::IntrinsicUnary;
1762 struct NOT :
public IntrinsicUnary {
1763 using IntrinsicUnary::IntrinsicUnary;
1770 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1778 using IntrinsicBinary::IntrinsicBinary;
1781 using IntrinsicBinary::IntrinsicBinary;
1784 using IntrinsicBinary::IntrinsicBinary;
1787 using IntrinsicBinary::IntrinsicBinary;
1790 using IntrinsicBinary::IntrinsicBinary;
1793 using IntrinsicBinary::IntrinsicBinary;
1796 using IntrinsicBinary::IntrinsicBinary;
1799 using IntrinsicBinary::IntrinsicBinary;
1802 using IntrinsicBinary::IntrinsicBinary;
1805 using IntrinsicBinary::IntrinsicBinary;
1808 using IntrinsicBinary::IntrinsicBinary;
1811 using IntrinsicBinary::IntrinsicBinary;
1814 using IntrinsicBinary::IntrinsicBinary;
1817 using IntrinsicBinary::IntrinsicBinary;
1820 using IntrinsicBinary::IntrinsicBinary;
1823 using IntrinsicBinary::IntrinsicBinary;
1828 using IntrinsicBinary::IntrinsicBinary;
1833 std::tuple<DefinedOpName, common::Indirection<Expr>,
1841 mutable TypedExpr typedExpr;
1845 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1850 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1857 TUPLE_CLASS_BOILERPLATE(
PartRef);
1858 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1863 UNION_CLASS_BOILERPLATE(DataRef);
1864 explicit DataRef(std::list<PartRef> &&);
1865 std::variant<Name, common::Indirection<StructureComponent>,
1881 std::tuple<DataRef, SubstringRange> t;
1886 std::tuple<CharLiteralConstant, SubstringRange> t;
1903 bool EndsInBareName()
const;
1905 std::variant<DataRef, Substring> u;
1911 mutable TypedExpr typedExpr;
1913 std::variant<common::Indirection<Designator>,
1933 std::tuple<DataRef, Name> t;
1935 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1936 const Name &Component()
const {
return std::get<Name>(t); }
1948 std::tuple<DataRef, ImageSelector> t;
1957 std::tuple<DataRef, std::list<SectionSubscript>> t;
1959 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1960 const std::list<SectionSubscript> &Subscripts()
const {
1961 return std::get<std::list<SectionSubscript>>(t);
1968 mutable TypedExpr typedExpr;
1969 std::variant<Name, StructureComponent> u;
1974using BoundExpr = ScalarIntExpr;
1980 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1989 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1997 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1998 std::optional<AllocateCoarraySpec>>
2003WRAPPER_CLASS(StatVariable, ScalarIntVariable);
2007WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
2013 std::variant<StatVariable, MsgVariable> u;
2028 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
2035 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
2036 std::list<AllocOpt>>
2044 mutable TypedExpr typedExpr;
2045 std::variant<Name, StructureComponent> u;
2049WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2055 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2061 mutable TypedAssignment typedAssignment;
2062 std::tuple<Variable, Expr> t;
2066WRAPPER_CLASS(BoundsSpec, BoundExpr);
2071 std::tuple<BoundExpr, BoundExpr> t;
2083 UNION_CLASS_BOILERPLATE(
Bounds);
2084 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2087 mutable TypedAssignment typedAssignment;
2088 std::tuple<DataRef, Bounds, Expr> t;
2096 std::tuple<LogicalExpr, AssignmentStmt> t;
2102 std::tuple<std::optional<Name>, LogicalExpr> t;
2118 std::tuple<LogicalExpr, std::optional<Name>> t;
2122WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2125WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2134 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2138 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2141 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2142 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2157 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2163 std::tuple<common::Indirection<ConcurrentHeader>,
2180WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2186 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2194 std::variant<Expr, Variable> u;
2200 std::tuple<Name, Selector> t;
2207 std::tuple<std::optional<Name>, std::list<Association>> t;
2211WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2220WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2223WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2238 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2246 std::tuple<CodimensionDecl, Selector> t;
2254 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2255 std::list<StatOrErrmsg>>
2263 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2276 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2280WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2294 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2303 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2304 std::optional<ScalarLogicalExpr>>
2314 ENUM_CLASS(Operator, Plus, Minus, Multiply, Max, Min, Iand, Ior, Ieor, And,
2326 WRAPPER_CLASS(Local, std::list<Name>);
2327 WRAPPER_CLASS(LocalInit, std::list<Name>);
2329 TUPLE_CLASS_BOILERPLATE(
Reduce);
2331 std::tuple<Operator, std::list<Name>> t;
2333 WRAPPER_CLASS(Shared, std::list<Name>);
2334 EMPTY_CLASS(DefaultNone);
2335 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2348 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2351 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2358 std::tuple<Label, std::optional<LoopControl>> t;
2364 std::tuple<std::optional<Name>, std::optional<Label>,
2365 std::optional<LoopControl>>
2370WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2381 const std::optional<LoopControl> &GetLoopControl()
const;
2382 bool IsDoNormal()
const;
2383 bool IsDoWhile()
const;
2384 bool IsDoConcurrent()
const;
2389WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2394 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2401 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2405WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2408WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2416 std::tuple<Statement<ElseIfStmt>, Block> t;
2420 std::tuple<Statement<ElseStmt>, Block> t;
2423 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2430 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2431 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2449 TUPLE_CLASS_BOILERPLATE(
Range);
2450 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2453 std::variant<CaseValue, Range> u;
2457EMPTY_CLASS(Default);
2461 std::variant<std::list<CaseValueRange>, Default> u;
2467 std::tuple<CaseSelector, std::optional<Name>> t;
2473WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2479 TUPLE_CLASS_BOILERPLATE(
Case);
2480 std::tuple<Statement<CaseStmt>, Block> t;
2483 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2493 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2502 UNION_CLASS_BOILERPLATE(
Rank);
2503 std::variant<ScalarIntConstantExpr, Star, Default> u;
2506 std::tuple<Rank, std::optional<Name>> t;
2516 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2518 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2528 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2537 UNION_CLASS_BOILERPLATE(
Guard);
2538 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2541 std::tuple<Guard, std::optional<Name>> t;
2550 std::tuple<Statement<TypeGuardStmt>, Block> t;
2552 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2558WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2561WRAPPER_CLASS(GotoStmt, Label);
2566 std::tuple<std::list<Label>, ScalarIntExpr> t;
2579 ENUM_CLASS(Kind, Stop, ErrorStop)
2581 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2588 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2592WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2599 std::variant<IntExpr, Star> u;
2602 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2606WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2611 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2620 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2626 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2634 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2647 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2650 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2661 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2664 std::tuple<LockVariable, std::list<LockStat>> t;
2670 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2674WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2684 UNION_CLASS_BOILERPLATE(
IoUnit);
2685 std::variant<Variable, common::Indirection<Expr>, Star> u;
2689using FileNameExpr = ScalarDefaultCharExpr;
2709WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2710WRAPPER_CLASS(ErrLabel, Label);
2715 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2716 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2717 Carriagecontrol, Convert, Dispose)
2719 std::tuple<Kind, ScalarDefaultCharExpr> t;
2721 WRAPPER_CLASS(Recl, ScalarIntExpr);
2722 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2723 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2724 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2729WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2739 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2743 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2749 UNION_CLASS_BOILERPLATE(
Format);
2750 std::variant<Expr, Label, Star> u;
2754WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2770WRAPPER_CLASS(EndLabel, Label);
2771WRAPPER_CLASS(EorLabel, Label);
2776 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2778 std::tuple<Kind, ScalarDefaultCharExpr> t;
2780 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2781 WRAPPER_CLASS(Pos, ScalarIntExpr);
2782 WRAPPER_CLASS(Rec, ScalarIntExpr);
2783 WRAPPER_CLASS(Size, ScalarIntVariable);
2785 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2793 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2800 BOILERPLATE(ReadStmt);
2801 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2802 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2803 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2804 items(std::move(its)) {}
2805 std::optional<IoUnit> iounit;
2807 std::optional<Format> format;
2810 std::list<IoControlSpec> controls;
2811 std::list<InputItem> items;
2817 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2822 BOILERPLATE(WriteStmt);
2823 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2824 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2825 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2826 items(std::move(its)) {}
2827 std::optional<IoUnit> iounit;
2829 std::optional<Format> format;
2831 std::list<IoControlSpec> controls;
2832 std::list<OutputItem> items;
2838 std::tuple<Format, std::list<OutputItem>> t;
2849 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2854 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2861WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2864 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2865 MsgVariable, StatVariable>
2870WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2880 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2885WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2889WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2892WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2895WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2936 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2937 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2938 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2940 Carriagecontrol, Convert, Dispose)
2941 TUPLE_CLASS_BOILERPLATE(
CharVar);
2942 std::tuple<Kind, ScalarDefaultCharVariable> t;
2945 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2946 TUPLE_CLASS_BOILERPLATE(
IntVar);
2947 std::tuple<Kind, ScalarIntVariable> t;
2950 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2951 TUPLE_CLASS_BOILERPLATE(
LogVar);
2952 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2966 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2968 std::variant<std::list<InquireSpec>,
Iolength> u;
2975WRAPPER_CLASS(ProgramStmt,
Name);
2978WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2986 ExecutionPart, std::optional<InternalSubprogramPart>,
2992WRAPPER_CLASS(ModuleStmt,
Name);
2999 std::variant<common::Indirection<FunctionSubprogram>,
3010 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
3014WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
3020 TUPLE_CLASS_BOILERPLATE(
Module);
3031 UNION_CLASS_BOILERPLATE(
Rename);
3033 TUPLE_CLASS_BOILERPLATE(
Names);
3034 std::tuple<Name, Name> t;
3038 std::tuple<DefinedOpName, DefinedOpName> t;
3040 std::variant<Names, Operators> u;
3046 std::tuple<Name, std::optional<Name>> t;
3052 std::tuple<ParentIdentifier, Name> t;
3056WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3069WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3072WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3090 EMPTY_CLASS(Assignment);
3091 EMPTY_CLASS(ReadFormatted);
3092 EMPTY_CLASS(ReadUnformatted);
3093 EMPTY_CLASS(WriteFormatted);
3094 EMPTY_CLASS(WriteUnformatted);
3097 ReadUnformatted, WriteFormatted, WriteUnformatted>
3105 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3109struct InterfaceStmt {
3110 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3112 InterfaceStmt(Abstract x) : u{x} {}
3114 std::variant<std::optional<GenericSpec>, Abstract> u;
3120 UNION_CLASS_BOILERPLATE(
Only);
3121 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3129 BOILERPLATE(UseStmt);
3130 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3131 template <
typename A>
3132 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3133 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3134 std::optional<ModuleNature> nature;
3136 std::variant<std::list<Rename>, std::list<Only>> u;
3154 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3155 std::list<ProcDecl>>
3166 EMPTY_CLASS(Elemental);
3167 EMPTY_CLASS(Impure);
3169 EMPTY_CLASS(Non_Recursive);
3171 EMPTY_CLASS(Recursive);
3172 EMPTY_CLASS(Simple);
3173 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3174 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3175 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3177 Pure, Recursive, Simple, Attributes, Launch_Bounds, Cluster_Dims>
3185 TUPLE_CLASS_BOILERPLATE(Suffix);
3187 : t(std::move(rn), std::move(lbs)) {}
3188 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3197 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3198 std::optional<Suffix>>
3203WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3208 std::variant<Name, Star> u;
3216 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3217 std::optional<LanguageBindingSpec>>
3222WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3237 std::tuple<Statement<SubroutineStmt>,
3241 std::variant<Function, Subroutine> u;
3246 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3248 std::tuple<Kind, std::list<Name>> t;
3258 std::variant<InterfaceBody, Statement<ProcedureStmt>,
3265WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3271 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3277WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3280WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3286 std::variant<Name, ProcComponentRef> u;
3290WRAPPER_CLASS(AltReturnSpec, Label);
3293EMPTY_CLASS(ConditionalArgNil);
3307 std::variant<common::Indirection<Expr>, ConditionalArgNil> u;
3316 std::variant<ConditionalArg, ConditionalArg::Consequent> u;
3323 WRAPPER_CLASS(PercentRef,
Expr);
3324 WRAPPER_CLASS(PercentVal,
Expr);
3325 UNION_CLASS_BOILERPLATE(ActualArg);
3327 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal,
3335 std::tuple<std::optional<Keyword>,
ActualArg> t;
3341 TUPLE_CLASS_BOILERPLATE(
Call);
3342 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3358 TUPLE_CLASS_BOILERPLATE(CallStmt);
3359 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3362 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3363 std::optional<ScalarIntExpr>>
3367 std::list<ActualArgSpec> &&args)
3368 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3369 std::tuple<Call, std::optional<Chevrons>> t;
3371 mutable TypedCall typedCall;
3395WRAPPER_CLASS(MpSubprogramStmt,
Name);
3398WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3413 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3417WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3448 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3451 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3455 std::tuple<common::Indirection<Designator>, uint64_t> t;
3457 EMPTY_CLASS(VectorAlways);
3460 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3462 std::tuple<std::uint64_t, Kind> t;
3466 std::tuple<Name, std::optional<std::uint64_t>> t;
3469 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3472 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3475 WRAPPER_CLASS_BOILERPLATE(
3479 WRAPPER_CLASS_BOILERPLATE(
InlineAlways, std::optional<Name>);
3481 EMPTY_CLASS(NoVector);
3482 EMPTY_CLASS(NoUnroll);
3483 EMPTY_CLASS(NoUnrollAndJam);
3484 EMPTY_CLASS(ForceInline);
3485 EMPTY_CLASS(Inline);
3486 EMPTY_CLASS(NoInline);
3489 EMPTY_CLASS(Unrecognized);
3491 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3493 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3501 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3507 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3509WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3516 std::variant<Statement<DataComponentDefStmt>,
3522 EMPTY_CLASS(MapStmt);
3523 EMPTY_CLASS(EndMapStmt);
3524 TUPLE_CLASS_BOILERPLATE(
Map);
3525 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3531 EMPTY_CLASS(UnionStmt);
3532 EMPTY_CLASS(EndUnionStmt);
3533 TUPLE_CLASS_BOILERPLATE(
Union);
3539 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3543 EMPTY_CLASS(EndStructureStmt);
3545 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3552WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3557 std::tuple<Expr, Label, Label, Label> t;
3562 std::tuple<Label, Name> t;
3567 std::tuple<Name, std::list<Label>> t;
3570WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3576#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3577 using basename::basename; \
3578 classname(basename &&b) : basename(std::move(b)) {} \
3579 using TupleTrait = std::true_type; \
3580 BOILERPLATE(classname)
3582#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3583 BOILERPLATE(classname); \
3584 using basename::basename; \
3585 classname(basename &&base) : basename(std::move(base)) {} \
3586 using WrapperTrait = std::true_type
3591struct OmpDirectiveName {
3593 constexpr OmpDirectiveName() =
default;
3594 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3595 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3599 OmpDirectiveName(
const Verbatim &name);
3600 using WrapperTrait = std::true_type;
3602 bool IsExecutionPart()
const;
3605 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3613 std::variant<TypeSpec, DeclarationTypeSpec> u;
3627 std::variant<FunctionReference, OmpReservedIdentifier> u;
3638 ENUM_CLASS(Kind, BlankCommonBlock);
3639 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3643 std::variant<Designator, OmpLocator, Name, Invalid> u;
3647 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3654 using EmptyTrait = std::true_type;
3662 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3665 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3679 WRAPPER_CLASS_BOILERPLATE(
3691 static constexpr auto Id = llvm::omp::Modifier::ReductionIdentifier;
3693 std::variant<DefinedOperator, ProcedureDesignator> u;
3702 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3714 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3719inline namespace arguments {
3729 std::tuple<OmpObject, OmpObject> t;
3740 std::tuple<std::string, TypeSpec, Name> t;
3753 std::optional<OmpCombinerExpression>>
3772inline namespace traits {
3809 TUPLE_CLASS_BOILERPLATE(
Complex);
3811 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3815 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3831 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3856 std::string ToString()
const;
3859 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3860 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3861 std::variant<Value, llvm::omp::Directive, std::string> u;
3872 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3874 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3881 std::string ToString()
const;
3883 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3892 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3898 static constexpr auto Id = llvm::omp::Modifier::ContextSelector;
3900 WRAPPER_CLASS_BOILERPLATE(
3905#define MODIFIER_BOILERPLATE(...) \
3907 using Variant = std::variant<__VA_ARGS__>; \
3908 UNION_CLASS_BOILERPLATE(Modifier); \
3913#define MODIFIERS() std::optional<std::list<Modifier>>
3915inline namespace modifier {
3923 static constexpr auto Id = llvm::omp::Modifier::AccessGroup;
3924 ENUM_CLASS(Value, Cgroup);
3934 static constexpr auto Id = llvm::omp::Modifier::AdjustOp;
3935 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
3944 static constexpr auto Id = llvm::omp::Modifier::Alignment;
3945 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3953 static constexpr auto Id = llvm::omp::Modifier::AlignModifier;
3962 static constexpr auto Id = llvm::omp::Modifier::AllocatorSimpleModifier;
3971 static constexpr auto Id = llvm::omp::Modifier::AllocatorComplexModifier;
3984 static constexpr auto Id = llvm::omp::Modifier::AlwaysModifier;
3985 ENUM_CLASS(Value, Always)
3997 static constexpr auto Id = llvm::omp::Modifier::AttachModifier;
3998 ENUM_CLASS(Value, Always, Never, Auto)
4008 static constexpr auto Id = llvm::omp::Modifier::AutomapModifier;
4009 ENUM_CLASS(Value, Automap);
4020 static constexpr auto Id = llvm::omp::Modifier::ChunkModifier;
4021 ENUM_CLASS(Value, Simd)
4034 static constexpr auto Id = llvm::omp::Modifier::CloseModifier;
4035 ENUM_CLASS(Value, Close)
4047 static constexpr auto Id = llvm::omp::Modifier::DeleteModifier;
4048 ENUM_CLASS(Value, Delete)
4069 static constexpr auto Id = llvm::omp::Modifier::DependenceType;
4070 ENUM_CLASS(Value, Sink, Source);
4081 static constexpr auto Id = llvm::omp::Modifier::DepinfoModifier;
4082 using Value = common::OmpDependenceKind;
4084 std::tuple<Value, OmpObject> t;
4092 static constexpr auto Id = llvm::omp::Modifier::DeviceModifier;
4093 ENUM_CLASS(Value, Ancestor, Device_Num)
4102 static constexpr auto Id = llvm::omp::Modifier::DimsModifier;
4120 static constexpr auto Id = llvm::omp::Modifier::DirectiveNameModifier;
4121 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4132 static constexpr auto Id = llvm::omp::Modifier::Expectation;
4133 ENUM_CLASS(Value, Present);
4144 static constexpr auto Id = llvm::omp::Modifier::FallbackModifier;
4145 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4156 static constexpr auto Id = llvm::omp::Modifier::InteropType;
4157 ENUM_CLASS(Value, Target, Targetsync)
4171 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4179 static constexpr auto Id = llvm::omp::Modifier::Iterator;
4180 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4188 static constexpr auto Id = llvm::omp::Modifier::LastprivateModifier;
4189 ENUM_CLASS(Value, Conditional)
4198 static constexpr auto Id = llvm::omp::Modifier::LinearModifier;
4199 ENUM_CLASS(Value, Ref, Uval, Val);
4208 static constexpr auto Id = llvm::omp::Modifier::LinearStep;
4223 static constexpr auto Id = llvm::omp::Modifier::LoopModifier;
4225 std::tuple<llvm::omp::LoopModifier,
4226 std::optional<std::list<ScalarIntConstantExpr>>>
4236 static constexpr auto Id = llvm::omp::Modifier::LowerBound;
4245 static constexpr auto Id = llvm::omp::Modifier::Mapper;
4259 static constexpr auto Id = llvm::omp::Modifier::MapType;
4260 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4261 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4272 static constexpr auto Id = llvm::omp::Modifier::MapTypeModifier;
4273 ENUM_CLASS(Value, Always, Close, Present)
4282 static constexpr auto Id = llvm::omp::Modifier::MemSpace;
4283 WRAPPER_CLASS_BOILERPLATE(
OmpMemSpace, ScalarIntExpr);
4295 static constexpr auto Id = llvm::omp::Modifier::MotionModifier;
4296 ENUM_CLASS(Value, Present)
4311 static constexpr auto Id = llvm::omp::Modifier::OrderingModifier;
4312 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4321 static constexpr auto Id = llvm::omp::Modifier::OrderModifier;
4322 ENUM_CLASS(Value, Reproducible, Unconstrained)
4335 using Extensions = std::list<PreferencePropertyExtension>;
4336 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4346 using ForeignRuntimeIdentifier =
4347 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4348 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4356 static constexpr auto Id = llvm::omp::Modifier::PreferType;
4357 WRAPPER_CLASS_BOILERPLATE(
4366 static constexpr auto Id = llvm::omp::Modifier::Prescriptiveness;
4367 ENUM_CLASS(Value, Strict)
4376 static constexpr auto Id = llvm::omp::Modifier::PresentModifier;
4377 ENUM_CLASS(Value, Present)
4386 static constexpr auto Id = llvm::omp::Modifier::ReductionModifier;
4387 ENUM_CLASS(Value, Default, Inscan, Task);
4397 static constexpr auto Id = llvm::omp::Modifier::RefModifier;
4398 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4408 static constexpr auto Id = llvm::omp::Modifier::SelfModifier;
4409 ENUM_CLASS(Value, Self)
4418 static constexpr auto Id = llvm::omp::Modifier::StepComplexModifier;
4427 static constexpr auto Id = llvm::omp::Modifier::StepSimpleModifier;
4438 static constexpr auto Id = llvm::omp::Modifier::TaskDependenceType;
4439 using Value = common::OmpDependenceKind;
4448 static constexpr auto Id = llvm::omp::Modifier::TraitsArray;
4459 static constexpr auto Id = llvm::omp::Modifier::VariableCategory;
4460 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4470 static constexpr auto Id = llvm::omp::Modifier::OmpxHoldModifier;
4471 ENUM_CLASS(Value, Ompx_Hold)
4481using OmpDirectiveList = std::list<llvm::omp::Directive>;
4511 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4542 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4550 ENUM_CLASS(ActionTime, Compilation, Execution);
4551 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4562 using MemoryOrder = common::OmpMemoryOrderType;
4573 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4580 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4606 std::tuple<MODIFIERS(), std::list<OmpDirectiveSpecification>> t;
4618 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4634 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4637 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4646 WRAPPER_CLASS_BOILERPLATE(
4656 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4665 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4682 OmpDependenceType::Value GetDepType()
const;
4685 std::tuple<MODIFIERS(), std::optional<OmpIterationVector>> t;
4700 OmpTaskDependenceType::Value GetTaskDepType()
const;
4701 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4705 std::variant<TaskDep, OmpDoacross> u;
4742 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4758 using DeviceTypeDescription = common::OmpDeviceType;
4768 WRAPPER_CLASS_BOILERPLATE(
4775 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4792 using MemoryOrder = common::OmpMemoryOrderType;
4825 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4846 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4859 WRAPPER_CLASS_BOILERPLATE(
4872 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4939 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4976 WRAPPER_CLASS_BOILERPLATE(
4990EMPTY_CLASS(OmpNoOpenMPClause);
4995EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
5000EMPTY_CLASS(OmpNoParallelismClause);
5010 std::tuple<MODIFIERS(), ScalarIntExpr> t;
5022 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5034 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5044 ENUM_CLASS(Ordering, Concurrent)
5046 std::tuple<MODIFIERS(), Ordering> t;
5068 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
5111 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
5113 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
5128 ENUM_CLASS(SevLevel, Fatal, Warning);
5150 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
5157 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5207 WRAPPER_CLASS_BOILERPLATE(
5225 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5235 MODIFIER_BOILERPLATE(OmpContextSelector);
5236 std::tuple<MODIFIERS(),
5237 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5265 std::tuple<MODIFIERS(), ScalarIntExpr,
bool> t;
5273 llvm::omp::Clause Id()
const;
5275#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5276#include "llvm/Frontend/OpenMP/OMP.inc"
5281#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5282#include "llvm/Frontend/OpenMP/OMP.inc"
5288 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5295 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo, ExplicitBegin)
5300 return std::get<OmpDirectiveName>(t);
5302 llvm::omp::Directive DirId()
const {
5309 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5310 std::optional<OmpClauseList>, Flags>
5319 INHERITED_TUPLE_CLASS_BOILERPLATE(
5331 return std::get<OmpBeginDirective>(t);
5333 const std::optional<OmpEndDirective> &EndDir()
const {
5334 return std::get<std::optional<OmpEndDirective>>(t);
5338 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5342 WRAPPER_CLASS_BOILERPLATE(
5347 INHERITED_TUPLE_CLASS_BOILERPLATE(
5368 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5394 INHERITED_TUPLE_CLASS_BOILERPLATE(
5409 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5417 return std::get<OmpBeginSectionsDirective>(t);
5419 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5420 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5427 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5428 std::optional<OmpEndSectionsDirective>>
5437 WRAPPER_CLASS_BOILERPLATE(
5449 WRAPPER_CLASS_BOILERPLATE(
5457 WRAPPER_CLASS_BOILERPLATE(
5466 WRAPPER_CLASS_BOILERPLATE(
5483 WRAPPER_CLASS_BOILERPLATE(
5496 WRAPPER_CLASS_BOILERPLATE(
5556 INHERITED_TUPLE_CLASS_BOILERPLATE(
5561 llvm::omp::Clause GetKind()
const;
5562 bool IsCapture()
const;
5563 bool IsCompare()
const;
5569 static constexpr int None = 0;
5570 static constexpr int Read = 1;
5571 static constexpr int Write = 2;
5572 static constexpr int Update = Read | Write;
5573 static constexpr int Action = 3;
5574 static constexpr int IfTrue = 4;
5575 static constexpr int IfFalse = 8;
5576 static constexpr int Condition = 12;
5580 TypedAssignment assign;
5582 TypedExpr atom, cond;
5591 WRAPPER_CLASS_BOILERPLATE(
5652 WRAPPER_CLASS_BOILERPLATE(
5694 INHERITED_TUPLE_CLASS_BOILERPLATE(
5705struct OpenMPInvalidDirective {
5706 using EmptyTrait = std::true_type;
5707 OpenMPInvalidDirective() =
default;
5708 explicit OpenMPInvalidDirective(
bool isExtension)
5709 : isExtensionSentinel{isExtension} {}
5710 bool isExtensionSentinel{
false};
5721WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5753 std::variant<Name, ScalarDefaultCharExpr> u;
5763 ENUM_CLASS(Modifier, ReadOnly, Zero)
5770 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5775 std::tuple<ReductionOperator, AccObjectList> t;
5780 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5784 WRAPPER_CLASS_BOILERPLATE(
5790 WRAPPER_CLASS_BOILERPLATE(
5797 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5805 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5814 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5821 WRAPPER_CLASS(Num, ScalarIntExpr);
5822 WRAPPER_CLASS(Dim, ScalarIntExpr);
5824 std::variant<Num, Dim, Static> u;
5829 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5834 std::tuple<bool, ScalarIntConstantExpr> t;
5840#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5841#include "llvm/Frontend/OpenACC/ACC.inc"
5846#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5847#include "llvm/Frontend/OpenACC/ACC.inc"
5853 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5866 std::tuple<Verbatim, AccObjectListWithModifier> t;
5872 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5877 std::tuple<AccLoopDirective, AccClauseList> t;
5884 std::tuple<AccBlockDirective, AccClauseList> t;
5893EMPTY_CLASS(AccEndAtomic);
5898 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5899 std::optional<AccEndAtomic>>
5906 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5907 std::optional<AccEndAtomic>>
5915 std::optional<AccEndAtomic>>
5924 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5929 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5936 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5942 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5948 std::tuple<AccCombinedDirective, AccClauseList> t;
5956struct OpenACCCombinedConstruct {
5957 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5960 : t({std::move(a), std::nullopt, std::nullopt}) {}
5961 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5962 std::optional<AccEndCombinedDirective>>
5969 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5974EMPTY_CLASS(AccEndLoop);
5975struct OpenACCLoopConstruct {
5976 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5978 : t({std::move(a), std::nullopt, std::nullopt}) {}
5979 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5980 std::optional<AccEndLoop>>
5992 std::tuple<AccStandaloneDirective, AccClauseList> t;
6018 std::tuple<Operator, std::list<Scalar<Variable>>> t;
6023 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
6026 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
6027 std::optional<ScalarIntExpr>>
6033 std::tuple<std::optional<ScalarIntConstantExpr>,
6034 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
6037 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:1321
Definition parse-tree.h:1328
Definition parse-tree.h:1292
Definition parse-tree.h:1281
Definition parse-tree.h:1280
Definition parse-tree.h:5920
Definition parse-tree.h:5896
Definition parse-tree.h:5912
Definition parse-tree.h:5904
Definition parse-tree.h:5881
Definition parse-tree.h:5945
Definition parse-tree.h:5875
Definition parse-tree.h:5751
Definition parse-tree.h:5724
Definition parse-tree.h:5852
Definition parse-tree.h:5837
Definition parse-tree.h:5832
Definition parse-tree.h:5740
Definition parse-tree.h:5762
Definition parse-tree.h:5745
Definition parse-tree.h:5757
Definition parse-tree.h:5789
Definition parse-tree.h:5783
Definition parse-tree.h:5887
Definition parse-tree.h:5951
Definition parse-tree.h:5828
Definition parse-tree.h:5819
Definition parse-tree.h:5729
Definition parse-tree.h:5768
Definition parse-tree.h:5773
Definition parse-tree.h:5716
Definition parse-tree.h:5812
Definition parse-tree.h:5808
Definition parse-tree.h:5804
Definition parse-tree.h:5734
Definition parse-tree.h:5800
Definition parse-tree.h:5794
Definition parse-tree.h:5778
Definition parse-tree.h:903
Definition parse-tree.h:1460
Definition parse-tree.h:501
Definition parse-tree.h:3333
Definition parse-tree.h:3322
Definition parse-tree.h:2022
Definition parse-tree.h:1987
Definition parse-tree.h:1966
Definition parse-tree.h:1978
Definition parse-tree.h:2033
Definition parse-tree.h:1995
Definition parse-tree.h:3555
Definition parse-tree.h:1952
Definition parse-tree.h:1385
Definition parse-tree.h:3560
Definition parse-tree.h:3565
Definition parse-tree.h:2059
Definition parse-tree.h:2214
Definition parse-tree.h:2205
Definition parse-tree.h:2198
Definition parse-tree.h:1358
Definition parse-tree.h:1421
Definition parse-tree.h:3505
Definition parse-tree.h:1132
Definition parse-tree.h:1482
Definition parse-tree.h:1489
Definition parse-tree.h:2236
Definition parse-tree.h:3075
Definition parse-tree.h:2069
Definition parse-tree.h:3499
Definition parse-tree.h:1007
Definition parse-tree.h:6030
Definition parse-tree.h:6024
Definition parse-tree.h:6021
Definition parse-tree.h:6015
Definition parse-tree.h:3360
Definition parse-tree.h:3357
Definition parse-tree.h:3340
Definition parse-tree.h:2478
Definition parse-tree.h:2477
Definition parse-tree.h:2459
Definition parse-tree.h:2465
Definition parse-tree.h:2448
Definition parse-tree.h:2446
Definition parse-tree.h:2267
Definition parse-tree.h:2252
Definition parse-tree.h:675
Definition parse-tree.h:1884
Definition parse-tree.h:862
Definition parse-tree.h:693
Definition parse-tree.h:691
Definition parse-tree.h:2737
Definition parse-tree.h:2736
Definition parse-tree.h:2244
Definition parse-tree.h:978
Definition parse-tree.h:1495
Definition parse-tree.h:1946
Definition parse-tree.h:1662
Definition parse-tree.h:1671
Definition parse-tree.h:1670
Definition parse-tree.h:3453
Definition parse-tree.h:3446
Definition parse-tree.h:3478
Definition parse-tree.h:3450
Definition parse-tree.h:3464
Definition parse-tree.h:3474
Definition parse-tree.h:3471
Definition parse-tree.h:3468
Definition parse-tree.h:3458
Definition parse-tree.h:3444
Definition parse-tree.h:848
Definition parse-tree.h:840
Definition parse-tree.h:989
Definition parse-tree.h:1013
Definition parse-tree.h:1121
Definition parse-tree.h:1066
Definition parse-tree.h:1216
Definition parse-tree.h:2564
Definition parse-tree.h:2292
Definition parse-tree.h:3314
Definition parse-tree.h:3303
Definition parse-tree.h:3301
Definition parse-tree.h:1741
Definition parse-tree.h:2714
Definition parse-tree.h:2712
Definition parse-tree.h:306
Definition parse-tree.h:2283
Definition parse-tree.h:2274
Definition parse-tree.h:1074
Definition parse-tree.h:1552
Definition parse-tree.h:1564
Definition parse-tree.h:1862
Definition parse-tree.h:1523
Definition parse-tree.h:1572
Definition parse-tree.h:1538
Definition parse-tree.h:1578
Definition parse-tree.h:1544
Definition parse-tree.h:2053
Definition parse-tree.h:442
Definition parse-tree.h:770
Definition parse-tree.h:330
Definition parse-tree.h:617
Definition parse-tree.h:1201
Definition parse-tree.h:751
Definition parse-tree.h:920
Definition parse-tree.h:1901
Definition parse-tree.h:1590
Definition parse-tree.h:1589
Definition parse-tree.h:2379
Definition parse-tree.h:3206
Definition parse-tree.h:2399
Definition parse-tree.h:2261
Definition parse-tree.h:1436
Definition parse-tree.h:3411
Definition parse-tree.h:1245
Definition parse-tree.h:1271
Definition parse-tree.h:1254
Definition parse-tree.h:1231
Definition parse-tree.h:2618
Definition parse-tree.h:2624
Definition parse-tree.h:2632
Definition parse-tree.h:534
Definition parse-tree.h:559
Definition parse-tree.h:972
Definition parse-tree.h:1380
Definition parse-tree.h:959
Definition parse-tree.h:1813
Definition parse-tree.h:1786
Definition parse-tree.h:1827
Definition parse-tree.h:1792
Definition parse-tree.h:1831
Definition parse-tree.h:1768
Definition parse-tree.h:1783
Definition parse-tree.h:1819
Definition parse-tree.h:1801
Definition parse-tree.h:1807
Definition parse-tree.h:1810
Definition parse-tree.h:1773
Definition parse-tree.h:1798
Definition parse-tree.h:1795
Definition parse-tree.h:1780
Definition parse-tree.h:1822
Definition parse-tree.h:1804
Definition parse-tree.h:1762
Definition parse-tree.h:1759
Definition parse-tree.h:1816
Definition parse-tree.h:1753
Definition parse-tree.h:1777
Definition parse-tree.h:1789
Definition parse-tree.h:1756
Definition parse-tree.h:1749
Definition parse-tree.h:1060
Definition parse-tree.h:2155
Definition parse-tree.h:2171
Definition parse-tree.h:2149
Definition parse-tree.h:2184
Definition parse-tree.h:2161
Definition parse-tree.h:3345
Definition parse-tree.h:3195
Definition parse-tree.h:3377
Definition parse-tree.h:3088
Definition parse-tree.h:3103
Definition parse-tree.h:869
Definition parse-tree.h:2418
Definition parse-tree.h:2414
Definition parse-tree.h:2413
Definition parse-tree.h:2429
Definition parse-tree.h:2392
Definition parse-tree.h:1722
Definition parse-tree.h:1732
Definition parse-tree.h:424
Definition parse-tree.h:1646
Definition parse-tree.h:1655
Definition parse-tree.h:630
Definition parse-tree.h:1031
Definition parse-tree.h:2935
Definition parse-tree.h:2944
Definition parse-tree.h:2949
Definition parse-tree.h:2933
Definition parse-tree.h:2964
Definition parse-tree.h:2962
Definition parse-tree.h:798
Definition parse-tree.h:314
Definition parse-tree.h:1394
Definition parse-tree.h:1598
Definition parse-tree.h:3269
Definition parse-tree.h:3229
Definition parse-tree.h:3235
Definition parse-tree.h:3227
Definition parse-tree.h:3256
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:2774
Definition parse-tree.h:2772
Definition parse-tree.h:2683
Definition parse-tree.h:785
Definition parse-tree.h:663
Definition parse-tree.h:2356
Definition parse-tree.h:1337
Definition parse-tree.h:681
Definition parse-tree.h:1640
Definition parse-tree.h:894
Definition parse-tree.h:2328
Definition parse-tree.h:2324
Definition parse-tree.h:2659
Definition parse-tree.h:2658
Definition parse-tree.h:876
Definition parse-tree.h:322
Definition parse-tree.h:1304
Definition parse-tree.h:2346
Definition parse-tree.h:2344
Definition parse-tree.h:2983
Definition parse-tree.h:3521
Definition parse-tree.h:2116
Definition parse-tree.h:3008
Definition parse-tree.h:2997
Definition parse-tree.h:3019
Definition parse-tree.h:592
Definition parse-tree.h:1343
Definition parse-tree.h:644
Definition parse-tree.h:643
Definition parse-tree.h:2362
Definition parse-tree.h:2586
Definition parse-tree.h:1469
Definition parse-tree.h:4487
Definition parse-tree.h:4491
Definition parse-tree.h:4503
Definition parse-tree.h:4510
Definition parse-tree.h:4518
Definition parse-tree.h:4533
Definition parse-tree.h:5529
Definition parse-tree.h:4541
Definition parse-tree.h:4540
Definition parse-tree.h:4603
Definition parse-tree.h:5387
Definition parse-tree.h:5376
Definition parse-tree.h:4549
Definition parse-tree.h:4561
Definition parse-tree.h:5318
Definition parse-tree.h:5393
Definition parse-tree.h:4572
Definition parse-tree.h:5328
Definition parse-tree.h:4578
Definition parse-tree.h:5287
Definition parse-tree.h:5271
Definition parse-tree.h:4587
Definition parse-tree.h:3701
Definition parse-tree.h:4595
Definition parse-tree.h:5456
Definition parse-tree.h:5465
Definition parse-tree.h:5473
Definition parse-tree.h:5448
Definition parse-tree.h:5436
Definition parse-tree.h:4617
Definition parse-tree.h:4645
Definition parse-tree.h:4632
Definition parse-tree.h:4699
Definition parse-tree.h:4697
Definition parse-tree.h:4721
Definition parse-tree.h:4729
Definition parse-tree.h:4739
Definition parse-tree.h:4749
Definition parse-tree.h:4757
Definition parse-tree.h:3591
Definition parse-tree.h:5294
Definition parse-tree.h:4712
Definition parse-tree.h:4681
Definition parse-tree.h:4772
Definition parse-tree.h:4767
Definition parse-tree.h:5323
Definition parse-tree.h:5398
Definition parse-tree.h:4783
Definition parse-tree.h:5361
Definition parse-tree.h:4791
Definition parse-tree.h:4810
Definition parse-tree.h:4822
Definition parse-tree.h:4832
Definition parse-tree.h:4840
Definition parse-tree.h:5482
Definition parse-tree.h:4845
Definition parse-tree.h:4853
Definition parse-tree.h:4869
Definition parse-tree.h:4892
Definition parse-tree.h:4858
Definition parse-tree.h:4882
Definition parse-tree.h:4899
Definition parse-tree.h:3713
Definition parse-tree.h:4654
Definition parse-tree.h:4672
Definition parse-tree.h:4663
Definition parse-tree.h:4908
Definition parse-tree.h:4926
Definition parse-tree.h:3625
Definition parse-tree.h:4937
Definition parse-tree.h:4962
Definition parse-tree.h:4974
Definition parse-tree.h:4983
Definition parse-tree.h:5355
Definition parse-tree.h:5007
Definition parse-tree.h:5019
Definition parse-tree.h:5031
Definition parse-tree.h:3646
Definition parse-tree.h:3637
Definition parse-tree.h:3634
Definition parse-tree.h:5042
Definition parse-tree.h:5055
Definition parse-tree.h:5067
Definition parse-tree.h:5078
Definition parse-tree.h:3690
Definition parse-tree.h:5088
Definition parse-tree.h:5489
Definition parse-tree.h:3620
Definition parse-tree.h:5097
Definition parse-tree.h:5109
Definition parse-tree.h:5407
Definition parse-tree.h:5120
Definition parse-tree.h:5127
Definition parse-tree.h:3650
Definition parse-tree.h:3672
Definition parse-tree.h:3660
Definition parse-tree.h:3659
Definition parse-tree.h:5136
Definition parse-tree.h:5147
Definition parse-tree.h:5495
Definition parse-tree.h:5156
Definition parse-tree.h:5177
Definition parse-tree.h:5188
Definition parse-tree.h:3616
Definition parse-tree.h:3609
Definition parse-tree.h:5197
Definition parse-tree.h:5206
Definition parse-tree.h:5222
Definition parse-tree.h:5244
Definition parse-tree.h:5258
Definition parse-tree.h:5257
Definition parse-tree.h:5365
Definition parse-tree.h:5233
Definition parse-tree.h:3119
Definition parse-tree.h:5927
Definition parse-tree.h:5934
Definition parse-tree.h:5863
Definition parse-tree.h:5956
Definition parse-tree.h:5995
Definition parse-tree.h:5966
Definition parse-tree.h:5984
Definition parse-tree.h:5975
Definition parse-tree.h:5857
Definition parse-tree.h:5989
Definition parse-tree.h:5939
Definition parse-tree.h:5869
Definition parse-tree.h:5555
Definition parse-tree.h:5578
Definition parse-tree.h:5568
Definition parse-tree.h:5560
Definition parse-tree.h:5597
Definition parse-tree.h:5590
Definition parse-tree.h:5681
Definition parse-tree.h:5545
Definition parse-tree.h:5533
Definition parse-tree.h:5608
Definition parse-tree.h:5622
Definition parse-tree.h:5676
Definition parse-tree.h:5638
Definition parse-tree.h:5646
Definition parse-tree.h:5705
Definition parse-tree.h:5667
Definition parse-tree.h:5693
Definition parse-tree.h:5413
Definition parse-tree.h:5651
Definition parse-tree.h:5657
Definition parse-tree.h:379
Definition parse-tree.h:2852
Definition parse-tree.h:2815
Definition parse-tree.h:3044
Definition parse-tree.h:1856
Definition parse-tree.h:2082
Definition parse-tree.h:2081
Definition parse-tree.h:1608
Definition parse-tree.h:2042
Definition parse-tree.h:2878
Definition parse-tree.h:3164
Definition parse-tree.h:2836
Definition parse-tree.h:933
Definition parse-tree.h:3142
Definition parse-tree.h:1085
Definition parse-tree.h:1113
Definition parse-tree.h:1941
Definition parse-tree.h:1105
Definition parse-tree.h:1099
Definition parse-tree.h:1092
Definition parse-tree.h:3152
Definition parse-tree.h:3284
Definition parse-tree.h:3245
Definition parse-tree.h:576
Definition parse-tree.h:2799
Definition parse-tree.h:817
Definition parse-tree.h:2313
Definition parse-tree.h:3032
Definition parse-tree.h:3036
Definition parse-tree.h:3030
Definition parse-tree.h:1621
Definition parse-tree.h:298
Definition parse-tree.h:1707
Definition parse-tree.h:2436
Definition parse-tree.h:2501
Definition parse-tree.h:2500
Definition parse-tree.h:2514
Definition parse-tree.h:2512
Definition parse-tree.h:2491
Definition parse-tree.h:2548
Definition parse-tree.h:2546
Definition parse-tree.h:2526
Definition parse-tree.h:2192
Definition parse-tree.h:3403
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:2011
Definition parse-tree.h:362
Definition parse-tree.h:3421
Definition parse-tree.h:2578
Definition parse-tree.h:1931
Definition parse-tree.h:1222
Definition parse-tree.h:3542
Definition parse-tree.h:3514
Definition parse-tree.h:3537
Definition parse-tree.h:3050
Definition parse-tree.h:3061
Definition parse-tree.h:3214
Definition parse-tree.h:3387
Definition parse-tree.h:1698
Definition parse-tree.h:1893
Definition parse-tree.h:1689
Definition parse-tree.h:1879
Definition parse-tree.h:2597
Definition parse-tree.h:2596
Definition parse-tree.h:2609
Definition parse-tree.h:911
Definition parse-tree.h:1165
Definition parse-tree.h:1178
Definition parse-tree.h:1140
Definition parse-tree.h:1187
Definition parse-tree.h:1156
Definition parse-tree.h:1152
Definition parse-tree.h:1150
Definition parse-tree.h:1450
Definition parse-tree.h:2536
Definition parse-tree.h:2535
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:3530
Definition parse-tree.h:357
Definition parse-tree.h:2668
Definition parse-tree.h:804
Definition parse-tree.h:3128
Definition parse-tree.h:1909
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:285
Definition parse-tree.h:2862
Definition parse-tree.h:2107
Definition parse-tree.h:2100
Definition parse-tree.h:2136
Definition parse-tree.h:2132
Definition parse-tree.h:2131
Definition parse-tree.h:2094
Definition parse-tree.h:2821
Definition parse-tree.h:3766
Definition parse-tree.h:3757
Definition parse-tree.h:3727
Definition parse-tree.h:3737
Definition parse-tree.h:3750
Definition parse-tree.h:3922
Definition parse-tree.h:3933
Definition parse-tree.h:3952
Definition parse-tree.h:3943
Definition parse-tree.h:3970
Definition parse-tree.h:3961
Definition parse-tree.h:3983
Definition parse-tree.h:3996
Definition parse-tree.h:4007
Definition parse-tree.h:4019
Definition parse-tree.h:4033
Definition parse-tree.h:4046
Definition parse-tree.h:4068
Definition parse-tree.h:4080
Definition parse-tree.h:4091
Definition parse-tree.h:4101
Definition parse-tree.h:4119
Definition parse-tree.h:4131
Definition parse-tree.h:4143
Definition parse-tree.h:4155
Definition parse-tree.h:4168
Definition parse-tree.h:4178
Definition parse-tree.h:4187
Definition parse-tree.h:4197
Definition parse-tree.h:4207
Definition parse-tree.h:4222
Definition parse-tree.h:4235
Definition parse-tree.h:4271
Definition parse-tree.h:4258
Definition parse-tree.h:4244
Definition parse-tree.h:4281
Definition parse-tree.h:4294
Definition parse-tree.h:4320
Definition parse-tree.h:4310
Definition parse-tree.h:4355
Definition parse-tree.h:4331
Definition parse-tree.h:4344
Definition parse-tree.h:4365
Definition parse-tree.h:4375
Definition parse-tree.h:4385
Definition parse-tree.h:4396
Definition parse-tree.h:4407
Definition parse-tree.h:4417
Definition parse-tree.h:4426
Definition parse-tree.h:4437
Definition parse-tree.h:4447
Definition parse-tree.h:4458
Definition parse-tree.h:4469
Definition parse-tree.h:3897
Definition parse-tree.h:3807
Definition parse-tree.h:3804
Definition parse-tree.h:3787
Definition parse-tree.h:3828
Definition parse-tree.h:3794
Definition parse-tree.h:3855
Definition parse-tree.h:3870
Definition parse-tree.h:3867
Definition parse-tree.h:3880
Definition parse-tree.h:3889