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 BOILERPLATE(ImportStmt);
627 ImportStmt(common::ImportKind &&k) : kind{k} {}
628 ImportStmt(std::list<Name> &&n) : names(std::move(n)) {}
629 ImportStmt(common::ImportKind &&, std::list<Name> &&);
630 common::ImportKind kind{common::ImportKind::Default};
631 std::list<Name> names;
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);
688 struct LengthAndKind {
689 BOILERPLATE(LengthAndKind);
690 LengthAndKind(std::optional<TypeParamValue> &&l, ScalarIntConstantExpr &&k)
691 : length(std::move(l)), kind(std::move(k)) {}
692 std::optional<TypeParamValue> length;
693 ScalarIntConstantExpr kind;
696 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
697 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
698 : u{LengthAndKind{std::move(l), std::move(k)}} {}
699 std::variant<LengthSelector, LengthAndKind> u;
711 Real(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
712 std::optional<KindSelector> kind;
714 EMPTY_CLASS(DoublePrecision);
716 BOILERPLATE(Complex);
717 Complex(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
718 std::optional<KindSelector> kind;
721 BOILERPLATE(Character);
722 Character(std::optional<CharSelector> &&s) : selector{std::move(s)} {}
723 std::optional<CharSelector> selector;
726 BOILERPLATE(Logical);
727 Logical(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
728 std::optional<KindSelector> kind;
730 EMPTY_CLASS(DoubleComplex);
731 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
739 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
744 EMPTY_CLASS(PairVectorTypeSpec);
745 EMPTY_CLASS(QuadVectorTypeSpec);
746 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
760 std::tuple<Name, std::list<TypeParamSpec>> t;
767 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
787 EMPTY_CLASS(ClassStar);
788 EMPTY_CLASS(TypeStar);
789 WRAPPER_CLASS(Record,
Name);
798 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
805 std::tuple<CharBlock, std::optional<KindParam>> t;
811 std::tuple<CharBlock, std::optional<KindParam>> t;
817 std::tuple<CharBlock, std::optional<KindParam>> t;
821enum class Sign { Positive, Negative };
828struct RealLiteralConstant {
829 BOILERPLATE(RealLiteralConstant);
831 COPY_AND_ASSIGN_BOILERPLATE(Real);
835 RealLiteralConstant(
Real &&r, std::optional<KindParam> &&k)
836 : real{std::move(r)}, kind{std::move(k)} {}
838 std::optional<KindParam> kind;
863 std::tuple<ComplexPart, ComplexPart> t;
869 std::tuple<Sign, ComplexLiteralConstant> t;
877 std::tuple<std::optional<KindParam>, std::string> t;
878 std::string GetString()
const {
return std::get<std::string>(t); }
884 std::string GetString()
const {
return v; }
891 std::tuple<bool, std::optional<KindParam>> t;
901WRAPPER_CLASS(BOZLiteralConstant, std::string);
917 ENUM_CLASS(Kind, Public, Private)
923EMPTY_CLASS(Abstract);
927 WRAPPER_CLASS(Extends,
Name);
928 std::variant<Abstract, AccessSpec, BindC, Extends> u;
935 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
939EMPTY_CLASS(SequenceStmt);
943EMPTY_CLASS(PrivateStmt);
948 std::variant<PrivateStmt, SequenceStmt> u;
954 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
962 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
967WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
974 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
979WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
987 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
993 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
998WRAPPER_CLASS(DeferredShapeSpecList,
int);
1004 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
1012EMPTY_CLASS(Allocatable);
1013EMPTY_CLASS(Pointer);
1014EMPTY_CLASS(Contiguous);
1035 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1036 std::list<common::Indirection<DataStmtValue>>>
1046struct ComponentDecl {
1047 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1049 std::optional<ComponentArraySpec> &&aSpec,
1050 std::optional<CoarraySpec> &&coaSpec,
1051 std::optional<Initialization> &&init)
1052 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1053 std::move(length), std::move(init)} {}
1054 std::tuple<Name, std::optional<ComponentArraySpec>,
1055 std::optional<CoarraySpec>, std::optional<CharLength>,
1056 std::optional<Initialization>>
1064 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1070 std::variant<ComponentDecl, FillDecl> u;
1078 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1079 std::list<ComponentOrFill>>
1086WRAPPER_CLASS(Pass, std::optional<Name>);
1089 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1096 std::variant<NullInit, Name> u;
1103 std::variant<Name, DeclarationTypeSpec> u;
1109 std::tuple<Name, std::optional<ProcPointerInit>> t;
1117 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1118 std::list<ProcDecl>>
1136 EMPTY_CLASS(Deferred);
1137 EMPTY_CLASS(Non_Overridable);
1138 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1144 std::tuple<Name, std::optional<Name>> t;
1154 struct WithoutInterface {
1155 BOILERPLATE(WithoutInterface);
1157 std::list<BindAttr> &&as, std::list<TypeBoundProcDecl> &&ds)
1158 : attributes(std::move(as)), declarations(std::move(ds)) {}
1159 std::list<BindAttr> attributes;
1160 std::list<TypeBoundProcDecl> declarations;
1162 struct WithInterface {
1163 BOILERPLATE(WithInterface);
1164 WithInterface(
Name &&n, std::list<BindAttr> &&as, std::list<Name> &&bs)
1165 : interfaceName(std::move(n)), attributes(std::move(as)),
1166 bindingNames(std::move(bs)) {}
1168 std::list<BindAttr> attributes;
1169 std::list<Name> bindingNames;
1171 std::variant<WithoutInterface, WithInterface> u;
1184WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1200 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1201 std::list<Statement<TypeBoundProcBinding>>>
1206WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1214 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1215 std::list<Statement<PrivateOrSequence>>,
1216 std::list<Statement<ComponentDefStmt>>,
1229 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1235 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1239EMPTY_CLASS(EnumDefStmt);
1244 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1248WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1251EMPTY_CLASS(EndEnumStmt);
1257 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1258 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1266 TUPLE_CLASS_BOILERPLATE(
Triplet);
1267 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1269 UNION_CLASS_BOILERPLATE(
AcValue);
1270 std::variant<Triplet, common::Indirection<Expr>,
1277 BOILERPLATE(AcSpec);
1278 AcSpec(std::optional<TypeSpec> &&ts, std::list<AcValue> &&xs)
1279 : type(std::move(ts)), values(std::move(xs)) {}
1280 explicit AcSpec(
TypeSpec &&ts) : type{std::move(ts)} {}
1281 std::optional<TypeSpec> type;
1282 std::list<AcValue> values;
1286WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1291template <
typename VAR,
typename BOUND>
struct LoopBounds {
1292 LoopBounds(LoopBounds &&that) =
default;
1294 VAR &&name, BOUND &&lower, BOUND &&upper, std::optional<BOUND> &&step)
1295 : name{std::move(name)}, lower{std::move(lower)}, upper{std::move(upper)},
1296 step{std::move(step)} {}
1297 LoopBounds &operator=(LoopBounds &&) =
default;
1300 std::optional<BOUND> step;
1313 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1328 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1334 std::tuple<NamedConstant, ConstantExpr> t;
1338WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1341WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1344WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1349 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1356WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1359EMPTY_CLASS(AssumedRankSpec);
1367 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1368 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1374 ENUM_CLASS(Intent, In, Out, InOut)
1375 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1385EMPTY_CLASS(Asynchronous);
1386EMPTY_CLASS(External);
1387EMPTY_CLASS(Intrinsic);
1388EMPTY_CLASS(Optional);
1389EMPTY_CLASS(Parameter);
1390EMPTY_CLASS(Protected);
1394EMPTY_CLASS(Volatile);
1399 Parameter, Pointer, Protected, Save, Target, Value, Volatile,
1400 common::CUDADataAttr>
1411 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1412 EntityDecl(ObjectName &&name,
CharLength &&length,
1413 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1414 std::optional<Initialization> &&init)
1415 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1416 std::move(length), std::move(init)} {}
1417 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1418 std::optional<CharLength>, std::optional<Initialization>>
1426 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1436 std::tuple<AccessSpec, std::list<AccessId>> t;
1445 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1450WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1453WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1458 ENUM_CLASS(Kind, Object, Common)
1459 std::tuple<Kind, Name> t;
1465 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1471 std::tuple<Name, CoarraySpec> t;
1475WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1478WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1487using TypedAssignment =
1500 mutable TypedExpr typedExpr;
1501 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1514 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1520 mutable std::int64_t repetitions{1};
1528 std::variant<Scalar<common::Indirection<Designator>>,
1541 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1548 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1554 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1558WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1566 std::tuple<Name, ArraySpec> t;
1568 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1574 std::tuple<IntentSpec, std::list<Name>> t;
1578WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1584 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1588WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1591WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1597 ENUM_CLASS(Kind, Entity, Common)
1598 std::tuple<Kind, Name> t;
1602WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1605WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1608WRAPPER_CLASS(ValueStmt, std::list<Name>);
1611WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1616 std::tuple<Location, std::optional<Location>> t;
1622 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1631 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1632 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1638 std::tuple<Name, std::optional<ArraySpec>> t;
1646 TUPLE_CLASS_BOILERPLATE(
Block);
1647 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1649 BOILERPLATE(CommonStmt);
1650 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1651 std::list<Block> &&);
1653 std::list<Block> blocks;
1661WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1666 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1670using Subscript = ScalarIntExpr;
1675 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1676 std::optional<Subscript>>
1684 std::variant<IntExpr, SubscriptTriplet> u;
1688using Cosubscript = ScalarIntExpr;
1699 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1702 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1709 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1714 UNION_CLASS_BOILERPLATE(Expr);
1718 using IntrinsicUnary::IntrinsicUnary;
1721 using IntrinsicUnary::IntrinsicUnary;
1724 using IntrinsicUnary::IntrinsicUnary;
1726 struct NOT :
public IntrinsicUnary {
1727 using IntrinsicUnary::IntrinsicUnary;
1734 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1742 using IntrinsicBinary::IntrinsicBinary;
1745 using IntrinsicBinary::IntrinsicBinary;
1748 using IntrinsicBinary::IntrinsicBinary;
1751 using IntrinsicBinary::IntrinsicBinary;
1754 using IntrinsicBinary::IntrinsicBinary;
1757 using IntrinsicBinary::IntrinsicBinary;
1760 using IntrinsicBinary::IntrinsicBinary;
1763 using IntrinsicBinary::IntrinsicBinary;
1766 using IntrinsicBinary::IntrinsicBinary;
1769 using IntrinsicBinary::IntrinsicBinary;
1772 using IntrinsicBinary::IntrinsicBinary;
1775 using IntrinsicBinary::IntrinsicBinary;
1778 using IntrinsicBinary::IntrinsicBinary;
1781 using IntrinsicBinary::IntrinsicBinary;
1784 using IntrinsicBinary::IntrinsicBinary;
1787 using IntrinsicBinary::IntrinsicBinary;
1792 using IntrinsicBinary::IntrinsicBinary;
1797 std::tuple<DefinedOpName, common::Indirection<Expr>,
1805 mutable TypedExpr typedExpr;
1809 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1813 Add,
Subtract,
Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
1820 BOILERPLATE(PartRef);
1821 PartRef(
Name &&n, std::list<SectionSubscript> &&ss,
1822 std::optional<ImageSelector> &&is)
1823 : name{std::move(n)}, subscripts(std::move(ss)),
1824 imageSelector{std::move(is)} {}
1826 std::list<SectionSubscript> subscripts;
1827 std::optional<ImageSelector> imageSelector;
1832 UNION_CLASS_BOILERPLATE(DataRef);
1833 explicit DataRef(std::list<PartRef> &&);
1834 std::variant<Name, common::Indirection<StructureComponent>,
1850 std::tuple<DataRef, SubstringRange> t;
1855 std::tuple<CharLiteralConstant, SubstringRange> t;
1872 bool EndsInBareName()
const;
1874 std::variant<DataRef, Substring> u;
1880 mutable TypedExpr typedExpr;
1882 std::variant<common::Indirection<Designator>,
1900struct StructureComponent {
1901 BOILERPLATE(StructureComponent);
1903 : base{std::move(dr)}, component(std::move(n)) {}
1915struct CoindexedNamedObject {
1916 BOILERPLATE(CoindexedNamedObject);
1918 : base{std::move(dr)}, imageSelector{std::move(is)} {}
1924struct ArrayElement {
1925 BOILERPLATE(ArrayElement);
1926 ArrayElement(
DataRef &&dr, std::list<SectionSubscript> &&ss)
1927 : base{std::move(dr)}, subscripts(std::move(ss)) {}
1932 std::list<SectionSubscript> subscripts;
1938 mutable TypedExpr typedExpr;
1939 std::variant<Name, StructureComponent> u;
1944using BoundExpr = ScalarIntExpr;
1950 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1959 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1967 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1968 std::optional<AllocateCoarraySpec>>
1973WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1977WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1983 std::variant<StatVariable, MsgVariable> u;
1998 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
2005 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
2006 std::list<AllocOpt>>
2014 mutable TypedExpr typedExpr;
2015 std::variant<Name, StructureComponent> u;
2019WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2025 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2031 mutable TypedAssignment typedAssignment;
2032 std::tuple<Variable, Expr> t;
2036WRAPPER_CLASS(BoundsSpec, BoundExpr);
2041 std::tuple<BoundExpr, BoundExpr> t;
2053 UNION_CLASS_BOILERPLATE(
Bounds);
2054 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2057 mutable TypedAssignment typedAssignment;
2058 std::tuple<DataRef, Bounds, Expr> t;
2066 std::tuple<LogicalExpr, AssignmentStmt> t;
2072 std::tuple<std::optional<Name>, LogicalExpr> t;
2088 std::tuple<LogicalExpr, std::optional<Name>> t;
2092WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2095WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2104 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2108 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2111 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2112 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2127 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2133 std::tuple<common::Indirection<ConcurrentHeader>,
2150WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2156 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2164 std::variant<Expr, Variable> u;
2170 std::tuple<Name, Selector> t;
2177 std::tuple<std::optional<Name>, std::list<Association>> t;
2181WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2190WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2193WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2208 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2216 std::tuple<CodimensionDecl, Selector> t;
2224 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2225 std::list<StatOrErrmsg>>
2233 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2246 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2250WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2264 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2273 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2274 std::optional<ScalarLogicalExpr>>
2285 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2296 WRAPPER_CLASS(Local, std::list<Name>);
2297 WRAPPER_CLASS(LocalInit, std::list<Name>);
2299 TUPLE_CLASS_BOILERPLATE(
Reduce);
2301 std::tuple<Operator, std::list<Name>> t;
2303 WRAPPER_CLASS(Shared, std::list<Name>);
2304 EMPTY_CLASS(DefaultNone);
2305 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2318 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2321 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2328 std::tuple<Label, std::optional<LoopControl>> t;
2334 std::tuple<std::optional<Name>, std::optional<Label>,
2335 std::optional<LoopControl>>
2340WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2351 const std::optional<LoopControl> &GetLoopControl()
const;
2352 bool IsDoNormal()
const;
2353 bool IsDoWhile()
const;
2354 bool IsDoConcurrent()
const;
2359WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2364 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2371 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2375WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2378WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2386 std::tuple<Statement<ElseIfStmt>, Block> t;
2390 std::tuple<Statement<ElseStmt>, Block> t;
2393 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2400 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2401 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2420 Range(std::optional<CaseValue> &&l, std::optional<CaseValue> &&u)
2421 : lower{std::move(l)}, upper{std::move(u)} {}
2422 std::optional<CaseValue> lower, upper;
2424 std::variant<CaseValue, Range> u;
2428EMPTY_CLASS(Default);
2432 std::variant<std::list<CaseValueRange>, Default> u;
2438 std::tuple<CaseSelector, std::optional<Name>> t;
2444WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2450 TUPLE_CLASS_BOILERPLATE(
Case);
2451 std::tuple<Statement<CaseStmt>, Block> t;
2454 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2464 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2473 UNION_CLASS_BOILERPLATE(
Rank);
2474 std::variant<ScalarIntConstantExpr, Star, Default> u;
2477 std::tuple<Rank, std::optional<Name>> t;
2487 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2489 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2499 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2508 UNION_CLASS_BOILERPLATE(
Guard);
2509 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2512 std::tuple<Guard, std::optional<Name>> t;
2521 std::tuple<Statement<TypeGuardStmt>, Block> t;
2523 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2529WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2532WRAPPER_CLASS(GotoStmt, Label);
2537 std::tuple<std::list<Label>, ScalarIntExpr> t;
2550 ENUM_CLASS(Kind, Stop, ErrorStop)
2552 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2559 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2563WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2570 std::variant<IntExpr, Star> u;
2573 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2577WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2582 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2591 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2597 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2605 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2618 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2621 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2632 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2635 std::tuple<LockVariable, std::list<LockStat>> t;
2641 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2645WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2655 UNION_CLASS_BOILERPLATE(
IoUnit);
2656 std::variant<Variable, common::Indirection<Expr>, Star> u;
2660using FileNameExpr = ScalarDefaultCharExpr;
2679WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2680WRAPPER_CLASS(ErrLabel, Label);
2685 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2686 Encoding, Form, Pad, Position, Round, Sign,
2687 Carriagecontrol, Convert, Dispose)
2689 std::tuple<Kind, ScalarDefaultCharExpr> t;
2691 WRAPPER_CLASS(Recl, ScalarIntExpr);
2692 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2693 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2694 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2699WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2709 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2713 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2719 UNION_CLASS_BOILERPLATE(
Format);
2720 std::variant<Expr, Label, Star> u;
2724WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2738WRAPPER_CLASS(EndLabel, Label);
2739WRAPPER_CLASS(EorLabel, Label);
2743 ENUM_CLASS(Kind, Advance, Blank, Decimal, Delim, Pad, Round, Sign)
2745 std::tuple<Kind, ScalarDefaultCharExpr> t;
2747 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2748 WRAPPER_CLASS(Pos, ScalarIntExpr);
2749 WRAPPER_CLASS(Rec, ScalarIntExpr);
2750 WRAPPER_CLASS(Size, ScalarIntVariable);
2752 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size,
2760 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2767 BOILERPLATE(ReadStmt);
2768 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2769 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2770 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2771 items(std::move(its)) {}
2772 std::optional<IoUnit> iounit;
2774 std::optional<Format> format;
2777 std::list<IoControlSpec> controls;
2778 std::list<InputItem> items;
2784 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2789 BOILERPLATE(WriteStmt);
2790 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2791 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2792 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2793 items(std::move(its)) {}
2794 std::optional<IoUnit> iounit;
2796 std::optional<Format> format;
2798 std::list<IoControlSpec> controls;
2799 std::list<OutputItem> items;
2805 std::tuple<Format, std::list<OutputItem>> t;
2816 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2821 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2828WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2831 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2832 MsgVariable, StatVariable>
2837WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2847 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2852WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2856WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2859WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2862WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2902 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2903 Direct, Encoding, Form, Formatted, Iomsg,
Name, Pad, Position, Read,
2904 Readwrite, Round, Sequential, Sign, Stream, Status, Unformatted, Write,
2905 Carriagecontrol, Convert, Dispose)
2906 TUPLE_CLASS_BOILERPLATE(
CharVar);
2907 std::tuple<Kind, ScalarDefaultCharVariable> t;
2910 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2911 TUPLE_CLASS_BOILERPLATE(
IntVar);
2912 std::tuple<Kind, ScalarIntVariable> t;
2915 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2916 TUPLE_CLASS_BOILERPLATE(
LogVar);
2917 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2931 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2933 std::variant<std::list<InquireSpec>,
Iolength> u;
2940WRAPPER_CLASS(ProgramStmt,
Name);
2943WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2951 ExecutionPart, std::optional<InternalSubprogramPart>,
2957WRAPPER_CLASS(ModuleStmt,
Name);
2964 std::variant<common::Indirection<FunctionSubprogram>,
2974 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2978WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2984 TUPLE_CLASS_BOILERPLATE(
Module);
2995 UNION_CLASS_BOILERPLATE(
Rename);
2997 TUPLE_CLASS_BOILERPLATE(
Names);
2998 std::tuple<Name, Name> t;
3002 std::tuple<DefinedOpName, DefinedOpName> t;
3004 std::variant<Names, Operators> u;
3010 std::tuple<Name, std::optional<Name>> t;
3016 std::tuple<ParentIdentifier, Name> t;
3020WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3033WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3036WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3054 EMPTY_CLASS(Assignment);
3055 EMPTY_CLASS(ReadFormatted);
3056 EMPTY_CLASS(ReadUnformatted);
3057 EMPTY_CLASS(WriteFormatted);
3058 EMPTY_CLASS(WriteUnformatted);
3061 ReadUnformatted, WriteFormatted, WriteUnformatted>
3069 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3073struct InterfaceStmt {
3074 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3076 InterfaceStmt(Abstract x) : u{x} {}
3078 std::variant<std::optional<GenericSpec>, Abstract> u;
3084 UNION_CLASS_BOILERPLATE(
Only);
3085 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3093 BOILERPLATE(UseStmt);
3094 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3095 template <
typename A>
3096 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3097 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3098 std::optional<ModuleNature> nature;
3100 std::variant<std::list<Rename>, std::list<Only>> u;
3118 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3119 std::list<ProcDecl>>
3130 EMPTY_CLASS(Elemental);
3131 EMPTY_CLASS(Impure);
3133 EMPTY_CLASS(Non_Recursive);
3135 EMPTY_CLASS(Recursive);
3136 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3137 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3138 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3140 Pure, Recursive, Attributes, Launch_Bounds, Cluster_Dims>
3148 BOILERPLATE(Suffix);
3150 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3151 Suffix(
Name &&rn, std::optional<LanguageBindingSpec> &&lbs)
3152 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3153 std::optional<LanguageBindingSpec> binding;
3154 std::optional<Name> resultName;
3163 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3164 std::optional<Suffix>>
3169WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3174 std::variant<Name, Star> u;
3182 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3183 std::optional<LanguageBindingSpec>>
3188WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3203 std::tuple<Statement<SubroutineStmt>,
3207 std::variant<Function, Subroutine> u;
3212 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3214 std::tuple<Kind, std::list<Name>> t;
3220 std::variant<InterfaceBody, Statement<ProcedureStmt>> u;
3224WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3230 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3236WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3239WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3245 std::variant<Name, ProcComponentRef> u;
3249WRAPPER_CLASS(AltReturnSpec, Label);
3255 WRAPPER_CLASS(PercentRef,
Expr);
3256 WRAPPER_CLASS(PercentVal,
Expr);
3257 UNION_CLASS_BOILERPLATE(ActualArg);
3259 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal>
3266 std::tuple<std::optional<Keyword>,
ActualArg> t;
3272 TUPLE_CLASS_BOILERPLATE(
Call);
3273 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3289 BOILERPLATE(CallStmt);
3290 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3293 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3294 std::optional<ScalarIntExpr>>
3298 std::list<ActualArgSpec> &&args)
3299 : call{std::move(pd), std::move(args)}, chevrons{std::move(ch)} {}
3301 std::optional<Chevrons> chevrons;
3303 mutable TypedCall typedCall;
3327WRAPPER_CLASS(MpSubprogramStmt,
Name);
3330WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3345 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3349WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3378 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3381 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3385 std::tuple<common::Indirection<Designator>, uint64_t> t;
3387 EMPTY_CLASS(VectorAlways);
3390 ENUM_CLASS(Kind, Auto, Fixed, Scalable);
3392 std::tuple<std::uint64_t, Kind> t;
3396 std::tuple<Name, std::optional<std::uint64_t>> t;
3399 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3402 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3405 WRAPPER_CLASS_BOILERPLATE(
3408 EMPTY_CLASS(NoVector);
3409 EMPTY_CLASS(NoUnroll);
3410 EMPTY_CLASS(NoUnrollAndJam);
3411 EMPTY_CLASS(ForceInline);
3412 EMPTY_CLASS(Inline);
3413 EMPTY_CLASS(NoInline);
3415 EMPTY_CLASS(Unrecognized);
3417 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3419 Unrecognized, NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline,
3427 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3433 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3435WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3442 std::variant<Statement<DataComponentDefStmt>,
3448 EMPTY_CLASS(MapStmt);
3449 EMPTY_CLASS(EndMapStmt);
3450 TUPLE_CLASS_BOILERPLATE(
Map);
3451 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3457 EMPTY_CLASS(UnionStmt);
3458 EMPTY_CLASS(EndUnionStmt);
3459 TUPLE_CLASS_BOILERPLATE(
Union);
3465 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3469 EMPTY_CLASS(EndStructureStmt);
3471 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3478WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3483 std::tuple<Expr, Label, Label, Label> t;
3488 std::tuple<Label, Name> t;
3493 std::tuple<Name, std::list<Label>> t;
3496WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3502#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3503 using basename::basename; \
3504 classname(basename &&b) : basename(std::move(b)) {} \
3505 using TupleTrait = std::true_type; \
3506 BOILERPLATE(classname)
3508#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3509 BOILERPLATE(classname); \
3510 using basename::basename; \
3511 classname(basename &&base) : basename(std::move(base)) {} \
3512 using WrapperTrait = std::true_type
3517struct OmpDirectiveName {
3519 constexpr OmpDirectiveName() =
default;
3520 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3521 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3525 OmpDirectiveName(
const Verbatim &name);
3526 using WrapperTrait = std::true_type;
3528 bool IsExecutionPart()
const;
3531 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3539 std::variant<TypeSpec, DeclarationTypeSpec> u;
3554 ENUM_CLASS(Kind, BlankCommonBlock);
3555 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3563 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3570 using EmptyTrait = std::true_type;
3578 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3581 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3595 WRAPPER_CLASS_BOILERPLATE(
3608 std::variant<DefinedOperator, ProcedureDesignator> u;
3617 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3629 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3634inline namespace arguments {
3637 std::variant<OmpObject, FunctionReference> u;
3641 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3653 std::tuple<OmpObject, OmpObject> t;
3664 std::tuple<std::string, TypeSpec, Name> t;
3677 std::optional<OmpCombinerExpression>>
3696inline namespace traits {
3733 TUPLE_CLASS_BOILERPLATE(
Complex);
3735 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3739 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3755 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3780 std::string ToString()
const;
3783 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3784 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3785 std::variant<Value, llvm::omp::Directive, std::string> u;
3796 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3798 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3805 std::string ToString()
const;
3807 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3816 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3823 WRAPPER_CLASS_BOILERPLATE(
3828#define MODIFIER_BOILERPLATE(...) \
3830 using Variant = std::variant<__VA_ARGS__>; \
3831 UNION_CLASS_BOILERPLATE(Modifier); \
3836#define MODIFIERS() std::optional<std::list<Modifier>>
3838inline namespace modifier {
3846 ENUM_CLASS(Value, Cgroup);
3855 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3891 ENUM_CLASS(Value, Always)
3903 ENUM_CLASS(Value, Always, Never, Auto)
3913 ENUM_CLASS(Value, Automap);
3924 ENUM_CLASS(Value, Simd)
3937 ENUM_CLASS(Value, Close)
3949 ENUM_CLASS(Value, Delete)
3970 ENUM_CLASS(Value, Sink, Source);
3981 using Value = common::OmpDependenceKind;
3983 std::tuple<Value, OmpObject> t;
3991 ENUM_CLASS(Value, Ancestor, Device_Num)
4017 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4032 ENUM_CLASS(Value, Present);
4043 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4054 ENUM_CLASS(Value, Target, Targetsync)
4068 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4076 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4084 ENUM_CLASS(Value, Conditional)
4093 ENUM_CLASS(Value, Ref, Uval, Val);
4123 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4124 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4136 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4151 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4160 ENUM_CLASS(Value, Reproducible, Unconstrained)
4173 using Extensions = std::list<PreferencePropertyExtension>;
4174 std::variant<ForeignRuntimeIdentifier, Extensions> u;
4184 using ForeignRuntimeIdentifier =
4185 OmpPreferenceSelector::ForeignRuntimeIdentifier;
4186 std::variant<std::list<OmpPreferenceSelector>, ForeignRuntimeIdentifier> u;
4194 WRAPPER_CLASS_BOILERPLATE(
4203 ENUM_CLASS(Value, Strict)
4216 ENUM_CLASS(Value, Present)
4225 ENUM_CLASS(Value, Default, Inscan, Task);
4235 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4245 ENUM_CLASS(Value, Self)
4272 using Value = common::OmpDependenceKind;
4283 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4296 ENUM_CLASS(Value, Ompx_Hold)
4306using OmpDirectiveList = std::list<llvm::omp::Directive>;
4319 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4322 std::tuple<OmpAdjustOp, OmpObjectList> t;
4339 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4370 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4378 ENUM_CLASS(ActionTime, Compilation, Execution);
4379 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4390 using MemoryOrder = common::OmpMemoryOrderType;
4401 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4408 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4441 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4443 std::variant<DataSharingAttribute,
4460 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4463 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4472 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4481 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4498 OmpDependenceType::Value GetDepType()
const;
4501 EMPTY_CLASS(Source);
4503 std::variant<Sink, Source> u;
4518 OmpTaskDependenceType::Value GetTaskDepType()
const;
4519 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4523 std::variant<TaskDep, OmpDoacross> u;
4560 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4576 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4586 WRAPPER_CLASS_BOILERPLATE(
4593 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4610 using MemoryOrder = common::OmpMemoryOrderType;
4636 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4657 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4670 WRAPPER_CLASS_BOILERPLATE(
4683 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4736 MODIFIER_BOILERPLATE(
4747 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4784 WRAPPER_CLASS_BOILERPLATE(
4798EMPTY_CLASS(OmpNoOpenMPClause);
4803EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4808EMPTY_CLASS(OmpNoParallelismClause);
4818 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4830 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4842 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4852 ENUM_CLASS(Ordering, Concurrent)
4854 std::tuple<MODIFIERS(), Ordering> t;
4876 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4919 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4921 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4936 ENUM_CLASS(SevLevel, Fatal, Warning);
4958 std::tuple<MODIFIERS(), std::list<ScalarIntExpr>> t;
4965 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
5008 WRAPPER_CLASS_BOILERPLATE(
5026 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
5036 MODIFIER_BOILERPLATE(OmpContextSelector);
5037 std::tuple<MODIFIERS(),
5038 std::optional<common::Indirection<OmpDirectiveSpecification>>>
5052 llvm::omp::Clause Id()
const;
5054#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5055#include "llvm/Frontend/OpenMP/OMP.inc"
5060#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5061#include "llvm/Frontend/OpenMP/OMP.inc"
5067 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
5074 ENUM_CLASS(Flag, DeprecatedSyntax, CrossesLabelDo)
5079 return std::get<OmpDirectiveName>(t);
5081 llvm::omp::Directive DirId()
const {
5088 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
5089 std::optional<OmpClauseList>, Flags>
5098 INHERITED_TUPLE_CLASS_BOILERPLATE(
5110 return std::get<OmpBeginDirective>(t);
5112 const std::optional<OmpEndDirective> &EndDir()
const {
5113 return std::get<std::optional<OmpEndDirective>>(t);
5117 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5121 WRAPPER_CLASS_BOILERPLATE(
5142 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5151 WRAPPER_CLASS_BOILERPLATE(
5169 INHERITED_TUPLE_CLASS_BOILERPLATE(
5184 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5192 return std::get<OmpBeginSectionsDirective>(t);
5194 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5195 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5202 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5203 std::optional<OmpEndSectionsDirective>>
5212 WRAPPER_CLASS_BOILERPLATE(
5224 WRAPPER_CLASS_BOILERPLATE(
5232 WRAPPER_CLASS_BOILERPLATE(
5241 WRAPPER_CLASS_BOILERPLATE(
5249 WRAPPER_CLASS_BOILERPLATE(
5330 INHERITED_TUPLE_CLASS_BOILERPLATE(
5335 llvm::omp::Clause GetKind()
const;
5336 bool IsCapture()
const;
5337 bool IsCompare()
const;
5343 static constexpr int None = 0;
5344 static constexpr int Read = 1;
5345 static constexpr int Write = 2;
5346 static constexpr int Update = Read | Write;
5347 static constexpr int Action = 3;
5348 static constexpr int IfTrue = 4;
5349 static constexpr int IfFalse = 8;
5350 static constexpr int Condition = 12;
5354 TypedAssignment assign;
5356 TypedExpr atom, cond;
5365 WRAPPER_CLASS_BOILERPLATE(
5426 WRAPPER_CLASS_BOILERPLATE(
5449struct OpenMPLoopConstruct {
5450 TUPLE_CLASS_BOILERPLATE(OpenMPLoopConstruct);
5452 : t({std::move(a), Block{}, std::nullopt}) {}
5455 return std::get<OmpBeginLoopDirective>(t);
5457 const std::optional<OmpEndLoopDirective> &EndDir()
const {
5458 return std::get<std::optional<OmpEndLoopDirective>>(t);
5461 const OpenMPLoopConstruct *GetNestedConstruct()
const;
5464 std::tuple<OmpBeginLoopDirective, Block, std::optional<OmpEndLoopDirective>>
5488 INHERITED_TUPLE_CLASS_BOILERPLATE(
5494 using EmptyTrait = std::true_type;
5505WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5537 std::variant<Name, ScalarDefaultCharExpr> u;
5547 ENUM_CLASS(Modifier, ReadOnly, Zero)
5554 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5559 std::tuple<ReductionOperator, AccObjectList> t;
5564 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5568 WRAPPER_CLASS_BOILERPLATE(
5574 WRAPPER_CLASS_BOILERPLATE(
5581 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5589 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5598 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5605 WRAPPER_CLASS(Num, ScalarIntExpr);
5606 WRAPPER_CLASS(Dim, ScalarIntExpr);
5608 std::variant<Num, Dim, Static> u;
5613 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5618 std::tuple<bool, ScalarIntConstantExpr> t;
5624#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5625#include "llvm/Frontend/OpenACC/ACC.inc"
5630#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5631#include "llvm/Frontend/OpenACC/ACC.inc"
5637 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5650 std::tuple<Verbatim, AccObjectListWithModifier> t;
5656 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5661 std::tuple<AccLoopDirective, AccClauseList> t;
5668 std::tuple<AccBlockDirective, AccClauseList> t;
5677EMPTY_CLASS(AccEndAtomic);
5682 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5683 std::optional<AccEndAtomic>>
5690 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5691 std::optional<AccEndAtomic>>
5699 std::optional<AccEndAtomic>>
5708 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5713 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5720 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5726 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5732 std::tuple<AccCombinedDirective, AccClauseList> t;
5740struct OpenACCCombinedConstruct {
5741 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5744 : t({std::move(a), std::nullopt, std::nullopt}) {}
5745 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5746 std::optional<AccEndCombinedDirective>>
5753 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5758EMPTY_CLASS(AccEndLoop);
5759struct OpenACCLoopConstruct {
5760 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5762 : t({std::move(a), std::nullopt, std::nullopt}) {}
5763 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5764 std::optional<AccEndLoop>>
5776 std::tuple<AccStandaloneDirective, AccClauseList> t;
5802 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5807 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5810 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5811 std::optional<ScalarIntExpr>>
5817 std::tuple<std::optional<ScalarIntConstantExpr>,
5818 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5821 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:1310
Definition parse-tree.h:1317
Definition parse-tree.h:1276
Definition parse-tree.h:1265
Definition parse-tree.h:1264
Definition parse-tree.h:5704
Definition parse-tree.h:5680
Definition parse-tree.h:5696
Definition parse-tree.h:5688
Definition parse-tree.h:5665
Definition parse-tree.h:5729
Definition parse-tree.h:5659
Definition parse-tree.h:5535
Definition parse-tree.h:5508
Definition parse-tree.h:5636
Definition parse-tree.h:5621
Definition parse-tree.h:5616
Definition parse-tree.h:5524
Definition parse-tree.h:5546
Definition parse-tree.h:5529
Definition parse-tree.h:5541
Definition parse-tree.h:5573
Definition parse-tree.h:5567
Definition parse-tree.h:5671
Definition parse-tree.h:5735
Definition parse-tree.h:5612
Definition parse-tree.h:5603
Definition parse-tree.h:5513
Definition parse-tree.h:5552
Definition parse-tree.h:5557
Definition parse-tree.h:5500
Definition parse-tree.h:5596
Definition parse-tree.h:5592
Definition parse-tree.h:5588
Definition parse-tree.h:5518
Definition parse-tree.h:5584
Definition parse-tree.h:5578
Definition parse-tree.h:5562
Definition parse-tree.h:916
Definition parse-tree.h:1434
Definition parse-tree.h:496
Definition parse-tree.h:3264
Definition parse-tree.h:3254
Definition parse-tree.h:1992
Definition parse-tree.h:1957
Definition parse-tree.h:1936
Definition parse-tree.h:1948
Definition parse-tree.h:2003
Definition parse-tree.h:1965
Definition parse-tree.h:3481
Definition parse-tree.h:1924
Definition parse-tree.h:1365
Definition parse-tree.h:3486
Definition parse-tree.h:3491
Definition parse-tree.h:2029
Definition parse-tree.h:2184
Definition parse-tree.h:2175
Definition parse-tree.h:2168
Definition parse-tree.h:1347
Definition parse-tree.h:1395
Definition parse-tree.h:3431
Definition parse-tree.h:1134
Definition parse-tree.h:1456
Definition parse-tree.h:1463
Definition parse-tree.h:2206
Definition parse-tree.h:3039
Definition parse-tree.h:2039
Definition parse-tree.h:3425
Definition parse-tree.h:5814
Definition parse-tree.h:5808
Definition parse-tree.h:5805
Definition parse-tree.h:5799
Definition parse-tree.h:3291
Definition parse-tree.h:3288
Definition parse-tree.h:3271
Definition parse-tree.h:2449
Definition parse-tree.h:2448
Definition parse-tree.h:2430
Definition parse-tree.h:2436
Definition parse-tree.h:2416
Definition parse-tree.h:2237
Definition parse-tree.h:2222
Definition parse-tree.h:670
Definition parse-tree.h:1853
Definition parse-tree.h:875
Definition parse-tree.h:688
Definition parse-tree.h:686
Definition parse-tree.h:2707
Definition parse-tree.h:2706
Definition parse-tree.h:2214
Definition parse-tree.h:991
Definition parse-tree.h:1469
Definition parse-tree.h:1915
Definition parse-tree.h:1636
Definition parse-tree.h:1645
Definition parse-tree.h:1644
Definition parse-tree.h:3383
Definition parse-tree.h:3376
Definition parse-tree.h:3380
Definition parse-tree.h:3394
Definition parse-tree.h:3404
Definition parse-tree.h:3401
Definition parse-tree.h:3398
Definition parse-tree.h:3388
Definition parse-tree.h:3374
Definition parse-tree.h:861
Definition parse-tree.h:853
Definition parse-tree.h:1002
Definition parse-tree.h:1015
Definition parse-tree.h:1123
Definition parse-tree.h:1068
Definition parse-tree.h:1227
Definition parse-tree.h:2535
Definition parse-tree.h:2262
Definition parse-tree.h:2684
Definition parse-tree.h:2682
Definition parse-tree.h:303
Definition parse-tree.h:2253
Definition parse-tree.h:2244
Definition parse-tree.h:1076
Definition parse-tree.h:1526
Definition parse-tree.h:1538
Definition parse-tree.h:1831
Definition parse-tree.h:1497
Definition parse-tree.h:1546
Definition parse-tree.h:1512
Definition parse-tree.h:1552
Definition parse-tree.h:1518
Definition parse-tree.h:2023
Definition parse-tree.h:437
Definition parse-tree.h:782
Definition parse-tree.h:777
Definition parse-tree.h:775
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1212
Definition parse-tree.h:757
Definition parse-tree.h:933
Definition parse-tree.h:1870
Definition parse-tree.h:1564
Definition parse-tree.h:1563
Definition parse-tree.h:2349
Definition parse-tree.h:3172
Definition parse-tree.h:2369
Definition parse-tree.h:2231
Definition parse-tree.h:1410
Definition parse-tree.h:3343
Definition parse-tree.h:1256
Definition parse-tree.h:1242
Definition parse-tree.h:2589
Definition parse-tree.h:2595
Definition parse-tree.h:2603
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:985
Definition parse-tree.h:972
Definition parse-tree.h:1777
Definition parse-tree.h:1750
Definition parse-tree.h:1791
Definition parse-tree.h:1756
Definition parse-tree.h:1795
Definition parse-tree.h:1732
Definition parse-tree.h:1747
Definition parse-tree.h:1783
Definition parse-tree.h:1765
Definition parse-tree.h:1771
Definition parse-tree.h:1774
Definition parse-tree.h:1737
Definition parse-tree.h:1762
Definition parse-tree.h:1759
Definition parse-tree.h:1744
Definition parse-tree.h:1786
Definition parse-tree.h:1768
Definition parse-tree.h:1726
Definition parse-tree.h:1723
Definition parse-tree.h:1780
Definition parse-tree.h:1717
Definition parse-tree.h:1741
Definition parse-tree.h:1753
Definition parse-tree.h:1720
Definition parse-tree.h:1713
Definition parse-tree.h:1062
Definition parse-tree.h:2125
Definition parse-tree.h:2141
Definition parse-tree.h:2119
Definition parse-tree.h:2154
Definition parse-tree.h:2131
Definition parse-tree.h:3276
Definition parse-tree.h:3161
Definition parse-tree.h:3309
Definition parse-tree.h:3052
Definition parse-tree.h:3067
Definition parse-tree.h:882
Definition parse-tree.h:2388
Definition parse-tree.h:2384
Definition parse-tree.h:2383
Definition parse-tree.h:2399
Definition parse-tree.h:2362
Definition parse-tree.h:1697
Definition parse-tree.h:1707
Definition parse-tree.h:419
Definition parse-tree.h:1620
Definition parse-tree.h:1629
Definition parse-tree.h:625
Definition parse-tree.h:1033
Definition parse-tree.h:2901
Definition parse-tree.h:2909
Definition parse-tree.h:2914
Definition parse-tree.h:2899
Definition parse-tree.h:2929
Definition parse-tree.h:2927
Definition parse-tree.h:809
Definition parse-tree.h:311
Definition parse-tree.h:1373
Definition parse-tree.h:1572
Definition parse-tree.h:3228
Definition parse-tree.h:3195
Definition parse-tree.h:3201
Definition parse-tree.h:3193
Definition parse-tree.h:3218
Definition parse-tree.h:475
Definition parse-tree.h:463
Definition parse-tree.h:720
Definition parse-tree.h:715
Definition parse-tree.h:725
Definition parse-tree.h:709
Definition parse-tree.h:707
Definition parse-tree.h:2742
Definition parse-tree.h:2740
Definition parse-tree.h:2654
Definition parse-tree.h:796
Definition parse-tree.h:658
Definition parse-tree.h:2326
Definition parse-tree.h:1326
Definition parse-tree.h:676
Definition parse-tree.h:1614
Definition parse-tree.h:907
Definition parse-tree.h:2298
Definition parse-tree.h:2294
Definition parse-tree.h:2630
Definition parse-tree.h:2629
Definition parse-tree.h:889
Definition parse-tree.h:319
Definition parse-tree.h:1291
Definition parse-tree.h:2316
Definition parse-tree.h:2314
Definition parse-tree.h:2948
Definition parse-tree.h:3447
Definition parse-tree.h:2086
Definition parse-tree.h:2972
Definition parse-tree.h:2962
Definition parse-tree.h:2983
Definition parse-tree.h:587
Definition parse-tree.h:1332
Definition parse-tree.h:639
Definition parse-tree.h:638
Definition parse-tree.h:2332
Definition parse-tree.h:2557
Definition parse-tree.h:1443
Definition parse-tree.h:4312
Definition parse-tree.h:4318
Definition parse-tree.h:4316
Definition parse-tree.h:4331
Definition parse-tree.h:4338
Definition parse-tree.h:4346
Definition parse-tree.h:4361
Definition parse-tree.h:5303
Definition parse-tree.h:4369
Definition parse-tree.h:4368
Definition parse-tree.h:4377
Definition parse-tree.h:4389
Definition parse-tree.h:5097
Definition parse-tree.h:5440
Definition parse-tree.h:5168
Definition parse-tree.h:4400
Definition parse-tree.h:5107
Definition parse-tree.h:4406
Definition parse-tree.h:5066
Definition parse-tree.h:5050
Definition parse-tree.h:4415
Definition parse-tree.h:3616
Definition parse-tree.h:4423
Definition parse-tree.h:5211
Definition parse-tree.h:4440
Definition parse-tree.h:4458
Definition parse-tree.h:4517
Definition parse-tree.h:4515
Definition parse-tree.h:4539
Definition parse-tree.h:4547
Definition parse-tree.h:4557
Definition parse-tree.h:4567
Definition parse-tree.h:4575
Definition parse-tree.h:3517
Definition parse-tree.h:5073
Definition parse-tree.h:4530
Definition parse-tree.h:4497
Definition parse-tree.h:4590
Definition parse-tree.h:4585
Definition parse-tree.h:5102
Definition parse-tree.h:5444
Definition parse-tree.h:5173
Definition parse-tree.h:4601
Definition parse-tree.h:5135
Definition parse-tree.h:4609
Definition parse-tree.h:4622
Definition parse-tree.h:4633
Definition parse-tree.h:4643
Definition parse-tree.h:4651
Definition parse-tree.h:4656
Definition parse-tree.h:4664
Definition parse-tree.h:4680
Definition parse-tree.h:4703
Definition parse-tree.h:4669
Definition parse-tree.h:4693
Definition parse-tree.h:4710
Definition parse-tree.h:3628
Definition parse-tree.h:4470
Definition parse-tree.h:4488
Definition parse-tree.h:4479
Definition parse-tree.h:4719
Definition parse-tree.h:4734
Definition parse-tree.h:4745
Definition parse-tree.h:4770
Definition parse-tree.h:4782
Definition parse-tree.h:4791
Definition parse-tree.h:5129
Definition parse-tree.h:4815
Definition parse-tree.h:4827
Definition parse-tree.h:4839
Definition parse-tree.h:3562
Definition parse-tree.h:3553
Definition parse-tree.h:3550
Definition parse-tree.h:4850
Definition parse-tree.h:4863
Definition parse-tree.h:4875
Definition parse-tree.h:4886
Definition parse-tree.h:3606
Definition parse-tree.h:4896
Definition parse-tree.h:4905
Definition parse-tree.h:4917
Definition parse-tree.h:4928
Definition parse-tree.h:4935
Definition parse-tree.h:3566
Definition parse-tree.h:3588
Definition parse-tree.h:3576
Definition parse-tree.h:3575
Definition parse-tree.h:4944
Definition parse-tree.h:4955
Definition parse-tree.h:4964
Definition parse-tree.h:4979
Definition parse-tree.h:4989
Definition parse-tree.h:3542
Definition parse-tree.h:3535
Definition parse-tree.h:4998
Definition parse-tree.h:5007
Definition parse-tree.h:5023
Definition parse-tree.h:5045
Definition parse-tree.h:5034
Definition parse-tree.h:3083
Definition parse-tree.h:5711
Definition parse-tree.h:5718
Definition parse-tree.h:5647
Definition parse-tree.h:5740
Definition parse-tree.h:5779
Definition parse-tree.h:5750
Definition parse-tree.h:5768
Definition parse-tree.h:5759
Definition parse-tree.h:5641
Definition parse-tree.h:5773
Definition parse-tree.h:5723
Definition parse-tree.h:5653
Definition parse-tree.h:5329
Definition parse-tree.h:5162
Definition parse-tree.h:5352
Definition parse-tree.h:5342
Definition parse-tree.h:5334
Definition parse-tree.h:5371
Definition parse-tree.h:5364
Definition parse-tree.h:5475
Definition parse-tree.h:5319
Definition parse-tree.h:5150
Definition parse-tree.h:5307
Definition parse-tree.h:5231
Definition parse-tree.h:5240
Definition parse-tree.h:5248
Definition parse-tree.h:5223
Definition parse-tree.h:5382
Definition parse-tree.h:5396
Definition parse-tree.h:5470
Definition parse-tree.h:5412
Definition parse-tree.h:5258
Definition parse-tree.h:5420
Definition parse-tree.h:5493
Definition parse-tree.h:5449
Definition parse-tree.h:5487
Definition parse-tree.h:5264
Definition parse-tree.h:5182
Definition parse-tree.h:5188
Definition parse-tree.h:5425
Definition parse-tree.h:5431
Definition parse-tree.h:5270
Definition parse-tree.h:5139
Definition parse-tree.h:376
Definition parse-tree.h:2819
Definition parse-tree.h:2782
Definition parse-tree.h:3008
Definition parse-tree.h:2052
Definition parse-tree.h:2051
Definition parse-tree.h:1582
Definition parse-tree.h:2012
Definition parse-tree.h:2845
Definition parse-tree.h:3128
Definition parse-tree.h:2803
Definition parse-tree.h:946
Definition parse-tree.h:3106
Definition parse-tree.h:1087
Definition parse-tree.h:1115
Definition parse-tree.h:1910
Definition parse-tree.h:1107
Definition parse-tree.h:1101
Definition parse-tree.h:1094
Definition parse-tree.h:3116
Definition parse-tree.h:3243
Definition parse-tree.h:3211
Definition parse-tree.h:571
Definition parse-tree.h:2766
Definition parse-tree.h:830
Definition parse-tree.h:828
Definition parse-tree.h:2283
Definition parse-tree.h:2996
Definition parse-tree.h:3000
Definition parse-tree.h:2994
Definition parse-tree.h:1595
Definition parse-tree.h:295
Definition parse-tree.h:1682
Definition parse-tree.h:2406
Definition parse-tree.h:2472
Definition parse-tree.h:2471
Definition parse-tree.h:2485
Definition parse-tree.h:2483
Definition parse-tree.h:2462
Definition parse-tree.h:2519
Definition parse-tree.h:2517
Definition parse-tree.h:2497
Definition parse-tree.h:2162
Definition parse-tree.h:3335
Definition parse-tree.h:867
Definition parse-tree.h:802
Definition parse-tree.h:842
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1981
Definition parse-tree.h:359
Definition parse-tree.h:3353
Definition parse-tree.h:2549
Definition parse-tree.h:1900
Definition parse-tree.h:1233
Definition parse-tree.h:3468
Definition parse-tree.h:3440
Definition parse-tree.h:3463
Definition parse-tree.h:3014
Definition parse-tree.h:3025
Definition parse-tree.h:3180
Definition parse-tree.h:3319
Definition parse-tree.h:1673
Definition parse-tree.h:1862
Definition parse-tree.h:1664
Definition parse-tree.h:1848
Definition parse-tree.h:2568
Definition parse-tree.h:2567
Definition parse-tree.h:2580
Definition parse-tree.h:924
Definition parse-tree.h:1176
Definition parse-tree.h:1189
Definition parse-tree.h:1142
Definition parse-tree.h:1198
Definition parse-tree.h:1152
Definition parse-tree.h:1424
Definition parse-tree.h:2507
Definition parse-tree.h:2506
Definition parse-tree.h:952
Definition parse-tree.h:960
Definition parse-tree.h:751
Definition parse-tree.h:649
Definition parse-tree.h:764
Definition parse-tree.h:3456
Definition parse-tree.h:354
Definition parse-tree.h:2639
Definition parse-tree.h:815
Definition parse-tree.h:3092
Definition parse-tree.h:1878
Definition parse-tree.h:737
Definition parse-tree.h:742
Definition parse-tree.h:282
Definition parse-tree.h:2829
Definition parse-tree.h:2077
Definition parse-tree.h:2070
Definition parse-tree.h:2106
Definition parse-tree.h:2102
Definition parse-tree.h:2101
Definition parse-tree.h:2064
Definition parse-tree.h:2788
Definition parse-tree.h:3690
Definition parse-tree.h:3681
Definition parse-tree.h:3651
Definition parse-tree.h:3640
Definition parse-tree.h:3635
Definition parse-tree.h:3661
Definition parse-tree.h:3674
Definition parse-tree.h:3845
Definition parse-tree.h:3862
Definition parse-tree.h:3854
Definition parse-tree.h:3878
Definition parse-tree.h:3870
Definition parse-tree.h:3890
Definition parse-tree.h:3902
Definition parse-tree.h:3912
Definition parse-tree.h:3923
Definition parse-tree.h:3936
Definition parse-tree.h:3948
Definition parse-tree.h:3969
Definition parse-tree.h:3980
Definition parse-tree.h:3990
Definition parse-tree.h:3999
Definition parse-tree.h:4016
Definition parse-tree.h:4031
Definition parse-tree.h:4042
Definition parse-tree.h:4053
Definition parse-tree.h:4065
Definition parse-tree.h:4075
Definition parse-tree.h:4083
Definition parse-tree.h:4092
Definition parse-tree.h:4101
Definition parse-tree.h:4135
Definition parse-tree.h:4122
Definition parse-tree.h:4109
Definition parse-tree.h:4159
Definition parse-tree.h:4150
Definition parse-tree.h:4193
Definition parse-tree.h:4169
Definition parse-tree.h:4182
Definition parse-tree.h:4202
Definition parse-tree.h:4215
Definition parse-tree.h:4224
Definition parse-tree.h:4234
Definition parse-tree.h:4244
Definition parse-tree.h:4253
Definition parse-tree.h:4261
Definition parse-tree.h:4271
Definition parse-tree.h:4282
Definition parse-tree.h:4295
Definition parse-tree.h:3821
Definition parse-tree.h:3731
Definition parse-tree.h:3728
Definition parse-tree.h:3711
Definition parse-tree.h:3752
Definition parse-tree.h:3718
Definition parse-tree.h:3779
Definition parse-tree.h:3794
Definition parse-tree.h:3791
Definition parse-tree.h:3804
Definition parse-tree.h:3813