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 };
809struct RealLiteralConstant {
810 BOILERPLATE(RealLiteralConstant);
812 COPY_AND_ASSIGN_BOILERPLATE(Real);
816 RealLiteralConstant(
Real &&r, std::optional<KindParam> &&k)
817 : real{std::move(r)}, kind{std::move(k)} {}
819 std::optional<KindParam> kind;
844 std::tuple<ComplexPart, ComplexPart> t;
850 std::tuple<Sign, ComplexLiteralConstant> t;
858 std::tuple<std::optional<KindParam>, std::string> t;
859 std::string GetString()
const {
return std::get<std::string>(t); }
865 std::string GetString()
const {
return v; }
872 std::tuple<bool, std::optional<KindParam>> t;
882WRAPPER_CLASS(BOZLiteralConstant, std::string);
898 ENUM_CLASS(Kind, Public, Private)
904EMPTY_CLASS(Abstract);
908 WRAPPER_CLASS(Extends,
Name);
909 std::variant<Abstract, AccessSpec, BindC, Extends> u;
916 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
920EMPTY_CLASS(SequenceStmt);
924EMPTY_CLASS(PrivateStmt);
929 std::variant<PrivateStmt, SequenceStmt> u;
935 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
943 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
948WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
955 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
960WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
968 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
974 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
979WRAPPER_CLASS(DeferredShapeSpecList,
int);
985 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
993EMPTY_CLASS(Allocatable);
995EMPTY_CLASS(Contiguous);
1016 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1017 std::list<common::Indirection<DataStmtValue>>>
1027struct ComponentDecl {
1028 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1030 std::optional<ComponentArraySpec> &&aSpec,
1031 std::optional<CoarraySpec> &&coaSpec,
1032 std::optional<Initialization> &&init)
1033 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1034 std::move(length), std::move(init)} {}
1035 std::tuple<Name, std::optional<ComponentArraySpec>,
1036 std::optional<CoarraySpec>, std::optional<CharLength>,
1037 std::optional<Initialization>>
1045 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1051 std::variant<ComponentDecl, FillDecl> u;
1059 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1060 std::list<ComponentOrFill>>
1067WRAPPER_CLASS(Pass, std::optional<Name>);
1070 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1077 std::variant<NullInit, Name> u;
1084 std::variant<Name, DeclarationTypeSpec> u;
1090 std::tuple<Name, std::optional<ProcPointerInit>> t;
1098 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1099 std::list<ProcDecl>>
1117 EMPTY_CLASS(Deferred);
1118 EMPTY_CLASS(Non_Overridable);
1119 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1125 std::tuple<Name, std::optional<Name>> t;
1135 struct WithoutInterface {
1136 BOILERPLATE(WithoutInterface);
1138 std::list<BindAttr> &&as, std::list<TypeBoundProcDecl> &&ds)
1139 : attributes(std::move(as)), declarations(std::move(ds)) {}
1140 std::list<BindAttr> attributes;
1141 std::list<TypeBoundProcDecl> declarations;
1143 struct WithInterface {
1144 BOILERPLATE(WithInterface);
1145 WithInterface(
Name &&n, std::list<BindAttr> &&as, std::list<Name> &&bs)
1146 : interfaceName(std::move(n)), attributes(std::move(as)),
1147 bindingNames(std::move(bs)) {}
1149 std::list<BindAttr> attributes;
1150 std::list<Name> bindingNames;
1152 std::variant<WithoutInterface, WithInterface> u;
1165WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1181 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1182 std::list<Statement<TypeBoundProcBinding>>>
1187WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1195 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1196 std::list<Statement<PrivateOrSequence>>,
1197 std::list<Statement<ComponentDefStmt>>,
1210 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1216 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1220EMPTY_CLASS(EnumDefStmt);
1225 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1229WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1232EMPTY_CLASS(EndEnumStmt);
1238 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1239 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1247 TUPLE_CLASS_BOILERPLATE(
Triplet);
1248 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1250 UNION_CLASS_BOILERPLATE(
AcValue);
1251 std::variant<Triplet, common::Indirection<Expr>,
1258 TUPLE_CLASS_BOILERPLATE(AcSpec);
1259 explicit AcSpec(
TypeSpec &&ts) : t(std::move(ts), std::list<AcValue>()) {}
1260 std::tuple<std::optional<TypeSpec>, std::list<AcValue>> t;
1264WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1269template <
typename VAR,
typename BOUND>
struct LoopBounds {
1270 LoopBounds(LoopBounds &&that) =
default;
1272 VAR &&name, BOUND &&lower, BOUND &&upper, std::optional<BOUND> &&step)
1273 : name{std::move(name)}, lower{std::move(lower)}, upper{std::move(upper)},
1274 step{std::move(step)} {}
1275 LoopBounds &operator=(LoopBounds &&) =
default;
1278 std::optional<BOUND> step;
1291 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1306 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1312 std::tuple<NamedConstant, ConstantExpr> t;
1316WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1319WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1322WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1327 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1334WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1337EMPTY_CLASS(AssumedRankSpec);
1345 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1346 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1352 ENUM_CLASS(Intent, In, Out, InOut)
1353 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1363EMPTY_CLASS(Asynchronous);
1364EMPTY_CLASS(External);
1365EMPTY_CLASS(Intrinsic);
1366EMPTY_CLASS(Optional);
1367EMPTY_CLASS(Parameter);
1368EMPTY_CLASS(Protected);
1372EMPTY_CLASS(Volatile);
1377 Parameter, Pointer, Protected, Save, Target, Value, Volatile,
1378 common::CUDADataAttr>
1389 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1390 EntityDecl(ObjectName &&name,
CharLength &&length,
1391 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1392 std::optional<Initialization> &&init)
1393 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1394 std::move(length), std::move(init)} {}
1395 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1396 std::optional<CharLength>, std::optional<Initialization>>
1404 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1414 std::tuple<AccessSpec, std::list<AccessId>> t;
1423 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1428WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1431WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1436 ENUM_CLASS(Kind, Object, Common)
1437 std::tuple<Kind, Name> t;
1443 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1449 std::tuple<Name, CoarraySpec> t;
1453WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1456WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1465using TypedAssignment =
1478 mutable TypedExpr typedExpr;
1479 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1492 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1498 mutable std::int64_t repetitions{1};
1506 std::variant<Scalar<common::Indirection<Designator>>,
1519 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1526 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1532 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1536WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1544 std::tuple<Name, ArraySpec> t;
1546 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1552 std::tuple<IntentSpec, std::list<Name>> t;
1556WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1562 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1566WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1569WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1575 ENUM_CLASS(Kind, Entity, Common)
1576 std::tuple<Kind, Name> t;
1580WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1583WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1586WRAPPER_CLASS(ValueStmt, std::list<Name>);
1589WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1594 std::tuple<Location, std::optional<Location>> t;
1600 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1609 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1610 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1616 std::tuple<Name, std::optional<ArraySpec>> t;
1624 TUPLE_CLASS_BOILERPLATE(
Block);
1625 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1627 WRAPPER_CLASS_BOILERPLATE(CommonStmt, std::list<Block>);
1628 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1629 std::list<Block> &&);
1638WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1643 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1647using Subscript = ScalarIntExpr;
1652 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1653 std::optional<Subscript>>
1661 std::variant<IntExpr, SubscriptTriplet> u;
1665using Cosubscript = ScalarIntExpr;
1676 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1679 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1686 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1691 UNION_CLASS_BOILERPLATE(Expr);
1695 using IntrinsicUnary::IntrinsicUnary;
1698 using IntrinsicUnary::IntrinsicUnary;
1701 using IntrinsicUnary::IntrinsicUnary;
1703 struct NOT :
public IntrinsicUnary {
1704 using IntrinsicUnary::IntrinsicUnary;
1711 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1719 using IntrinsicBinary::IntrinsicBinary;
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;
1769 using IntrinsicBinary::IntrinsicBinary;
1774 std::tuple<DefinedOpName, common::Indirection<Expr>,
1782 mutable TypedExpr typedExpr;
1786 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1790 Add,
Subtract,
Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
1797 BOILERPLATE(PartRef);
1798 PartRef(
Name &&n, std::list<SectionSubscript> &&ss,
1799 std::optional<ImageSelector> &&is)
1800 : name{std::move(n)}, subscripts(std::move(ss)),
1801 imageSelector{std::move(is)} {}
1803 std::list<SectionSubscript> subscripts;
1804 std::optional<ImageSelector> imageSelector;
1809 UNION_CLASS_BOILERPLATE(DataRef);
1810 explicit DataRef(std::list<PartRef> &&);
1811 std::variant<Name, common::Indirection<StructureComponent>,
1827 std::tuple<DataRef, SubstringRange> t;
1832 std::tuple<CharLiteralConstant, SubstringRange> t;
1849 bool EndsInBareName()
const;
1851 std::variant<DataRef, Substring> u;
1857 mutable TypedExpr typedExpr;
1859 std::variant<common::Indirection<Designator>,
1877struct StructureComponent {
1878 BOILERPLATE(StructureComponent);
1880 : base{std::move(dr)}, component(std::move(n)) {}
1892struct CoindexedNamedObject {
1893 BOILERPLATE(CoindexedNamedObject);
1895 : base{std::move(dr)}, imageSelector{std::move(is)} {}
1901struct ArrayElement {
1902 BOILERPLATE(ArrayElement);
1903 ArrayElement(
DataRef &&dr, std::list<SectionSubscript> &&ss)
1904 : base{std::move(dr)}, subscripts(std::move(ss)) {}
1909 std::list<SectionSubscript> subscripts;
1915 mutable TypedExpr typedExpr;
1916 std::variant<Name, StructureComponent> u;
1921using BoundExpr = ScalarIntExpr;
1927 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1936 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1944 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1945 std::optional<AllocateCoarraySpec>>
1950WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1954WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1960 std::variant<StatVariable, MsgVariable> u;
1975 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
1982 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
1983 std::list<AllocOpt>>
1991 mutable TypedExpr typedExpr;
1992 std::variant<Name, StructureComponent> u;
1996WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2002 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2008 mutable TypedAssignment typedAssignment;
2009 std::tuple<Variable, Expr> t;
2013WRAPPER_CLASS(BoundsSpec, BoundExpr);
2018 std::tuple<BoundExpr, BoundExpr> t;
2030 UNION_CLASS_BOILERPLATE(
Bounds);
2031 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2034 mutable TypedAssignment typedAssignment;
2035 std::tuple<DataRef, Bounds, Expr> t;
2043 std::tuple<LogicalExpr, AssignmentStmt> t;
2049 std::tuple<std::optional<Name>, LogicalExpr> t;
2065 std::tuple<LogicalExpr, std::optional<Name>> t;
2069WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2072WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2081 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2085 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2088 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2089 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2104 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2110 std::tuple<common::Indirection<ConcurrentHeader>,
2127WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2133 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2141 std::variant<Expr, Variable> u;
2147 std::tuple<Name, Selector> t;
2154 std::tuple<std::optional<Name>, std::list<Association>> t;
2158WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2167WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2170WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2185 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2193 std::tuple<CodimensionDecl, Selector> t;
2201 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2202 std::list<StatOrErrmsg>>
2210 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2223 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2227WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2241 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2250 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2251 std::optional<ScalarLogicalExpr>>
2262 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2273 WRAPPER_CLASS(Local, std::list<Name>);
2274 WRAPPER_CLASS(LocalInit, std::list<Name>);
2276 TUPLE_CLASS_BOILERPLATE(
Reduce);
2278 std::tuple<Operator, std::list<Name>> t;
2280 WRAPPER_CLASS(Shared, std::list<Name>);
2281 EMPTY_CLASS(DefaultNone);
2282 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2295 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2298 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2305 std::tuple<Label, std::optional<LoopControl>> t;
2311 std::tuple<std::optional<Name>, std::optional<Label>,
2312 std::optional<LoopControl>>
2317WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2328 const std::optional<LoopControl> &GetLoopControl()
const;
2329 bool IsDoNormal()
const;
2330 bool IsDoWhile()
const;
2331 bool IsDoConcurrent()
const;
2336WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2341 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2348 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2352WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2355WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2363 std::tuple<Statement<ElseIfStmt>, Block> t;
2367 std::tuple<Statement<ElseStmt>, Block> t;
2370 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2377 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2378 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2396 TUPLE_CLASS_BOILERPLATE(
Range);
2397 std::tuple<std::optional<CaseValue>, std::optional<CaseValue>>
2400 std::variant<CaseValue, Range> u;
2404EMPTY_CLASS(Default);
2408 std::variant<std::list<CaseValueRange>, Default> u;
2414 std::tuple<CaseSelector, std::optional<Name>> t;
2420WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2426 TUPLE_CLASS_BOILERPLATE(
Case);
2427 std::tuple<Statement<CaseStmt>, Block> t;
2430 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2440 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2449 UNION_CLASS_BOILERPLATE(
Rank);
2450 std::variant<ScalarIntConstantExpr, Star, Default> u;
2453 std::tuple<Rank, std::optional<Name>> t;
2463 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2465 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2475 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2484 UNION_CLASS_BOILERPLATE(
Guard);
2485 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2488 std::tuple<Guard, std::optional<Name>> t;
2497 std::tuple<Statement<TypeGuardStmt>, Block> t;
2499 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2505WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2508WRAPPER_CLASS(GotoStmt, Label);
2513 std::tuple<std::list<Label>, ScalarIntExpr> t;
2526 ENUM_CLASS(Kind, Stop, ErrorStop)
2528 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2535 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2539WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2546 std::variant<IntExpr, Star> u;
2549 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2553WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2558 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2567 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2573 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2581 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2594 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2597 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2608 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2611 std::tuple<LockVariable, std::list<LockStat>> t;
2617 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2621WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2631 UNION_CLASS_BOILERPLATE(
IoUnit);
2632 std::variant<Variable, common::Indirection<Expr>, Star> u;
2636using FileNameExpr = ScalarDefaultCharExpr;
2655WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2656WRAPPER_CLASS(ErrLabel, Label);
2661 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2662 Encoding, Form, Pad, Position, Round, Sign,
2663 Carriagecontrol, Convert, Dispose)
2665 std::tuple<Kind, ScalarDefaultCharExpr> t;
2667 WRAPPER_CLASS(Recl, ScalarIntExpr);
2668 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2669 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2670 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2675WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2685 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2689 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2695 UNION_CLASS_BOILERPLATE(
Format);
2696 std::variant<Expr, Label, Star> u;
2700WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2714WRAPPER_CLASS(EndLabel, Label);
2715WRAPPER_CLASS(EorLabel, Label);
2719 ENUM_CLASS(Kind, Advance, Blank, Decimal, Delim, Pad, Round, Sign)
2721 std::tuple<Kind, ScalarDefaultCharExpr> t;
2723 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2724 WRAPPER_CLASS(Pos, ScalarIntExpr);
2725 WRAPPER_CLASS(Rec, ScalarIntExpr);
2726 WRAPPER_CLASS(Size, ScalarIntVariable);
2728 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2736 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2743 BOILERPLATE(ReadStmt);
2744 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2745 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2746 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2747 items(std::move(its)) {}
2748 std::optional<IoUnit> iounit;
2750 std::optional<Format> format;
2753 std::list<IoControlSpec> controls;
2754 std::list<InputItem> items;
2760 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2765 BOILERPLATE(WriteStmt);
2766 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2767 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2768 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2769 items(std::move(its)) {}
2770 std::optional<IoUnit> iounit;
2772 std::optional<Format> format;
2774 std::list<IoControlSpec> controls;
2775 std::list<OutputItem> items;
2781 std::tuple<Format, std::list<OutputItem>> t;
2792 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2797 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2804WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2807 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2808 MsgVariable, StatVariable>
2813WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2823 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2828WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2832WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2835WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2838WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2878 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2879 Direct, Encoding, Form, Formatted, Iomsg,
Name, Pad, Position, Read,
2880 Readwrite, Round, Sequential, Sign, Stream, Status, Unformatted, Write,
2881 Carriagecontrol, Convert, Dispose)
2882 TUPLE_CLASS_BOILERPLATE(
CharVar);
2883 std::tuple<Kind, ScalarDefaultCharVariable> t;
2886 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2887 TUPLE_CLASS_BOILERPLATE(
IntVar);
2888 std::tuple<Kind, ScalarIntVariable> t;
2891 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2892 TUPLE_CLASS_BOILERPLATE(
LogVar);
2893 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2907 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2909 std::variant<std::list<InquireSpec>,
Iolength> u;
2916WRAPPER_CLASS(ProgramStmt,
Name);
2919WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2927 ExecutionPart, std::optional<InternalSubprogramPart>,
2933WRAPPER_CLASS(ModuleStmt,
Name);
2940 std::variant<common::Indirection<FunctionSubprogram>,
2950 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2954WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2960 TUPLE_CLASS_BOILERPLATE(
Module);
2971 UNION_CLASS_BOILERPLATE(
Rename);
2973 TUPLE_CLASS_BOILERPLATE(
Names);
2974 std::tuple<Name, Name> t;
2978 std::tuple<DefinedOpName, DefinedOpName> t;
2980 std::variant<Names, Operators> u;
2986 std::tuple<Name, std::optional<Name>> t;
2992 std::tuple<ParentIdentifier, Name> t;
2996WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3009WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3012WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3030 EMPTY_CLASS(Assignment);
3031 EMPTY_CLASS(ReadFormatted);
3032 EMPTY_CLASS(ReadUnformatted);
3033 EMPTY_CLASS(WriteFormatted);
3034 EMPTY_CLASS(WriteUnformatted);
3037 ReadUnformatted, WriteFormatted, WriteUnformatted>
3045 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3049struct InterfaceStmt {
3050 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3052 InterfaceStmt(Abstract x) : u{x} {}
3054 std::variant<std::optional<GenericSpec>, Abstract> u;
3060 UNION_CLASS_BOILERPLATE(
Only);
3061 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3069 BOILERPLATE(UseStmt);
3070 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3071 template <
typename A>
3072 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3073 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3074 std::optional<ModuleNature> nature;
3076 std::variant<std::list<Rename>, std::list<Only>> u;
3094 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3095 std::list<ProcDecl>>
3106 EMPTY_CLASS(Elemental);
3107 EMPTY_CLASS(Impure);
3109 EMPTY_CLASS(Non_Recursive);
3111 EMPTY_CLASS(Recursive);
3112 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3113 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3114 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3116 Pure, Recursive, Attributes, Launch_Bounds, Cluster_Dims>
3124 BOILERPLATE(Suffix);
3126 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3127 Suffix(
Name &&rn, std::optional<LanguageBindingSpec> &&lbs)
3128 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3129 std::optional<LanguageBindingSpec> binding;
3130 std::optional<Name> resultName;
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 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 : call{std::move(pd), std::move(args)}, chevrons{std::move(ch)} {}
3277 std::optional<Chevrons> chevrons;
3279 mutable TypedCall typedCall;
3303WRAPPER_CLASS(MpSubprogramStmt,
Name);
3306WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3321 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3325WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3354 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3357 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3361 std::tuple<common::Indirection<Designator>, uint64_t> t;
3363 EMPTY_CLASS(VectorAlways);
3366 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3368 std::tuple<std::uint64_t, Kind> t;
3372 std::tuple<Name, std::optional<std::uint64_t>> t;
3375 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3378 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3381 WRAPPER_CLASS_BOILERPLATE(
3384 EMPTY_CLASS(NoVector);
3385 EMPTY_CLASS(NoUnroll);
3386 EMPTY_CLASS(NoUnrollAndJam);
3387 EMPTY_CLASS(ForceInline);
3388 EMPTY_CLASS(Inline);
3389 EMPTY_CLASS(NoInline);
3391 EMPTY_CLASS(Unrecognized);
3393 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3395 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3403 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3409 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3411WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3418 std::variant<Statement<DataComponentDefStmt>,
3424 EMPTY_CLASS(MapStmt);
3425 EMPTY_CLASS(EndMapStmt);
3426 TUPLE_CLASS_BOILERPLATE(
Map);
3427 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3433 EMPTY_CLASS(UnionStmt);
3434 EMPTY_CLASS(EndUnionStmt);
3435 TUPLE_CLASS_BOILERPLATE(
Union);
3441 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3445 EMPTY_CLASS(EndStructureStmt);
3447 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3454WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3459 std::tuple<Expr, Label, Label, Label> t;
3464 std::tuple<Label, Name> t;
3469 std::tuple<Name, std::list<Label>> t;
3472WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3478#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3479 using basename::basename; \
3480 classname(basename &&b) : basename(std::move(b)) {} \
3481 using TupleTrait = std::true_type; \
3482 BOILERPLATE(classname)
3484#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3485 BOILERPLATE(classname); \
3486 using basename::basename; \
3487 classname(basename &&base) : basename(std::move(base)) {} \
3488 using WrapperTrait = std::true_type
3493struct OmpDirectiveName {
3495 constexpr OmpDirectiveName() =
default;
3496 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3497 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3501 OmpDirectiveName(
const Verbatim &name);
3502 using WrapperTrait = std::true_type;
3504 bool IsExecutionPart()
const;
3507 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3515 std::variant<TypeSpec, DeclarationTypeSpec> u;
3530 ENUM_CLASS(Kind, BlankCommonBlock);
3531 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3539 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3546 using EmptyTrait = std::true_type;
3554 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3557 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3571 WRAPPER_CLASS_BOILERPLATE(
3584 std::variant<DefinedOperator, ProcedureDesignator> u;
3593 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3605 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3610inline namespace arguments {
3613 std::variant<OmpObject, FunctionReference> u;
3617 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3629 std::tuple<OmpObject, OmpObject> t;
3640 std::tuple<std::string, TypeSpec, Name> t;
3653 std::optional<OmpCombinerExpression>>
3672inline namespace traits {
3709 TUPLE_CLASS_BOILERPLATE(
Complex);
3711 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3715 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3731 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3756 std::string ToString()
const;
3759 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3760 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3761 std::variant<Value, llvm::omp::Directive, std::string> u;
3772 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3774 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3781 std::string ToString()
const;
3783 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3792 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3799 WRAPPER_CLASS_BOILERPLATE(
3804#define MODIFIER_BOILERPLATE(...) \
3806 using Variant = std::variant<__VA_ARGS__>; \
3807 UNION_CLASS_BOILERPLATE(Modifier); \
3812#define MODIFIERS() std::optional<std::list<Modifier>>
3814inline namespace modifier {
3822 ENUM_CLASS(Value, Cgroup);
3831 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3867 ENUM_CLASS(Value, Always)
3879 ENUM_CLASS(Value, Always, Never, Auto)
3889 ENUM_CLASS(Value, Automap);
3900 ENUM_CLASS(Value, Simd)
3913 ENUM_CLASS(Value, Close)
3925 ENUM_CLASS(Value, Delete)
3946 ENUM_CLASS(Value, Sink, Source);
3957 using Value = common::OmpDependenceKind;
3959 std::tuple<Value, OmpObject> t;
3967 ENUM_CLASS(Value, Ancestor, Device_Num)
3993 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4008 ENUM_CLASS(Value, Present);
4019 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4030 ENUM_CLASS(Value, Target, Targetsync)
4044 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4052 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4060 ENUM_CLASS(Value, Conditional)
4069 ENUM_CLASS(Value, Ref, Uval, Val);
4099 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4100 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4112 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4127 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4136 ENUM_CLASS(Value, Reproducible, Unconstrained)
4149 using Extensions = std::list<PreferencePropertyExtension>;
4150 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4160 using ForeignRuntimeIdentifier =
4161 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4162 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4170 WRAPPER_CLASS_BOILERPLATE(
4179 ENUM_CLASS(Value, Strict)
4192 ENUM_CLASS(Value, Present)
4201 ENUM_CLASS(Value, Default, Inscan, Task);
4211 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4221 ENUM_CLASS(Value, Self)
4248 using Value = common::OmpDependenceKind;
4259 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4272 ENUM_CLASS(Value, Ompx_Hold)
4282using OmpDirectiveList = std::list<llvm::omp::Directive>;
4295 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4298 std::tuple<OmpAdjustOp, OmpObjectList> t;
4315 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4346 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4354 ENUM_CLASS(ActionTime, Compilation, Execution);
4355 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4366 using MemoryOrder = common::OmpMemoryOrderType;
4377 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4384 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4417 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4419 std::variant<DataSharingAttribute,
4436 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4439 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4448 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4457 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4474 OmpDependenceType::Value GetDepType()
const;
4477 EMPTY_CLASS(Source);
4479 std::variant<Sink, Source> u;
4494 OmpTaskDependenceType::Value GetTaskDepType()
const;
4495 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4499 std::variant<TaskDep, OmpDoacross> u;
4536 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4552 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4562 WRAPPER_CLASS_BOILERPLATE(
4569 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4586 using MemoryOrder = common::OmpMemoryOrderType;
4612 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4633 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4646 WRAPPER_CLASS_BOILERPLATE(
4659 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4712 MODIFIER_BOILERPLATE(
4723 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4760 WRAPPER_CLASS_BOILERPLATE(
4774EMPTY_CLASS(OmpNoOpenMPClause);
4779EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4784EMPTY_CLASS(OmpNoParallelismClause);
4794 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4806 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4818 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4828 ENUM_CLASS(Ordering, Concurrent)
4830 std::tuple<MODIFIERS(), Ordering> t;
4852 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4895 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4897 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4912 ENUM_CLASS(SevLevel, Fatal, Warning);
4934 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4941 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
4984 WRAPPER_CLASS_BOILERPLATE(
5002 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5012 MODIFIER_BOILERPLATE(OmpContextSelector);
5013 std::tuple<MODIFIERS(),
5014 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5028 llvm::omp::Clause Id()
const;
5030#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5031#include "llvm/Frontend/OpenMP/OMP.inc"
5036#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5037#include "llvm/Frontend/OpenMP/OMP.inc"
5043 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5050 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo)
5055 return std::get<OmpDirectiveName>(t);
5057 llvm::omp::Directive DirId()
const {
5064 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5065 std::optional<OmpClauseList>, Flags>
5074 INHERITED_TUPLE_CLASS_BOILERPLATE(
5086 return std::get<OmpBeginDirective>(t);
5088 const std::optional<OmpEndDirective> &EndDir()
const {
5089 return std::get<std::optional<OmpEndDirective>>(t);
5093 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5097 WRAPPER_CLASS_BOILERPLATE(
5118 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5127 WRAPPER_CLASS_BOILERPLATE(
5145 INHERITED_TUPLE_CLASS_BOILERPLATE(
5160 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5168 return std::get<OmpBeginSectionsDirective>(t);
5170 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5171 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5178 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5179 std::optional<OmpEndSectionsDirective>>
5188 WRAPPER_CLASS_BOILERPLATE(
5200 WRAPPER_CLASS_BOILERPLATE(
5208 WRAPPER_CLASS_BOILERPLATE(
5217 WRAPPER_CLASS_BOILERPLATE(
5225 WRAPPER_CLASS_BOILERPLATE(
5306 INHERITED_TUPLE_CLASS_BOILERPLATE(
5311 llvm::omp::Clause GetKind()
const;
5312 bool IsCapture()
const;
5313 bool IsCompare()
const;
5319 static constexpr int None = 0;
5320 static constexpr int Read = 1;
5321 static constexpr int Write = 2;
5322 static constexpr int Update = Read | Write;
5323 static constexpr int Action = 3;
5324 static constexpr int IfTrue = 4;
5325 static constexpr int IfFalse = 8;
5326 static constexpr int Condition = 12;
5330 TypedAssignment assign;
5332 TypedExpr atom, cond;
5341 WRAPPER_CLASS_BOILERPLATE(
5402 WRAPPER_CLASS_BOILERPLATE(
5425struct OpenMPLoopConstruct {
5426 TUPLE_CLASS_BOILERPLATE(OpenMPLoopConstruct);
5428 : t({std::move(a), Block{}, std::nullopt}) {}
5431 return std::get<OmpBeginLoopDirective>(t);
5433 const std::optional<OmpEndLoopDirective> &EndDir()
const {
5434 return std::get<std::optional<OmpEndLoopDirective>>(t);
5437 const OpenMPLoopConstruct *GetNestedConstruct()
const;
5440 std::tuple<OmpBeginLoopDirective, Block, std::optional<OmpEndLoopDirective>>
5464 INHERITED_TUPLE_CLASS_BOILERPLATE(
5470 using EmptyTrait = std::true_type;
5481WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5513 std::variant<Name, ScalarDefaultCharExpr> u;
5523 ENUM_CLASS(Modifier, ReadOnly, Zero)
5530 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5535 std::tuple<ReductionOperator, AccObjectList> t;
5540 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5544 WRAPPER_CLASS_BOILERPLATE(
5550 WRAPPER_CLASS_BOILERPLATE(
5557 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5565 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5574 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5581 WRAPPER_CLASS(Num, ScalarIntExpr);
5582 WRAPPER_CLASS(Dim, ScalarIntExpr);
5584 std::variant<Num, Dim, Static> u;
5589 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5594 std::tuple<bool, ScalarIntConstantExpr> t;
5600#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5601#include "llvm/Frontend/OpenACC/ACC.inc"
5606#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5607#include "llvm/Frontend/OpenACC/ACC.inc"
5613 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5626 std::tuple<Verbatim, AccObjectListWithModifier> t;
5632 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5637 std::tuple<AccLoopDirective, AccClauseList> t;
5644 std::tuple<AccBlockDirective, AccClauseList> t;
5653EMPTY_CLASS(AccEndAtomic);
5658 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5659 std::optional<AccEndAtomic>>
5666 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5667 std::optional<AccEndAtomic>>
5675 std::optional<AccEndAtomic>>
5684 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5689 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5696 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5702 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5708 std::tuple<AccCombinedDirective, AccClauseList> t;
5716struct OpenACCCombinedConstruct {
5717 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5720 : t({std::move(a), std::nullopt, std::nullopt}) {}
5721 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5722 std::optional<AccEndCombinedDirective>>
5729 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5734EMPTY_CLASS(AccEndLoop);
5735struct OpenACCLoopConstruct {
5736 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5738 : t({std::move(a), std::nullopt, std::nullopt}) {}
5739 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5740 std::optional<AccEndLoop>>
5752 std::tuple<AccStandaloneDirective, AccClauseList> t;
5778 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5783 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5786 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5787 std::optional<ScalarIntExpr>>
5793 std::tuple<std::optional<ScalarIntConstantExpr>,
5794 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5797 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:906
Definition expression.h:896
Definition parse-tree.h:1288
Definition parse-tree.h:1295
Definition parse-tree.h:1257
Definition parse-tree.h:1246
Definition parse-tree.h:1245
Definition parse-tree.h:5680
Definition parse-tree.h:5656
Definition parse-tree.h:5672
Definition parse-tree.h:5664
Definition parse-tree.h:5641
Definition parse-tree.h:5705
Definition parse-tree.h:5635
Definition parse-tree.h:5511
Definition parse-tree.h:5484
Definition parse-tree.h:5612
Definition parse-tree.h:5597
Definition parse-tree.h:5592
Definition parse-tree.h:5500
Definition parse-tree.h:5522
Definition parse-tree.h:5505
Definition parse-tree.h:5517
Definition parse-tree.h:5549
Definition parse-tree.h:5543
Definition parse-tree.h:5647
Definition parse-tree.h:5711
Definition parse-tree.h:5588
Definition parse-tree.h:5579
Definition parse-tree.h:5489
Definition parse-tree.h:5528
Definition parse-tree.h:5533
Definition parse-tree.h:5476
Definition parse-tree.h:5572
Definition parse-tree.h:5568
Definition parse-tree.h:5564
Definition parse-tree.h:5494
Definition parse-tree.h:5560
Definition parse-tree.h:5554
Definition parse-tree.h:5538
Definition parse-tree.h:897
Definition parse-tree.h:1412
Definition parse-tree.h:496
Definition parse-tree.h:3240
Definition parse-tree.h:3230
Definition parse-tree.h:1969
Definition parse-tree.h:1934
Definition parse-tree.h:1913
Definition parse-tree.h:1925
Definition parse-tree.h:1980
Definition parse-tree.h:1942
Definition parse-tree.h:3457
Definition parse-tree.h:1901
Definition parse-tree.h:1343
Definition parse-tree.h:3462
Definition parse-tree.h:3467
Definition parse-tree.h:2006
Definition parse-tree.h:2161
Definition parse-tree.h:2152
Definition parse-tree.h:2145
Definition parse-tree.h:1325
Definition parse-tree.h:1373
Definition parse-tree.h:3407
Definition parse-tree.h:1115
Definition parse-tree.h:1434
Definition parse-tree.h:1441
Definition parse-tree.h:2183
Definition parse-tree.h:3015
Definition parse-tree.h:2016
Definition parse-tree.h:3401
Definition parse-tree.h:5790
Definition parse-tree.h:5784
Definition parse-tree.h:5781
Definition parse-tree.h:5775
Definition parse-tree.h:3267
Definition parse-tree.h:3264
Definition parse-tree.h:3247
Definition parse-tree.h:2425
Definition parse-tree.h:2424
Definition parse-tree.h:2406
Definition parse-tree.h:2412
Definition parse-tree.h:2395
Definition parse-tree.h:2393
Definition parse-tree.h:2214
Definition parse-tree.h:2199
Definition parse-tree.h:670
Definition parse-tree.h:1830
Definition parse-tree.h:856
Definition parse-tree.h:688
Definition parse-tree.h:686
Definition parse-tree.h:2683
Definition parse-tree.h:2682
Definition parse-tree.h:2191
Definition parse-tree.h:972
Definition parse-tree.h:1447
Definition parse-tree.h:1892
Definition parse-tree.h:1614
Definition parse-tree.h:1623
Definition parse-tree.h:1622
Definition parse-tree.h:3359
Definition parse-tree.h:3352
Definition parse-tree.h:3356
Definition parse-tree.h:3370
Definition parse-tree.h:3380
Definition parse-tree.h:3377
Definition parse-tree.h:3374
Definition parse-tree.h:3364
Definition parse-tree.h:3350
Definition parse-tree.h:842
Definition parse-tree.h:834
Definition parse-tree.h:983
Definition parse-tree.h:996
Definition parse-tree.h:1104
Definition parse-tree.h:1049
Definition parse-tree.h:1208
Definition parse-tree.h:2511
Definition parse-tree.h:2239
Definition parse-tree.h:2660
Definition parse-tree.h:2658
Definition parse-tree.h:303
Definition parse-tree.h:2230
Definition parse-tree.h:2221
Definition parse-tree.h:1057
Definition parse-tree.h:1504
Definition parse-tree.h:1516
Definition parse-tree.h:1808
Definition parse-tree.h:1475
Definition parse-tree.h:1524
Definition parse-tree.h:1490
Definition parse-tree.h:1530
Definition parse-tree.h:1496
Definition parse-tree.h:2000
Definition parse-tree.h:437
Definition parse-tree.h:764
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1193
Definition parse-tree.h:746
Definition parse-tree.h:914
Definition parse-tree.h:1847
Definition parse-tree.h:1542
Definition parse-tree.h:1541
Definition parse-tree.h:2326
Definition parse-tree.h:3148
Definition parse-tree.h:2346
Definition parse-tree.h:2208
Definition parse-tree.h:1388
Definition parse-tree.h:3319
Definition parse-tree.h:1237
Definition parse-tree.h:1223
Definition parse-tree.h:2565
Definition parse-tree.h:2571
Definition parse-tree.h:2579
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:966
Definition parse-tree.h:953
Definition parse-tree.h:1754
Definition parse-tree.h:1727
Definition parse-tree.h:1768
Definition parse-tree.h:1733
Definition parse-tree.h:1772
Definition parse-tree.h:1709
Definition parse-tree.h:1724
Definition parse-tree.h:1760
Definition parse-tree.h:1742
Definition parse-tree.h:1748
Definition parse-tree.h:1751
Definition parse-tree.h:1714
Definition parse-tree.h:1739
Definition parse-tree.h:1736
Definition parse-tree.h:1721
Definition parse-tree.h:1763
Definition parse-tree.h:1745
Definition parse-tree.h:1703
Definition parse-tree.h:1700
Definition parse-tree.h:1757
Definition parse-tree.h:1694
Definition parse-tree.h:1718
Definition parse-tree.h:1730
Definition parse-tree.h:1697
Definition parse-tree.h:1690
Definition parse-tree.h:1043
Definition parse-tree.h:2102
Definition parse-tree.h:2118
Definition parse-tree.h:2096
Definition parse-tree.h:2131
Definition parse-tree.h:2108
Definition parse-tree.h:3252
Definition parse-tree.h:3137
Definition parse-tree.h:3285
Definition parse-tree.h:3028
Definition parse-tree.h:3043
Definition parse-tree.h:863
Definition parse-tree.h:2365
Definition parse-tree.h:2361
Definition parse-tree.h:2360
Definition parse-tree.h:2376
Definition parse-tree.h:2339
Definition parse-tree.h:1674
Definition parse-tree.h:1684
Definition parse-tree.h:419
Definition parse-tree.h:1598
Definition parse-tree.h:1607
Definition parse-tree.h:625
Definition parse-tree.h:1014
Definition parse-tree.h:2877
Definition parse-tree.h:2885
Definition parse-tree.h:2890
Definition parse-tree.h:2875
Definition parse-tree.h:2905
Definition parse-tree.h:2903
Definition parse-tree.h:790
Definition parse-tree.h:311
Definition parse-tree.h:1351
Definition parse-tree.h:1550
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:2630
Definition parse-tree.h:777
Definition parse-tree.h:658
Definition parse-tree.h:2303
Definition parse-tree.h:1304
Definition parse-tree.h:676
Definition parse-tree.h:1592
Definition parse-tree.h:888
Definition parse-tree.h:2275
Definition parse-tree.h:2271
Definition parse-tree.h:2606
Definition parse-tree.h:2605
Definition parse-tree.h:870
Definition parse-tree.h:319
Definition parse-tree.h:1269
Definition parse-tree.h:2293
Definition parse-tree.h:2291
Definition parse-tree.h:2924
Definition parse-tree.h:3423
Definition parse-tree.h:2063
Definition parse-tree.h:2948
Definition parse-tree.h:2938
Definition parse-tree.h:2959
Definition parse-tree.h:587
Definition parse-tree.h:1310
Definition parse-tree.h:639
Definition parse-tree.h:638
Definition parse-tree.h:2309
Definition parse-tree.h:2533
Definition parse-tree.h:1421
Definition parse-tree.h:4288
Definition parse-tree.h:4294
Definition parse-tree.h:4292
Definition parse-tree.h:4307
Definition parse-tree.h:4314
Definition parse-tree.h:4322
Definition parse-tree.h:4337
Definition parse-tree.h:5279
Definition parse-tree.h:4345
Definition parse-tree.h:4344
Definition parse-tree.h:4353
Definition parse-tree.h:4365
Definition parse-tree.h:5073
Definition parse-tree.h:5416
Definition parse-tree.h:5144
Definition parse-tree.h:4376
Definition parse-tree.h:5083
Definition parse-tree.h:4382
Definition parse-tree.h:5042
Definition parse-tree.h:5026
Definition parse-tree.h:4391
Definition parse-tree.h:3592
Definition parse-tree.h:4399
Definition parse-tree.h:5187
Definition parse-tree.h:4416
Definition parse-tree.h:4434
Definition parse-tree.h:4493
Definition parse-tree.h:4491
Definition parse-tree.h:4515
Definition parse-tree.h:4523
Definition parse-tree.h:4533
Definition parse-tree.h:4543
Definition parse-tree.h:4551
Definition parse-tree.h:3493
Definition parse-tree.h:5049
Definition parse-tree.h:4506
Definition parse-tree.h:4473
Definition parse-tree.h:4566
Definition parse-tree.h:4561
Definition parse-tree.h:5078
Definition parse-tree.h:5420
Definition parse-tree.h:5149
Definition parse-tree.h:4577
Definition parse-tree.h:5111
Definition parse-tree.h:4585
Definition parse-tree.h:4598
Definition parse-tree.h:4609
Definition parse-tree.h:4619
Definition parse-tree.h:4627
Definition parse-tree.h:4632
Definition parse-tree.h:4640
Definition parse-tree.h:4656
Definition parse-tree.h:4679
Definition parse-tree.h:4645
Definition parse-tree.h:4669
Definition parse-tree.h:4686
Definition parse-tree.h:3604
Definition parse-tree.h:4446
Definition parse-tree.h:4464
Definition parse-tree.h:4455
Definition parse-tree.h:4695
Definition parse-tree.h:4710
Definition parse-tree.h:4721
Definition parse-tree.h:4746
Definition parse-tree.h:4758
Definition parse-tree.h:4767
Definition parse-tree.h:5105
Definition parse-tree.h:4791
Definition parse-tree.h:4803
Definition parse-tree.h:4815
Definition parse-tree.h:3538
Definition parse-tree.h:3529
Definition parse-tree.h:3526
Definition parse-tree.h:4826
Definition parse-tree.h:4839
Definition parse-tree.h:4851
Definition parse-tree.h:4862
Definition parse-tree.h:3582
Definition parse-tree.h:4872
Definition parse-tree.h:4881
Definition parse-tree.h:4893
Definition parse-tree.h:4904
Definition parse-tree.h:4911
Definition parse-tree.h:3542
Definition parse-tree.h:3564
Definition parse-tree.h:3552
Definition parse-tree.h:3551
Definition parse-tree.h:4920
Definition parse-tree.h:4931
Definition parse-tree.h:4940
Definition parse-tree.h:4955
Definition parse-tree.h:4965
Definition parse-tree.h:3518
Definition parse-tree.h:3511
Definition parse-tree.h:4974
Definition parse-tree.h:4983
Definition parse-tree.h:4999
Definition parse-tree.h:5021
Definition parse-tree.h:5010
Definition parse-tree.h:3059
Definition parse-tree.h:5687
Definition parse-tree.h:5694
Definition parse-tree.h:5623
Definition parse-tree.h:5716
Definition parse-tree.h:5755
Definition parse-tree.h:5726
Definition parse-tree.h:5744
Definition parse-tree.h:5735
Definition parse-tree.h:5617
Definition parse-tree.h:5749
Definition parse-tree.h:5699
Definition parse-tree.h:5629
Definition parse-tree.h:5305
Definition parse-tree.h:5138
Definition parse-tree.h:5328
Definition parse-tree.h:5318
Definition parse-tree.h:5310
Definition parse-tree.h:5347
Definition parse-tree.h:5340
Definition parse-tree.h:5451
Definition parse-tree.h:5295
Definition parse-tree.h:5126
Definition parse-tree.h:5283
Definition parse-tree.h:5207
Definition parse-tree.h:5216
Definition parse-tree.h:5224
Definition parse-tree.h:5199
Definition parse-tree.h:5358
Definition parse-tree.h:5372
Definition parse-tree.h:5446
Definition parse-tree.h:5388
Definition parse-tree.h:5234
Definition parse-tree.h:5396
Definition parse-tree.h:5469
Definition parse-tree.h:5425
Definition parse-tree.h:5463
Definition parse-tree.h:5240
Definition parse-tree.h:5158
Definition parse-tree.h:5164
Definition parse-tree.h:5401
Definition parse-tree.h:5407
Definition parse-tree.h:5246
Definition parse-tree.h:5115
Definition parse-tree.h:376
Definition parse-tree.h:2795
Definition parse-tree.h:2758
Definition parse-tree.h:2984
Definition parse-tree.h:2029
Definition parse-tree.h:2028
Definition parse-tree.h:1560
Definition parse-tree.h:1989
Definition parse-tree.h:2821
Definition parse-tree.h:3104
Definition parse-tree.h:2779
Definition parse-tree.h:927
Definition parse-tree.h:3082
Definition parse-tree.h:1068
Definition parse-tree.h:1096
Definition parse-tree.h:1887
Definition parse-tree.h:1088
Definition parse-tree.h:1082
Definition parse-tree.h:1075
Definition parse-tree.h:3092
Definition parse-tree.h:3219
Definition parse-tree.h:3187
Definition parse-tree.h:571
Definition parse-tree.h:2742
Definition parse-tree.h:811
Definition parse-tree.h:809
Definition parse-tree.h:2260
Definition parse-tree.h:2972
Definition parse-tree.h:2976
Definition parse-tree.h:2970
Definition parse-tree.h:1573
Definition parse-tree.h:295
Definition parse-tree.h:1659
Definition parse-tree.h:2383
Definition parse-tree.h:2448
Definition parse-tree.h:2447
Definition parse-tree.h:2461
Definition parse-tree.h:2459
Definition parse-tree.h:2438
Definition parse-tree.h:2495
Definition parse-tree.h:2493
Definition parse-tree.h:2473
Definition parse-tree.h:2139
Definition parse-tree.h:3311
Definition parse-tree.h:848
Definition parse-tree.h:783
Definition parse-tree.h:823
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1958
Definition parse-tree.h:359
Definition parse-tree.h:3329
Definition parse-tree.h:2525
Definition parse-tree.h:1877
Definition parse-tree.h:1214
Definition parse-tree.h:3444
Definition parse-tree.h:3416
Definition parse-tree.h:3439
Definition parse-tree.h:2990
Definition parse-tree.h:3001
Definition parse-tree.h:3156
Definition parse-tree.h:3295
Definition parse-tree.h:1650
Definition parse-tree.h:1839
Definition parse-tree.h:1641
Definition parse-tree.h:1825
Definition parse-tree.h:2544
Definition parse-tree.h:2543
Definition parse-tree.h:2556
Definition parse-tree.h:905
Definition parse-tree.h:1157
Definition parse-tree.h:1170
Definition parse-tree.h:1123
Definition parse-tree.h:1179
Definition parse-tree.h:1133
Definition parse-tree.h:1402
Definition parse-tree.h:2483
Definition parse-tree.h:2482
Definition parse-tree.h:933
Definition parse-tree.h:941
Definition parse-tree.h:740
Definition parse-tree.h:649
Definition parse-tree.h:753
Definition parse-tree.h:3432
Definition parse-tree.h:354
Definition parse-tree.h:2615
Definition parse-tree.h:796
Definition parse-tree.h:3068
Definition parse-tree.h:1855
Definition parse-tree.h:726
Definition parse-tree.h:731
Definition parse-tree.h:282
Definition parse-tree.h:2805
Definition parse-tree.h:2054
Definition parse-tree.h:2047
Definition parse-tree.h:2083
Definition parse-tree.h:2079
Definition parse-tree.h:2078
Definition parse-tree.h:2041
Definition parse-tree.h:2764
Definition parse-tree.h:3666
Definition parse-tree.h:3657
Definition parse-tree.h:3627
Definition parse-tree.h:3616
Definition parse-tree.h:3611
Definition parse-tree.h:3637
Definition parse-tree.h:3650
Definition parse-tree.h:3821
Definition parse-tree.h:3838
Definition parse-tree.h:3830
Definition parse-tree.h:3854
Definition parse-tree.h:3846
Definition parse-tree.h:3866
Definition parse-tree.h:3878
Definition parse-tree.h:3888
Definition parse-tree.h:3899
Definition parse-tree.h:3912
Definition parse-tree.h:3924
Definition parse-tree.h:3945
Definition parse-tree.h:3956
Definition parse-tree.h:3966
Definition parse-tree.h:3975
Definition parse-tree.h:3992
Definition parse-tree.h:4007
Definition parse-tree.h:4018
Definition parse-tree.h:4029
Definition parse-tree.h:4041
Definition parse-tree.h:4051
Definition parse-tree.h:4059
Definition parse-tree.h:4068
Definition parse-tree.h:4077
Definition parse-tree.h:4111
Definition parse-tree.h:4098
Definition parse-tree.h:4085
Definition parse-tree.h:4135
Definition parse-tree.h:4126
Definition parse-tree.h:4169
Definition parse-tree.h:4145
Definition parse-tree.h:4158
Definition parse-tree.h:4178
Definition parse-tree.h:4191
Definition parse-tree.h:4200
Definition parse-tree.h:4210
Definition parse-tree.h:4220
Definition parse-tree.h:4229
Definition parse-tree.h:4237
Definition parse-tree.h:4247
Definition parse-tree.h:4258
Definition parse-tree.h:4271
Definition parse-tree.h:3797
Definition parse-tree.h:3707
Definition parse-tree.h:3704
Definition parse-tree.h:3687
Definition parse-tree.h:3728
Definition parse-tree.h:3694
Definition parse-tree.h:3755
Definition parse-tree.h:3770
Definition parse-tree.h:3767
Definition parse-tree.h:3780
Definition parse-tree.h:3789