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>,
420 std::variant<Statement<common::Indirection<ImplicitStmt>>,
431WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
438 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
452 std::tuple<std::list<OpenACCDeclarativeConstruct>,
453 std::list<OpenMPDeclarativeConstruct>,
454 std::list<common::Indirection<CompilerDirective>>,
455 std::list<Statement<common::Indirection<UseStmt>>>,
456 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
457 std::list<DeclarationConstruct>>
464 std::variant<common::Indirection<FunctionSubprogram>,
471EMPTY_CLASS(ContainsStmt);
476 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
480EMPTY_CLASS(ContinueStmt);
483EMPTY_CLASS(FailImageStmt);
497 std::variant<common::Indirection<AllocateStmt>,
555 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
564using Block = std::list<ExecutionPartConstruct>;
565WRAPPER_CLASS(ExecutionPart, Block);
572 std::variant<common::Indirection<MainProgram>,
583WRAPPER_CLASS(Program, std::list<ProgramUnit>);
587 std::string ToString()
const {
return source.ToString(); }
593WRAPPER_CLASS(Keyword,
Name);
596WRAPPER_CLASS(NamedConstant,
Name);
603WRAPPER_CLASS(DefinedOpName,
Name);
613 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
614 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
615 std::variant<DefinedOpName, IntrinsicOperator> u;
619using ObjectName =
Name;
625 BOILERPLATE(ImportStmt);
626 ImportStmt(common::ImportKind &&k) : kind{k} {}
627 ImportStmt(std::list<Name> &&n) : names(std::move(n)) {}
628 ImportStmt(common::ImportKind &&, std::list<Name> &&);
629 common::ImportKind kind{common::ImportKind::Default};
630 std::list<Name> names;
639 TUPLE_CLASS_BOILERPLATE(
Group);
640 std::tuple<Name, std::list<Name>> t;
642 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
650 EMPTY_CLASS(Deferred);
651 std::variant<ScalarIntExpr, Star, Deferred> u;
659 WRAPPER_CLASS(StarSize, std::uint64_t);
660 std::variant<ScalarIntConstantExpr, StarSize> u;
664WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
666WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
671 std::variant<TypeParamValue, std::uint64_t> u;
677 std::variant<TypeParamValue, CharLength> u;
686 UNION_CLASS_BOILERPLATE(CharSelector);
687 struct LengthAndKind {
688 BOILERPLATE(LengthAndKind);
689 LengthAndKind(std::optional<TypeParamValue> &&l, ScalarIntConstantExpr &&k)
690 : length(std::move(l)), kind(std::move(k)) {}
691 std::optional<TypeParamValue> length;
692 ScalarIntConstantExpr kind;
695 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
696 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
697 : u{LengthAndKind{std::move(l), std::move(k)}} {}
698 std::variant<LengthSelector, LengthAndKind> u;
710 Real(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
711 std::optional<KindSelector> kind;
713 EMPTY_CLASS(DoublePrecision);
715 BOILERPLATE(Complex);
716 Complex(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
717 std::optional<KindSelector> kind;
720 BOILERPLATE(Character);
721 Character(std::optional<CharSelector> &&s) : selector{std::move(s)} {}
722 std::optional<CharSelector> selector;
725 BOILERPLATE(Logical);
726 Logical(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
727 std::optional<KindSelector> kind;
729 EMPTY_CLASS(DoubleComplex);
730 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
738 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
743 EMPTY_CLASS(PairVectorTypeSpec);
744 EMPTY_CLASS(QuadVectorTypeSpec);
745 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
759 std::tuple<Name, std::list<TypeParamSpec>> t;
766 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
786 EMPTY_CLASS(ClassStar);
787 EMPTY_CLASS(TypeStar);
788 WRAPPER_CLASS(Record,
Name);
797 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
804 std::tuple<CharBlock, std::optional<KindParam>> t;
810 std::tuple<CharBlock, std::optional<KindParam>> t;
816 std::tuple<CharBlock, std::optional<KindParam>> t;
820enum class Sign { Positive, Negative };
827struct RealLiteralConstant {
828 BOILERPLATE(RealLiteralConstant);
830 COPY_AND_ASSIGN_BOILERPLATE(Real);
834 RealLiteralConstant(
Real &&r, std::optional<KindParam> &&k)
835 : real{std::move(r)}, kind{std::move(k)} {}
837 std::optional<KindParam> kind;
862 std::tuple<ComplexPart, ComplexPart> t;
868 std::tuple<Sign, ComplexLiteralConstant> t;
876 std::tuple<std::optional<KindParam>, std::string> t;
877 std::string GetString()
const {
return std::get<std::string>(t); }
883 std::string GetString()
const {
return v; }
890 std::tuple<bool, std::optional<KindParam>> t;
900WRAPPER_CLASS(BOZLiteralConstant, std::string);
916 ENUM_CLASS(Kind, Public, Private)
922EMPTY_CLASS(Abstract);
926 WRAPPER_CLASS(Extends,
Name);
927 std::variant<Abstract, AccessSpec, BindC, Extends> u;
934 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
938EMPTY_CLASS(SequenceStmt);
942EMPTY_CLASS(PrivateStmt);
947 std::variant<PrivateStmt, SequenceStmt> u;
953 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
961 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
966WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
973 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
978WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
986 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
992 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
997WRAPPER_CLASS(DeferredShapeSpecList,
int);
1003 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
1011EMPTY_CLASS(Allocatable);
1012EMPTY_CLASS(Pointer);
1013EMPTY_CLASS(Contiguous);
1034 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1035 std::list<common::Indirection<DataStmtValue>>>
1045struct ComponentDecl {
1046 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1048 std::optional<ComponentArraySpec> &&aSpec,
1049 std::optional<CoarraySpec> &&coaSpec,
1050 std::optional<Initialization> &&init)
1051 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1052 std::move(length), std::move(init)} {}
1053 std::tuple<Name, std::optional<ComponentArraySpec>,
1054 std::optional<CoarraySpec>, std::optional<CharLength>,
1055 std::optional<Initialization>>
1063 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1069 std::variant<ComponentDecl, FillDecl> u;
1077 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1078 std::list<ComponentOrFill>>
1085WRAPPER_CLASS(Pass, std::optional<Name>);
1088 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1095 std::variant<NullInit, Name> u;
1102 std::variant<Name, DeclarationTypeSpec> u;
1108 std::tuple<Name, std::optional<ProcPointerInit>> t;
1116 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1117 std::list<ProcDecl>>
1135 EMPTY_CLASS(Deferred);
1136 EMPTY_CLASS(Non_Overridable);
1137 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1143 std::tuple<Name, std::optional<Name>> t;
1153 struct WithoutInterface {
1154 BOILERPLATE(WithoutInterface);
1156 std::list<BindAttr> &&as, std::list<TypeBoundProcDecl> &&ds)
1157 : attributes(std::move(as)), declarations(std::move(ds)) {}
1158 std::list<BindAttr> attributes;
1159 std::list<TypeBoundProcDecl> declarations;
1161 struct WithInterface {
1162 BOILERPLATE(WithInterface);
1163 WithInterface(
Name &&n, std::list<BindAttr> &&as, std::list<Name> &&bs)
1164 : interfaceName(std::move(n)), attributes(std::move(as)),
1165 bindingNames(std::move(bs)) {}
1167 std::list<BindAttr> attributes;
1168 std::list<Name> bindingNames;
1170 std::variant<WithoutInterface, WithInterface> u;
1183WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1199 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1200 std::list<Statement<TypeBoundProcBinding>>>
1205WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1213 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1214 std::list<Statement<PrivateOrSequence>>,
1215 std::list<Statement<ComponentDefStmt>>,
1228 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1234 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1238EMPTY_CLASS(EnumDefStmt);
1243 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1247WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1250EMPTY_CLASS(EndEnumStmt);
1256 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1257 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1265 TUPLE_CLASS_BOILERPLATE(
Triplet);
1266 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1268 UNION_CLASS_BOILERPLATE(
AcValue);
1269 std::variant<Triplet, common::Indirection<Expr>,
1276 BOILERPLATE(AcSpec);
1277 AcSpec(std::optional<TypeSpec> &&ts, std::list<AcValue> &&xs)
1278 : type(std::move(ts)), values(std::move(xs)) {}
1279 explicit AcSpec(
TypeSpec &&ts) : type{std::move(ts)} {}
1280 std::optional<TypeSpec> type;
1281 std::list<AcValue> values;
1285WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1290template <
typename VAR,
typename BOUND>
struct LoopBounds {
1291 LoopBounds(LoopBounds &&that) =
default;
1293 VAR &&name, BOUND &&lower, BOUND &&upper, std::optional<BOUND> &&step)
1294 : name{std::move(name)}, lower{std::move(lower)}, upper{std::move(upper)},
1295 step{std::move(step)} {}
1296 LoopBounds &operator=(LoopBounds &&) =
default;
1299 std::optional<BOUND> step;
1312 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1327 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1333 std::tuple<NamedConstant, ConstantExpr> t;
1337WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1340WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1343WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1348 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1355WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1358EMPTY_CLASS(AssumedRankSpec);
1366 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1367 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1373 ENUM_CLASS(Intent, In, Out, InOut)
1374 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1384EMPTY_CLASS(Asynchronous);
1385EMPTY_CLASS(External);
1386EMPTY_CLASS(Intrinsic);
1387EMPTY_CLASS(Optional);
1388EMPTY_CLASS(Parameter);
1389EMPTY_CLASS(Protected);
1393EMPTY_CLASS(Volatile);
1398 Parameter, Pointer, Protected, Save, Target, Value, Volatile,
1399 common::CUDADataAttr>
1410 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1411 EntityDecl(ObjectName &&name,
CharLength &&length,
1412 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1413 std::optional<Initialization> &&init)
1414 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1415 std::move(length), std::move(init)} {}
1416 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1417 std::optional<CharLength>, std::optional<Initialization>>
1425 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1435 std::tuple<AccessSpec, std::list<AccessId>> t;
1444 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1449WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1452WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1457 ENUM_CLASS(Kind, Object, Common)
1458 std::tuple<Kind, Name> t;
1464 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1470 std::tuple<Name, CoarraySpec> t;
1474WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1477WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1496 mutable TypedExpr typedExpr;
1497 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1510 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1516 mutable std::int64_t repetitions{1};
1524 std::variant<Scalar<common::Indirection<Designator>>,
1537 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1544 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1550 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1554WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1562 std::tuple<Name, ArraySpec> t;
1564 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1570 std::tuple<IntentSpec, std::list<Name>> t;
1574WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1580 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1584WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1587WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1593 ENUM_CLASS(Kind, Entity, Common)
1594 std::tuple<Kind, Name> t;
1598WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1601WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1604WRAPPER_CLASS(ValueStmt, std::list<Name>);
1607WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1612 std::tuple<Location, std::optional<Location>> t;
1618 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1627 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1628 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1634 std::tuple<Name, std::optional<ArraySpec>> t;
1642 TUPLE_CLASS_BOILERPLATE(
Block);
1643 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1645 BOILERPLATE(CommonStmt);
1646 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1647 std::list<Block> &&);
1649 std::list<Block> blocks;
1657WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1662 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1666using Subscript = ScalarIntExpr;
1671 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1672 std::optional<Subscript>>
1680 std::variant<IntExpr, SubscriptTriplet> u;
1684using Cosubscript = ScalarIntExpr;
1695 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1698 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1705 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1710 UNION_CLASS_BOILERPLATE(Expr);
1714 using IntrinsicUnary::IntrinsicUnary;
1717 using IntrinsicUnary::IntrinsicUnary;
1720 using IntrinsicUnary::IntrinsicUnary;
1722 struct NOT :
public IntrinsicUnary {
1723 using IntrinsicUnary::IntrinsicUnary;
1730 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
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;
1783 using IntrinsicBinary::IntrinsicBinary;
1788 using IntrinsicBinary::IntrinsicBinary;
1793 std::tuple<DefinedOpName, common::Indirection<Expr>,
1801 mutable TypedExpr typedExpr;
1805 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1809 Add,
Subtract,
Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
1816 BOILERPLATE(PartRef);
1817 PartRef(
Name &&n, std::list<SectionSubscript> &&ss,
1818 std::optional<ImageSelector> &&is)
1819 : name{std::move(n)}, subscripts(std::move(ss)),
1820 imageSelector{std::move(is)} {}
1822 std::list<SectionSubscript> subscripts;
1823 std::optional<ImageSelector> imageSelector;
1828 UNION_CLASS_BOILERPLATE(DataRef);
1829 explicit DataRef(std::list<PartRef> &&);
1830 std::variant<Name, common::Indirection<StructureComponent>,
1846 std::tuple<DataRef, SubstringRange> t;
1851 std::tuple<CharLiteralConstant, SubstringRange> t;
1868 bool EndsInBareName()
const;
1870 std::variant<DataRef, Substring> u;
1876 mutable TypedExpr typedExpr;
1878 std::variant<common::Indirection<Designator>,
1896struct StructureComponent {
1897 BOILERPLATE(StructureComponent);
1899 : base{std::move(dr)}, component(std::move(n)) {}
1911struct CoindexedNamedObject {
1912 BOILERPLATE(CoindexedNamedObject);
1914 : base{std::move(dr)}, imageSelector{std::move(is)} {}
1920struct ArrayElement {
1921 BOILERPLATE(ArrayElement);
1922 ArrayElement(
DataRef &&dr, std::list<SectionSubscript> &&ss)
1923 : base{std::move(dr)}, subscripts(std::move(ss)) {}
1928 std::list<SectionSubscript> subscripts;
1934 mutable TypedExpr typedExpr;
1935 std::variant<Name, StructureComponent> u;
1940using BoundExpr = ScalarIntExpr;
1946 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1955 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1963 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1964 std::optional<AllocateCoarraySpec>>
1969WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1973WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1979 std::variant<StatVariable, MsgVariable> u;
1994 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
2001 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
2002 std::list<AllocOpt>>
2010 mutable TypedExpr typedExpr;
2011 std::variant<Name, StructureComponent> u;
2015WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2021 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2027 using TypedAssignment =
2029 mutable TypedAssignment typedAssignment;
2030 std::tuple<Variable, Expr> t;
2034WRAPPER_CLASS(BoundsSpec, BoundExpr);
2039 std::tuple<BoundExpr, BoundExpr> t;
2051 UNION_CLASS_BOILERPLATE(
Bounds);
2052 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2055 mutable AssignmentStmt::TypedAssignment typedAssignment;
2056 std::tuple<DataRef, Bounds, Expr> t;
2064 std::tuple<LogicalExpr, AssignmentStmt> t;
2070 std::tuple<std::optional<Name>, LogicalExpr> t;
2086 std::tuple<LogicalExpr, std::optional<Name>> t;
2090WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2093WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2102 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2106 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2109 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2110 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2125 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2131 std::tuple<common::Indirection<ConcurrentHeader>,
2148WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2154 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2162 std::variant<Expr, Variable> u;
2168 std::tuple<Name, Selector> t;
2175 std::tuple<std::optional<Name>, std::list<Association>> t;
2179WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2188WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2191WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2206 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2214 std::tuple<CodimensionDecl, Selector> t;
2222 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2223 std::list<StatOrErrmsg>>
2231 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2244 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2248WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2262 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2271 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2272 std::optional<ScalarLogicalExpr>>
2283 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2294 WRAPPER_CLASS(Local, std::list<Name>);
2295 WRAPPER_CLASS(LocalInit, std::list<Name>);
2297 TUPLE_CLASS_BOILERPLATE(
Reduce);
2299 std::tuple<Operator, std::list<Name>> t;
2301 WRAPPER_CLASS(Shared, std::list<Name>);
2302 EMPTY_CLASS(DefaultNone);
2303 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2316 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2319 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2326 std::tuple<Label, std::optional<LoopControl>> t;
2332 std::tuple<std::optional<Name>, std::optional<Label>,
2333 std::optional<LoopControl>>
2338WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2349 const std::optional<LoopControl> &GetLoopControl()
const;
2350 bool IsDoNormal()
const;
2351 bool IsDoWhile()
const;
2352 bool IsDoConcurrent()
const;
2357WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2362 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2369 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2373WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2376WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2384 std::tuple<Statement<ElseIfStmt>, Block> t;
2388 std::tuple<Statement<ElseStmt>, Block> t;
2391 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2398 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2399 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2418 Range(std::optional<CaseValue> &&l, std::optional<CaseValue> &&u)
2419 : lower{std::move(l)}, upper{std::move(u)} {}
2420 std::optional<CaseValue> lower, upper;
2422 std::variant<CaseValue, Range> u;
2426EMPTY_CLASS(Default);
2430 std::variant<std::list<CaseValueRange>, Default> u;
2436 std::tuple<CaseSelector, std::optional<Name>> t;
2442WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2448 TUPLE_CLASS_BOILERPLATE(
Case);
2449 std::tuple<Statement<CaseStmt>, Block> t;
2452 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2462 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2471 UNION_CLASS_BOILERPLATE(
Rank);
2472 std::variant<ScalarIntConstantExpr, Star, Default> u;
2475 std::tuple<Rank, std::optional<Name>> t;
2485 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2487 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2497 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2506 UNION_CLASS_BOILERPLATE(
Guard);
2507 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2510 std::tuple<Guard, std::optional<Name>> t;
2519 std::tuple<Statement<TypeGuardStmt>, Block> t;
2521 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2527WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2530WRAPPER_CLASS(GotoStmt, Label);
2535 std::tuple<std::list<Label>, ScalarIntExpr> t;
2548 ENUM_CLASS(Kind, Stop, ErrorStop)
2550 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2557 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2561WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2568 std::variant<IntExpr, Star> u;
2571 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2575WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2580 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2589 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2595 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2603 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2616 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2619 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2630 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2633 std::tuple<LockVariable, std::list<LockStat>> t;
2639 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2643WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2653 UNION_CLASS_BOILERPLATE(
IoUnit);
2654 std::variant<Variable, common::Indirection<Expr>, Star> u;
2658using FileNameExpr = ScalarDefaultCharExpr;
2677WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2678WRAPPER_CLASS(ErrLabel, Label);
2683 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2684 Encoding, Form, Pad, Position, Round, Sign,
2685 Carriagecontrol, Convert, Dispose)
2687 std::tuple<Kind, ScalarDefaultCharExpr> t;
2689 WRAPPER_CLASS(Recl, ScalarIntExpr);
2690 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2691 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2692 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2697WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2707 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2711 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2717 UNION_CLASS_BOILERPLATE(
Format);
2718 std::variant<Expr, Label, Star> u;
2722WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2736WRAPPER_CLASS(EndLabel, Label);
2737WRAPPER_CLASS(EorLabel, Label);
2741 ENUM_CLASS(Kind, Advance, Blank, Decimal, Delim, Pad, Round, Sign)
2743 std::tuple<Kind, ScalarDefaultCharExpr> t;
2745 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2746 WRAPPER_CLASS(Pos, ScalarIntExpr);
2747 WRAPPER_CLASS(Rec, ScalarIntExpr);
2748 WRAPPER_CLASS(Size, ScalarIntVariable);
2750 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size>
2757 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2764 BOILERPLATE(ReadStmt);
2765 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2766 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2767 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2768 items(std::move(its)) {}
2769 std::optional<IoUnit> iounit;
2771 std::optional<Format> format;
2774 std::list<IoControlSpec> controls;
2775 std::list<InputItem> items;
2781 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2786 BOILERPLATE(WriteStmt);
2787 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2788 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2789 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2790 items(std::move(its)) {}
2791 std::optional<IoUnit> iounit;
2793 std::optional<Format> format;
2795 std::list<IoControlSpec> controls;
2796 std::list<OutputItem> items;
2802 std::tuple<Format, std::list<OutputItem>> t;
2813 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2818 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2825WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2828 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2829 MsgVariable, StatVariable>
2834WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2844 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2849WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2853WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2856WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2859WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2899 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2900 Direct, Encoding, Form, Formatted, Iomsg,
Name, Pad, Position, Read,
2901 Readwrite, Round, Sequential, Sign, Stream, Status, Unformatted, Write,
2902 Carriagecontrol, Convert, Dispose)
2903 TUPLE_CLASS_BOILERPLATE(
CharVar);
2904 std::tuple<Kind, ScalarDefaultCharVariable> t;
2907 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2908 TUPLE_CLASS_BOILERPLATE(
IntVar);
2909 std::tuple<Kind, ScalarIntVariable> t;
2912 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2913 TUPLE_CLASS_BOILERPLATE(
LogVar);
2914 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2928 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2930 std::variant<std::list<InquireSpec>,
Iolength> u;
2937WRAPPER_CLASS(ProgramStmt,
Name);
2940WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2948 ExecutionPart, std::optional<InternalSubprogramPart>,
2954WRAPPER_CLASS(ModuleStmt,
Name);
2961 std::variant<common::Indirection<FunctionSubprogram>,
2971 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2975WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2981 TUPLE_CLASS_BOILERPLATE(
Module);
2992 UNION_CLASS_BOILERPLATE(
Rename);
2994 TUPLE_CLASS_BOILERPLATE(
Names);
2995 std::tuple<Name, Name> t;
2999 std::tuple<DefinedOpName, DefinedOpName> t;
3001 std::variant<Names, Operators> u;
3007 std::tuple<Name, std::optional<Name>> t;
3013 std::tuple<ParentIdentifier, Name> t;
3017WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3030WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3033WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3051 EMPTY_CLASS(Assignment);
3052 EMPTY_CLASS(ReadFormatted);
3053 EMPTY_CLASS(ReadUnformatted);
3054 EMPTY_CLASS(WriteFormatted);
3055 EMPTY_CLASS(WriteUnformatted);
3058 ReadUnformatted, WriteFormatted, WriteUnformatted>
3066 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3070struct InterfaceStmt {
3071 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3073 InterfaceStmt(Abstract x) : u{x} {}
3075 std::variant<std::optional<GenericSpec>, Abstract> u;
3081 UNION_CLASS_BOILERPLATE(
Only);
3082 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3090 BOILERPLATE(UseStmt);
3091 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3092 template <
typename A>
3093 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3094 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3095 std::optional<ModuleNature> nature;
3097 std::variant<std::list<Rename>, std::list<Only>> u;
3115 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3116 std::list<ProcDecl>>
3127 EMPTY_CLASS(Elemental);
3128 EMPTY_CLASS(Impure);
3130 EMPTY_CLASS(Non_Recursive);
3132 EMPTY_CLASS(Recursive);
3133 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3134 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3135 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3137 Pure, Recursive, Attributes, Launch_Bounds, Cluster_Dims>
3145 BOILERPLATE(Suffix);
3147 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3148 Suffix(
Name &&rn, std::optional<LanguageBindingSpec> &&lbs)
3149 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3150 std::optional<LanguageBindingSpec> binding;
3151 std::optional<Name> resultName;
3160 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3161 std::optional<Suffix>>
3166WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3171 std::variant<Name, Star> u;
3179 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3180 std::optional<LanguageBindingSpec>>
3185WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3200 std::tuple<Statement<SubroutineStmt>,
3204 std::variant<Function, Subroutine> u;
3209 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3211 std::tuple<Kind, std::list<Name>> t;
3217 std::variant<InterfaceBody, Statement<ProcedureStmt>> u;
3221WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3227 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3233WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3236WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3242 std::variant<Name, ProcComponentRef> u;
3246WRAPPER_CLASS(AltReturnSpec, Label);
3252 WRAPPER_CLASS(PercentRef,
Expr);
3253 WRAPPER_CLASS(PercentVal,
Expr);
3254 UNION_CLASS_BOILERPLATE(ActualArg);
3256 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal>
3263 std::tuple<std::optional<Keyword>,
ActualArg> t;
3269 TUPLE_CLASS_BOILERPLATE(
Call);
3270 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3286 BOILERPLATE(CallStmt);
3287 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3290 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3291 std::optional<ScalarIntExpr>>
3295 std::list<ActualArgSpec> &&args)
3296 : call{std::move(pd), std::move(args)}, chevrons{std::move(ch)} {}
3298 std::optional<Chevrons> chevrons;
3325WRAPPER_CLASS(MpSubprogramStmt,
Name);
3328WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3343 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3347WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3376 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3379 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3383 std::tuple<common::Indirection<Designator>, uint64_t> t;
3385 EMPTY_CLASS(VectorAlways);
3388 std::tuple<Name, std::optional<std::uint64_t>> t;
3391 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3394 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3397 WRAPPER_CLASS_BOILERPLATE(
3400 EMPTY_CLASS(NoVector);
3401 EMPTY_CLASS(NoUnroll);
3402 EMPTY_CLASS(NoUnrollAndJam);
3403 EMPTY_CLASS(ForceInline);
3404 EMPTY_CLASS(Inline);
3405 EMPTY_CLASS(NoInline);
3407 EMPTY_CLASS(Unrecognized);
3409 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3411 NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline, NoInline,
3419 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3425 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3427WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3434 std::variant<Statement<DataComponentDefStmt>,
3440 EMPTY_CLASS(MapStmt);
3441 EMPTY_CLASS(EndMapStmt);
3442 TUPLE_CLASS_BOILERPLATE(
Map);
3443 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3449 EMPTY_CLASS(UnionStmt);
3450 EMPTY_CLASS(EndUnionStmt);
3451 TUPLE_CLASS_BOILERPLATE(
Union);
3457 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3461 EMPTY_CLASS(EndStructureStmt);
3463 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3470WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3475 std::tuple<Expr, Label, Label, Label> t;
3480 std::tuple<Label, Name> t;
3485 std::tuple<Name, std::list<Label>> t;
3488WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3494#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3495 using basename::basename; \
3496 classname(basename &&b) : basename(std::move(b)) {} \
3497 using TupleTrait = std::true_type; \
3498 BOILERPLATE(classname)
3500#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3501 BOILERPLATE(classname); \
3502 using basename::basename; \
3503 classname(basename &&base) : basename(std::move(base)) {} \
3504 using WrapperTrait = std::true_type
3509struct OmpDirectiveName {
3511 constexpr OmpDirectiveName() =
default;
3512 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3513 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3517 OmpDirectiveName(
const Verbatim &name);
3518 using WrapperTrait = std::true_type;
3520 bool IsExecutionPart()
const;
3523 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3531 std::variant<TypeSpec, DeclarationTypeSpec> u;
3546 ENUM_CLASS(Kind, BlankCommonBlock);
3547 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3555 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3562 using EmptyTrait = std::true_type;
3570 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3573 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3587 WRAPPER_CLASS_BOILERPLATE(
3600 std::variant<DefinedOperator, ProcedureDesignator> u;
3609 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3621 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3626inline namespace arguments {
3629 std::variant<OmpObject, FunctionReference> u;
3633 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3645 std::tuple<OmpObject, OmpObject> t;
3656 std::tuple<std::string, TypeSpec, Name> t;
3669 std::optional<OmpCombinerExpression>>
3688inline namespace traits {
3725 TUPLE_CLASS_BOILERPLATE(
Complex);
3727 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3731 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3747 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3772 std::string ToString()
const;
3775 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3776 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3777 std::variant<Value, llvm::omp::Directive, std::string> u;
3788 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3790 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3797 std::string ToString()
const;
3799 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3808 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3815 WRAPPER_CLASS_BOILERPLATE(
3820#define MODIFIER_BOILERPLATE(...) \
3822 using Variant = std::variant<__VA_ARGS__>; \
3823 UNION_CLASS_BOILERPLATE(Modifier); \
3828#define MODIFIERS() std::optional<std::list<Modifier>>
3830inline namespace modifier {
3838 ENUM_CLASS(Value, Cgroup);
3847 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3883 ENUM_CLASS(Value, Always)
3895 ENUM_CLASS(Value, Always, Never, Auto)
3905 ENUM_CLASS(Value, Automap);
3916 ENUM_CLASS(Value, Simd)
3929 ENUM_CLASS(Value, Close)
3941 ENUM_CLASS(Value, Delete)
3962 ENUM_CLASS(Value, Sink, Source);
3971 ENUM_CLASS(Value, Ancestor, Device_Num)
3989 INHERITED_WRAPPER_CLASS_BOILERPLATE(
4004 ENUM_CLASS(Value, Present);
4015 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4025 std::variant<CharLiteralConstant, ScalarIntConstantExpr> u;
4033 WRAPPER_CLASS_BOILERPLATE(
4042 ENUM_CLASS(Value, Target, TargetSync)
4056 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4064 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4072 ENUM_CLASS(Value, Conditional)
4081 ENUM_CLASS(Value, Ref, Uval, Val);
4103 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4104 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4116 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4131 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4140 ENUM_CLASS(Value, Reproducible, Unconstrained)
4149 ENUM_CLASS(Value, Strict)
4162 ENUM_CLASS(Value, Present)
4171 ENUM_CLASS(Value, Default, Inscan, Task);
4181 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4191 ENUM_CLASS(Value, Self)
4218 ENUM_CLASS(Value, In, Out, Inout, Inoutset, Mutexinoutset, Depobj)
4229 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4242 ENUM_CLASS(Value, Ompx_Hold)
4252using OmpDirectiveList = std::list<llvm::omp::Directive>;
4265 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4268 std::tuple<OmpAdjustOp, OmpObjectList> t;
4285 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4316 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4324 ENUM_CLASS(ActionTime, Compilation, Execution);
4325 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4336 using MemoryOrder = common::OmpMemoryOrderType;
4347 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4354 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4379 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4381 std::variant<DataSharingAttribute,
4398 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4401 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4410 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4419 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4436 OmpDependenceType::Value GetDepType()
const;
4439 EMPTY_CLASS(Source);
4441 std::variant<Sink, Source> u;
4456 OmpTaskDependenceType::Value GetTaskDepType()
const;
4457 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4461 std::variant<TaskDep, OmpDoacross> u;
4498 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4514 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4524 WRAPPER_CLASS_BOILERPLATE(
4531 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4548 using MemoryOrder = common::OmpMemoryOrderType;
4574 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4595 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4608 WRAPPER_CLASS_BOILERPLATE(
4621 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4661 MODIFIER_BOILERPLATE(
4672 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4709 WRAPPER_CLASS_BOILERPLATE(
4723EMPTY_CLASS(OmpNoOpenMPClause);
4728EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4733EMPTY_CLASS(OmpNoParallelismClause);
4743 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4753 ENUM_CLASS(Ordering, Concurrent)
4755 std::tuple<MODIFIERS(), Ordering> t;
4777 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4820 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4822 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4837 ENUM_CLASS(Severity, Fatal, Warning);
4855 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
4898 WRAPPER_CLASS_BOILERPLATE(
4916 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
4926 MODIFIER_BOILERPLATE(OmpContextSelector);
4927 std::tuple<MODIFIERS(),
4928 std::optional<common::Indirection<OmpDirectiveSpecification>>>
4956 llvm::omp::Clause Id()
const;
4958#define GEN_FLANG_CLAUSE_PARSER_CLASSES
4959#include "llvm/Frontend/OpenMP/OMP.inc"
4964#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
4965#include "llvm/Frontend/OpenMP/OMP.inc"
4971 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
4978 ENUM_CLASS(Flags, None, DeprecatedSyntax);
4981 return std::get<OmpDirectiveName>(t);
4983 llvm::omp::Directive DirId()
const {
4990 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
4991 std::optional<OmpClauseList>, Flags>
5000 INHERITED_TUPLE_CLASS_BOILERPLATE(
5012 return std::get<OmpBeginDirective>(t);
5014 const std::optional<OmpEndDirective> &EndDir()
const {
5015 return std::get<std::optional<OmpEndDirective>>(t);
5019 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5023 WRAPPER_CLASS_BOILERPLATE(
5044 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5053 WRAPPER_CLASS_BOILERPLATE(
5071 INHERITED_TUPLE_CLASS_BOILERPLATE(
5086 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5094 return std::get<OmpBeginSectionsDirective>(t);
5096 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5097 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5104 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5105 std::optional<OmpEndSectionsDirective>>
5114 WRAPPER_CLASS_BOILERPLATE(
5126 WRAPPER_CLASS_BOILERPLATE(
5134 WRAPPER_CLASS_BOILERPLATE(
5143 WRAPPER_CLASS_BOILERPLATE(
5151 WRAPPER_CLASS_BOILERPLATE(
5232 INHERITED_TUPLE_CLASS_BOILERPLATE(
5237 llvm::omp::Clause GetKind()
const;
5238 bool IsCapture()
const;
5239 bool IsCompare()
const;
5245 static constexpr int None = 0;
5246 static constexpr int Read = 1;
5247 static constexpr int Write = 2;
5248 static constexpr int Update = Read | Write;
5249 static constexpr int Action = 3;
5250 static constexpr int IfTrue = 4;
5251 static constexpr int IfFalse = 8;
5252 static constexpr int Condition = 12;
5256 AssignmentStmt::TypedAssignment assign;
5258 TypedExpr atom, cond;
5267 WRAPPER_CLASS_BOILERPLATE(
5328 WRAPPER_CLASS_BOILERPLATE(
5351struct OpenMPLoopConstruct {
5352 TUPLE_CLASS_BOILERPLATE(OpenMPLoopConstruct);
5354 : t({std::move(a), Block{}, std::nullopt}) {}
5357 return std::get<OmpBeginLoopDirective>(t);
5359 const std::optional<OmpEndLoopDirective> &EndDir()
const {
5360 return std::get<std::optional<OmpEndLoopDirective>>(t);
5363 const OpenMPLoopConstruct *GetNestedConstruct()
const;
5366 std::tuple<OmpBeginLoopDirective, Block, std::optional<OmpEndLoopDirective>>
5390 INHERITED_TUPLE_CLASS_BOILERPLATE(
5396 using EmptyTrait = std::true_type;
5407WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5439 std::variant<Name, ScalarDefaultCharExpr> u;
5449 ENUM_CLASS(Modifier, ReadOnly, Zero)
5456 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5461 std::tuple<ReductionOperator, AccObjectList> t;
5466 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5470 WRAPPER_CLASS_BOILERPLATE(
5476 WRAPPER_CLASS_BOILERPLATE(
5483 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5491 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5500 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5507 WRAPPER_CLASS(Num, ScalarIntExpr);
5508 WRAPPER_CLASS(Dim, ScalarIntExpr);
5510 std::variant<Num, Dim, Static> u;
5515 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5520 std::tuple<bool, ScalarIntConstantExpr> t;
5526#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5527#include "llvm/Frontend/OpenACC/ACC.inc"
5532#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5533#include "llvm/Frontend/OpenACC/ACC.inc"
5539 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5552 std::tuple<Verbatim, AccObjectListWithModifier> t;
5558 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5563 std::tuple<AccLoopDirective, AccClauseList> t;
5570 std::tuple<AccBlockDirective, AccClauseList> t;
5579EMPTY_CLASS(AccEndAtomic);
5584 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5585 std::optional<AccEndAtomic>>
5592 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5593 std::optional<AccEndAtomic>>
5601 std::optional<AccEndAtomic>>
5610 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5615 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5622 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5628 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5634 std::tuple<AccCombinedDirective, AccClauseList> t;
5642struct OpenACCCombinedConstruct {
5643 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5646 : t({std::move(a), std::nullopt, std::nullopt}) {}
5647 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5648 std::optional<AccEndCombinedDirective>>
5655 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5660EMPTY_CLASS(AccEndLoop);
5661struct OpenACCLoopConstruct {
5662 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5664 : t({std::move(a), std::nullopt, std::nullopt}) {}
5665 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5666 std::optional<AccEndLoop>>
5678 std::tuple<AccStandaloneDirective, AccClauseList> t;
5704 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5709 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5712 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5713 std::optional<ScalarIntExpr>>
5719 std::tuple<std::optional<ScalarIntConstantExpr>,
5720 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5723 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:1309
Definition parse-tree.h:1316
Definition parse-tree.h:1275
Definition parse-tree.h:1264
Definition parse-tree.h:1263
Definition parse-tree.h:5606
Definition parse-tree.h:5582
Definition parse-tree.h:5598
Definition parse-tree.h:5590
Definition parse-tree.h:5567
Definition parse-tree.h:5631
Definition parse-tree.h:5561
Definition parse-tree.h:5437
Definition parse-tree.h:5410
Definition parse-tree.h:5538
Definition parse-tree.h:5523
Definition parse-tree.h:5518
Definition parse-tree.h:5426
Definition parse-tree.h:5448
Definition parse-tree.h:5431
Definition parse-tree.h:5443
Definition parse-tree.h:5475
Definition parse-tree.h:5469
Definition parse-tree.h:5573
Definition parse-tree.h:5637
Definition parse-tree.h:5514
Definition parse-tree.h:5505
Definition parse-tree.h:5415
Definition parse-tree.h:5454
Definition parse-tree.h:5459
Definition parse-tree.h:5402
Definition parse-tree.h:5498
Definition parse-tree.h:5494
Definition parse-tree.h:5490
Definition parse-tree.h:5420
Definition parse-tree.h:5486
Definition parse-tree.h:5480
Definition parse-tree.h:5464
Definition parse-tree.h:915
Definition parse-tree.h:1433
Definition parse-tree.h:495
Definition parse-tree.h:3261
Definition parse-tree.h:3251
Definition parse-tree.h:1988
Definition parse-tree.h:1953
Definition parse-tree.h:1932
Definition parse-tree.h:1944
Definition parse-tree.h:1999
Definition parse-tree.h:1961
Definition parse-tree.h:3473
Definition parse-tree.h:1920
Definition parse-tree.h:1364
Definition parse-tree.h:3478
Definition parse-tree.h:3483
Definition parse-tree.h:2025
Definition parse-tree.h:2182
Definition parse-tree.h:2173
Definition parse-tree.h:2166
Definition parse-tree.h:1346
Definition parse-tree.h:1394
Definition parse-tree.h:3423
Definition parse-tree.h:1133
Definition parse-tree.h:1455
Definition parse-tree.h:1462
Definition parse-tree.h:2204
Definition parse-tree.h:3036
Definition parse-tree.h:2037
Definition parse-tree.h:3417
Definition parse-tree.h:5716
Definition parse-tree.h:5710
Definition parse-tree.h:5707
Definition parse-tree.h:5701
Definition parse-tree.h:3288
Definition parse-tree.h:3285
Definition parse-tree.h:3268
Definition parse-tree.h:2447
Definition parse-tree.h:2446
Definition parse-tree.h:2428
Definition parse-tree.h:2434
Definition parse-tree.h:2414
Definition parse-tree.h:2235
Definition parse-tree.h:2220
Definition parse-tree.h:669
Definition parse-tree.h:1849
Definition parse-tree.h:874
Definition parse-tree.h:687
Definition parse-tree.h:685
Definition parse-tree.h:2705
Definition parse-tree.h:2704
Definition parse-tree.h:2212
Definition parse-tree.h:990
Definition parse-tree.h:1468
Definition parse-tree.h:1911
Definition parse-tree.h:1632
Definition parse-tree.h:1641
Definition parse-tree.h:1640
Definition parse-tree.h:3381
Definition parse-tree.h:3374
Definition parse-tree.h:3378
Definition parse-tree.h:3386
Definition parse-tree.h:3396
Definition parse-tree.h:3393
Definition parse-tree.h:3390
Definition parse-tree.h:3372
Definition parse-tree.h:860
Definition parse-tree.h:852
Definition parse-tree.h:1001
Definition parse-tree.h:1014
Definition parse-tree.h:1122
Definition parse-tree.h:1067
Definition parse-tree.h:1226
Definition parse-tree.h:2533
Definition parse-tree.h:2260
Definition parse-tree.h:2682
Definition parse-tree.h:2680
Definition parse-tree.h:302
Definition parse-tree.h:2251
Definition parse-tree.h:2242
Definition parse-tree.h:1075
Definition parse-tree.h:1522
Definition parse-tree.h:1534
Definition parse-tree.h:1827
Definition parse-tree.h:1493
Definition parse-tree.h:1542
Definition parse-tree.h:1508
Definition parse-tree.h:1548
Definition parse-tree.h:1514
Definition parse-tree.h:2019
Definition parse-tree.h:436
Definition parse-tree.h:781
Definition parse-tree.h:776
Definition parse-tree.h:774
Definition parse-tree.h:326
Definition parse-tree.h:611
Definition parse-tree.h:1211
Definition parse-tree.h:756
Definition parse-tree.h:932
Definition parse-tree.h:1866
Definition parse-tree.h:1560
Definition parse-tree.h:1559
Definition parse-tree.h:2347
Definition parse-tree.h:3169
Definition parse-tree.h:2367
Definition parse-tree.h:2229
Definition parse-tree.h:1409
Definition parse-tree.h:3341
Definition parse-tree.h:1255
Definition parse-tree.h:1241
Definition parse-tree.h:2587
Definition parse-tree.h:2593
Definition parse-tree.h:2601
Definition parse-tree.h:528
Definition parse-tree.h:553
Definition parse-tree.h:984
Definition parse-tree.h:971
Definition parse-tree.h:1773
Definition parse-tree.h:1746
Definition parse-tree.h:1787
Definition parse-tree.h:1752
Definition parse-tree.h:1791
Definition parse-tree.h:1728
Definition parse-tree.h:1743
Definition parse-tree.h:1779
Definition parse-tree.h:1761
Definition parse-tree.h:1767
Definition parse-tree.h:1770
Definition parse-tree.h:1733
Definition parse-tree.h:1758
Definition parse-tree.h:1755
Definition parse-tree.h:1740
Definition parse-tree.h:1782
Definition parse-tree.h:1764
Definition parse-tree.h:1722
Definition parse-tree.h:1719
Definition parse-tree.h:1776
Definition parse-tree.h:1713
Definition parse-tree.h:1737
Definition parse-tree.h:1749
Definition parse-tree.h:1716
Definition parse-tree.h:1709
Definition parse-tree.h:1061
Definition parse-tree.h:2123
Definition parse-tree.h:2139
Definition parse-tree.h:2117
Definition parse-tree.h:2152
Definition parse-tree.h:2129
Definition parse-tree.h:3273
Definition parse-tree.h:3158
Definition parse-tree.h:3307
Definition parse-tree.h:3049
Definition parse-tree.h:3064
Definition parse-tree.h:881
Definition parse-tree.h:2386
Definition parse-tree.h:2382
Definition parse-tree.h:2381
Definition parse-tree.h:2397
Definition parse-tree.h:2360
Definition parse-tree.h:1693
Definition parse-tree.h:1703
Definition parse-tree.h:418
Definition parse-tree.h:1616
Definition parse-tree.h:1625
Definition parse-tree.h:624
Definition parse-tree.h:1032
Definition parse-tree.h:2898
Definition parse-tree.h:2906
Definition parse-tree.h:2911
Definition parse-tree.h:2896
Definition parse-tree.h:2926
Definition parse-tree.h:2924
Definition parse-tree.h:808
Definition parse-tree.h:310
Definition parse-tree.h:1372
Definition parse-tree.h:1568
Definition parse-tree.h:3225
Definition parse-tree.h:3192
Definition parse-tree.h:3198
Definition parse-tree.h:3190
Definition parse-tree.h:3215
Definition parse-tree.h:474
Definition parse-tree.h:462
Definition parse-tree.h:719
Definition parse-tree.h:714
Definition parse-tree.h:724
Definition parse-tree.h:708
Definition parse-tree.h:706
Definition parse-tree.h:2740
Definition parse-tree.h:2738
Definition parse-tree.h:2652
Definition parse-tree.h:795
Definition parse-tree.h:657
Definition parse-tree.h:2324
Definition parse-tree.h:1325
Definition parse-tree.h:675
Definition parse-tree.h:1610
Definition parse-tree.h:906
Definition parse-tree.h:2296
Definition parse-tree.h:2292
Definition parse-tree.h:2628
Definition parse-tree.h:2627
Definition parse-tree.h:888
Definition parse-tree.h:318
Definition parse-tree.h:1290
Definition parse-tree.h:2314
Definition parse-tree.h:2312
Definition parse-tree.h:2945
Definition parse-tree.h:3439
Definition parse-tree.h:2084
Definition parse-tree.h:2969
Definition parse-tree.h:2959
Definition parse-tree.h:2980
Definition parse-tree.h:586
Definition parse-tree.h:1331
Definition parse-tree.h:638
Definition parse-tree.h:637
Definition parse-tree.h:2330
Definition parse-tree.h:2555
Definition parse-tree.h:1442
Definition parse-tree.h:4258
Definition parse-tree.h:4264
Definition parse-tree.h:4262
Definition parse-tree.h:4277
Definition parse-tree.h:4284
Definition parse-tree.h:4292
Definition parse-tree.h:4307
Definition parse-tree.h:5205
Definition parse-tree.h:4315
Definition parse-tree.h:4314
Definition parse-tree.h:4323
Definition parse-tree.h:4335
Definition parse-tree.h:4999
Definition parse-tree.h:5342
Definition parse-tree.h:5070
Definition parse-tree.h:4346
Definition parse-tree.h:5009
Definition parse-tree.h:4352
Definition parse-tree.h:4970
Definition parse-tree.h:4954
Definition parse-tree.h:3608
Definition parse-tree.h:4361
Definition parse-tree.h:5113
Definition parse-tree.h:4378
Definition parse-tree.h:4396
Definition parse-tree.h:4455
Definition parse-tree.h:4453
Definition parse-tree.h:4477
Definition parse-tree.h:4485
Definition parse-tree.h:4495
Definition parse-tree.h:4505
Definition parse-tree.h:4513
Definition parse-tree.h:3509
Definition parse-tree.h:4977
Definition parse-tree.h:4468
Definition parse-tree.h:4435
Definition parse-tree.h:4528
Definition parse-tree.h:4523
Definition parse-tree.h:5004
Definition parse-tree.h:5346
Definition parse-tree.h:5075
Definition parse-tree.h:4539
Definition parse-tree.h:5037
Definition parse-tree.h:4547
Definition parse-tree.h:4560
Definition parse-tree.h:4571
Definition parse-tree.h:4581
Definition parse-tree.h:4589
Definition parse-tree.h:4594
Definition parse-tree.h:4602
Definition parse-tree.h:4618
Definition parse-tree.h:4628
Definition parse-tree.h:4607
Definition parse-tree.h:4940
Definition parse-tree.h:4635
Definition parse-tree.h:3620
Definition parse-tree.h:4408
Definition parse-tree.h:4426
Definition parse-tree.h:4417
Definition parse-tree.h:4644
Definition parse-tree.h:4659
Definition parse-tree.h:4670
Definition parse-tree.h:4695
Definition parse-tree.h:4707
Definition parse-tree.h:4716
Definition parse-tree.h:5031
Definition parse-tree.h:4740
Definition parse-tree.h:3554
Definition parse-tree.h:3545
Definition parse-tree.h:3542
Definition parse-tree.h:4751
Definition parse-tree.h:4764
Definition parse-tree.h:4776
Definition parse-tree.h:4787
Definition parse-tree.h:3598
Definition parse-tree.h:4797
Definition parse-tree.h:4806
Definition parse-tree.h:4818
Definition parse-tree.h:4829
Definition parse-tree.h:4836
Definition parse-tree.h:3558
Definition parse-tree.h:3580
Definition parse-tree.h:3568
Definition parse-tree.h:3567
Definition parse-tree.h:4845
Definition parse-tree.h:4854
Definition parse-tree.h:4869
Definition parse-tree.h:4879
Definition parse-tree.h:3534
Definition parse-tree.h:3527
Definition parse-tree.h:4888
Definition parse-tree.h:4897
Definition parse-tree.h:4913
Definition parse-tree.h:4949
Definition parse-tree.h:4924
Definition parse-tree.h:3080
Definition parse-tree.h:5613
Definition parse-tree.h:5620
Definition parse-tree.h:5549
Definition parse-tree.h:5642
Definition parse-tree.h:5681
Definition parse-tree.h:5652
Definition parse-tree.h:5670
Definition parse-tree.h:5661
Definition parse-tree.h:5543
Definition parse-tree.h:5675
Definition parse-tree.h:5625
Definition parse-tree.h:5555
Definition parse-tree.h:5231
Definition parse-tree.h:5064
Definition parse-tree.h:5254
Definition parse-tree.h:5244
Definition parse-tree.h:5236
Definition parse-tree.h:5273
Definition parse-tree.h:5266
Definition parse-tree.h:5377
Definition parse-tree.h:5221
Definition parse-tree.h:5052
Definition parse-tree.h:5209
Definition parse-tree.h:5133
Definition parse-tree.h:5142
Definition parse-tree.h:5150
Definition parse-tree.h:5125
Definition parse-tree.h:5284
Definition parse-tree.h:5298
Definition parse-tree.h:5372
Definition parse-tree.h:5314
Definition parse-tree.h:5160
Definition parse-tree.h:5322
Definition parse-tree.h:5395
Definition parse-tree.h:5351
Definition parse-tree.h:5389
Definition parse-tree.h:5166
Definition parse-tree.h:5084
Definition parse-tree.h:5090
Definition parse-tree.h:5327
Definition parse-tree.h:5333
Definition parse-tree.h:5172
Definition parse-tree.h:5041
Definition parse-tree.h:375
Definition parse-tree.h:2816
Definition parse-tree.h:2779
Definition parse-tree.h:3005
Definition parse-tree.h:2050
Definition parse-tree.h:2049
Definition parse-tree.h:1578
Definition parse-tree.h:2008
Definition parse-tree.h:2842
Definition parse-tree.h:3125
Definition parse-tree.h:2800
Definition parse-tree.h:945
Definition parse-tree.h:3103
Definition parse-tree.h:1086
Definition parse-tree.h:1114
Definition parse-tree.h:1906
Definition parse-tree.h:1106
Definition parse-tree.h:1100
Definition parse-tree.h:1093
Definition parse-tree.h:3113
Definition parse-tree.h:3240
Definition parse-tree.h:3208
Definition parse-tree.h:570
Definition parse-tree.h:2763
Definition parse-tree.h:829
Definition parse-tree.h:827
Definition parse-tree.h:2281
Definition parse-tree.h:2993
Definition parse-tree.h:2997
Definition parse-tree.h:2991
Definition parse-tree.h:1591
Definition parse-tree.h:294
Definition parse-tree.h:1678
Definition parse-tree.h:2404
Definition parse-tree.h:2470
Definition parse-tree.h:2469
Definition parse-tree.h:2483
Definition parse-tree.h:2481
Definition parse-tree.h:2460
Definition parse-tree.h:2517
Definition parse-tree.h:2515
Definition parse-tree.h:2495
Definition parse-tree.h:2160
Definition parse-tree.h:3333
Definition parse-tree.h:866
Definition parse-tree.h:801
Definition parse-tree.h:841
Definition parse-tree.h:397
Definition parse-tree.h:450
Definition parse-tree.h:1977
Definition parse-tree.h:358
Definition parse-tree.h:3351
Definition parse-tree.h:2547
Definition parse-tree.h:1896
Definition parse-tree.h:1232
Definition parse-tree.h:3460
Definition parse-tree.h:3432
Definition parse-tree.h:3455
Definition parse-tree.h:3011
Definition parse-tree.h:3022
Definition parse-tree.h:3177
Definition parse-tree.h:3317
Definition parse-tree.h:1669
Definition parse-tree.h:1858
Definition parse-tree.h:1660
Definition parse-tree.h:1844
Definition parse-tree.h:2566
Definition parse-tree.h:2565
Definition parse-tree.h:2578
Definition parse-tree.h:923
Definition parse-tree.h:1175
Definition parse-tree.h:1188
Definition parse-tree.h:1141
Definition parse-tree.h:1197
Definition parse-tree.h:1151
Definition parse-tree.h:1423
Definition parse-tree.h:2505
Definition parse-tree.h:2504
Definition parse-tree.h:951
Definition parse-tree.h:959
Definition parse-tree.h:750
Definition parse-tree.h:648
Definition parse-tree.h:763
Definition parse-tree.h:3448
Definition parse-tree.h:353
Definition parse-tree.h:2637
Definition parse-tree.h:814
Definition parse-tree.h:3089
Definition parse-tree.h:1874
Definition parse-tree.h:736
Definition parse-tree.h:741
Definition parse-tree.h:281
Definition parse-tree.h:2826
Definition parse-tree.h:2075
Definition parse-tree.h:2068
Definition parse-tree.h:2104
Definition parse-tree.h:2100
Definition parse-tree.h:2099
Definition parse-tree.h:2062
Definition parse-tree.h:2785
Definition parse-tree.h:3682
Definition parse-tree.h:3673
Definition parse-tree.h:3643
Definition parse-tree.h:3632
Definition parse-tree.h:3627
Definition parse-tree.h:3653
Definition parse-tree.h:3666
Definition parse-tree.h:3837
Definition parse-tree.h:3854
Definition parse-tree.h:3846
Definition parse-tree.h:3870
Definition parse-tree.h:3862
Definition parse-tree.h:3882
Definition parse-tree.h:3894
Definition parse-tree.h:3904
Definition parse-tree.h:3915
Definition parse-tree.h:3928
Definition parse-tree.h:3940
Definition parse-tree.h:3961
Definition parse-tree.h:3970
Definition parse-tree.h:3988
Definition parse-tree.h:4003
Definition parse-tree.h:4014
Definition parse-tree.h:4032
Definition parse-tree.h:4023
Definition parse-tree.h:4041
Definition parse-tree.h:4053
Definition parse-tree.h:4063
Definition parse-tree.h:4071
Definition parse-tree.h:4080
Definition parse-tree.h:4115
Definition parse-tree.h:4102
Definition parse-tree.h:4089
Definition parse-tree.h:4139
Definition parse-tree.h:4130
Definition parse-tree.h:4148
Definition parse-tree.h:4161
Definition parse-tree.h:4170
Definition parse-tree.h:4180
Definition parse-tree.h:4190
Definition parse-tree.h:4199
Definition parse-tree.h:4207
Definition parse-tree.h:4217
Definition parse-tree.h:4228
Definition parse-tree.h:4241
Definition parse-tree.h:3813
Definition parse-tree.h:3723
Definition parse-tree.h:3720
Definition parse-tree.h:3703
Definition parse-tree.h:3744
Definition parse-tree.h:3710
Definition parse-tree.h:3771
Definition parse-tree.h:3786
Definition parse-tree.h:3783
Definition parse-tree.h:3796
Definition parse-tree.h:3805