9#ifndef FORTRAN_PARSER_PARSE_TREE_H_
10#define FORTRAN_PARSER_PARSE_TREE_H_
20#include "char-block.h"
21#include "characters.h"
22#include "format-specification.h"
24#include "provenance.h"
25#include "flang/Common/enum-set.h"
26#include "flang/Common/idioms.h"
27#include "flang/Common/indirection.h"
28#include "flang/Common/reference.h"
29#include "flang/Support/Fortran.h"
30#include "llvm/ADT/ArrayRef.h"
31#include "llvm/Frontend/OpenACC/ACC.h.inc"
32#include "llvm/Frontend/OpenMP/OMP.h"
33#include "llvm/Frontend/OpenMP/OMPConstants.h"
54CLASS_TRAIT(EmptyTrait)
55CLASS_TRAIT(WrapperTrait)
56CLASS_TRAIT(UnionTrait)
57CLASS_TRAIT(TupleTrait)
58CLASS_TRAIT(ConstraintTrait)
63namespace Fortran::semantics {
80#define COPY_AND_ASSIGN_BOILERPLATE(classname) \
81 classname(classname &&) = default; \
82 classname &operator=(classname &&) = default; \
83 classname(const classname &) = delete; \
84 classname &operator=(const classname &) = delete
87#define BOILERPLATE(classname) \
88 COPY_AND_ASSIGN_BOILERPLATE(classname); \
93#define EMPTY_CLASS(classname) \
96 classname(const classname &) {} \
97 classname(classname &&) {} \
98 classname &operator=(const classname &) { return *this; }; \
99 classname &operator=(classname &&) { return *this; }; \
100 using EmptyTrait = std::true_type; \
105#define UNION_CLASS_BOILERPLATE(classname) \
106 template <typename A, typename = common::NoLvalue<A>> \
107 classname(A &&x) : u(std::move(x)) {} \
108 using UnionTrait = std::true_type; \
109 BOILERPLATE(classname)
113#define TUPLE_CLASS_BOILERPLATE(classname) \
114 template <typename... Ts, typename = common::NoLvalue<Ts...>> \
115 classname(Ts &&...args) : t(std::move(args)...) {} \
116 using TupleTrait = std::true_type; \
117 BOILERPLATE(classname)
121#define WRAPPER_CLASS_BOILERPLATE(classname, type) \
122 BOILERPLATE(classname); \
123 classname(type &&x) : v(std::move(x)) {} \
124 using WrapperTrait = std::true_type; \
127#define WRAPPER_CLASS(classname, type) \
129 WRAPPER_CLASS_BOILERPLATE(classname, type); \
161struct AllocatableStmt;
162struct AsynchronousStmt;
164struct CodimensionStmt;
165struct ContiguousStmt;
172struct OldParameterStmt;
182struct EquivalenceStmt;
219struct SyncMemoryStmt;
261struct BasedPointerStmt;
279using Location =
const char *;
284 constexpr Verbatim() {}
285 COPY_AND_ASSIGN_BOILERPLATE(Verbatim);
286 using EmptyTrait = std::true_type;
295template <
typename A>
struct Scalar {
296 using ConstraintTrait = std::true_type;
297 Scalar(Scalar &&that) =
default;
298 Scalar(A &&that) : thing(std::move(that)) {}
299 Scalar &operator=(Scalar &&) =
default;
303template <
typename A>
struct Constant {
304 using ConstraintTrait = std::true_type;
305 Constant(Constant &&that) =
default;
306 Constant(A &&that) : thing(std::move(that)) {}
307 Constant &operator=(Constant &&) =
default;
311template <
typename A>
struct Integer {
312 using ConstraintTrait = std::true_type;
313 Integer(Integer &&that) =
default;
314 Integer(A &&that) : thing(std::move(that)) {}
315 Integer &operator=(Integer &&) =
default;
319template <
typename A>
struct Logical {
320 using ConstraintTrait = std::true_type;
321 Logical(Logical &&that) =
default;
322 Logical(A &&that) : thing(std::move(that)) {}
323 Logical &operator=(Logical &&) =
default;
327template <
typename A>
struct DefaultChar {
328 using ConstraintTrait = std::true_type;
329 DefaultChar(DefaultChar &&that) =
default;
330 DefaultChar(A &&that) : thing(std::move(that)) {}
331 DefaultChar &operator=(DefaultChar &&) =
default;
350using Label = common::Label;
354template <
typename A>
struct UnlabeledStatement {
355 explicit UnlabeledStatement(A &&s) : statement(std::move(s)) {}
359template <
typename A>
struct Statement :
public UnlabeledStatement<A> {
360 Statement(std::optional<long> &&lab, A &&s)
361 : UnlabeledStatement<A>{std::move(s)}, label(std::move(lab)) {}
362 std::optional<Label> label;
366EMPTY_CLASS(ErrorRecovery);
378 std::variant<common::Indirection<AccessStmt>,
400 std::variant<common::Indirection<DerivedTypeDef>,
421 std::variant<Statement<common::Indirection<ImplicitStmt>>,
432WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
439 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
453 std::tuple<std::list<OpenACCDeclarativeConstruct>,
454 std::list<OpenMPDeclarativeConstruct>,
455 std::list<common::Indirection<CompilerDirective>>,
456 std::list<Statement<common::Indirection<UseStmt>>>,
457 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
458 std::list<DeclarationConstruct>>
465 std::variant<common::Indirection<FunctionSubprogram>,
472EMPTY_CLASS(ContainsStmt);
477 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
481EMPTY_CLASS(ContinueStmt);
484EMPTY_CLASS(FailImageStmt);
498 std::variant<common::Indirection<AllocateStmt>,
556 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
565using Block = std::list<ExecutionPartConstruct>;
566WRAPPER_CLASS(ExecutionPart, Block);
573 std::variant<common::Indirection<MainProgram>,
584WRAPPER_CLASS(Program, std::list<ProgramUnit>);
588 std::string ToString()
const {
return source.ToString(); }
594WRAPPER_CLASS(Keyword,
Name);
597WRAPPER_CLASS(NamedConstant,
Name);
604WRAPPER_CLASS(DefinedOpName,
Name);
614 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
615 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
616 std::variant<DefinedOpName, IntrinsicOperator> u;
620using ObjectName =
Name;
626 TUPLE_CLASS_BOILERPLATE(ImportStmt);
627 ImportStmt(common::ImportKind &&k) : t(k, std::list<Name>{}) {}
628 ImportStmt(std::list<Name> &&n)
629 : t(common::ImportKind::Default, std::move(n)) {}
630 ImportStmt(common::ImportKind &&, std::list<Name> &&);
631 std::tuple<common::ImportKind, std::list<Name>> t;
640 TUPLE_CLASS_BOILERPLATE(
Group);
641 std::tuple<Name, std::list<Name>> t;
643 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
651 EMPTY_CLASS(Deferred);
652 std::variant<ScalarIntExpr, Star, Deferred> u;
660 WRAPPER_CLASS(StarSize, std::uint64_t);
661 std::variant<ScalarIntConstantExpr, StarSize> u;
665WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
667WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
672 std::variant<TypeParamValue, std::uint64_t> u;
678 std::variant<TypeParamValue, CharLength> u;
687 UNION_CLASS_BOILERPLATE(CharSelector);
690 std::tuple<std::optional<TypeParamValue>, ScalarIntConstantExpr> t;
693 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
694 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
695 : u{LengthAndKind{std::move(l), std::move(k)}} {}
696 std::variant<LengthSelector, LengthAndKind> u;
707 WRAPPER_CLASS_BOILERPLATE(
Real, std::optional<KindSelector>);
709 EMPTY_CLASS(DoublePrecision);
711 WRAPPER_CLASS_BOILERPLATE(
Complex, std::optional<KindSelector>);
714 WRAPPER_CLASS_BOILERPLATE(
Character, std::optional<CharSelector>);
717 WRAPPER_CLASS_BOILERPLATE(
Logical, std::optional<KindSelector>);
719 EMPTY_CLASS(DoubleComplex);
720 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
728 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
733 EMPTY_CLASS(PairVectorTypeSpec);
734 EMPTY_CLASS(QuadVectorTypeSpec);
735 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
749 std::tuple<Name, std::list<TypeParamSpec>> t;
756 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
768 EMPTY_CLASS(ClassStar);
769 EMPTY_CLASS(TypeStar);
770 WRAPPER_CLASS(Record,
Name);
779 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
786 std::tuple<CharBlock, std::optional<KindParam>> t;
792 std::tuple<CharBlock, std::optional<KindParam>> t;
798 std::tuple<CharBlock, std::optional<KindParam>> t;
802enum class Sign { Positive, Negative };
812 using EmptyTrait = std::true_type;
813 COPY_AND_ASSIGN_BOILERPLATE(Real);
817 std::tuple<Real, std::optional<KindParam>> t;
842 std::tuple<ComplexPart, ComplexPart> t;
848 std::tuple<Sign, ComplexLiteralConstant> t;
856 std::tuple<std::optional<KindParam>, std::string> t;
857 std::string GetString()
const {
return std::get<std::string>(t); }
863 std::string GetString()
const {
return v; }
870 std::tuple<bool, std::optional<KindParam>> t;
880WRAPPER_CLASS(BOZLiteralConstant, std::string);
896 ENUM_CLASS(Kind, Public, Private)
902EMPTY_CLASS(Abstract);
906 WRAPPER_CLASS(Extends,
Name);
907 std::variant<Abstract, AccessSpec, BindC, Extends> u;
914 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
918EMPTY_CLASS(SequenceStmt);
922EMPTY_CLASS(PrivateStmt);
927 std::variant<PrivateStmt, SequenceStmt> u;
933 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
941 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
946WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
953 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
958WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
966 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
972 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
977WRAPPER_CLASS(DeferredShapeSpecList,
int);
983 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
991EMPTY_CLASS(Allocatable);
993EMPTY_CLASS(Contiguous);
1014 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1015 std::list<common::Indirection<DataStmtValue>>>
1025struct ComponentDecl {
1026 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1028 std::optional<ComponentArraySpec> &&aSpec,
1029 std::optional<CoarraySpec> &&coaSpec,
1030 std::optional<Initialization> &&init)
1031 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1032 std::move(length), std::move(init)} {}
1033 std::tuple<Name, std::optional<ComponentArraySpec>,
1034 std::optional<CoarraySpec>, std::optional<CharLength>,
1035 std::optional<Initialization>>
1043 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1049 std::variant<ComponentDecl, FillDecl> u;
1057 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1058 std::list<ComponentOrFill>>
1065WRAPPER_CLASS(Pass, std::optional<Name>);
1068 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1075 std::variant<NullInit, Name> u;
1082 std::variant<Name, DeclarationTypeSpec> u;
1088 std::tuple<Name, std::optional<ProcPointerInit>> t;
1096 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1097 std::list<ProcDecl>>
1115 EMPTY_CLASS(Deferred);
1116 EMPTY_CLASS(Non_Overridable);
1117 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1123 std::tuple<Name, std::optional<Name>> t;
1135 std::tuple<std::list<BindAttr>, std::list<TypeBoundProcDecl>> t;
1139 std::tuple<Name, std::list<BindAttr>, std::list<Name>> t;
1141 std::variant<WithoutInterface, WithInterface> u;
1154WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1170 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1171 std::list<Statement<TypeBoundProcBinding>>>
1176WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1184 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1185 std::list<Statement<PrivateOrSequence>>,
1186 std::list<Statement<ComponentDefStmt>>,
1199 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1205 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1209EMPTY_CLASS(EnumDefStmt);
1214 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1218WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1221EMPTY_CLASS(EndEnumStmt);
1227 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1228 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1236 TUPLE_CLASS_BOILERPLATE(
Triplet);
1237 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1239 UNION_CLASS_BOILERPLATE(
AcValue);
1240 std::variant<Triplet, common::Indirection<Expr>,
1247 TUPLE_CLASS_BOILERPLATE(AcSpec);
1248 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1249 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1253WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1260 std::tuple<VAR, BOUND, BOUND, std::optional<BOUND>> t;
1262 const VAR &Name()
const {
return std::get<0>(t); }
1263 const BOUND &Lower()
const {
return std::get<1>(t); }
1264 const BOUND &Upper()
const {
return std::get<2>(t); }
1265 const std::optional<BOUND> &Step()
const {
return std::get<3>(t); }
1278 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1293 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1299 std::tuple<NamedConstant, ConstantExpr> t;
1303WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1306WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1309WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1314 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1321WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1324EMPTY_CLASS(AssumedRankSpec);
1332 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1333 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1339 ENUM_CLASS(Intent, In, Out, InOut)
1340 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1345WRAPPER_CLASS(RankClause, ScalarIntConstantExpr);
1355EMPTY_CLASS(Asynchronous);
1356EMPTY_CLASS(External);
1357EMPTY_CLASS(Intrinsic);
1358EMPTY_CLASS(Optional);
1359EMPTY_CLASS(Parameter);
1360EMPTY_CLASS(Protected);
1364EMPTY_CLASS(Volatile);
1369 Parameter, Pointer, Protected, RankClause, Save, Target, Value, Volatile,
1370 common::CUDADataAttr>
1381 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1382 EntityDecl(ObjectName &&name,
CharLength &&length,
1383 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1384 std::optional<Initialization> &&init)
1385 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1386 std::move(length), std::move(init)} {}
1387 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1388 std::optional<CharLength>, std::optional<Initialization>>
1396 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1406 std::tuple<AccessSpec, std::list<AccessId>> t;
1415 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1420WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1423WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1428 ENUM_CLASS(Kind, Object, Common)
1429 std::tuple<Kind, Name> t;
1435 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1441 std::tuple<Name, CoarraySpec> t;
1445WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1448WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1457using TypedAssignment =
1470 mutable TypedExpr typedExpr;
1471 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1484 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1490 mutable std::int64_t repetitions{1};
1498 std::variant<Scalar<common::Indirection<Designator>>,
1511 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1518 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1524 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1528WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1536 std::tuple<Name, ArraySpec> t;
1538 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1544 std::tuple<IntentSpec, std::list<Name>> t;
1548WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1554 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1558WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1561WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1567 ENUM_CLASS(Kind, Entity, Common)
1568 std::tuple<Kind, Name> t;
1572WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1575WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1578WRAPPER_CLASS(ValueStmt, std::list<Name>);
1581WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1586 std::tuple<Location, std::optional<Location>> t;
1592 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1601 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1602 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1608 std::tuple<Name, std::optional<ArraySpec>> t;
1616 TUPLE_CLASS_BOILERPLATE(
Block);
1617 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1619 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1620 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1621 std::list<Block> &&);
1630WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1635 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1639using Subscript = ScalarIntExpr;
1644 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1645 std::optional<Subscript>>
1653 std::variant<IntExpr, SubscriptTriplet> u;
1657using Cosubscript = ScalarIntExpr;
1668 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1671 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1678 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1687 std::tuple<ScalarLogicalExpr, common::Indirection<Expr>,
1694 UNION_CLASS_BOILERPLATE(Expr);
1698 using IntrinsicUnary::IntrinsicUnary;
1701 using IntrinsicUnary::IntrinsicUnary;
1704 using IntrinsicUnary::IntrinsicUnary;
1706 struct NOT :
public IntrinsicUnary {
1707 using IntrinsicUnary::IntrinsicUnary;
1714 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1722 using IntrinsicBinary::IntrinsicBinary;
1725 using IntrinsicBinary::IntrinsicBinary;
1728 using IntrinsicBinary::IntrinsicBinary;
1731 using IntrinsicBinary::IntrinsicBinary;
1734 using IntrinsicBinary::IntrinsicBinary;
1737 using IntrinsicBinary::IntrinsicBinary;
1740 using IntrinsicBinary::IntrinsicBinary;
1743 using IntrinsicBinary::IntrinsicBinary;
1746 using IntrinsicBinary::IntrinsicBinary;
1749 using IntrinsicBinary::IntrinsicBinary;
1752 using IntrinsicBinary::IntrinsicBinary;
1755 using IntrinsicBinary::IntrinsicBinary;
1758 using IntrinsicBinary::IntrinsicBinary;
1761 using IntrinsicBinary::IntrinsicBinary;
1764 using IntrinsicBinary::IntrinsicBinary;
1767 using IntrinsicBinary::IntrinsicBinary;
1772 using IntrinsicBinary::IntrinsicBinary;
1777 std::tuple<DefinedOpName, common::Indirection<Expr>,
1785 mutable TypedExpr typedExpr;
1789 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1794 Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
DefinedBinary,
1801 TUPLE_CLASS_BOILERPLATE(
PartRef);
1802 std::tuple<Name, std::list<SectionSubscript>, std::optional<ImageSelector>> t;
1807 UNION_CLASS_BOILERPLATE(DataRef);
1808 explicit DataRef(std::list<PartRef> &&);
1809 std::variant<Name, common::Indirection<StructureComponent>,
1825 std::tuple<DataRef, SubstringRange> t;
1830 std::tuple<CharLiteralConstant, SubstringRange> t;
1847 bool EndsInBareName()
const;
1849 std::variant<DataRef, Substring> u;
1855 mutable TypedExpr typedExpr;
1857 std::variant<common::Indirection<Designator>,
1877 std::tuple<DataRef, Name> t;
1879 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1880 const Name &Component()
const {
return std::get<Name>(t); }
1892 std::tuple<DataRef, ImageSelector> t;
1901 std::tuple<DataRef, std::list<SectionSubscript>> t;
1903 const DataRef &Base()
const {
return std::get<DataRef>(t); }
1904 const std::list<SectionSubscript> &Subscripts()
const {
1905 return std::get<std::list<SectionSubscript>>(t);
1912 mutable TypedExpr typedExpr;
1913 std::variant<Name, StructureComponent> u;
1918using BoundExpr = ScalarIntExpr;
1924 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1933 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1941 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1942 std::optional<AllocateCoarraySpec>>
1947WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1951WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1957 std::variant<StatVariable, MsgVariable> u;
1972 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
1979 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
1980 std::list<AllocOpt>>
1988 mutable TypedExpr typedExpr;
1989 std::variant<Name, StructureComponent> u;
1993WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
1999 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2005 mutable TypedAssignment typedAssignment;
2006 std::tuple<Variable, Expr> t;
2010WRAPPER_CLASS(BoundsSpec, BoundExpr);
2015 std::tuple<BoundExpr, BoundExpr> t;
2027 UNION_CLASS_BOILERPLATE(
Bounds);
2028 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2031 mutable TypedAssignment typedAssignment;
2032 std::tuple<DataRef, Bounds, Expr> t;
2040 std::tuple<LogicalExpr, AssignmentStmt> t;
2046 std::tuple<std::optional<Name>, LogicalExpr> t;
2062 std::tuple<LogicalExpr, std::optional<Name>> t;
2066WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2069WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2078 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2082 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2085 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2086 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2101 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2107 std::tuple<common::Indirection<ConcurrentHeader>,
2124WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2130 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2138 std::variant<Expr, Variable> u;
2144 std::tuple<Name, Selector> t;
2151 std::tuple<std::optional<Name>, std::list<Association>> t;
2155WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2164WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2167WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2182 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2190 std::tuple<CodimensionDecl, Selector> t;
2198 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2199 std::list<StatOrErrmsg>>
2207 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2220 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2224WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2238 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2247 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2248 std::optional<ScalarLogicalExpr>>
2259 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2270 WRAPPER_CLASS(Local, std::list<Name>);
2271 WRAPPER_CLASS(LocalInit, std::list<Name>);
2273 TUPLE_CLASS_BOILERPLATE(
Reduce);
2275 std::tuple<Operator, std::list<Name>> t;
2277 WRAPPER_CLASS(Shared, std::list<Name>);
2278 EMPTY_CLASS(DefaultNone);
2279 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2292 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2295 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2302 std::tuple<Label, std::optional<LoopControl>> t;
2308 std::tuple<std::optional<Name>, std::optional<Label>,
2309 std::optional<LoopControl>>
2314WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2325 const std::optional<LoopControl> &GetLoopControl()
const;
2326 bool IsDoNormal()
const;
2327 bool IsDoWhile()
const;
2328 bool IsDoConcurrent()
const;
2333WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2338 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2345 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2349WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2352WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2360 std::tuple<Statement<ElseIfStmt>, Block> t;
2364 std::tuple<Statement<ElseStmt>, Block> t;
2367 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2374 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2375 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2393 TUPLE_CLASS_BOILERPLATE(
Range);
2394 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2397 std::variant<CaseValue, Range> u;
2401EMPTY_CLASS(Default);
2405 std::variant<std::list<CaseValueRange>, Default> u;
2411 std::tuple<CaseSelector, std::optional<Name>> t;
2417WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2423 TUPLE_CLASS_BOILERPLATE(
Case);
2424 std::tuple<Statement<CaseStmt>, Block> t;
2427 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2437 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2446 UNION_CLASS_BOILERPLATE(
Rank);
2447 std::variant<ScalarIntConstantExpr, Star, Default> u;
2450 std::tuple<Rank, std::optional<Name>> t;
2460 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2462 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2472 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2481 UNION_CLASS_BOILERPLATE(
Guard);
2482 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2485 std::tuple<Guard, std::optional<Name>> t;
2494 std::tuple<Statement<TypeGuardStmt>, Block> t;
2496 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2502WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2505WRAPPER_CLASS(GotoStmt, Label);
2510 std::tuple<std::list<Label>, ScalarIntExpr> t;
2523 ENUM_CLASS(Kind, Stop, ErrorStop)
2525 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2532 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2536WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2543 std::variant<IntExpr, Star> u;
2546 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2550WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2555 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2564 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2570 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2578 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2591 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2594 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2605 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2608 std::tuple<LockVariable, std::list<LockStat>> t;
2614 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2618WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2628 UNION_CLASS_BOILERPLATE(
IoUnit);
2629 std::variant<Variable, common::Indirection<Expr>, Star> u;
2633using FileNameExpr = ScalarDefaultCharExpr;
2653WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2654WRAPPER_CLASS(ErrLabel, Label);
2659 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2660 Encoding, Form, Leading_Zero, Pad, Position, Round, Sign,
2661 Carriagecontrol, Convert, Dispose)
2663 std::tuple<Kind, ScalarDefaultCharExpr> t;
2665 WRAPPER_CLASS(Recl, ScalarIntExpr);
2666 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2667 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2668 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2673WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2683 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2687 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2693 UNION_CLASS_BOILERPLATE(
Format);
2694 std::variant<Expr, Label, Star> u;
2698WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2714WRAPPER_CLASS(EndLabel, Label);
2715WRAPPER_CLASS(EorLabel, Label);
2720 Kind, Advance, Blank, Decimal, Delim, Leading_Zero, Pad, Round, Sign)
2722 std::tuple<Kind, ScalarDefaultCharExpr> t;
2724 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2725 WRAPPER_CLASS(Pos, ScalarIntExpr);
2726 WRAPPER_CLASS(Rec, ScalarIntExpr);
2727 WRAPPER_CLASS(Size, ScalarIntVariable);
2729 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2737 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2744 BOILERPLATE(ReadStmt);
2745 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2746 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2747 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2748 items(std::move(its)) {}
2749 std::optional<IoUnit> iounit;
2751 std::optional<Format> format;
2754 std::list<IoControlSpec> controls;
2755 std::list<InputItem> items;
2761 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2766 BOILERPLATE(WriteStmt);
2767 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2768 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2769 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2770 items(std::move(its)) {}
2771 std::optional<IoUnit> iounit;
2773 std::optional<Format> format;
2775 std::list<IoControlSpec> controls;
2776 std::list<OutputItem> items;
2782 std::tuple<Format, std::list<OutputItem>> t;
2793 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2798 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2805WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2808 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2809 MsgVariable, StatVariable>
2814WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2824 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2829WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2833WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2836WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2839WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2880 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2881 Direct, Encoding, Form, Formatted, Iomsg, Leading_Zero,
Name, Pad,
2882 Position, Read, Readwrite, Round, Sequential, Sign, Stream, Status,
2884 Carriagecontrol, Convert, Dispose)
2885 TUPLE_CLASS_BOILERPLATE(
CharVar);
2886 std::tuple<Kind, ScalarDefaultCharVariable> t;
2889 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2890 TUPLE_CLASS_BOILERPLATE(
IntVar);
2891 std::tuple<Kind, ScalarIntVariable> t;
2894 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2895 TUPLE_CLASS_BOILERPLATE(
LogVar);
2896 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2910 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2912 std::variant<std::list<InquireSpec>,
Iolength> u;
2919WRAPPER_CLASS(ProgramStmt,
Name);
2922WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2930 ExecutionPart, std::optional<InternalSubprogramPart>,
2936WRAPPER_CLASS(ModuleStmt,
Name);
2943 std::variant<common::Indirection<FunctionSubprogram>,
2953 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2957WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2963 TUPLE_CLASS_BOILERPLATE(
Module);
2974 UNION_CLASS_BOILERPLATE(
Rename);
2976 TUPLE_CLASS_BOILERPLATE(
Names);
2977 std::tuple<Name, Name> t;
2981 std::tuple<DefinedOpName, DefinedOpName> t;
2983 std::variant<Names, Operators> u;
2989 std::tuple<Name, std::optional<Name>> t;
2995 std::tuple<ParentIdentifier, Name> t;
2999WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3012WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3015WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3033 EMPTY_CLASS(Assignment);
3034 EMPTY_CLASS(ReadFormatted);
3035 EMPTY_CLASS(ReadUnformatted);
3036 EMPTY_CLASS(WriteFormatted);
3037 EMPTY_CLASS(WriteUnformatted);
3040 ReadUnformatted, WriteFormatted, WriteUnformatted>
3048 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3052struct InterfaceStmt {
3053 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3055 InterfaceStmt(Abstract x) : u{x} {}
3057 std::variant<std::optional<GenericSpec>, Abstract> u;
3063 UNION_CLASS_BOILERPLATE(
Only);
3064 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3072 BOILERPLATE(UseStmt);
3073 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3074 template <
typename A>
3075 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3076 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3077 std::optional<ModuleNature> nature;
3079 std::variant<std::list<Rename>, std::list<Only>> u;
3097 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3098 std::list<ProcDecl>>
3109 EMPTY_CLASS(Elemental);
3110 EMPTY_CLASS(Impure);
3112 EMPTY_CLASS(Non_Recursive);
3114 EMPTY_CLASS(Recursive);
3115 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3116 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3117 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3119 Pure, Recursive, Attributes, Launch_Bounds, Cluster_Dims>
3127 TUPLE_CLASS_BOILERPLATE(Suffix);
3129 : t(std::move(rn), std::move(lbs)) {}
3130 std::tuple<std::optional<Name>, std::optional<LanguageBindingSpec>> t;
3139 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3140 std::optional<Suffix>>
3145WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3150 std::variant<Name, Star> u;
3158 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3159 std::optional<LanguageBindingSpec>>
3164WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3179 std::tuple<Statement<SubroutineStmt>,
3183 std::variant<Function, Subroutine> u;
3188 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3190 std::tuple<Kind, std::list<Name>> t;
3196 std::variant<InterfaceBody, Statement<ProcedureStmt>> u;
3200WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3206 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3212WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3215WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3221 std::variant<Name, ProcComponentRef> u;
3225WRAPPER_CLASS(AltReturnSpec, Label);
3231 WRAPPER_CLASS(PercentRef,
Expr);
3232 WRAPPER_CLASS(PercentVal,
Expr);
3233 UNION_CLASS_BOILERPLATE(ActualArg);
3235 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal>
3242 std::tuple<std::optional<Keyword>,
ActualArg> t;
3248 TUPLE_CLASS_BOILERPLATE(
Call);
3249 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3265 TUPLE_CLASS_BOILERPLATE(CallStmt);
3266 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3269 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3270 std::optional<ScalarIntExpr>>
3274 std::list<ActualArgSpec> &&args)
3275 : CallStmt(
Call{std::move(pd), std::move(args)}, std::move(ch)) {}
3276 std::tuple<Call, std::optional<Chevrons>> t;
3278 mutable TypedCall typedCall;
3302WRAPPER_CLASS(MpSubprogramStmt,
Name);
3305WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3320 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3324WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3353 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3356 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3360 std::tuple<common::Indirection<Designator>, uint64_t> t;
3362 EMPTY_CLASS(VectorAlways);
3365 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3367 std::tuple<std::uint64_t, Kind> t;
3371 std::tuple<Name, std::optional<std::uint64_t>> t;
3374 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3377 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3380 WRAPPER_CLASS_BOILERPLATE(
3383 EMPTY_CLASS(NoVector);
3384 EMPTY_CLASS(NoUnroll);
3385 EMPTY_CLASS(NoUnrollAndJam);
3386 EMPTY_CLASS(ForceInline);
3387 EMPTY_CLASS(Inline);
3388 EMPTY_CLASS(NoInline);
3390 EMPTY_CLASS(Unrecognized);
3392 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3394 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3402 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3408 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3410WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3417 std::variant<Statement<DataComponentDefStmt>,
3423 EMPTY_CLASS(MapStmt);
3424 EMPTY_CLASS(EndMapStmt);
3425 TUPLE_CLASS_BOILERPLATE(
Map);
3426 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3432 EMPTY_CLASS(UnionStmt);
3433 EMPTY_CLASS(EndUnionStmt);
3434 TUPLE_CLASS_BOILERPLATE(
Union);
3440 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3444 EMPTY_CLASS(EndStructureStmt);
3446 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3453WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3458 std::tuple<Expr, Label, Label, Label> t;
3463 std::tuple<Label, Name> t;
3468 std::tuple<Name, std::list<Label>> t;
3471WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3477#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3478 using basename::basename; \
3479 classname(basename &&b) : basename(std::move(b)) {} \
3480 using TupleTrait = std::true_type; \
3481 BOILERPLATE(classname)
3483#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3484 BOILERPLATE(classname); \
3485 using basename::basename; \
3486 classname(basename &&base) : basename(std::move(base)) {} \
3487 using WrapperTrait = std::true_type
3492struct OmpDirectiveName {
3494 constexpr OmpDirectiveName() =
default;
3495 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3496 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3500 OmpDirectiveName(
const Verbatim &name);
3501 using WrapperTrait = std::true_type;
3503 bool IsExecutionPart()
const;
3506 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3514 std::variant<TypeSpec, DeclarationTypeSpec> u;
3529 ENUM_CLASS(Kind, BlankCommonBlock);
3530 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3538 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3545 using EmptyTrait = std::true_type;
3553 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3556 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3570 WRAPPER_CLASS_BOILERPLATE(
3583 std::variant<DefinedOperator, ProcedureDesignator> u;
3592 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3604 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3609inline namespace arguments {
3612 std::variant<OmpObject, FunctionReference> u;
3616 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3628 std::tuple<OmpObject, OmpObject> t;
3639 std::tuple<std::string, TypeSpec, Name> t;
3652 std::optional<OmpCombinerExpression>>
3671inline namespace traits {
3708 TUPLE_CLASS_BOILERPLATE(
Complex);
3710 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3714 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3730 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3755 std::string ToString()
const;
3758 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3759 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3760 std::variant<Value, llvm::omp::Directive, std::string> u;
3771 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3773 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3780 std::string ToString()
const;
3782 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3791 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3798 WRAPPER_CLASS_BOILERPLATE(
3803#define MODIFIER_BOILERPLATE(...) \
3805 using Variant = std::variant<__VA_ARGS__>; \
3806 UNION_CLASS_BOILERPLATE(Modifier); \
3811#define MODIFIERS() std::optional<std::list<Modifier>>
3813inline namespace modifier {
3821 ENUM_CLASS(Value, Cgroup);
3830 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3866 ENUM_CLASS(Value, Always)
3878 ENUM_CLASS(Value, Always, Never, Auto)
3888 ENUM_CLASS(Value, Automap);
3899 ENUM_CLASS(Value, Simd)
3912 ENUM_CLASS(Value, Close)
3924 ENUM_CLASS(Value, Delete)
3945 ENUM_CLASS(Value, Sink, Source);
3956 using Value = common::OmpDependenceKind;
3958 std::tuple<Value, OmpObject> t;
3966 ENUM_CLASS(Value, Ancestor, Device_Num)
3992 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4007 ENUM_CLASS(Value, Present);
4018 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4029 ENUM_CLASS(Value, Target, Targetsync)
4043 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4051 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4059 ENUM_CLASS(Value, Conditional)
4068 ENUM_CLASS(Value, Ref, Uval, Val);
4098 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4099 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4111 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4126 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4135 ENUM_CLASS(Value, Reproducible, Unconstrained)
4148 using Extensions = std::list<PreferencePropertyExtension>;
4149 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4159 using ForeignRuntimeIdentifier =
4160 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4161 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4169 WRAPPER_CLASS_BOILERPLATE(
4178 ENUM_CLASS(Value, Strict)
4191 ENUM_CLASS(Value, Present)
4200 ENUM_CLASS(Value, Default, Inscan, Task);
4210 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4220 ENUM_CLASS(Value, Self)
4247 using Value = common::OmpDependenceKind;
4258 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4271 ENUM_CLASS(Value, Ompx_Hold)
4281using OmpDirectiveList = std::list<llvm::omp::Directive>;
4294 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4297 std::tuple<OmpAdjustOp, OmpObjectList> t;
4314 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4345 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4353 ENUM_CLASS(ActionTime, Compilation, Execution);
4354 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4365 using MemoryOrder = common::OmpMemoryOrderType;
4376 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4383 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4416 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4418 std::variant<DataSharingAttribute,
4435 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4438 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4447 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4456 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4473 OmpDependenceType::Value GetDepType()
const;
4476 EMPTY_CLASS(Source);
4478 std::variant<Sink, Source> u;
4493 OmpTaskDependenceType::Value GetTaskDepType()
const;
4494 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4498 std::variant<TaskDep, OmpDoacross> u;
4535 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4551 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4561 WRAPPER_CLASS_BOILERPLATE(
4568 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4585 using MemoryOrder = common::OmpMemoryOrderType;
4611 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4632 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4645 WRAPPER_CLASS_BOILERPLATE(
4658 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4711 MODIFIER_BOILERPLATE(
4722 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4759 WRAPPER_CLASS_BOILERPLATE(
4773EMPTY_CLASS(OmpNoOpenMPClause);
4778EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4783EMPTY_CLASS(OmpNoParallelismClause);
4793 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4805 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4817 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4827 ENUM_CLASS(Ordering, Concurrent)
4829 std::tuple<MODIFIERS(), Ordering> t;
4851 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4894 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4896 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4911 ENUM_CLASS(SevLevel, Fatal, Warning);
4933 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4940 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
4983 WRAPPER_CLASS_BOILERPLATE(
5001 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5011 MODIFIER_BOILERPLATE(OmpContextSelector);
5012 std::tuple<MODIFIERS(),
5013 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5027 llvm::omp::Clause Id()
const;
5029#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5030#include "llvm/Frontend/OpenMP/OMP.inc"
5035#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5036#include "llvm/Frontend/OpenMP/OMP.inc"
5042 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5049 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo)
5054 return std::get<OmpDirectiveName>(t);
5056 llvm::omp::Directive DirId()
const {
5063 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5064 std::optional<OmpClauseList>, Flags>
5073 INHERITED_TUPLE_CLASS_BOILERPLATE(
5085 return std::get<OmpBeginDirective>(t);
5087 const std::optional<OmpEndDirective> &EndDir()
const {
5088 return std::get<std::optional<OmpEndDirective>>(t);
5092 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5096 WRAPPER_CLASS_BOILERPLATE(
5117 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5126 WRAPPER_CLASS_BOILERPLATE(
5144 INHERITED_TUPLE_CLASS_BOILERPLATE(
5159 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5167 return std::get<OmpBeginSectionsDirective>(t);
5169 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5170 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5177 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5178 std::optional<OmpEndSectionsDirective>>
5187 WRAPPER_CLASS_BOILERPLATE(
5199 WRAPPER_CLASS_BOILERPLATE(
5207 WRAPPER_CLASS_BOILERPLATE(
5216 WRAPPER_CLASS_BOILERPLATE(
5224 WRAPPER_CLASS_BOILERPLATE(
5305 INHERITED_TUPLE_CLASS_BOILERPLATE(
5310 llvm::omp::Clause GetKind()
const;
5311 bool IsCapture()
const;
5312 bool IsCompare()
const;
5318 static constexpr int None = 0;
5319 static constexpr int Read = 1;
5320 static constexpr int Write = 2;
5321 static constexpr int Update = Read | Write;
5322 static constexpr int Action = 3;
5323 static constexpr int IfTrue = 4;
5324 static constexpr int IfFalse = 8;
5325 static constexpr int Condition = 12;
5329 TypedAssignment assign;
5331 TypedExpr atom, cond;
5340 WRAPPER_CLASS_BOILERPLATE(
5401 WRAPPER_CLASS_BOILERPLATE(
5424struct OpenMPLoopConstruct {
5425 TUPLE_CLASS_BOILERPLATE(OpenMPLoopConstruct);
5427 : t({std::move(a), Block{}, std::nullopt}) {}
5430 return std::get<OmpBeginLoopDirective>(t);
5432 const std::optional<OmpEndLoopDirective> &EndDir()
const {
5433 return std::get<std::optional<OmpEndLoopDirective>>(t);
5436 const OpenMPLoopConstruct *GetNestedConstruct()
const;
5439 std::tuple<OmpBeginLoopDirective, Block, std::optional<OmpEndLoopDirective>>
5463 INHERITED_TUPLE_CLASS_BOILERPLATE(
5469 using EmptyTrait = std::true_type;
5480WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5512 std::variant<Name, ScalarDefaultCharExpr> u;
5522 ENUM_CLASS(Modifier, ReadOnly, Zero)
5529 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5534 std::tuple<ReductionOperator, AccObjectList> t;
5539 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5543 WRAPPER_CLASS_BOILERPLATE(
5549 WRAPPER_CLASS_BOILERPLATE(
5556 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5564 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5573 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5580 WRAPPER_CLASS(Num, ScalarIntExpr);
5581 WRAPPER_CLASS(Dim, ScalarIntExpr);
5583 std::variant<Num, Dim, Static> u;
5588 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5593 std::tuple<bool, ScalarIntConstantExpr> t;
5599#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5600#include "llvm/Frontend/OpenACC/ACC.inc"
5605#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5606#include "llvm/Frontend/OpenACC/ACC.inc"
5612 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5625 std::tuple<Verbatim, AccObjectListWithModifier> t;
5631 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5636 std::tuple<AccLoopDirective, AccClauseList> t;
5643 std::tuple<AccBlockDirective, AccClauseList> t;
5652EMPTY_CLASS(AccEndAtomic);
5657 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5658 std::optional<AccEndAtomic>>
5665 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5666 std::optional<AccEndAtomic>>
5674 std::optional<AccEndAtomic>>
5683 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5688 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5695 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5701 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5707 std::tuple<AccCombinedDirective, AccClauseList> t;
5715struct OpenACCCombinedConstruct {
5716 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5719 : t({std::move(a), std::nullopt, std::nullopt}) {}
5720 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5721 std::optional<AccEndCombinedDirective>>
5728 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5733EMPTY_CLASS(AccEndLoop);
5734struct OpenACCLoopConstruct {
5735 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5737 : t({std::move(a), std::nullopt, std::nullopt}) {}
5738 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5739 std::optional<AccEndLoop>>
5751 std::tuple<AccStandaloneDirective, AccClauseList> t;
5777 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5782 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5785 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5786 std::optional<ScalarIntExpr>>
5792 std::tuple<std::optional<ScalarIntConstantExpr>,
5793 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5796 std::tuple<Directive, std::optional<DoConstruct>> t;
Definition indirection.h:127
Definition indirection.h:31
Definition reference.h:18
Definition char-block.h:28
Definition parse-state.h:35
Definition check-expression.h:19
Definition expression.h:936
Definition expression.h:926
Definition parse-tree.h:1275
Definition parse-tree.h:1282
Definition parse-tree.h:1246
Definition parse-tree.h:1235
Definition parse-tree.h:1234
Definition parse-tree.h:5679
Definition parse-tree.h:5655
Definition parse-tree.h:5671
Definition parse-tree.h:5663
Definition parse-tree.h:5640
Definition parse-tree.h:5704
Definition parse-tree.h:5634
Definition parse-tree.h:5510
Definition parse-tree.h:5483
Definition parse-tree.h:5611
Definition parse-tree.h:5596
Definition parse-tree.h:5591
Definition parse-tree.h:5499
Definition parse-tree.h:5521
Definition parse-tree.h:5504
Definition parse-tree.h:5516
Definition parse-tree.h:5548
Definition parse-tree.h:5542
Definition parse-tree.h:5646
Definition parse-tree.h:5710
Definition parse-tree.h:5587
Definition parse-tree.h:5578
Definition parse-tree.h:5488
Definition parse-tree.h:5527
Definition parse-tree.h:5532
Definition parse-tree.h:5475
Definition parse-tree.h:5571
Definition parse-tree.h:5567
Definition parse-tree.h:5563
Definition parse-tree.h:5493
Definition parse-tree.h:5559
Definition parse-tree.h:5553
Definition parse-tree.h:5537
Definition parse-tree.h:895
Definition parse-tree.h:1404
Definition parse-tree.h:496
Definition parse-tree.h:3240
Definition parse-tree.h:3230
Definition parse-tree.h:1966
Definition parse-tree.h:1931
Definition parse-tree.h:1910
Definition parse-tree.h:1922
Definition parse-tree.h:1977
Definition parse-tree.h:1939
Definition parse-tree.h:3456
Definition parse-tree.h:1896
Definition parse-tree.h:1330
Definition parse-tree.h:3461
Definition parse-tree.h:3466
Definition parse-tree.h:2003
Definition parse-tree.h:2158
Definition parse-tree.h:2149
Definition parse-tree.h:2142
Definition parse-tree.h:1312
Definition parse-tree.h:1365
Definition parse-tree.h:3406
Definition parse-tree.h:1113
Definition parse-tree.h:1426
Definition parse-tree.h:1433
Definition parse-tree.h:2180
Definition parse-tree.h:3018
Definition parse-tree.h:2013
Definition parse-tree.h:3400
Definition parse-tree.h:5789
Definition parse-tree.h:5783
Definition parse-tree.h:5780
Definition parse-tree.h:5774
Definition parse-tree.h:3267
Definition parse-tree.h:3264
Definition parse-tree.h:3247
Definition parse-tree.h:2422
Definition parse-tree.h:2421
Definition parse-tree.h:2403
Definition parse-tree.h:2409
Definition parse-tree.h:2392
Definition parse-tree.h:2390
Definition parse-tree.h:2211
Definition parse-tree.h:2196
Definition parse-tree.h:670
Definition parse-tree.h:1828
Definition parse-tree.h:854
Definition parse-tree.h:688
Definition parse-tree.h:686
Definition parse-tree.h:2681
Definition parse-tree.h:2680
Definition parse-tree.h:2188
Definition parse-tree.h:970
Definition parse-tree.h:1439
Definition parse-tree.h:1890
Definition parse-tree.h:1606
Definition parse-tree.h:1615
Definition parse-tree.h:1614
Definition parse-tree.h:3358
Definition parse-tree.h:3351
Definition parse-tree.h:3355
Definition parse-tree.h:3369
Definition parse-tree.h:3379
Definition parse-tree.h:3376
Definition parse-tree.h:3373
Definition parse-tree.h:3363
Definition parse-tree.h:3349
Definition parse-tree.h:840
Definition parse-tree.h:832
Definition parse-tree.h:981
Definition parse-tree.h:994
Definition parse-tree.h:1102
Definition parse-tree.h:1047
Definition parse-tree.h:1197
Definition parse-tree.h:2508
Definition parse-tree.h:2236
Definition parse-tree.h:1685
Definition parse-tree.h:2658
Definition parse-tree.h:2656
Definition parse-tree.h:303
Definition parse-tree.h:2227
Definition parse-tree.h:2218
Definition parse-tree.h:1055
Definition parse-tree.h:1496
Definition parse-tree.h:1508
Definition parse-tree.h:1806
Definition parse-tree.h:1467
Definition parse-tree.h:1516
Definition parse-tree.h:1482
Definition parse-tree.h:1522
Definition parse-tree.h:1488
Definition parse-tree.h:1997
Definition parse-tree.h:437
Definition parse-tree.h:764
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1182
Definition parse-tree.h:746
Definition parse-tree.h:912
Definition parse-tree.h:1845
Definition parse-tree.h:1534
Definition parse-tree.h:1533
Definition parse-tree.h:2323
Definition parse-tree.h:3148
Definition parse-tree.h:2343
Definition parse-tree.h:2205
Definition parse-tree.h:1380
Definition parse-tree.h:3318
Definition parse-tree.h:1226
Definition parse-tree.h:1212
Definition parse-tree.h:2562
Definition parse-tree.h:2568
Definition parse-tree.h:2576
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:964
Definition parse-tree.h:951
Definition parse-tree.h:1757
Definition parse-tree.h:1730
Definition parse-tree.h:1771
Definition parse-tree.h:1736
Definition parse-tree.h:1775
Definition parse-tree.h:1712
Definition parse-tree.h:1727
Definition parse-tree.h:1763
Definition parse-tree.h:1745
Definition parse-tree.h:1751
Definition parse-tree.h:1754
Definition parse-tree.h:1717
Definition parse-tree.h:1742
Definition parse-tree.h:1739
Definition parse-tree.h:1724
Definition parse-tree.h:1766
Definition parse-tree.h:1748
Definition parse-tree.h:1706
Definition parse-tree.h:1703
Definition parse-tree.h:1760
Definition parse-tree.h:1697
Definition parse-tree.h:1721
Definition parse-tree.h:1733
Definition parse-tree.h:1700
Definition parse-tree.h:1693
Definition parse-tree.h:1041
Definition parse-tree.h:2099
Definition parse-tree.h:2115
Definition parse-tree.h:2093
Definition parse-tree.h:2128
Definition parse-tree.h:2105
Definition parse-tree.h:3252
Definition parse-tree.h:3137
Definition parse-tree.h:3284
Definition parse-tree.h:3031
Definition parse-tree.h:3046
Definition parse-tree.h:861
Definition parse-tree.h:2362
Definition parse-tree.h:2358
Definition parse-tree.h:2357
Definition parse-tree.h:2373
Definition parse-tree.h:2336
Definition parse-tree.h:1666
Definition parse-tree.h:1676
Definition parse-tree.h:419
Definition parse-tree.h:1590
Definition parse-tree.h:1599
Definition parse-tree.h:625
Definition parse-tree.h:1012
Definition parse-tree.h:2879
Definition parse-tree.h:2888
Definition parse-tree.h:2893
Definition parse-tree.h:2877
Definition parse-tree.h:2908
Definition parse-tree.h:2906
Definition parse-tree.h:790
Definition parse-tree.h:311
Definition parse-tree.h:1338
Definition parse-tree.h:1542
Definition parse-tree.h:3204
Definition parse-tree.h:3171
Definition parse-tree.h:3177
Definition parse-tree.h:3169
Definition parse-tree.h:3194
Definition parse-tree.h:475
Definition parse-tree.h:463
Definition parse-tree.h:713
Definition parse-tree.h:710
Definition parse-tree.h:716
Definition parse-tree.h:706
Definition parse-tree.h:704
Definition parse-tree.h:2718
Definition parse-tree.h:2716
Definition parse-tree.h:2627
Definition parse-tree.h:777
Definition parse-tree.h:658
Definition parse-tree.h:2300
Definition parse-tree.h:1291
Definition parse-tree.h:676
Definition parse-tree.h:1584
Definition parse-tree.h:886
Definition parse-tree.h:2272
Definition parse-tree.h:2268
Definition parse-tree.h:2603
Definition parse-tree.h:2602
Definition parse-tree.h:868
Definition parse-tree.h:319
Definition parse-tree.h:1258
Definition parse-tree.h:2290
Definition parse-tree.h:2288
Definition parse-tree.h:2927
Definition parse-tree.h:3422
Definition parse-tree.h:2060
Definition parse-tree.h:2951
Definition parse-tree.h:2941
Definition parse-tree.h:2962
Definition parse-tree.h:587
Definition parse-tree.h:1297
Definition parse-tree.h:639
Definition parse-tree.h:638
Definition parse-tree.h:2306
Definition parse-tree.h:2530
Definition parse-tree.h:1413
Definition parse-tree.h:4287
Definition parse-tree.h:4293
Definition parse-tree.h:4291
Definition parse-tree.h:4306
Definition parse-tree.h:4313
Definition parse-tree.h:4321
Definition parse-tree.h:4336
Definition parse-tree.h:5278
Definition parse-tree.h:4344
Definition parse-tree.h:4343
Definition parse-tree.h:4352
Definition parse-tree.h:4364
Definition parse-tree.h:5072
Definition parse-tree.h:5415
Definition parse-tree.h:5143
Definition parse-tree.h:4375
Definition parse-tree.h:5082
Definition parse-tree.h:4381
Definition parse-tree.h:5041
Definition parse-tree.h:5025
Definition parse-tree.h:4390
Definition parse-tree.h:3591
Definition parse-tree.h:4398
Definition parse-tree.h:5186
Definition parse-tree.h:4415
Definition parse-tree.h:4433
Definition parse-tree.h:4492
Definition parse-tree.h:4490
Definition parse-tree.h:4514
Definition parse-tree.h:4522
Definition parse-tree.h:4532
Definition parse-tree.h:4542
Definition parse-tree.h:4550
Definition parse-tree.h:3492
Definition parse-tree.h:5048
Definition parse-tree.h:4505
Definition parse-tree.h:4472
Definition parse-tree.h:4565
Definition parse-tree.h:4560
Definition parse-tree.h:5077
Definition parse-tree.h:5419
Definition parse-tree.h:5148
Definition parse-tree.h:4576
Definition parse-tree.h:5110
Definition parse-tree.h:4584
Definition parse-tree.h:4597
Definition parse-tree.h:4608
Definition parse-tree.h:4618
Definition parse-tree.h:4626
Definition parse-tree.h:4631
Definition parse-tree.h:4639
Definition parse-tree.h:4655
Definition parse-tree.h:4678
Definition parse-tree.h:4644
Definition parse-tree.h:4668
Definition parse-tree.h:4685
Definition parse-tree.h:3603
Definition parse-tree.h:4445
Definition parse-tree.h:4463
Definition parse-tree.h:4454
Definition parse-tree.h:4694
Definition parse-tree.h:4709
Definition parse-tree.h:4720
Definition parse-tree.h:4745
Definition parse-tree.h:4757
Definition parse-tree.h:4766
Definition parse-tree.h:5104
Definition parse-tree.h:4790
Definition parse-tree.h:4802
Definition parse-tree.h:4814
Definition parse-tree.h:3537
Definition parse-tree.h:3528
Definition parse-tree.h:3525
Definition parse-tree.h:4825
Definition parse-tree.h:4838
Definition parse-tree.h:4850
Definition parse-tree.h:4861
Definition parse-tree.h:3581
Definition parse-tree.h:4871
Definition parse-tree.h:4880
Definition parse-tree.h:4892
Definition parse-tree.h:4903
Definition parse-tree.h:4910
Definition parse-tree.h:3541
Definition parse-tree.h:3563
Definition parse-tree.h:3551
Definition parse-tree.h:3550
Definition parse-tree.h:4919
Definition parse-tree.h:4930
Definition parse-tree.h:4939
Definition parse-tree.h:4954
Definition parse-tree.h:4964
Definition parse-tree.h:3517
Definition parse-tree.h:3510
Definition parse-tree.h:4973
Definition parse-tree.h:4982
Definition parse-tree.h:4998
Definition parse-tree.h:5020
Definition parse-tree.h:5009
Definition parse-tree.h:3062
Definition parse-tree.h:5686
Definition parse-tree.h:5693
Definition parse-tree.h:5622
Definition parse-tree.h:5715
Definition parse-tree.h:5754
Definition parse-tree.h:5725
Definition parse-tree.h:5743
Definition parse-tree.h:5734
Definition parse-tree.h:5616
Definition parse-tree.h:5748
Definition parse-tree.h:5698
Definition parse-tree.h:5628
Definition parse-tree.h:5304
Definition parse-tree.h:5137
Definition parse-tree.h:5327
Definition parse-tree.h:5317
Definition parse-tree.h:5309
Definition parse-tree.h:5346
Definition parse-tree.h:5339
Definition parse-tree.h:5450
Definition parse-tree.h:5294
Definition parse-tree.h:5125
Definition parse-tree.h:5282
Definition parse-tree.h:5206
Definition parse-tree.h:5215
Definition parse-tree.h:5223
Definition parse-tree.h:5198
Definition parse-tree.h:5357
Definition parse-tree.h:5371
Definition parse-tree.h:5445
Definition parse-tree.h:5387
Definition parse-tree.h:5233
Definition parse-tree.h:5395
Definition parse-tree.h:5468
Definition parse-tree.h:5424
Definition parse-tree.h:5462
Definition parse-tree.h:5239
Definition parse-tree.h:5157
Definition parse-tree.h:5163
Definition parse-tree.h:5400
Definition parse-tree.h:5406
Definition parse-tree.h:5245
Definition parse-tree.h:5114
Definition parse-tree.h:376
Definition parse-tree.h:2796
Definition parse-tree.h:2759
Definition parse-tree.h:2987
Definition parse-tree.h:1800
Definition parse-tree.h:2026
Definition parse-tree.h:2025
Definition parse-tree.h:1552
Definition parse-tree.h:1986
Definition parse-tree.h:2822
Definition parse-tree.h:3107
Definition parse-tree.h:2780
Definition parse-tree.h:925
Definition parse-tree.h:3085
Definition parse-tree.h:1066
Definition parse-tree.h:1094
Definition parse-tree.h:1885
Definition parse-tree.h:1086
Definition parse-tree.h:1080
Definition parse-tree.h:1073
Definition parse-tree.h:3095
Definition parse-tree.h:3219
Definition parse-tree.h:3187
Definition parse-tree.h:571
Definition parse-tree.h:2743
Definition parse-tree.h:809
Definition parse-tree.h:2257
Definition parse-tree.h:2975
Definition parse-tree.h:2979
Definition parse-tree.h:2973
Definition parse-tree.h:1565
Definition parse-tree.h:295
Definition parse-tree.h:1651
Definition parse-tree.h:2380
Definition parse-tree.h:2445
Definition parse-tree.h:2444
Definition parse-tree.h:2458
Definition parse-tree.h:2456
Definition parse-tree.h:2435
Definition parse-tree.h:2492
Definition parse-tree.h:2490
Definition parse-tree.h:2470
Definition parse-tree.h:2136
Definition parse-tree.h:3310
Definition parse-tree.h:846
Definition parse-tree.h:783
Definition parse-tree.h:821
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1955
Definition parse-tree.h:359
Definition parse-tree.h:3328
Definition parse-tree.h:2522
Definition parse-tree.h:1875
Definition parse-tree.h:1203
Definition parse-tree.h:3443
Definition parse-tree.h:3415
Definition parse-tree.h:3438
Definition parse-tree.h:2993
Definition parse-tree.h:3004
Definition parse-tree.h:3156
Definition parse-tree.h:3294
Definition parse-tree.h:1642
Definition parse-tree.h:1837
Definition parse-tree.h:1633
Definition parse-tree.h:1823
Definition parse-tree.h:2541
Definition parse-tree.h:2540
Definition parse-tree.h:2553
Definition parse-tree.h:903
Definition parse-tree.h:1146
Definition parse-tree.h:1159
Definition parse-tree.h:1121
Definition parse-tree.h:1168
Definition parse-tree.h:1137
Definition parse-tree.h:1133
Definition parse-tree.h:1131
Definition parse-tree.h:1394
Definition parse-tree.h:2480
Definition parse-tree.h:2479
Definition parse-tree.h:931
Definition parse-tree.h:939
Definition parse-tree.h:740
Definition parse-tree.h:649
Definition parse-tree.h:753
Definition parse-tree.h:3431
Definition parse-tree.h:354
Definition parse-tree.h:2612
Definition parse-tree.h:796
Definition parse-tree.h:3071
Definition parse-tree.h:1853
Definition parse-tree.h:726
Definition parse-tree.h:731
Definition parse-tree.h:282
Definition parse-tree.h:2806
Definition parse-tree.h:2051
Definition parse-tree.h:2044
Definition parse-tree.h:2080
Definition parse-tree.h:2076
Definition parse-tree.h:2075
Definition parse-tree.h:2038
Definition parse-tree.h:2765
Definition parse-tree.h:3665
Definition parse-tree.h:3656
Definition parse-tree.h:3626
Definition parse-tree.h:3615
Definition parse-tree.h:3610
Definition parse-tree.h:3636
Definition parse-tree.h:3649
Definition parse-tree.h:3820
Definition parse-tree.h:3837
Definition parse-tree.h:3829
Definition parse-tree.h:3853
Definition parse-tree.h:3845
Definition parse-tree.h:3865
Definition parse-tree.h:3877
Definition parse-tree.h:3887
Definition parse-tree.h:3898
Definition parse-tree.h:3911
Definition parse-tree.h:3923
Definition parse-tree.h:3944
Definition parse-tree.h:3955
Definition parse-tree.h:3965
Definition parse-tree.h:3974
Definition parse-tree.h:3991
Definition parse-tree.h:4006
Definition parse-tree.h:4017
Definition parse-tree.h:4028
Definition parse-tree.h:4040
Definition parse-tree.h:4050
Definition parse-tree.h:4058
Definition parse-tree.h:4067
Definition parse-tree.h:4076
Definition parse-tree.h:4110
Definition parse-tree.h:4097
Definition parse-tree.h:4084
Definition parse-tree.h:4134
Definition parse-tree.h:4125
Definition parse-tree.h:4168
Definition parse-tree.h:4144
Definition parse-tree.h:4157
Definition parse-tree.h:4177
Definition parse-tree.h:4190
Definition parse-tree.h:4199
Definition parse-tree.h:4209
Definition parse-tree.h:4219
Definition parse-tree.h:4228
Definition parse-tree.h:4236
Definition parse-tree.h:4246
Definition parse-tree.h:4257
Definition parse-tree.h:4270
Definition parse-tree.h:3796
Definition parse-tree.h:3706
Definition parse-tree.h:3703
Definition parse-tree.h:3686
Definition parse-tree.h:3727
Definition parse-tree.h:3693
Definition parse-tree.h:3754
Definition parse-tree.h:3769
Definition parse-tree.h:3766
Definition parse-tree.h:3779
Definition parse-tree.h:3788