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/idioms.h"
26#include "flang/Common/indirection.h"
27#include "flang/Common/reference.h"
28#include "flang/Support/Fortran.h"
29#include "llvm/ADT/ArrayRef.h"
30#include "llvm/Frontend/OpenACC/ACC.h.inc"
31#include "llvm/Frontend/OpenMP/OMP.h"
32#include "llvm/Frontend/OpenMP/OMPConstants.h"
53CLASS_TRAIT(EmptyTrait)
54CLASS_TRAIT(WrapperTrait)
55CLASS_TRAIT(UnionTrait)
56CLASS_TRAIT(TupleTrait)
57CLASS_TRAIT(ConstraintTrait)
62namespace Fortran::semantics {
79#define COPY_AND_ASSIGN_BOILERPLATE(classname) \
80 classname(classname &&) = default; \
81 classname &operator=(classname &&) = default; \
82 classname(const classname &) = delete; \
83 classname &operator=(const classname &) = delete
86#define BOILERPLATE(classname) \
87 COPY_AND_ASSIGN_BOILERPLATE(classname); \
92#define EMPTY_CLASS(classname) \
95 classname(const classname &) {} \
96 classname(classname &&) {} \
97 classname &operator=(const classname &) { return *this; }; \
98 classname &operator=(classname &&) { return *this; }; \
99 using EmptyTrait = std::true_type; \
104#define UNION_CLASS_BOILERPLATE(classname) \
105 template <typename A, typename = common::NoLvalue<A>> \
106 classname(A &&x) : u(std::move(x)) {} \
107 using UnionTrait = std::true_type; \
108 BOILERPLATE(classname)
112#define TUPLE_CLASS_BOILERPLATE(classname) \
113 template <typename... Ts, typename = common::NoLvalue<Ts...>> \
114 classname(Ts &&...args) : t(std::move(args)...) {} \
115 using TupleTrait = std::true_type; \
116 BOILERPLATE(classname)
120#define WRAPPER_CLASS_BOILERPLATE(classname, type) \
121 BOILERPLATE(classname); \
122 classname(type &&x) : v(std::move(x)) {} \
123 using WrapperTrait = std::true_type; \
126#define WRAPPER_CLASS(classname, type) \
128 WRAPPER_CLASS_BOILERPLATE(classname, type); \
160struct AllocatableStmt;
161struct AsynchronousStmt;
163struct CodimensionStmt;
164struct ContiguousStmt;
171struct OldParameterStmt;
181struct EquivalenceStmt;
218struct SyncMemoryStmt;
260struct BasedPointerStmt;
278using Location =
const char *;
283 constexpr Verbatim() {}
284 COPY_AND_ASSIGN_BOILERPLATE(Verbatim);
285 using EmptyTrait = std::true_type;
294template <
typename A>
struct Scalar {
295 using ConstraintTrait = std::true_type;
296 Scalar(Scalar &&that) =
default;
297 Scalar(A &&that) : thing(std::move(that)) {}
298 Scalar &operator=(Scalar &&) =
default;
302template <
typename A>
struct Constant {
303 using ConstraintTrait = std::true_type;
304 Constant(Constant &&that) =
default;
305 Constant(A &&that) : thing(std::move(that)) {}
306 Constant &operator=(Constant &&) =
default;
310template <
typename A>
struct Integer {
311 using ConstraintTrait = std::true_type;
312 Integer(Integer &&that) =
default;
313 Integer(A &&that) : thing(std::move(that)) {}
314 Integer &operator=(Integer &&) =
default;
318template <
typename A>
struct Logical {
319 using ConstraintTrait = std::true_type;
320 Logical(Logical &&that) =
default;
321 Logical(A &&that) : thing(std::move(that)) {}
322 Logical &operator=(Logical &&) =
default;
326template <
typename A>
struct DefaultChar {
327 using ConstraintTrait = std::true_type;
328 DefaultChar(DefaultChar &&that) =
default;
329 DefaultChar(A &&that) : thing(std::move(that)) {}
330 DefaultChar &operator=(DefaultChar &&) =
default;
349using Label = common::Label;
353template <
typename A>
struct UnlabeledStatement {
354 explicit UnlabeledStatement(A &&s) : statement(std::move(s)) {}
358template <
typename A>
struct Statement :
public UnlabeledStatement<A> {
359 Statement(std::optional<long> &&lab, A &&s)
360 : UnlabeledStatement<A>{std::move(s)}, label(std::move(lab)) {}
361 std::optional<Label> label;
365EMPTY_CLASS(ErrorRecovery);
377 std::variant<common::Indirection<AccessStmt>,
399 std::variant<common::Indirection<DerivedTypeDef>,
418 std::variant<Statement<common::Indirection<ImplicitStmt>>,
429WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
436 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
450 std::tuple<std::list<OpenACCDeclarativeConstruct>,
451 std::list<OpenMPDeclarativeConstruct>,
452 std::list<common::Indirection<CompilerDirective>>,
453 std::list<Statement<common::Indirection<UseStmt>>>,
454 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
455 std::list<DeclarationConstruct>>
462 std::variant<common::Indirection<FunctionSubprogram>,
469EMPTY_CLASS(ContainsStmt);
474 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
478EMPTY_CLASS(ContinueStmt);
481EMPTY_CLASS(FailImageStmt);
495 std::variant<common::Indirection<AllocateStmt>,
552 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
561using Block = std::list<ExecutionPartConstruct>;
562WRAPPER_CLASS(ExecutionPart, Block);
569 std::variant<common::Indirection<MainProgram>,
580WRAPPER_CLASS(Program, std::list<ProgramUnit>);
584 std::string ToString()
const {
return source.ToString(); }
590WRAPPER_CLASS(Keyword,
Name);
593WRAPPER_CLASS(NamedConstant,
Name);
600WRAPPER_CLASS(DefinedOpName,
Name);
610 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
611 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
612 std::variant<DefinedOpName, IntrinsicOperator> u;
616using ObjectName =
Name;
622 BOILERPLATE(ImportStmt);
623 ImportStmt(common::ImportKind &&k) : kind{k} {}
624 ImportStmt(std::list<Name> &&n) : names(std::move(n)) {}
625 ImportStmt(common::ImportKind &&, std::list<Name> &&);
626 common::ImportKind kind{common::ImportKind::Default};
627 std::list<Name> names;
636 TUPLE_CLASS_BOILERPLATE(
Group);
637 std::tuple<Name, std::list<Name>> t;
639 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
647 EMPTY_CLASS(Deferred);
648 std::variant<ScalarIntExpr, Star, Deferred> u;
656 WRAPPER_CLASS(StarSize, std::uint64_t);
657 std::variant<ScalarIntConstantExpr, StarSize> u;
661WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
663WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
668 std::variant<TypeParamValue, std::uint64_t> u;
674 std::variant<TypeParamValue, CharLength> u;
683 UNION_CLASS_BOILERPLATE(CharSelector);
684 struct LengthAndKind {
685 BOILERPLATE(LengthAndKind);
686 LengthAndKind(std::optional<TypeParamValue> &&l, ScalarIntConstantExpr &&k)
687 : length(std::move(l)), kind(std::move(k)) {}
688 std::optional<TypeParamValue> length;
689 ScalarIntConstantExpr kind;
692 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
693 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
694 : u{LengthAndKind{std::move(l), std::move(k)}} {}
695 std::variant<LengthSelector, LengthAndKind> u;
707 Real(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
708 std::optional<KindSelector> kind;
710 EMPTY_CLASS(DoublePrecision);
712 BOILERPLATE(Complex);
713 Complex(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
714 std::optional<KindSelector> kind;
717 BOILERPLATE(Character);
718 Character(std::optional<CharSelector> &&s) : selector{std::move(s)} {}
719 std::optional<CharSelector> selector;
722 BOILERPLATE(Logical);
723 Logical(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
724 std::optional<KindSelector> kind;
726 EMPTY_CLASS(DoubleComplex);
727 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
735 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
740 EMPTY_CLASS(PairVectorTypeSpec);
741 EMPTY_CLASS(QuadVectorTypeSpec);
742 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
756 std::tuple<Name, std::list<TypeParamSpec>> t;
763 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
783 EMPTY_CLASS(ClassStar);
784 EMPTY_CLASS(TypeStar);
785 WRAPPER_CLASS(Record,
Name);
794 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
801 std::tuple<CharBlock, std::optional<KindParam>> t;
807 std::tuple<CharBlock, std::optional<KindParam>> t;
813 std::tuple<CharBlock, std::optional<KindParam>> t;
817enum class Sign { Positive, Negative };
824struct RealLiteralConstant {
825 BOILERPLATE(RealLiteralConstant);
827 COPY_AND_ASSIGN_BOILERPLATE(Real);
831 RealLiteralConstant(
Real &&r, std::optional<KindParam> &&k)
832 : real{std::move(r)}, kind{std::move(k)} {}
834 std::optional<KindParam> kind;
859 std::tuple<ComplexPart, ComplexPart> t;
865 std::tuple<Sign, ComplexLiteralConstant> t;
873 std::tuple<std::optional<KindParam>, std::string> t;
874 std::string GetString()
const {
return std::get<std::string>(t); }
880 std::string GetString()
const {
return v; }
887 std::tuple<bool, std::optional<KindParam>> t;
897WRAPPER_CLASS(BOZLiteralConstant, std::string);
913 ENUM_CLASS(Kind, Public, Private)
919EMPTY_CLASS(Abstract);
923 WRAPPER_CLASS(Extends,
Name);
924 std::variant<Abstract, AccessSpec, BindC, Extends> u;
931 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
935EMPTY_CLASS(SequenceStmt);
939EMPTY_CLASS(PrivateStmt);
944 std::variant<PrivateStmt, SequenceStmt> u;
950 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
958 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
963WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
970 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
975WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
983 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
989 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
994WRAPPER_CLASS(DeferredShapeSpecList,
int);
1000 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
1008EMPTY_CLASS(Allocatable);
1009EMPTY_CLASS(Pointer);
1010EMPTY_CLASS(Contiguous);
1031 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1032 std::list<common::Indirection<DataStmtValue>>>
1042struct ComponentDecl {
1043 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1045 std::optional<ComponentArraySpec> &&aSpec,
1046 std::optional<CoarraySpec> &&coaSpec,
1047 std::optional<Initialization> &&init)
1048 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1049 std::move(length), std::move(init)} {}
1050 std::tuple<Name, std::optional<ComponentArraySpec>,
1051 std::optional<CoarraySpec>, std::optional<CharLength>,
1052 std::optional<Initialization>>
1060 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1066 std::variant<ComponentDecl, FillDecl> u;
1074 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1075 std::list<ComponentOrFill>>
1082WRAPPER_CLASS(Pass, std::optional<Name>);
1085 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1092 std::variant<NullInit, Name> u;
1099 std::variant<Name, DeclarationTypeSpec> u;
1105 std::tuple<Name, std::optional<ProcPointerInit>> t;
1113 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1114 std::list<ProcDecl>>
1132 EMPTY_CLASS(Deferred);
1133 EMPTY_CLASS(Non_Overridable);
1134 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1140 std::tuple<Name, std::optional<Name>> t;
1150 struct WithoutInterface {
1151 BOILERPLATE(WithoutInterface);
1153 std::list<BindAttr> &&as, std::list<TypeBoundProcDecl> &&ds)
1154 : attributes(std::move(as)), declarations(std::move(ds)) {}
1155 std::list<BindAttr> attributes;
1156 std::list<TypeBoundProcDecl> declarations;
1158 struct WithInterface {
1159 BOILERPLATE(WithInterface);
1160 WithInterface(
Name &&n, std::list<BindAttr> &&as, std::list<Name> &&bs)
1161 : interfaceName(std::move(n)), attributes(std::move(as)),
1162 bindingNames(std::move(bs)) {}
1164 std::list<BindAttr> attributes;
1165 std::list<Name> bindingNames;
1167 std::variant<WithoutInterface, WithInterface> u;
1180WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1196 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1197 std::list<Statement<TypeBoundProcBinding>>>
1202WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1210 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1211 std::list<Statement<PrivateOrSequence>>,
1212 std::list<Statement<ComponentDefStmt>>,
1225 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1231 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1235EMPTY_CLASS(EnumDefStmt);
1240 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1244WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1247EMPTY_CLASS(EndEnumStmt);
1253 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1254 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1262 TUPLE_CLASS_BOILERPLATE(
Triplet);
1263 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1265 UNION_CLASS_BOILERPLATE(
AcValue);
1266 std::variant<Triplet, common::Indirection<Expr>,
1273 BOILERPLATE(AcSpec);
1274 AcSpec(std::optional<TypeSpec> &&ts, std::list<AcValue> &&xs)
1275 : type(std::move(ts)), values(std::move(xs)) {}
1276 explicit AcSpec(
TypeSpec &&ts) : type{std::move(ts)} {}
1277 std::optional<TypeSpec> type;
1278 std::list<AcValue> values;
1282WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1287template <
typename VAR,
typename BOUND>
struct LoopBounds {
1288 LoopBounds(LoopBounds &&that) =
default;
1290 VAR &&name, BOUND &&lower, BOUND &&upper, std::optional<BOUND> &&step)
1291 : name{std::move(name)}, lower{std::move(lower)}, upper{std::move(upper)},
1292 step{std::move(step)} {}
1293 LoopBounds &operator=(LoopBounds &&) =
default;
1296 std::optional<BOUND> step;
1309 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1324 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1330 std::tuple<NamedConstant, ConstantExpr> t;
1334WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1337WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1340WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1345 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1352WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1355EMPTY_CLASS(AssumedRankSpec);
1363 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1364 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1370 ENUM_CLASS(Intent, In, Out, InOut)
1371 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1381EMPTY_CLASS(Asynchronous);
1382EMPTY_CLASS(External);
1383EMPTY_CLASS(Intrinsic);
1384EMPTY_CLASS(Optional);
1385EMPTY_CLASS(Parameter);
1386EMPTY_CLASS(Protected);
1390EMPTY_CLASS(Volatile);
1395 Parameter, Pointer, Protected, Save, Target, Value, Volatile,
1396 common::CUDADataAttr>
1407 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1408 EntityDecl(ObjectName &&name,
CharLength &&length,
1409 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1410 std::optional<Initialization> &&init)
1411 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1412 std::move(length), std::move(init)} {}
1413 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1414 std::optional<CharLength>, std::optional<Initialization>>
1422 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1432 std::tuple<AccessSpec, std::list<AccessId>> t;
1441 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1446WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1449WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1454 ENUM_CLASS(Kind, Object, Common)
1455 std::tuple<Kind, Name> t;
1461 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1467 std::tuple<Name, CoarraySpec> t;
1471WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1474WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1493 mutable TypedExpr typedExpr;
1494 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1507 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1513 mutable std::int64_t repetitions{1};
1521 std::variant<Scalar<common::Indirection<Designator>>,
1534 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1541 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1547 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1551WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1559 std::tuple<Name, ArraySpec> t;
1561 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1567 std::tuple<IntentSpec, std::list<Name>> t;
1571WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1577 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1581WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1584WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1590 ENUM_CLASS(Kind, Entity, Common)
1591 std::tuple<Kind, Name> t;
1595WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1598WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1601WRAPPER_CLASS(ValueStmt, std::list<Name>);
1604WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1609 std::tuple<Location, std::optional<Location>> t;
1615 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1624 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1625 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1631 std::tuple<Name, std::optional<ArraySpec>> t;
1639 TUPLE_CLASS_BOILERPLATE(
Block);
1640 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1642 BOILERPLATE(CommonStmt);
1643 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1644 std::list<Block> &&);
1646 std::list<Block> blocks;
1654WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1659 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1663using Subscript = ScalarIntExpr;
1668 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1669 std::optional<Subscript>>
1677 std::variant<IntExpr, SubscriptTriplet> u;
1681using Cosubscript = ScalarIntExpr;
1692 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1695 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1702 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1707 UNION_CLASS_BOILERPLATE(Expr);
1711 using IntrinsicUnary::IntrinsicUnary;
1714 using IntrinsicUnary::IntrinsicUnary;
1717 using IntrinsicUnary::IntrinsicUnary;
1719 struct NOT :
public IntrinsicUnary {
1720 using IntrinsicUnary::IntrinsicUnary;
1727 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1735 using IntrinsicBinary::IntrinsicBinary;
1738 using IntrinsicBinary::IntrinsicBinary;
1741 using IntrinsicBinary::IntrinsicBinary;
1744 using IntrinsicBinary::IntrinsicBinary;
1747 using IntrinsicBinary::IntrinsicBinary;
1750 using IntrinsicBinary::IntrinsicBinary;
1753 using IntrinsicBinary::IntrinsicBinary;
1756 using IntrinsicBinary::IntrinsicBinary;
1759 using IntrinsicBinary::IntrinsicBinary;
1762 using IntrinsicBinary::IntrinsicBinary;
1765 using IntrinsicBinary::IntrinsicBinary;
1768 using IntrinsicBinary::IntrinsicBinary;
1771 using IntrinsicBinary::IntrinsicBinary;
1774 using IntrinsicBinary::IntrinsicBinary;
1777 using IntrinsicBinary::IntrinsicBinary;
1780 using IntrinsicBinary::IntrinsicBinary;
1785 using IntrinsicBinary::IntrinsicBinary;
1790 std::tuple<DefinedOpName, common::Indirection<Expr>,
1798 mutable TypedExpr typedExpr;
1802 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1806 Add,
Subtract,
Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
1813 BOILERPLATE(PartRef);
1814 PartRef(
Name &&n, std::list<SectionSubscript> &&ss,
1815 std::optional<ImageSelector> &&is)
1816 : name{std::move(n)}, subscripts(std::move(ss)),
1817 imageSelector{std::move(is)} {}
1819 std::list<SectionSubscript> subscripts;
1820 std::optional<ImageSelector> imageSelector;
1825 UNION_CLASS_BOILERPLATE(DataRef);
1826 explicit DataRef(std::list<PartRef> &&);
1827 std::variant<Name, common::Indirection<StructureComponent>,
1843 std::tuple<DataRef, SubstringRange> t;
1848 std::tuple<CharLiteralConstant, SubstringRange> t;
1865 bool EndsInBareName()
const;
1867 std::variant<DataRef, Substring> u;
1873 mutable TypedExpr typedExpr;
1875 std::variant<common::Indirection<Designator>,
1893struct StructureComponent {
1894 BOILERPLATE(StructureComponent);
1896 : base{std::move(dr)}, component(std::move(n)) {}
1908struct CoindexedNamedObject {
1909 BOILERPLATE(CoindexedNamedObject);
1911 : base{std::move(dr)}, imageSelector{std::move(is)} {}
1917struct ArrayElement {
1918 BOILERPLATE(ArrayElement);
1919 ArrayElement(
DataRef &&dr, std::list<SectionSubscript> &&ss)
1920 : base{std::move(dr)}, subscripts(std::move(ss)) {}
1925 std::list<SectionSubscript> subscripts;
1931 mutable TypedExpr typedExpr;
1932 std::variant<Name, StructureComponent> u;
1937using BoundExpr = ScalarIntExpr;
1943 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1952 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1960 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1961 std::optional<AllocateCoarraySpec>>
1966WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1970WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1976 std::variant<StatVariable, MsgVariable> u;
1991 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
1998 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
1999 std::list<AllocOpt>>
2007 mutable TypedExpr typedExpr;
2008 std::variant<Name, StructureComponent> u;
2012WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2018 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2024 using TypedAssignment =
2026 mutable TypedAssignment typedAssignment;
2027 std::tuple<Variable, Expr> t;
2031WRAPPER_CLASS(BoundsSpec, BoundExpr);
2036 std::tuple<BoundExpr, BoundExpr> t;
2048 UNION_CLASS_BOILERPLATE(
Bounds);
2049 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2052 mutable AssignmentStmt::TypedAssignment typedAssignment;
2053 std::tuple<DataRef, Bounds, Expr> t;
2061 std::tuple<LogicalExpr, AssignmentStmt> t;
2067 std::tuple<std::optional<Name>, LogicalExpr> t;
2083 std::tuple<LogicalExpr, std::optional<Name>> t;
2087WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2090WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2099 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2103 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2106 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2107 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2122 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2128 std::tuple<common::Indirection<ConcurrentHeader>,
2145WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2151 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2159 std::variant<Expr, Variable> u;
2165 std::tuple<Name, Selector> t;
2172 std::tuple<std::optional<Name>, std::list<Association>> t;
2176WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2185WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2188WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2203 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2211 std::tuple<CodimensionDecl, Selector> t;
2219 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2220 std::list<StatOrErrmsg>>
2228 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2241 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2245WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2259 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2268 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2269 std::optional<ScalarLogicalExpr>>
2280 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2291 WRAPPER_CLASS(Local, std::list<Name>);
2292 WRAPPER_CLASS(LocalInit, std::list<Name>);
2294 TUPLE_CLASS_BOILERPLATE(
Reduce);
2296 std::tuple<Operator, std::list<Name>> t;
2298 WRAPPER_CLASS(Shared, std::list<Name>);
2299 EMPTY_CLASS(DefaultNone);
2300 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2313 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2316 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2323 std::tuple<Label, std::optional<LoopControl>> t;
2329 std::tuple<std::optional<Name>, std::optional<Label>,
2330 std::optional<LoopControl>>
2335WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2346 const std::optional<LoopControl> &GetLoopControl()
const;
2347 bool IsDoNormal()
const;
2348 bool IsDoWhile()
const;
2349 bool IsDoConcurrent()
const;
2354WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2359 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2366 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2370WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2373WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2381 std::tuple<Statement<ElseIfStmt>, Block> t;
2385 std::tuple<Statement<ElseStmt>, Block> t;
2388 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2395 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2396 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2415 Range(std::optional<CaseValue> &&l, std::optional<CaseValue> &&u)
2416 : lower{std::move(l)}, upper{std::move(u)} {}
2417 std::optional<CaseValue> lower, upper;
2419 std::variant<CaseValue, Range> u;
2423EMPTY_CLASS(Default);
2427 std::variant<std::list<CaseValueRange>, Default> u;
2433 std::tuple<CaseSelector, std::optional<Name>> t;
2439WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2445 TUPLE_CLASS_BOILERPLATE(
Case);
2446 std::tuple<Statement<CaseStmt>, Block> t;
2449 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2459 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2468 UNION_CLASS_BOILERPLATE(
Rank);
2469 std::variant<ScalarIntConstantExpr, Star, Default> u;
2472 std::tuple<Rank, std::optional<Name>> t;
2482 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2484 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2494 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2503 UNION_CLASS_BOILERPLATE(
Guard);
2504 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2507 std::tuple<Guard, std::optional<Name>> t;
2516 std::tuple<Statement<TypeGuardStmt>, Block> t;
2518 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2524WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2527WRAPPER_CLASS(GotoStmt, Label);
2532 std::tuple<std::list<Label>, ScalarIntExpr> t;
2545 ENUM_CLASS(Kind, Stop, ErrorStop)
2547 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2554 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2558WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2565 std::variant<IntExpr, Star> u;
2568 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2572WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2577 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2586 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2592 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2600 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2613 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2616 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2627 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2630 std::tuple<LockVariable, std::list<LockStat>> t;
2636 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2640WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2650 UNION_CLASS_BOILERPLATE(
IoUnit);
2651 std::variant<Variable, common::Indirection<Expr>, Star> u;
2655using FileNameExpr = ScalarDefaultCharExpr;
2674WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2675WRAPPER_CLASS(ErrLabel, Label);
2680 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2681 Encoding, Form, Pad, Position, Round, Sign,
2682 Carriagecontrol, Convert, Dispose)
2684 std::tuple<Kind, ScalarDefaultCharExpr> t;
2686 WRAPPER_CLASS(Recl, ScalarIntExpr);
2687 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2688 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2689 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2694WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2704 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2708 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2714 UNION_CLASS_BOILERPLATE(
Format);
2715 std::variant<Expr, Label, Star> u;
2719WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2733WRAPPER_CLASS(EndLabel, Label);
2734WRAPPER_CLASS(EorLabel, Label);
2738 ENUM_CLASS(Kind, Advance, Blank, Decimal, Delim, Pad, Round, Sign)
2740 std::tuple<Kind, ScalarDefaultCharExpr> t;
2742 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2743 WRAPPER_CLASS(Pos, ScalarIntExpr);
2744 WRAPPER_CLASS(Rec, ScalarIntExpr);
2745 WRAPPER_CLASS(Size, ScalarIntVariable);
2747 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size>
2754 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2761 BOILERPLATE(ReadStmt);
2762 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2763 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2764 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2765 items(std::move(its)) {}
2766 std::optional<IoUnit> iounit;
2768 std::optional<Format> format;
2771 std::list<IoControlSpec> controls;
2772 std::list<InputItem> items;
2778 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2783 BOILERPLATE(WriteStmt);
2784 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2785 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2786 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2787 items(std::move(its)) {}
2788 std::optional<IoUnit> iounit;
2790 std::optional<Format> format;
2792 std::list<IoControlSpec> controls;
2793 std::list<OutputItem> items;
2799 std::tuple<Format, std::list<OutputItem>> t;
2810 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2815 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2822WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2825 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2826 MsgVariable, StatVariable>
2831WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2841 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2846WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2850WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2853WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2856WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2896 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2897 Direct, Encoding, Form, Formatted, Iomsg,
Name, Pad, Position, Read,
2898 Readwrite, Round, Sequential, Sign, Stream, Status, Unformatted, Write,
2899 Carriagecontrol, Convert, Dispose)
2900 TUPLE_CLASS_BOILERPLATE(
CharVar);
2901 std::tuple<Kind, ScalarDefaultCharVariable> t;
2904 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2905 TUPLE_CLASS_BOILERPLATE(
IntVar);
2906 std::tuple<Kind, ScalarIntVariable> t;
2909 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2910 TUPLE_CLASS_BOILERPLATE(
LogVar);
2911 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2925 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2927 std::variant<std::list<InquireSpec>,
Iolength> u;
2934WRAPPER_CLASS(ProgramStmt,
Name);
2937WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2945 ExecutionPart, std::optional<InternalSubprogramPart>,
2951WRAPPER_CLASS(ModuleStmt,
Name);
2958 std::variant<common::Indirection<FunctionSubprogram>,
2968 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2972WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2978 TUPLE_CLASS_BOILERPLATE(
Module);
2989 UNION_CLASS_BOILERPLATE(
Rename);
2991 TUPLE_CLASS_BOILERPLATE(
Names);
2992 std::tuple<Name, Name> t;
2996 std::tuple<DefinedOpName, DefinedOpName> t;
2998 std::variant<Names, Operators> u;
3004 std::tuple<Name, std::optional<Name>> t;
3010 std::tuple<ParentIdentifier, Name> t;
3014WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3027WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3030WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3048 EMPTY_CLASS(Assignment);
3049 EMPTY_CLASS(ReadFormatted);
3050 EMPTY_CLASS(ReadUnformatted);
3051 EMPTY_CLASS(WriteFormatted);
3052 EMPTY_CLASS(WriteUnformatted);
3055 ReadUnformatted, WriteFormatted, WriteUnformatted>
3063 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3067struct InterfaceStmt {
3068 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3070 InterfaceStmt(Abstract x) : u{x} {}
3072 std::variant<std::optional<GenericSpec>, Abstract> u;
3078 UNION_CLASS_BOILERPLATE(
Only);
3079 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3087 BOILERPLATE(UseStmt);
3088 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3089 template <
typename A>
3090 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3091 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3092 std::optional<ModuleNature> nature;
3094 std::variant<std::list<Rename>, std::list<Only>> u;
3112 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3113 std::list<ProcDecl>>
3124 EMPTY_CLASS(Elemental);
3125 EMPTY_CLASS(Impure);
3127 EMPTY_CLASS(Non_Recursive);
3129 EMPTY_CLASS(Recursive);
3130 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3131 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3132 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3134 Pure, Recursive, Attributes, Launch_Bounds, Cluster_Dims>
3142 BOILERPLATE(Suffix);
3144 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3145 Suffix(
Name &&rn, std::optional<LanguageBindingSpec> &&lbs)
3146 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3147 std::optional<LanguageBindingSpec> binding;
3148 std::optional<Name> resultName;
3157 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3158 std::optional<Suffix>>
3163WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3168 std::variant<Name, Star> u;
3176 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3177 std::optional<LanguageBindingSpec>>
3182WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3197 std::tuple<Statement<SubroutineStmt>,
3201 std::variant<Function, Subroutine> u;
3206 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3208 std::tuple<Kind, std::list<Name>> t;
3214 std::variant<InterfaceBody, Statement<ProcedureStmt>> u;
3218WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3224 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3230WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3233WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3239 std::variant<Name, ProcComponentRef> u;
3243WRAPPER_CLASS(AltReturnSpec, Label);
3249 WRAPPER_CLASS(PercentRef,
Expr);
3250 WRAPPER_CLASS(PercentVal,
Expr);
3251 UNION_CLASS_BOILERPLATE(ActualArg);
3253 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal>
3260 std::tuple<std::optional<Keyword>,
ActualArg> t;
3266 TUPLE_CLASS_BOILERPLATE(
Call);
3267 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3283 BOILERPLATE(CallStmt);
3284 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3287 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3288 std::optional<ScalarIntExpr>>
3292 std::list<ActualArgSpec> &&args)
3293 : call{std::move(pd), std::move(args)}, chevrons{std::move(ch)} {}
3295 std::optional<Chevrons> chevrons;
3322WRAPPER_CLASS(MpSubprogramStmt,
Name);
3325WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3340 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3344WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3373 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3376 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3380 std::tuple<common::Indirection<Designator>, uint64_t> t;
3382 EMPTY_CLASS(VectorAlways);
3385 std::tuple<Name, std::optional<std::uint64_t>> t;
3388 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3391 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3394 WRAPPER_CLASS_BOILERPLATE(
3397 EMPTY_CLASS(NoVector);
3398 EMPTY_CLASS(NoUnroll);
3399 EMPTY_CLASS(NoUnrollAndJam);
3400 EMPTY_CLASS(ForceInline);
3401 EMPTY_CLASS(Inline);
3402 EMPTY_CLASS(NoInline);
3404 EMPTY_CLASS(Unrecognized);
3406 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3408 NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline, NoInline,
3416 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3422 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3424WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3431 std::variant<Statement<DataComponentDefStmt>,
3437 EMPTY_CLASS(MapStmt);
3438 EMPTY_CLASS(EndMapStmt);
3439 TUPLE_CLASS_BOILERPLATE(
Map);
3440 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3446 EMPTY_CLASS(UnionStmt);
3447 EMPTY_CLASS(EndUnionStmt);
3448 TUPLE_CLASS_BOILERPLATE(
Union);
3454 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3458 EMPTY_CLASS(EndStructureStmt);
3460 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3467WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3472 std::tuple<Expr, Label, Label, Label> t;
3477 std::tuple<Label, Name> t;
3482 std::tuple<Name, std::list<Label>> t;
3485WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3491#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3492 using basename::basename; \
3493 classname(basename &&b) : basename(std::move(b)) {} \
3494 using TupleTrait = std::true_type; \
3495 BOILERPLATE(classname)
3497#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3498 BOILERPLATE(classname); \
3499 using basename::basename; \
3500 classname(basename &&base) : basename(std::move(base)) {} \
3501 using WrapperTrait = std::true_type
3506struct OmpDirectiveName {
3508 constexpr OmpDirectiveName() =
default;
3509 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3510 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3514 OmpDirectiveName(
const Verbatim &name);
3515 using WrapperTrait = std::true_type;
3517 bool IsExecutionPart()
const;
3520 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3528 std::variant<TypeSpec, DeclarationTypeSpec> u;
3543 ENUM_CLASS(Kind, BlankCommonBlock);
3544 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3552 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3559 using EmptyTrait = std::true_type;
3567 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3570 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3584 WRAPPER_CLASS_BOILERPLATE(
3597 std::variant<DefinedOperator, ProcedureDesignator> u;
3606 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3618 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3623inline namespace arguments {
3626 std::variant<OmpObject, FunctionReference> u;
3630 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3642 std::tuple<OmpObject, OmpObject> t;
3653 std::tuple<std::string, TypeSpec, Name> t;
3666 std::optional<OmpCombinerExpression>>
3685inline namespace traits {
3722 TUPLE_CLASS_BOILERPLATE(
Complex);
3724 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3728 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3744 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3769 std::string ToString()
const;
3772 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3773 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3774 std::variant<Value, llvm::omp::Directive, std::string> u;
3785 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3787 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3794 std::string ToString()
const;
3796 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3805 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3812 WRAPPER_CLASS_BOILERPLATE(
3817#define MODIFIER_BOILERPLATE(...) \
3819 using Variant = std::variant<__VA_ARGS__>; \
3820 UNION_CLASS_BOILERPLATE(Modifier); \
3825#define MODIFIERS() std::optional<std::list<Modifier>>
3827inline namespace modifier {
3835 ENUM_CLASS(Value, Cgroup);
3844 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3880 ENUM_CLASS(Value, Always)
3892 ENUM_CLASS(Value, Always, Never, Auto)
3902 ENUM_CLASS(Value, Automap);
3913 ENUM_CLASS(Value, Simd)
3926 ENUM_CLASS(Value, Close)
3938 ENUM_CLASS(Value, Delete)
3959 ENUM_CLASS(Value, Sink, Source);
3968 ENUM_CLASS(Value, Ancestor, Device_Num)
3986 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4001 ENUM_CLASS(Value, Present);
4012 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4022 std::variant<CharLiteralConstant, ScalarIntConstantExpr> u;
4030 WRAPPER_CLASS_BOILERPLATE(
4039 ENUM_CLASS(Value, Target, TargetSync)
4053 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4061 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4069 ENUM_CLASS(Value, Conditional)
4078 ENUM_CLASS(Value, Ref, Uval, Val);
4100 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4101 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4113 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4128 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4137 ENUM_CLASS(Value, Reproducible, Unconstrained)
4146 ENUM_CLASS(Value, Strict)
4159 ENUM_CLASS(Value, Present)
4168 ENUM_CLASS(Value, Default, Inscan, Task);
4178 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4188 ENUM_CLASS(Value, Self)
4215 ENUM_CLASS(Value, In, Out, Inout, Inoutset, Mutexinoutset, Depobj)
4226 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4239 ENUM_CLASS(Value, Ompx_Hold)
4249using OmpDirectiveList = std::list<llvm::omp::Directive>;
4262 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4265 std::tuple<OmpAdjustOp, OmpObjectList> t;
4282 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4313 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4321 ENUM_CLASS(ActionTime, Compilation, Execution);
4322 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4333 using MemoryOrder = common::OmpMemoryOrderType;
4344 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4351 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4376 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4378 std::variant<DataSharingAttribute,
4395 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4398 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4407 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4416 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4433 OmpDependenceType::Value GetDepType()
const;
4436 EMPTY_CLASS(Source);
4438 std::variant<Sink, Source> u;
4453 OmpTaskDependenceType::Value GetTaskDepType()
const;
4454 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4458 std::variant<TaskDep, OmpDoacross> u;
4495 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4511 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4521 WRAPPER_CLASS_BOILERPLATE(
4528 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4545 using MemoryOrder = common::OmpMemoryOrderType;
4571 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4592 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4605 WRAPPER_CLASS_BOILERPLATE(
4618 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4658 MODIFIER_BOILERPLATE(
4669 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4706 WRAPPER_CLASS_BOILERPLATE(
4720EMPTY_CLASS(OmpNoOpenMPClause);
4725EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4730EMPTY_CLASS(OmpNoParallelismClause);
4740 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4750 ENUM_CLASS(Ordering, Concurrent)
4752 std::tuple<MODIFIERS(), Ordering> t;
4774 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4817 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4819 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4834 ENUM_CLASS(Severity, Fatal, Warning);
4852 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
4895 WRAPPER_CLASS_BOILERPLATE(
4913 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
4923 MODIFIER_BOILERPLATE(OmpContextSelector);
4924 std::tuple<MODIFIERS(),
4925 std::optional<common::Indirection<OmpDirectiveSpecification>>>
4953 llvm::omp::Clause Id()
const;
4955#define GEN_FLANG_CLAUSE_PARSER_CLASSES
4956#include "llvm/Frontend/OpenMP/OMP.inc"
4961#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
4962#include "llvm/Frontend/OpenMP/OMP.inc"
4968 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
4975 ENUM_CLASS(Flags, None, DeprecatedSyntax);
4978 return std::get<OmpDirectiveName>(t);
4980 llvm::omp::Directive DirId()
const {
4987 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
4988 std::optional<OmpClauseList>, Flags>
4997 INHERITED_TUPLE_CLASS_BOILERPLATE(
5009 return std::get<OmpBeginDirective>(t);
5011 const std::optional<OmpEndDirective> &EndDir()
const {
5012 return std::get<std::optional<OmpEndDirective>>(t);
5016 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5020 WRAPPER_CLASS_BOILERPLATE(
5041 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5050 WRAPPER_CLASS_BOILERPLATE(
5068 INHERITED_TUPLE_CLASS_BOILERPLATE(
5083 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5091 return std::get<OmpBeginSectionsDirective>(t);
5093 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5094 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5101 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5102 std::optional<OmpEndSectionsDirective>>
5111 WRAPPER_CLASS_BOILERPLATE(
5123 WRAPPER_CLASS_BOILERPLATE(
5131 WRAPPER_CLASS_BOILERPLATE(
5140 WRAPPER_CLASS_BOILERPLATE(
5148 WRAPPER_CLASS_BOILERPLATE(
5229 INHERITED_TUPLE_CLASS_BOILERPLATE(
5234 llvm::omp::Clause GetKind()
const;
5235 bool IsCapture()
const;
5236 bool IsCompare()
const;
5242 static constexpr int None = 0;
5243 static constexpr int Read = 1;
5244 static constexpr int Write = 2;
5245 static constexpr int Update = Read | Write;
5246 static constexpr int Action = 3;
5247 static constexpr int IfTrue = 4;
5248 static constexpr int IfFalse = 8;
5249 static constexpr int Condition = 12;
5253 AssignmentStmt::TypedAssignment assign;
5255 TypedExpr atom, cond;
5264 WRAPPER_CLASS_BOILERPLATE(
5325 WRAPPER_CLASS_BOILERPLATE(
5348using NestedConstruct =
5349 std::variant<DoConstruct, common::Indirection<OpenMPLoopConstruct>>;
5350struct OpenMPLoopConstruct {
5351 TUPLE_CLASS_BOILERPLATE(OpenMPLoopConstruct);
5353 : t({std::move(a), std::nullopt, std::nullopt}) {}
5356 return std::get<OmpBeginLoopDirective>(t);
5358 const std::optional<OmpEndLoopDirective> &EndDir()
const {
5359 return std::get<std::optional<OmpEndLoopDirective>>(t);
5361 std::tuple<OmpBeginLoopDirective, std::optional<NestedConstruct>,
5362 std::optional<OmpEndLoopDirective>>
5390WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5422 std::variant<Name, ScalarDefaultCharExpr> u;
5432 ENUM_CLASS(Modifier, ReadOnly, Zero)
5439 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5444 std::tuple<ReductionOperator, AccObjectList> t;
5449 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5453 WRAPPER_CLASS_BOILERPLATE(
5459 WRAPPER_CLASS_BOILERPLATE(
5466 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5474 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5483 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5490 WRAPPER_CLASS(Num, ScalarIntExpr);
5491 WRAPPER_CLASS(Dim, ScalarIntExpr);
5493 std::variant<Num, Dim, Static> u;
5498 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5503 std::tuple<bool, ScalarIntConstantExpr> t;
5509#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5510#include "llvm/Frontend/OpenACC/ACC.inc"
5515#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5516#include "llvm/Frontend/OpenACC/ACC.inc"
5522 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5535 std::tuple<Verbatim, AccObjectListWithModifier> t;
5541 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5546 std::tuple<AccLoopDirective, AccClauseList> t;
5553 std::tuple<AccBlockDirective, AccClauseList> t;
5562EMPTY_CLASS(AccEndAtomic);
5567 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5568 std::optional<AccEndAtomic>>
5575 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5576 std::optional<AccEndAtomic>>
5584 std::optional<AccEndAtomic>>
5593 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5598 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5605 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5611 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5617 std::tuple<AccCombinedDirective, AccClauseList> t;
5625struct OpenACCCombinedConstruct {
5626 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5629 : t({std::move(a), std::nullopt, std::nullopt}) {}
5630 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5631 std::optional<AccEndCombinedDirective>>
5638 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5643EMPTY_CLASS(AccEndLoop);
5644struct OpenACCLoopConstruct {
5645 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5647 : t({std::move(a), std::nullopt, std::nullopt}) {}
5648 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5649 std::optional<AccEndLoop>>
5661 std::tuple<AccStandaloneDirective, AccClauseList> t;
5687 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5692 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5695 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5696 std::optional<ScalarIntExpr>>
5702 std::tuple<std::optional<ScalarIntConstantExpr>,
5703 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5706 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:1306
Definition parse-tree.h:1313
Definition parse-tree.h:1272
Definition parse-tree.h:1261
Definition parse-tree.h:1260
Definition parse-tree.h:5589
Definition parse-tree.h:5565
Definition parse-tree.h:5581
Definition parse-tree.h:5573
Definition parse-tree.h:5550
Definition parse-tree.h:5614
Definition parse-tree.h:5544
Definition parse-tree.h:5420
Definition parse-tree.h:5393
Definition parse-tree.h:5521
Definition parse-tree.h:5506
Definition parse-tree.h:5501
Definition parse-tree.h:5409
Definition parse-tree.h:5431
Definition parse-tree.h:5414
Definition parse-tree.h:5426
Definition parse-tree.h:5458
Definition parse-tree.h:5452
Definition parse-tree.h:5556
Definition parse-tree.h:5620
Definition parse-tree.h:5497
Definition parse-tree.h:5488
Definition parse-tree.h:5398
Definition parse-tree.h:5437
Definition parse-tree.h:5442
Definition parse-tree.h:5385
Definition parse-tree.h:5481
Definition parse-tree.h:5477
Definition parse-tree.h:5473
Definition parse-tree.h:5403
Definition parse-tree.h:5469
Definition parse-tree.h:5463
Definition parse-tree.h:5447
Definition parse-tree.h:912
Definition parse-tree.h:1430
Definition parse-tree.h:493
Definition parse-tree.h:3258
Definition parse-tree.h:3248
Definition parse-tree.h:1985
Definition parse-tree.h:1950
Definition parse-tree.h:1929
Definition parse-tree.h:1941
Definition parse-tree.h:1996
Definition parse-tree.h:1958
Definition parse-tree.h:3470
Definition parse-tree.h:1917
Definition parse-tree.h:1361
Definition parse-tree.h:3475
Definition parse-tree.h:3480
Definition parse-tree.h:2022
Definition parse-tree.h:2179
Definition parse-tree.h:2170
Definition parse-tree.h:2163
Definition parse-tree.h:1343
Definition parse-tree.h:1391
Definition parse-tree.h:3420
Definition parse-tree.h:1130
Definition parse-tree.h:1452
Definition parse-tree.h:1459
Definition parse-tree.h:2201
Definition parse-tree.h:3033
Definition parse-tree.h:2034
Definition parse-tree.h:3414
Definition parse-tree.h:5699
Definition parse-tree.h:5693
Definition parse-tree.h:5690
Definition parse-tree.h:5684
Definition parse-tree.h:3285
Definition parse-tree.h:3282
Definition parse-tree.h:3265
Definition parse-tree.h:2444
Definition parse-tree.h:2443
Definition parse-tree.h:2425
Definition parse-tree.h:2431
Definition parse-tree.h:2411
Definition parse-tree.h:2232
Definition parse-tree.h:2217
Definition parse-tree.h:666
Definition parse-tree.h:1846
Definition parse-tree.h:871
Definition parse-tree.h:684
Definition parse-tree.h:682
Definition parse-tree.h:2702
Definition parse-tree.h:2701
Definition parse-tree.h:2209
Definition parse-tree.h:987
Definition parse-tree.h:1465
Definition parse-tree.h:1908
Definition parse-tree.h:1629
Definition parse-tree.h:1638
Definition parse-tree.h:1637
Definition parse-tree.h:3378
Definition parse-tree.h:3371
Definition parse-tree.h:3375
Definition parse-tree.h:3383
Definition parse-tree.h:3393
Definition parse-tree.h:3390
Definition parse-tree.h:3387
Definition parse-tree.h:3369
Definition parse-tree.h:857
Definition parse-tree.h:849
Definition parse-tree.h:998
Definition parse-tree.h:1011
Definition parse-tree.h:1119
Definition parse-tree.h:1064
Definition parse-tree.h:1223
Definition parse-tree.h:2530
Definition parse-tree.h:2257
Definition parse-tree.h:2679
Definition parse-tree.h:2677
Definition parse-tree.h:302
Definition parse-tree.h:2248
Definition parse-tree.h:2239
Definition parse-tree.h:1072
Definition parse-tree.h:1519
Definition parse-tree.h:1531
Definition parse-tree.h:1824
Definition parse-tree.h:1490
Definition parse-tree.h:1539
Definition parse-tree.h:1505
Definition parse-tree.h:1545
Definition parse-tree.h:1511
Definition parse-tree.h:2016
Definition parse-tree.h:434
Definition parse-tree.h:778
Definition parse-tree.h:773
Definition parse-tree.h:771
Definition parse-tree.h:326
Definition parse-tree.h:608
Definition parse-tree.h:1208
Definition parse-tree.h:753
Definition parse-tree.h:929
Definition parse-tree.h:1863
Definition parse-tree.h:1557
Definition parse-tree.h:1556
Definition parse-tree.h:2344
Definition parse-tree.h:3166
Definition parse-tree.h:2364
Definition parse-tree.h:2226
Definition parse-tree.h:1406
Definition parse-tree.h:3338
Definition parse-tree.h:1252
Definition parse-tree.h:1238
Definition parse-tree.h:2584
Definition parse-tree.h:2590
Definition parse-tree.h:2598
Definition parse-tree.h:526
Definition parse-tree.h:550
Definition parse-tree.h:981
Definition parse-tree.h:968
Definition parse-tree.h:1770
Definition parse-tree.h:1743
Definition parse-tree.h:1784
Definition parse-tree.h:1749
Definition parse-tree.h:1788
Definition parse-tree.h:1725
Definition parse-tree.h:1740
Definition parse-tree.h:1776
Definition parse-tree.h:1758
Definition parse-tree.h:1764
Definition parse-tree.h:1767
Definition parse-tree.h:1730
Definition parse-tree.h:1755
Definition parse-tree.h:1752
Definition parse-tree.h:1737
Definition parse-tree.h:1779
Definition parse-tree.h:1761
Definition parse-tree.h:1719
Definition parse-tree.h:1716
Definition parse-tree.h:1773
Definition parse-tree.h:1710
Definition parse-tree.h:1734
Definition parse-tree.h:1746
Definition parse-tree.h:1713
Definition parse-tree.h:1706
Definition parse-tree.h:1058
Definition parse-tree.h:2120
Definition parse-tree.h:2136
Definition parse-tree.h:2114
Definition parse-tree.h:2149
Definition parse-tree.h:2126
Definition parse-tree.h:3270
Definition parse-tree.h:3155
Definition parse-tree.h:3304
Definition parse-tree.h:3046
Definition parse-tree.h:3061
Definition parse-tree.h:878
Definition parse-tree.h:2383
Definition parse-tree.h:2379
Definition parse-tree.h:2378
Definition parse-tree.h:2394
Definition parse-tree.h:2357
Definition parse-tree.h:1690
Definition parse-tree.h:1700
Definition parse-tree.h:416
Definition parse-tree.h:1613
Definition parse-tree.h:1622
Definition parse-tree.h:621
Definition parse-tree.h:1029
Definition parse-tree.h:2895
Definition parse-tree.h:2903
Definition parse-tree.h:2908
Definition parse-tree.h:2893
Definition parse-tree.h:2923
Definition parse-tree.h:2921
Definition parse-tree.h:805
Definition parse-tree.h:310
Definition parse-tree.h:1369
Definition parse-tree.h:1565
Definition parse-tree.h:3222
Definition parse-tree.h:3189
Definition parse-tree.h:3195
Definition parse-tree.h:3187
Definition parse-tree.h:3212
Definition parse-tree.h:472
Definition parse-tree.h:460
Definition parse-tree.h:716
Definition parse-tree.h:711
Definition parse-tree.h:721
Definition parse-tree.h:705
Definition parse-tree.h:703
Definition parse-tree.h:2737
Definition parse-tree.h:2735
Definition parse-tree.h:2649
Definition parse-tree.h:792
Definition parse-tree.h:654
Definition parse-tree.h:2321
Definition parse-tree.h:1322
Definition parse-tree.h:672
Definition parse-tree.h:1607
Definition parse-tree.h:903
Definition parse-tree.h:2293
Definition parse-tree.h:2289
Definition parse-tree.h:2625
Definition parse-tree.h:2624
Definition parse-tree.h:885
Definition parse-tree.h:318
Definition parse-tree.h:1287
Definition parse-tree.h:2311
Definition parse-tree.h:2309
Definition parse-tree.h:2942
Definition parse-tree.h:3436
Definition parse-tree.h:2081
Definition parse-tree.h:2966
Definition parse-tree.h:2956
Definition parse-tree.h:2977
Definition parse-tree.h:583
Definition parse-tree.h:1328
Definition parse-tree.h:635
Definition parse-tree.h:634
Definition parse-tree.h:2327
Definition parse-tree.h:2552
Definition parse-tree.h:1439
Definition parse-tree.h:4255
Definition parse-tree.h:4261
Definition parse-tree.h:4259
Definition parse-tree.h:4274
Definition parse-tree.h:4281
Definition parse-tree.h:4289
Definition parse-tree.h:4304
Definition parse-tree.h:5202
Definition parse-tree.h:4312
Definition parse-tree.h:4311
Definition parse-tree.h:4320
Definition parse-tree.h:4332
Definition parse-tree.h:4996
Definition parse-tree.h:5339
Definition parse-tree.h:5067
Definition parse-tree.h:4343
Definition parse-tree.h:5006
Definition parse-tree.h:4349
Definition parse-tree.h:4967
Definition parse-tree.h:4951
Definition parse-tree.h:3605
Definition parse-tree.h:4358
Definition parse-tree.h:5110
Definition parse-tree.h:4375
Definition parse-tree.h:4393
Definition parse-tree.h:4452
Definition parse-tree.h:4450
Definition parse-tree.h:4474
Definition parse-tree.h:4482
Definition parse-tree.h:4492
Definition parse-tree.h:4502
Definition parse-tree.h:4510
Definition parse-tree.h:3506
Definition parse-tree.h:4974
Definition parse-tree.h:4465
Definition parse-tree.h:4432
Definition parse-tree.h:4525
Definition parse-tree.h:4520
Definition parse-tree.h:5001
Definition parse-tree.h:5343
Definition parse-tree.h:5072
Definition parse-tree.h:4536
Definition parse-tree.h:5034
Definition parse-tree.h:4544
Definition parse-tree.h:4557
Definition parse-tree.h:4568
Definition parse-tree.h:4578
Definition parse-tree.h:4586
Definition parse-tree.h:4591
Definition parse-tree.h:4599
Definition parse-tree.h:4615
Definition parse-tree.h:4625
Definition parse-tree.h:4604
Definition parse-tree.h:4937
Definition parse-tree.h:4632
Definition parse-tree.h:3617
Definition parse-tree.h:4405
Definition parse-tree.h:4423
Definition parse-tree.h:4414
Definition parse-tree.h:4641
Definition parse-tree.h:4656
Definition parse-tree.h:4667
Definition parse-tree.h:4692
Definition parse-tree.h:4704
Definition parse-tree.h:4713
Definition parse-tree.h:5028
Definition parse-tree.h:4737
Definition parse-tree.h:3551
Definition parse-tree.h:3542
Definition parse-tree.h:3539
Definition parse-tree.h:4748
Definition parse-tree.h:4761
Definition parse-tree.h:4773
Definition parse-tree.h:4784
Definition parse-tree.h:3595
Definition parse-tree.h:4794
Definition parse-tree.h:4803
Definition parse-tree.h:4815
Definition parse-tree.h:4826
Definition parse-tree.h:4833
Definition parse-tree.h:3555
Definition parse-tree.h:3577
Definition parse-tree.h:3565
Definition parse-tree.h:3564
Definition parse-tree.h:4842
Definition parse-tree.h:4851
Definition parse-tree.h:4866
Definition parse-tree.h:4876
Definition parse-tree.h:3531
Definition parse-tree.h:3524
Definition parse-tree.h:4885
Definition parse-tree.h:4894
Definition parse-tree.h:4910
Definition parse-tree.h:4946
Definition parse-tree.h:4921
Definition parse-tree.h:3077
Definition parse-tree.h:5596
Definition parse-tree.h:5603
Definition parse-tree.h:5532
Definition parse-tree.h:5625
Definition parse-tree.h:5664
Definition parse-tree.h:5635
Definition parse-tree.h:5653
Definition parse-tree.h:5644
Definition parse-tree.h:5526
Definition parse-tree.h:5658
Definition parse-tree.h:5608
Definition parse-tree.h:5538
Definition parse-tree.h:5228
Definition parse-tree.h:5061
Definition parse-tree.h:5251
Definition parse-tree.h:5241
Definition parse-tree.h:5233
Definition parse-tree.h:5270
Definition parse-tree.h:5263
Definition parse-tree.h:5373
Definition parse-tree.h:5218
Definition parse-tree.h:5049
Definition parse-tree.h:5206
Definition parse-tree.h:5130
Definition parse-tree.h:5139
Definition parse-tree.h:5147
Definition parse-tree.h:5122
Definition parse-tree.h:5281
Definition parse-tree.h:5295
Definition parse-tree.h:5368
Definition parse-tree.h:5311
Definition parse-tree.h:5157
Definition parse-tree.h:5319
Definition parse-tree.h:5350
Definition parse-tree.h:5163
Definition parse-tree.h:5081
Definition parse-tree.h:5087
Definition parse-tree.h:5324
Definition parse-tree.h:5330
Definition parse-tree.h:5169
Definition parse-tree.h:5038
Definition parse-tree.h:375
Definition parse-tree.h:2813
Definition parse-tree.h:2776
Definition parse-tree.h:3002
Definition parse-tree.h:2047
Definition parse-tree.h:2046
Definition parse-tree.h:1575
Definition parse-tree.h:2005
Definition parse-tree.h:2839
Definition parse-tree.h:3122
Definition parse-tree.h:2797
Definition parse-tree.h:942
Definition parse-tree.h:3100
Definition parse-tree.h:1083
Definition parse-tree.h:1111
Definition parse-tree.h:1903
Definition parse-tree.h:1103
Definition parse-tree.h:1097
Definition parse-tree.h:1090
Definition parse-tree.h:3110
Definition parse-tree.h:3237
Definition parse-tree.h:3205
Definition parse-tree.h:567
Definition parse-tree.h:2760
Definition parse-tree.h:826
Definition parse-tree.h:824
Definition parse-tree.h:2278
Definition parse-tree.h:2990
Definition parse-tree.h:2994
Definition parse-tree.h:2988
Definition parse-tree.h:1588
Definition parse-tree.h:294
Definition parse-tree.h:1675
Definition parse-tree.h:2401
Definition parse-tree.h:2467
Definition parse-tree.h:2466
Definition parse-tree.h:2480
Definition parse-tree.h:2478
Definition parse-tree.h:2457
Definition parse-tree.h:2514
Definition parse-tree.h:2512
Definition parse-tree.h:2492
Definition parse-tree.h:2157
Definition parse-tree.h:3330
Definition parse-tree.h:863
Definition parse-tree.h:798
Definition parse-tree.h:838
Definition parse-tree.h:397
Definition parse-tree.h:448
Definition parse-tree.h:1974
Definition parse-tree.h:358
Definition parse-tree.h:3348
Definition parse-tree.h:2544
Definition parse-tree.h:1893
Definition parse-tree.h:1229
Definition parse-tree.h:3457
Definition parse-tree.h:3429
Definition parse-tree.h:3452
Definition parse-tree.h:3008
Definition parse-tree.h:3019
Definition parse-tree.h:3174
Definition parse-tree.h:3314
Definition parse-tree.h:1666
Definition parse-tree.h:1855
Definition parse-tree.h:1657
Definition parse-tree.h:1841
Definition parse-tree.h:2563
Definition parse-tree.h:2562
Definition parse-tree.h:2575
Definition parse-tree.h:920
Definition parse-tree.h:1172
Definition parse-tree.h:1185
Definition parse-tree.h:1138
Definition parse-tree.h:1194
Definition parse-tree.h:1148
Definition parse-tree.h:1420
Definition parse-tree.h:2502
Definition parse-tree.h:2501
Definition parse-tree.h:948
Definition parse-tree.h:956
Definition parse-tree.h:747
Definition parse-tree.h:645
Definition parse-tree.h:760
Definition parse-tree.h:3445
Definition parse-tree.h:353
Definition parse-tree.h:2634
Definition parse-tree.h:811
Definition parse-tree.h:3086
Definition parse-tree.h:1871
Definition parse-tree.h:733
Definition parse-tree.h:738
Definition parse-tree.h:281
Definition parse-tree.h:2823
Definition parse-tree.h:2072
Definition parse-tree.h:2065
Definition parse-tree.h:2101
Definition parse-tree.h:2097
Definition parse-tree.h:2096
Definition parse-tree.h:2059
Definition parse-tree.h:2782
Definition parse-tree.h:3679
Definition parse-tree.h:3670
Definition parse-tree.h:3640
Definition parse-tree.h:3629
Definition parse-tree.h:3624
Definition parse-tree.h:3650
Definition parse-tree.h:3663
Definition parse-tree.h:3834
Definition parse-tree.h:3851
Definition parse-tree.h:3843
Definition parse-tree.h:3867
Definition parse-tree.h:3859
Definition parse-tree.h:3879
Definition parse-tree.h:3891
Definition parse-tree.h:3901
Definition parse-tree.h:3912
Definition parse-tree.h:3925
Definition parse-tree.h:3937
Definition parse-tree.h:3958
Definition parse-tree.h:3967
Definition parse-tree.h:3985
Definition parse-tree.h:4000
Definition parse-tree.h:4011
Definition parse-tree.h:4029
Definition parse-tree.h:4020
Definition parse-tree.h:4038
Definition parse-tree.h:4050
Definition parse-tree.h:4060
Definition parse-tree.h:4068
Definition parse-tree.h:4077
Definition parse-tree.h:4112
Definition parse-tree.h:4099
Definition parse-tree.h:4086
Definition parse-tree.h:4136
Definition parse-tree.h:4127
Definition parse-tree.h:4145
Definition parse-tree.h:4158
Definition parse-tree.h:4167
Definition parse-tree.h:4177
Definition parse-tree.h:4187
Definition parse-tree.h:4196
Definition parse-tree.h:4204
Definition parse-tree.h:4214
Definition parse-tree.h:4225
Definition parse-tree.h:4238
Definition parse-tree.h:3810
Definition parse-tree.h:3720
Definition parse-tree.h:3717
Definition parse-tree.h:3700
Definition parse-tree.h:3741
Definition parse-tree.h:3707
Definition parse-tree.h:3768
Definition parse-tree.h:3783
Definition parse-tree.h:3780
Definition parse-tree.h:3793
Definition parse-tree.h:3802