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;
277using Location =
const char *;
282 constexpr Verbatim() {}
283 COPY_AND_ASSIGN_BOILERPLATE(Verbatim);
284 using EmptyTrait = std::true_type;
293template <
typename A>
struct Scalar {
294 using ConstraintTrait = std::true_type;
295 Scalar(Scalar &&that) =
default;
296 Scalar(A &&that) : thing(std::move(that)) {}
297 Scalar &operator=(Scalar &&) =
default;
301template <
typename A>
struct Constant {
302 using ConstraintTrait = std::true_type;
303 Constant(Constant &&that) =
default;
304 Constant(A &&that) : thing(std::move(that)) {}
305 Constant &operator=(Constant &&) =
default;
309template <
typename A>
struct Integer {
310 using ConstraintTrait = std::true_type;
311 Integer(Integer &&that) =
default;
312 Integer(A &&that) : thing(std::move(that)) {}
313 Integer &operator=(Integer &&) =
default;
317template <
typename A>
struct Logical {
318 using ConstraintTrait = std::true_type;
319 Logical(Logical &&that) =
default;
320 Logical(A &&that) : thing(std::move(that)) {}
321 Logical &operator=(Logical &&) =
default;
325template <
typename A>
struct DefaultChar {
326 using ConstraintTrait = std::true_type;
327 DefaultChar(DefaultChar &&that) =
default;
328 DefaultChar(A &&that) : thing(std::move(that)) {}
329 DefaultChar &operator=(DefaultChar &&) =
default;
348using Label = common::Label;
352template <
typename A>
struct UnlabeledStatement {
353 explicit UnlabeledStatement(A &&s) : statement(std::move(s)) {}
357template <
typename A>
struct Statement :
public UnlabeledStatement<A> {
358 Statement(std::optional<long> &&lab, A &&s)
359 : UnlabeledStatement<A>{std::move(s)}, label(std::move(lab)) {}
360 std::optional<Label> label;
364EMPTY_CLASS(ErrorRecovery);
376 std::variant<common::Indirection<AccessStmt>,
398 std::variant<common::Indirection<DerivedTypeDef>,
417 std::variant<Statement<common::Indirection<ImplicitStmt>>,
428WRAPPER_CLASS(ImplicitPart, std::list<ImplicitPartStmt>);
435 std::variant<SpecificationConstruct, Statement<common::Indirection<DataStmt>>,
449 std::tuple<std::list<OpenACCDeclarativeConstruct>,
450 std::list<OpenMPDeclarativeConstruct>,
451 std::list<common::Indirection<CompilerDirective>>,
452 std::list<Statement<common::Indirection<UseStmt>>>,
453 std::list<Statement<common::Indirection<ImportStmt>>>, ImplicitPart,
454 std::list<DeclarationConstruct>>
461 std::variant<common::Indirection<FunctionSubprogram>,
468EMPTY_CLASS(ContainsStmt);
473 std::tuple<Statement<ContainsStmt>, std::list<InternalSubprogram>> t;
477EMPTY_CLASS(ContinueStmt);
480EMPTY_CLASS(FailImageStmt);
494 std::variant<common::Indirection<AllocateStmt>,
550 std::variant<ExecutableConstruct, Statement<common::Indirection<FormatStmt>>,
559using Block = std::list<ExecutionPartConstruct>;
560WRAPPER_CLASS(ExecutionPart, Block);
567 std::variant<common::Indirection<MainProgram>,
578WRAPPER_CLASS(Program, std::list<ProgramUnit>);
582 std::string ToString()
const {
return source.ToString(); }
588WRAPPER_CLASS(Keyword,
Name);
591WRAPPER_CLASS(NamedConstant,
Name);
598WRAPPER_CLASS(DefinedOpName,
Name);
608 ENUM_CLASS(IntrinsicOperator, Power, Multiply, Divide, Add, Subtract, Concat,
609 LT, LE, EQ, NE, GE, GT, NOT, AND, OR, EQV, NEQV)
610 std::variant<DefinedOpName, IntrinsicOperator> u;
614using ObjectName =
Name;
620 BOILERPLATE(ImportStmt);
621 ImportStmt(common::ImportKind &&k) : kind{k} {}
622 ImportStmt(std::list<Name> &&n) : names(std::move(n)) {}
623 ImportStmt(common::ImportKind &&, std::list<Name> &&);
624 common::ImportKind kind{common::ImportKind::Default};
625 std::list<Name> names;
634 TUPLE_CLASS_BOILERPLATE(
Group);
635 std::tuple<Name, std::list<Name>> t;
637 WRAPPER_CLASS_BOILERPLATE(
NamelistStmt, std::list<Group>);
645 EMPTY_CLASS(Deferred);
646 std::variant<ScalarIntExpr, Star, Deferred> u;
654 WRAPPER_CLASS(StarSize, std::uint64_t);
655 std::variant<ScalarIntConstantExpr, StarSize> u;
659WRAPPER_CLASS(IntegerTypeSpec, std::optional<KindSelector>);
661WRAPPER_CLASS(UnsignedTypeSpec, std::optional<KindSelector>);
666 std::variant<TypeParamValue, std::uint64_t> u;
672 std::variant<TypeParamValue, CharLength> u;
681 UNION_CLASS_BOILERPLATE(CharSelector);
682 struct LengthAndKind {
683 BOILERPLATE(LengthAndKind);
684 LengthAndKind(std::optional<TypeParamValue> &&l, ScalarIntConstantExpr &&k)
685 : length(std::move(l)), kind(std::move(k)) {}
686 std::optional<TypeParamValue> length;
687 ScalarIntConstantExpr kind;
690 : u{
LengthAndKind{std::make_optional(std::move(l)), std::move(k)}} {}
691 CharSelector(ScalarIntConstantExpr &&k, std::optional<TypeParamValue> &&l)
692 : u{LengthAndKind{std::move(l), std::move(k)}} {}
693 std::variant<LengthSelector, LengthAndKind> u;
705 Real(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
706 std::optional<KindSelector> kind;
708 EMPTY_CLASS(DoublePrecision);
710 BOILERPLATE(Complex);
711 Complex(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
712 std::optional<KindSelector> kind;
715 BOILERPLATE(Character);
716 Character(std::optional<CharSelector> &&s) : selector{std::move(s)} {}
717 std::optional<CharSelector> selector;
720 BOILERPLATE(Logical);
721 Logical(std::optional<KindSelector> &&k) : kind{std::move(k)} {}
722 std::optional<KindSelector> kind;
724 EMPTY_CLASS(DoubleComplex);
725 std::variant<IntegerTypeSpec, UnsignedTypeSpec,
Real, DoublePrecision,
733 std::variant<IntegerTypeSpec, IntrinsicTypeSpec::Real, UnsignedTypeSpec> u;
738 EMPTY_CLASS(PairVectorTypeSpec);
739 EMPTY_CLASS(QuadVectorTypeSpec);
740 std::variant<IntrinsicVectorTypeSpec, PairVectorTypeSpec, QuadVectorTypeSpec>
754 std::tuple<Name, std::list<TypeParamSpec>> t;
761 std::variant<IntrinsicTypeSpec, DerivedTypeSpec> u;
781 EMPTY_CLASS(ClassStar);
782 EMPTY_CLASS(TypeStar);
783 WRAPPER_CLASS(Record,
Name);
792 std::variant<std::uint64_t, Scalar<Integer<Constant<Name>>>> u;
799 std::tuple<CharBlock, std::optional<KindParam>> t;
805 std::tuple<CharBlock, std::optional<KindParam>> t;
811 std::tuple<CharBlock, std::optional<KindParam>> t;
815enum class Sign { Positive, Negative };
822struct RealLiteralConstant {
823 BOILERPLATE(RealLiteralConstant);
825 COPY_AND_ASSIGN_BOILERPLATE(Real);
829 RealLiteralConstant(
Real &&r, std::optional<KindParam> &&k)
830 : real{std::move(r)}, kind{std::move(k)} {}
832 std::optional<KindParam> kind;
857 std::tuple<ComplexPart, ComplexPart> t;
863 std::tuple<Sign, ComplexLiteralConstant> t;
871 std::tuple<std::optional<KindParam>, std::string> t;
872 std::string GetString()
const {
return std::get<std::string>(t); }
878 std::string GetString()
const {
return v; }
885 std::tuple<bool, std::optional<KindParam>> t;
895WRAPPER_CLASS(BOZLiteralConstant, std::string);
911 ENUM_CLASS(Kind, Public, Private)
917EMPTY_CLASS(Abstract);
921 WRAPPER_CLASS(Extends,
Name);
922 std::variant<Abstract, AccessSpec, BindC, Extends> u;
929 std::tuple<std::list<TypeAttrSpec>,
Name, std::list<Name>> t;
933EMPTY_CLASS(SequenceStmt);
937EMPTY_CLASS(PrivateStmt);
942 std::variant<PrivateStmt, SequenceStmt> u;
948 std::tuple<Name, std::optional<ScalarIntConstantExpr>> t;
956 std::tuple<IntegerTypeSpec, common::TypeParamAttr, std::list<TypeParamDecl>>
961WRAPPER_CLASS(SpecificationExpr, ScalarIntExpr);
968 std::tuple<std::optional<SpecificationExpr>, SpecificationExpr> t;
973WRAPPER_CLASS(DeferredCoshapeSpecList,
int);
981 std::tuple<std::list<ExplicitShapeSpec>, std::optional<SpecificationExpr>> t;
987 std::variant<DeferredCoshapeSpecList, ExplicitCoshapeSpec> u;
992WRAPPER_CLASS(DeferredShapeSpecList,
int);
998 std::variant<std::list<ExplicitShapeSpec>, DeferredShapeSpecList> u;
1006EMPTY_CLASS(Allocatable);
1007EMPTY_CLASS(Pointer);
1008EMPTY_CLASS(Contiguous);
1029 std::variant<ConstantExpr, NullInit, InitialDataTarget,
1030 std::list<common::Indirection<DataStmtValue>>>
1040struct ComponentDecl {
1041 TUPLE_CLASS_BOILERPLATE(ComponentDecl);
1043 std::optional<ComponentArraySpec> &&aSpec,
1044 std::optional<CoarraySpec> &&coaSpec,
1045 std::optional<Initialization> &&init)
1046 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1047 std::move(length), std::move(init)} {}
1048 std::tuple<Name, std::optional<ComponentArraySpec>,
1049 std::optional<CoarraySpec>, std::optional<CharLength>,
1050 std::optional<Initialization>>
1058 std::tuple<Name, std::optional<ComponentArraySpec>, std::optional<CharLength>>
1064 std::variant<ComponentDecl, FillDecl> u;
1072 std::tuple<DeclarationTypeSpec, std::list<ComponentAttrSpec>,
1073 std::list<ComponentOrFill>>
1080WRAPPER_CLASS(Pass, std::optional<Name>);
1083 std::variant<AccessSpec, NoPass, Pass, Pointer> u;
1090 std::variant<NullInit, Name> u;
1097 std::variant<Name, DeclarationTypeSpec> u;
1103 std::tuple<Name, std::optional<ProcPointerInit>> t;
1111 std::tuple<std::optional<ProcInterface>, std::list<ProcComponentAttrSpec>,
1112 std::list<ProcDecl>>
1130 EMPTY_CLASS(Deferred);
1131 EMPTY_CLASS(Non_Overridable);
1132 std::variant<AccessSpec, Deferred, Non_Overridable, NoPass, Pass> u;
1138 std::tuple<Name, std::optional<Name>> t;
1148 struct WithoutInterface {
1149 BOILERPLATE(WithoutInterface);
1151 std::list<BindAttr> &&as, std::list<TypeBoundProcDecl> &&ds)
1152 : attributes(std::move(as)), declarations(std::move(ds)) {}
1153 std::list<BindAttr> attributes;
1154 std::list<TypeBoundProcDecl> declarations;
1156 struct WithInterface {
1157 BOILERPLATE(WithInterface);
1158 WithInterface(
Name &&n, std::list<BindAttr> &&as, std::list<Name> &&bs)
1159 : interfaceName(std::move(n)), attributes(std::move(as)),
1160 bindingNames(std::move(bs)) {}
1162 std::list<BindAttr> attributes;
1163 std::list<Name> bindingNames;
1165 std::variant<WithoutInterface, WithInterface> u;
1178WRAPPER_CLASS(FinalProcedureStmt, std::list<Name>);
1194 std::tuple<Statement<ContainsStmt>, std::optional<Statement<PrivateStmt>>,
1195 std::list<Statement<TypeBoundProcBinding>>>
1200WRAPPER_CLASS(EndTypeStmt, std::optional<Name>);
1208 std::tuple<Statement<DerivedTypeStmt>, std::list<Statement<TypeParamDefStmt>>,
1209 std::list<Statement<PrivateOrSequence>>,
1210 std::list<Statement<ComponentDefStmt>>,
1223 std::tuple<std::optional<Keyword>, ComponentDataSource> t;
1229 std::tuple<DerivedTypeSpec, std::list<ComponentSpec>> t;
1233EMPTY_CLASS(EnumDefStmt);
1238 std::tuple<NamedConstant, std::optional<ScalarIntConstantExpr>> t;
1242WRAPPER_CLASS(EnumeratorDefStmt, std::list<Enumerator>);
1245EMPTY_CLASS(EndEnumStmt);
1251 TUPLE_CLASS_BOILERPLATE(
EnumDef);
1252 std::tuple<Statement<EnumDefStmt>, std::list<Statement<EnumeratorDefStmt>>,
1260 TUPLE_CLASS_BOILERPLATE(
Triplet);
1261 std::tuple<ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>> t;
1263 UNION_CLASS_BOILERPLATE(
AcValue);
1264 std::variant<Triplet, common::Indirection<Expr>,
1271 BOILERPLATE(AcSpec);
1272 AcSpec(std::optional<TypeSpec> &&ts, std::list<AcValue> &&xs)
1273 : type(std::move(ts)), values(std::move(xs)) {}
1274 explicit AcSpec(
TypeSpec &&ts) : type{std::move(ts)} {}
1275 std::optional<TypeSpec> type;
1276 std::list<AcValue> values;
1280WRAPPER_CLASS(ArrayConstructor,
AcSpec);
1285template <
typename VAR,
typename BOUND>
struct LoopBounds {
1286 LoopBounds(LoopBounds &&that) =
default;
1288 VAR &&name, BOUND &&lower, BOUND &&upper, std::optional<BOUND> &&step)
1289 : name{std::move(name)}, lower{std::move(lower)}, upper{std::move(upper)},
1290 step{std::move(step)} {}
1291 LoopBounds &operator=(LoopBounds &&) =
default;
1294 std::optional<BOUND> step;
1307 std::tuple<std::optional<IntegerTypeSpec>, Bounds> t;
1322 std::tuple<std::optional<ScalarDefaultCharConstantExpr>,
bool> t;
1328 std::tuple<NamedConstant, ConstantExpr> t;
1332WRAPPER_CLASS(ParameterStmt, std::list<NamedConstantDef>);
1335WRAPPER_CLASS(AssumedShapeSpec, std::optional<SpecificationExpr>);
1338WRAPPER_CLASS(AssumedImpliedSpec, std::optional<SpecificationExpr>);
1343 std::tuple<std::list<ExplicitShapeSpec>, AssumedImpliedSpec> t;
1350WRAPPER_CLASS(ImpliedShapeSpec, std::list<AssumedImpliedSpec>);
1353EMPTY_CLASS(AssumedRankSpec);
1361 std::variant<std::list<ExplicitShapeSpec>, std::list<AssumedShapeSpec>,
1362 DeferredShapeSpecList,
AssumedSizeSpec, ImpliedShapeSpec, AssumedRankSpec>
1368 ENUM_CLASS(Intent, In, Out, InOut)
1369 WRAPPER_CLASS_BOILERPLATE(
IntentSpec, Intent);
1379EMPTY_CLASS(Asynchronous);
1380EMPTY_CLASS(External);
1381EMPTY_CLASS(Intrinsic);
1382EMPTY_CLASS(Optional);
1383EMPTY_CLASS(Parameter);
1384EMPTY_CLASS(Protected);
1388EMPTY_CLASS(Volatile);
1393 Parameter, Pointer, Protected, Save, Target, Value, Volatile,
1394 common::CUDADataAttr>
1405 TUPLE_CLASS_BOILERPLATE(EntityDecl);
1406 EntityDecl(ObjectName &&name,
CharLength &&length,
1407 std::optional<ArraySpec> &&aSpec, std::optional<CoarraySpec> &&coaSpec,
1408 std::optional<Initialization> &&init)
1409 : t{std::move(name), std::move(aSpec), std::move(coaSpec),
1410 std::move(length), std::move(init)} {}
1411 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>,
1412 std::optional<CharLength>, std::optional<Initialization>>
1420 std::tuple<DeclarationTypeSpec, std::list<AttrSpec>, std::list<EntityDecl>> t;
1430 std::tuple<AccessSpec, std::list<AccessId>> t;
1439 std::tuple<ObjectName, std::optional<ArraySpec>, std::optional<CoarraySpec>>
1444WRAPPER_CLASS(AllocatableStmt, std::list<ObjectDecl>);
1447WRAPPER_CLASS(AsynchronousStmt, std::list<ObjectName>);
1452 ENUM_CLASS(Kind, Object, Common)
1453 std::tuple<Kind, Name> t;
1459 std::tuple<LanguageBindingSpec, std::list<BindEntity>> t;
1465 std::tuple<Name, CoarraySpec> t;
1469WRAPPER_CLASS(CodimensionStmt, std::list<CodimensionDecl>);
1472WRAPPER_CLASS(ContiguousStmt, std::list<ObjectName>);
1491 mutable TypedExpr typedExpr;
1492 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1505 std::variant<IntLiteralConstant, Scalar<Integer<ConstantSubobject>>> u;
1511 mutable std::int64_t repetitions{1};
1519 std::variant<Scalar<common::Indirection<Designator>>,
1532 std::tuple<std::list<DataIDoObject>, std::optional<IntegerTypeSpec>, Bounds>
1539 std::variant<common::Indirection<Variable>,
DataImpliedDo> u;
1545 std::tuple<std::list<DataStmtObject>, std::list<DataStmtValue>> t;
1549WRAPPER_CLASS(DataStmt, std::list<DataStmtSet>);
1557 std::tuple<Name, ArraySpec> t;
1559 WRAPPER_CLASS_BOILERPLATE(
DimensionStmt, std::list<Declaration>);
1565 std::tuple<IntentSpec, std::list<Name>> t;
1569WRAPPER_CLASS(OptionalStmt, std::list<Name>);
1575 std::tuple<Name, std::optional<DeferredShapeSpecList>> t;
1579WRAPPER_CLASS(PointerStmt, std::list<PointerDecl>);
1582WRAPPER_CLASS(ProtectedStmt, std::list<Name>);
1588 ENUM_CLASS(Kind, Entity, Common)
1589 std::tuple<Kind, Name> t;
1593WRAPPER_CLASS(SaveStmt, std::list<SavedEntity>);
1596WRAPPER_CLASS(TargetStmt, std::list<ObjectDecl>);
1599WRAPPER_CLASS(ValueStmt, std::list<Name>);
1602WRAPPER_CLASS(VolatileStmt, std::list<ObjectName>);
1607 std::tuple<Location, std::optional<Location>> t;
1613 std::tuple<DeclarationTypeSpec, std::list<LetterSpec>> t;
1622 ENUM_CLASS(ImplicitNoneNameSpec, External, Type)
1623 std::variant<std::list<ImplicitSpec>, std::list<ImplicitNoneNameSpec>> u;
1629 std::tuple<Name, std::optional<ArraySpec>> t;
1637 TUPLE_CLASS_BOILERPLATE(
Block);
1638 std::tuple<std::optional<Name>, std::list<CommonBlockObject>> t;
1640 BOILERPLATE(CommonStmt);
1641 CommonStmt(std::optional<Name> &&, std::list<CommonBlockObject> &&,
1642 std::list<Block> &&);
1644 std::list<Block> blocks;
1652WRAPPER_CLASS(EquivalenceStmt, std::list<std::list<EquivalenceObject>>);
1657 std::tuple<std::optional<ScalarIntExpr>, std::optional<ScalarIntExpr>> t;
1661using Subscript = ScalarIntExpr;
1666 std::tuple<std::optional<Subscript>, std::optional<Subscript>,
1667 std::optional<Subscript>>
1675 std::variant<IntExpr, SubscriptTriplet> u;
1679using Cosubscript = ScalarIntExpr;
1690 WRAPPER_CLASS(Team_Number, ScalarIntExpr);
1693 std::variant<Notify, Stat, TeamValue, Team_Number> u;
1700 std::tuple<std::list<Cosubscript>, std::list<ImageSelectorSpec>> t;
1705 UNION_CLASS_BOILERPLATE(Expr);
1709 using IntrinsicUnary::IntrinsicUnary;
1712 using IntrinsicUnary::IntrinsicUnary;
1715 using IntrinsicUnary::IntrinsicUnary;
1717 struct NOT :
public IntrinsicUnary {
1718 using IntrinsicUnary::IntrinsicUnary;
1725 std::tuple<DefinedOpName, common::Indirection<Expr>> t;
1733 using IntrinsicBinary::IntrinsicBinary;
1736 using IntrinsicBinary::IntrinsicBinary;
1739 using IntrinsicBinary::IntrinsicBinary;
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;
1783 using IntrinsicBinary::IntrinsicBinary;
1788 std::tuple<DefinedOpName, common::Indirection<Expr>,
1796 mutable TypedExpr typedExpr;
1800 std::variant<common::Indirection<CharLiteralConstantSubstring>,
1804 Add,
Subtract,
Concat,
LT,
LE,
EQ,
NE,
GE,
GT,
AND,
OR,
EQV,
NEQV,
1811 BOILERPLATE(PartRef);
1812 PartRef(
Name &&n, std::list<SectionSubscript> &&ss,
1813 std::optional<ImageSelector> &&is)
1814 : name{std::move(n)}, subscripts(std::move(ss)),
1815 imageSelector{std::move(is)} {}
1817 std::list<SectionSubscript> subscripts;
1818 std::optional<ImageSelector> imageSelector;
1823 UNION_CLASS_BOILERPLATE(DataRef);
1824 explicit DataRef(std::list<PartRef> &&);
1825 std::variant<Name, common::Indirection<StructureComponent>,
1841 std::tuple<DataRef, SubstringRange> t;
1846 std::tuple<CharLiteralConstant, SubstringRange> t;
1863 bool EndsInBareName()
const;
1865 std::variant<DataRef, Substring> u;
1871 mutable TypedExpr typedExpr;
1873 std::variant<common::Indirection<Designator>,
1891struct StructureComponent {
1892 BOILERPLATE(StructureComponent);
1894 : base{std::move(dr)}, component(std::move(n)) {}
1906struct CoindexedNamedObject {
1907 BOILERPLATE(CoindexedNamedObject);
1909 : base{std::move(dr)}, imageSelector{std::move(is)} {}
1915struct ArrayElement {
1916 BOILERPLATE(ArrayElement);
1917 ArrayElement(
DataRef &&dr, std::list<SectionSubscript> &&ss)
1918 : base{std::move(dr)}, subscripts(std::move(ss)) {}
1923 std::list<SectionSubscript> subscripts;
1929 mutable TypedExpr typedExpr;
1930 std::variant<Name, StructureComponent> u;
1935using BoundExpr = ScalarIntExpr;
1941 std::tuple<std::optional<BoundExpr>, BoundExpr> t;
1950 std::tuple<std::list<AllocateCoshapeSpec>, std::optional<BoundExpr>> t;
1958 std::tuple<AllocateObject, std::list<AllocateShapeSpec>,
1959 std::optional<AllocateCoarraySpec>>
1964WRAPPER_CLASS(StatVariable, ScalarIntVariable);
1968WRAPPER_CLASS(MsgVariable, ScalarDefaultCharVariable);
1974 std::variant<StatVariable, MsgVariable> u;
1989 std::variant<Mold, Source, StatOrErrmsg, Stream, Pinned> u;
1996 std::tuple<std::optional<TypeSpec>, std::list<Allocation>,
1997 std::list<AllocOpt>>
2005 mutable TypedExpr typedExpr;
2006 std::variant<Name, StructureComponent> u;
2010WRAPPER_CLASS(NullifyStmt, std::list<PointerObject>);
2016 std::tuple<std::list<AllocateObject>, std::list<StatOrErrmsg>> t;
2022 using TypedAssignment =
2024 mutable TypedAssignment typedAssignment;
2025 std::tuple<Variable, Expr> t;
2029WRAPPER_CLASS(BoundsSpec, BoundExpr);
2034 std::tuple<BoundExpr, BoundExpr> t;
2046 UNION_CLASS_BOILERPLATE(
Bounds);
2047 std::variant<std::list<BoundsRemapping>, std::list<BoundsSpec>> u;
2050 mutable AssignmentStmt::TypedAssignment typedAssignment;
2051 std::tuple<DataRef, Bounds, Expr> t;
2059 std::tuple<LogicalExpr, AssignmentStmt> t;
2065 std::tuple<std::optional<Name>, LogicalExpr> t;
2081 std::tuple<LogicalExpr, std::optional<Name>> t;
2085WRAPPER_CLASS(ElsewhereStmt, std::optional<Name>);
2088WRAPPER_CLASS(EndWhereStmt, std::optional<Name>);
2097 std::tuple<Statement<MaskedElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2101 std::tuple<Statement<ElsewhereStmt>, std::list<WhereBodyConstruct>> t;
2104 std::tuple<Statement<WhereConstructStmt>, std::list<WhereBodyConstruct>,
2105 std::list<MaskedElsewhere>, std::optional<Elsewhere>,
2120 std::variant<AssignmentStmt, PointerAssignmentStmt> u;
2126 std::tuple<common::Indirection<ConcurrentHeader>,
2143WRAPPER_CLASS(EndForallStmt, std::optional<Name>);
2149 std::tuple<Statement<ForallConstructStmt>, std::list<ForallBodyConstruct>,
2157 std::variant<Expr, Variable> u;
2163 std::tuple<Name, Selector> t;
2170 std::tuple<std::optional<Name>, std::list<Association>> t;
2174WRAPPER_CLASS(EndAssociateStmt, std::optional<Name>);
2183WRAPPER_CLASS(BlockStmt, std::optional<Name>);
2186WRAPPER_CLASS(EndBlockStmt, std::optional<Name>);
2201 std::tuple<Statement<BlockStmt>, BlockSpecificationPart, Block,
2209 std::tuple<CodimensionDecl, Selector> t;
2217 std::tuple<std::optional<Name>, TeamValue, std::list<CoarrayAssociation>,
2218 std::list<StatOrErrmsg>>
2226 std::tuple<std::list<StatOrErrmsg>, std::optional<Name>> t;
2239 std::tuple<std::optional<Name>, std::list<StatOrErrmsg>> t;
2243WRAPPER_CLASS(EndCriticalStmt, std::optional<Name>);
2257 std::tuple<Name, ScalarIntExpr, ScalarIntExpr, std::optional<ScalarIntExpr>>
2266 std::tuple<std::optional<IntegerTypeSpec>, std::list<ConcurrentControl>,
2267 std::optional<ScalarLogicalExpr>>
2278 Operator, Plus, Multiply, Max, Min, Iand, Ior, Ieor, And, Or, Eqv, Neqv)
2289 WRAPPER_CLASS(Local, std::list<Name>);
2290 WRAPPER_CLASS(LocalInit, std::list<Name>);
2292 TUPLE_CLASS_BOILERPLATE(
Reduce);
2294 std::tuple<Operator, std::list<Name>> t;
2296 WRAPPER_CLASS(Shared, std::list<Name>);
2297 EMPTY_CLASS(DefaultNone);
2298 std::variant<Local, LocalInit, Reduce, Shared, DefaultNone> u;
2311 std::tuple<ConcurrentHeader, std::list<LocalitySpec>> t;
2314 std::variant<Bounds, ScalarLogicalExpr, Concurrent> u;
2321 std::tuple<Label, std::optional<LoopControl>> t;
2327 std::tuple<std::optional<Name>, std::optional<Label>,
2328 std::optional<LoopControl>>
2333WRAPPER_CLASS(EndDoStmt, std::optional<Name>);
2344 const std::optional<LoopControl> &GetLoopControl()
const;
2345 bool IsDoNormal()
const;
2346 bool IsDoWhile()
const;
2347 bool IsDoConcurrent()
const;
2352WRAPPER_CLASS(CycleStmt, std::optional<Name>);
2357 std::tuple<std::optional<Name>, ScalarLogicalExpr> t;
2364 std::tuple<ScalarLogicalExpr, std::optional<Name>> t;
2368WRAPPER_CLASS(ElseStmt, std::optional<Name>);
2371WRAPPER_CLASS(EndIfStmt, std::optional<Name>);
2379 std::tuple<Statement<ElseIfStmt>, Block> t;
2383 std::tuple<Statement<ElseStmt>, Block> t;
2386 std::tuple<Statement<IfThenStmt>, Block, std::list<ElseIfBlock>,
2393 TUPLE_CLASS_BOILERPLATE(
IfStmt);
2394 std::tuple<ScalarLogicalExpr, UnlabeledStatement<ActionStmt>> t;
2413 Range(std::optional<CaseValue> &&l, std::optional<CaseValue> &&u)
2414 : lower{std::move(l)}, upper{std::move(u)} {}
2415 std::optional<CaseValue> lower, upper;
2417 std::variant<CaseValue, Range> u;
2421EMPTY_CLASS(Default);
2425 std::variant<std::list<CaseValueRange>, Default> u;
2431 std::tuple<CaseSelector, std::optional<Name>> t;
2437WRAPPER_CLASS(EndSelectStmt, std::optional<Name>);
2443 TUPLE_CLASS_BOILERPLATE(
Case);
2444 std::tuple<Statement<CaseStmt>, Block> t;
2447 std::tuple<Statement<SelectCaseStmt>, std::list<Case>,
2457 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2466 UNION_CLASS_BOILERPLATE(
Rank);
2467 std::variant<ScalarIntConstantExpr, Star, Default> u;
2470 std::tuple<Rank, std::optional<Name>> t;
2480 std::tuple<Statement<SelectRankCaseStmt>, Block> t;
2482 std::tuple<Statement<SelectRankStmt>, std::list<RankCase>,
2492 std::tuple<std::optional<Name>, std::optional<Name>,
Selector> t;
2501 UNION_CLASS_BOILERPLATE(
Guard);
2502 std::variant<TypeSpec, DerivedTypeSpec, Default> u;
2505 std::tuple<Guard, std::optional<Name>> t;
2514 std::tuple<Statement<TypeGuardStmt>, Block> t;
2516 std::tuple<Statement<SelectTypeStmt>, std::list<TypeCase>,
2522WRAPPER_CLASS(ExitStmt, std::optional<Name>);
2525WRAPPER_CLASS(GotoStmt, Label);
2530 std::tuple<std::list<Label>, ScalarIntExpr> t;
2543 ENUM_CLASS(Kind, Stop, ErrorStop)
2545 std::tuple<Kind, std::optional<StopCode>, std::optional<ScalarLogicalExpr>> t;
2552 std::tuple<Scalar<Variable>, std::list<EventWaitSpec>> t;
2556WRAPPER_CLASS(SyncAllStmt, std::list<StatOrErrmsg>);
2563 std::variant<IntExpr, Star> u;
2566 std::tuple<ImageSet, std::list<StatOrErrmsg>> t;
2570WRAPPER_CLASS(SyncMemoryStmt, std::list<StatOrErrmsg>);
2575 std::tuple<TeamValue, std::list<StatOrErrmsg>> t;
2584 std::tuple<EventVariable, std::list<StatOrErrmsg>> t;
2590 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2598 std::tuple<EventVariable, std::list<EventWaitSpec>> t;
2611 std::variant<ScalarIntExpr, StatOrErrmsg> u;
2614 std::tuple<ScalarIntExpr, TeamVariable, std::list<FormTeamSpec>> t;
2625 std::variant<Scalar<Logical<Variable>>,
StatOrErrmsg> u;
2628 std::tuple<LockVariable, std::list<LockStat>> t;
2634 std::tuple<LockVariable, std::list<StatOrErrmsg>> t;
2638WRAPPER_CLASS(FileUnitNumber, ScalarIntExpr);
2648 UNION_CLASS_BOILERPLATE(
IoUnit);
2649 std::variant<Variable, common::Indirection<Expr>, Star> u;
2653using FileNameExpr = ScalarDefaultCharExpr;
2672WRAPPER_CLASS(StatusExpr, ScalarDefaultCharExpr);
2673WRAPPER_CLASS(ErrLabel, Label);
2678 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2679 Encoding, Form, Pad, Position, Round, Sign,
2680 Carriagecontrol, Convert, Dispose)
2682 std::tuple<Kind, ScalarDefaultCharExpr> t;
2684 WRAPPER_CLASS(Recl, ScalarIntExpr);
2685 WRAPPER_CLASS(Newunit, ScalarIntVariable);
2686 std::variant<FileUnitNumber, FileNameExpr,
CharExpr, MsgVariable,
2687 StatVariable, Recl, Newunit, ErrLabel, StatusExpr>
2692WRAPPER_CLASS(OpenStmt, std::list<ConnectSpec>);
2702 std::variant<FileUnitNumber, StatVariable, MsgVariable, ErrLabel,
2706 WRAPPER_CLASS_BOILERPLATE(
CloseStmt, std::list<CloseSpec>);
2712 UNION_CLASS_BOILERPLATE(
Format);
2713 std::variant<Expr, Label, Star> u;
2717WRAPPER_CLASS(IdVariable, ScalarIntVariable);
2731WRAPPER_CLASS(EndLabel, Label);
2732WRAPPER_CLASS(EorLabel, Label);
2736 ENUM_CLASS(Kind, Advance, Blank, Decimal, Delim, Pad, Round, Sign)
2738 std::tuple<Kind, ScalarDefaultCharExpr> t;
2740 WRAPPER_CLASS(Asynchronous, ScalarDefaultCharConstantExpr);
2741 WRAPPER_CLASS(Pos, ScalarIntExpr);
2742 WRAPPER_CLASS(Rec, ScalarIntExpr);
2743 WRAPPER_CLASS(Size, ScalarIntVariable);
2745 ErrLabel, IdVariable, MsgVariable, StatVariable, Pos, Rec, Size>
2752 std::variant<Variable, common::Indirection<InputImpliedDo>> u;
2759 BOILERPLATE(ReadStmt);
2760 ReadStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2761 std::list<IoControlSpec> &&cs, std::list<InputItem> &&its)
2762 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2763 items(std::move(its)) {}
2764 std::optional<IoUnit> iounit;
2766 std::optional<Format> format;
2769 std::list<IoControlSpec> controls;
2770 std::list<InputItem> items;
2776 std::variant<Expr, common::Indirection<OutputImpliedDo>> u;
2781 BOILERPLATE(WriteStmt);
2782 WriteStmt(std::optional<IoUnit> &&i, std::optional<Format> &&f,
2783 std::list<IoControlSpec> &&cs, std::list<OutputItem> &&its)
2784 : iounit{std::move(i)}, format{std::move(f)}, controls(std::move(cs)),
2785 items(std::move(its)) {}
2786 std::optional<IoUnit> iounit;
2788 std::optional<Format> format;
2790 std::list<IoControlSpec> controls;
2791 std::list<OutputItem> items;
2797 std::tuple<Format, std::list<OutputItem>> t;
2808 std::tuple<std::list<InputItem>, IoImpliedDoControl> t;
2813 std::tuple<std::list<OutputItem>, IoImpliedDoControl> t;
2820WRAPPER_CLASS(IdExpr, ScalarIntExpr);
2823 std::variant<FileUnitNumber, EndLabel, EorLabel, ErrLabel, IdExpr,
2824 MsgVariable, StatVariable>
2829WRAPPER_CLASS(WaitStmt, std::list<WaitSpec>);
2839 std::variant<FileUnitNumber, MsgVariable, StatVariable, ErrLabel> u;
2844WRAPPER_CLASS(BackspaceStmt, std::list<PositionOrFlushSpec>);
2848WRAPPER_CLASS(EndfileStmt, std::list<PositionOrFlushSpec>);
2851WRAPPER_CLASS(RewindStmt, std::list<PositionOrFlushSpec>);
2854WRAPPER_CLASS(FlushStmt, std::list<PositionOrFlushSpec>);
2894 ENUM_CLASS(Kind, Access, Action, Asynchronous, Blank, Decimal, Delim,
2895 Direct, Encoding, Form, Formatted, Iomsg,
Name, Pad, Position, Read,
2896 Readwrite, Round, Sequential, Sign, Stream, Status, Unformatted, Write,
2897 Carriagecontrol, Convert, Dispose)
2898 TUPLE_CLASS_BOILERPLATE(
CharVar);
2899 std::tuple<Kind, ScalarDefaultCharVariable> t;
2902 ENUM_CLASS(Kind, Iostat, Nextrec, Number, Pos, Recl, Size)
2903 TUPLE_CLASS_BOILERPLATE(
IntVar);
2904 std::tuple<Kind, ScalarIntVariable> t;
2907 ENUM_CLASS(Kind, Exist, Named, Opened, Pending)
2908 TUPLE_CLASS_BOILERPLATE(
LogVar);
2909 std::tuple<Kind, Scalar<Logical<Variable>>> t;
2923 std::tuple<ScalarIntVariable, std::list<OutputItem>> t;
2925 std::variant<std::list<InquireSpec>,
Iolength> u;
2932WRAPPER_CLASS(ProgramStmt,
Name);
2935WRAPPER_CLASS(EndProgramStmt, std::optional<Name>);
2943 ExecutionPart, std::optional<InternalSubprogramPart>,
2949WRAPPER_CLASS(ModuleStmt,
Name);
2956 std::variant<common::Indirection<FunctionSubprogram>,
2966 std::tuple<Statement<ContainsStmt>, std::list<ModuleSubprogram>> t;
2970WRAPPER_CLASS(EndModuleStmt, std::optional<Name>);
2976 TUPLE_CLASS_BOILERPLATE(
Module);
2987 UNION_CLASS_BOILERPLATE(
Rename);
2989 TUPLE_CLASS_BOILERPLATE(
Names);
2990 std::tuple<Name, Name> t;
2994 std::tuple<DefinedOpName, DefinedOpName> t;
2996 std::variant<Names, Operators> u;
3002 std::tuple<Name, std::optional<Name>> t;
3008 std::tuple<ParentIdentifier, Name> t;
3012WRAPPER_CLASS(EndSubmoduleStmt, std::optional<Name>);
3025WRAPPER_CLASS(BlockDataStmt, std::optional<Name>);
3028WRAPPER_CLASS(EndBlockDataStmt, std::optional<Name>);
3046 EMPTY_CLASS(Assignment);
3047 EMPTY_CLASS(ReadFormatted);
3048 EMPTY_CLASS(ReadUnformatted);
3049 EMPTY_CLASS(WriteFormatted);
3050 EMPTY_CLASS(WriteUnformatted);
3053 ReadUnformatted, WriteFormatted, WriteUnformatted>
3061 std::tuple<std::optional<AccessSpec>,
GenericSpec, std::list<Name>> t;
3065struct InterfaceStmt {
3066 UNION_CLASS_BOILERPLATE(InterfaceStmt);
3068 InterfaceStmt(Abstract x) : u{x} {}
3070 std::variant<std::optional<GenericSpec>, Abstract> u;
3076 UNION_CLASS_BOILERPLATE(
Only);
3077 std::variant<common::Indirection<GenericSpec>,
Name,
Rename> u;
3085 BOILERPLATE(UseStmt);
3086 ENUM_CLASS(ModuleNature, Intrinsic, Non_Intrinsic)
3087 template <
typename A>
3088 UseStmt(std::optional<ModuleNature> &&nat,
Name &&n, std::list<A> &&x)
3089 : nature(std::move(nat)), moduleName(std::move(n)), u(std::move(x)) {}
3090 std::optional<ModuleNature> nature;
3092 std::variant<std::list<Rename>, std::list<Only>> u;
3110 std::tuple<std::optional<ProcInterface>, std::list<ProcAttrSpec>,
3111 std::list<ProcDecl>>
3122 EMPTY_CLASS(Elemental);
3123 EMPTY_CLASS(Impure);
3125 EMPTY_CLASS(Non_Recursive);
3127 EMPTY_CLASS(Recursive);
3128 WRAPPER_CLASS(Attributes, std::list<common::CUDASubprogramAttrs>);
3129 WRAPPER_CLASS(Launch_Bounds, std::list<ScalarIntConstantExpr>);
3130 WRAPPER_CLASS(Cluster_Dims, std::list<ScalarIntConstantExpr>);
3132 Pure, Recursive, Attributes, Launch_Bounds, Cluster_Dims>
3140 BOILERPLATE(Suffix);
3142 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3143 Suffix(
Name &&rn, std::optional<LanguageBindingSpec> &&lbs)
3144 : binding(std::move(lbs)), resultName(std::move(rn)) {}
3145 std::optional<LanguageBindingSpec> binding;
3146 std::optional<Name> resultName;
3155 std::tuple<std::list<PrefixSpec>,
Name, std::list<Name>,
3156 std::optional<Suffix>>
3161WRAPPER_CLASS(EndFunctionStmt, std::optional<Name>);
3166 std::variant<Name, Star> u;
3174 std::tuple<std::list<PrefixSpec>,
Name, std::list<DummyArg>,
3175 std::optional<LanguageBindingSpec>>
3180WRAPPER_CLASS(EndSubroutineStmt, std::optional<Name>);
3195 std::tuple<Statement<SubroutineStmt>,
3199 std::variant<Function, Subroutine> u;
3204 ENUM_CLASS(Kind, ModuleProcedure, Procedure)
3206 std::tuple<Kind, std::list<Name>> t;
3212 std::variant<InterfaceBody, Statement<ProcedureStmt>> u;
3216WRAPPER_CLASS(EndInterfaceStmt, std::optional<GenericSpec>);
3222 std::tuple<Statement<InterfaceStmt>, std::list<InterfaceSpecification>,
3228WRAPPER_CLASS(ExternalStmt, std::list<Name>);
3231WRAPPER_CLASS(IntrinsicStmt, std::list<Name>);
3237 std::variant<Name, ProcComponentRef> u;
3241WRAPPER_CLASS(AltReturnSpec, Label);
3247 WRAPPER_CLASS(PercentRef,
Expr);
3248 WRAPPER_CLASS(PercentVal,
Expr);
3249 UNION_CLASS_BOILERPLATE(ActualArg);
3251 std::variant<common::Indirection<Expr>, AltReturnSpec, PercentRef, PercentVal>
3258 std::tuple<std::optional<Keyword>,
ActualArg> t;
3264 TUPLE_CLASS_BOILERPLATE(
Call);
3265 std::tuple<ProcedureDesignator, std::list<ActualArgSpec>> t;
3281 BOILERPLATE(CallStmt);
3282 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarExpr>);
3285 std::tuple<StarOrExpr, ScalarExpr, std::optional<ScalarExpr>,
3286 std::optional<ScalarIntExpr>>
3290 std::list<ActualArgSpec> &&args)
3291 : call{std::move(pd), std::move(args)}, chevrons{std::move(ch)} {}
3293 std::optional<Chevrons> chevrons;
3320WRAPPER_CLASS(MpSubprogramStmt,
Name);
3323WRAPPER_CLASS(EndMpSubprogramStmt, std::optional<Name>);
3338 std::tuple<Name, std::list<DummyArg>, std::optional<Suffix>> t;
3342WRAPPER_CLASS(ReturnStmt, std::optional<ScalarIntExpr>);
3371 std::tuple<std::optional<std::list<const char *>>,
Name> t;
3374 WRAPPER_CLASS_BOILERPLATE(
LoopCount, std::list<std::uint64_t>);
3378 std::tuple<common::Indirection<Designator>, uint64_t> t;
3380 EMPTY_CLASS(VectorAlways);
3383 std::tuple<Name, std::optional<std::uint64_t>> t;
3386 WRAPPER_CLASS_BOILERPLATE(
Unroll, std::optional<std::uint64_t>);
3389 WRAPPER_CLASS_BOILERPLATE(
UnrollAndJam, std::optional<std::uint64_t>);
3392 WRAPPER_CLASS_BOILERPLATE(
3395 EMPTY_CLASS(NoVector);
3396 EMPTY_CLASS(NoUnroll);
3397 EMPTY_CLASS(NoUnrollAndJam);
3398 EMPTY_CLASS(ForceInline);
3399 EMPTY_CLASS(Inline);
3400 EMPTY_CLASS(NoInline);
3402 EMPTY_CLASS(Unrecognized);
3404 std::variant<std::list<IgnoreTKR>,
LoopCount, std::list<AssumeAligned>,
3406 NoVector, NoUnroll, NoUnrollAndJam, ForceInline, Inline, NoInline,
3414 std::tuple<common::CUDADataAttr, std::list<Name>> t;
3420 std::tuple<ObjectName, ObjectName, std::optional<ArraySpec>> t;
3422WRAPPER_CLASS(BasedPointerStmt, std::list<BasedPointer>);
3429 std::variant<Statement<DataComponentDefStmt>,
3435 EMPTY_CLASS(MapStmt);
3436 EMPTY_CLASS(EndMapStmt);
3437 TUPLE_CLASS_BOILERPLATE(
Map);
3438 std::tuple<Statement<MapStmt>, std::list<StructureField>,
3444 EMPTY_CLASS(UnionStmt);
3445 EMPTY_CLASS(EndUnionStmt);
3446 TUPLE_CLASS_BOILERPLATE(
Union);
3452 std::tuple<std::optional<Name>, std::list<EntityDecl>> t;
3456 EMPTY_CLASS(EndStructureStmt);
3458 std::tuple<Statement<StructureStmt>, std::list<StructureField>,
3465WRAPPER_CLASS(OldParameterStmt, std::list<NamedConstantDef>);
3470 std::tuple<Expr, Label, Label, Label> t;
3475 std::tuple<Label, Name> t;
3480 std::tuple<Name, std::list<Label>> t;
3483WRAPPER_CLASS(PauseStmt, std::optional<StopCode>);
3489#define INHERITED_TUPLE_CLASS_BOILERPLATE(classname, basename) \
3490 using basename::basename; \
3491 classname(basename &&b) : basename(std::move(b)) {} \
3492 using TupleTrait = std::true_type; \
3493 BOILERPLATE(classname)
3495#define INHERITED_WRAPPER_CLASS_BOILERPLATE(classname, basename) \
3496 BOILERPLATE(classname); \
3497 using basename::basename; \
3498 classname(basename &&base) : basename(std::move(base)) {} \
3499 using WrapperTrait = std::true_type
3504struct OmpDirectiveName {
3506 constexpr OmpDirectiveName() =
default;
3507 constexpr OmpDirectiveName(
const OmpDirectiveName &) =
default;
3508 constexpr OmpDirectiveName(llvm::omp::Directive x) : v(x) {}
3512 OmpDirectiveName(
const Verbatim &name);
3513 using WrapperTrait = std::true_type;
3515 bool IsExecutionPart()
const;
3518 llvm::omp::Directive v{llvm::omp::Directive::OMPD_unknown};
3526 std::variant<TypeSpec, DeclarationTypeSpec> u;
3541 ENUM_CLASS(Kind, BlankCommonBlock);
3542 WRAPPER_CLASS_BOILERPLATE(
Invalid, Kind);
3550 WRAPPER_CLASS_BOILERPLATE(
OmpObjectList, std::list<OmpObject>);
3557 using EmptyTrait = std::true_type;
3565 std::variant<AssignmentStmt, CallStmt, common::Indirection<Expr>> u;
3568 std::tuple<std::list<OmpStylizedDeclaration>,
Instance> t;
3582 WRAPPER_CLASS_BOILERPLATE(
3595 std::variant<DefinedOperator, ProcedureDesignator> u;
3604 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3616 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3621inline namespace arguments {
3624 std::variant<OmpObject, FunctionReference> u;
3628 WRAPPER_CLASS_BOILERPLATE(
OmpLocatorList, std::list<OmpLocator>);
3640 std::tuple<OmpObject, OmpObject> t;
3651 std::tuple<std::string, TypeSpec, Name> t;
3664 std::optional<OmpCombinerExpression>>
3683inline namespace traits {
3720 TUPLE_CLASS_BOILERPLATE(
Complex);
3722 std::list<common::Indirection<OmpTraitPropertyExtension>>>
3726 std::variant<OmpTraitPropertyName, ScalarExpr, Complex> u;
3742 std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
3767 std::string ToString()
const;
3770 ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
3771 Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
3772 std::variant<Value, llvm::omp::Directive, std::string> u;
3783 std::tuple<std::optional<OmpTraitScore>, std::list<OmpTraitProperty>> t;
3785 std::tuple<OmpTraitSelectorName, std::optional<Properties>> t;
3792 std::string ToString()
const;
3794 ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
3803 std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
3810 WRAPPER_CLASS_BOILERPLATE(
3815#define MODIFIER_BOILERPLATE(...) \
3817 using Variant = std::variant<__VA_ARGS__>; \
3818 UNION_CLASS_BOILERPLATE(Modifier); \
3823#define MODIFIERS() std::optional<std::list<Modifier>>
3825inline namespace modifier {
3833 ENUM_CLASS(Value, Cgroup);
3842 WRAPPER_CLASS_BOILERPLATE(
OmpAlignment, ScalarIntExpr);
3878 ENUM_CLASS(Value, Always)
3890 ENUM_CLASS(Value, Always, Never, Auto)
3900 ENUM_CLASS(Value, Automap);
3911 ENUM_CLASS(Value, Simd)
3924 ENUM_CLASS(Value, Close)
3936 ENUM_CLASS(Value, Delete)
3957 ENUM_CLASS(Value, Sink, Source);
3966 ENUM_CLASS(Value, Ancestor, Device_Num)
3984 INHERITED_WRAPPER_CLASS_BOILERPLATE(
3999 ENUM_CLASS(Value, Present);
4010 ENUM_CLASS(Value, Abort, Default_Mem, Null);
4020 std::variant<CharLiteralConstant, ScalarIntConstantExpr> u;
4028 WRAPPER_CLASS_BOILERPLATE(
4037 ENUM_CLASS(Value, Target, TargetSync)
4051 std::tuple<TypeDeclarationStmt, SubscriptTriplet> t;
4059 WRAPPER_CLASS_BOILERPLATE(
OmpIterator, std::list<OmpIteratorSpecifier>);
4067 ENUM_CLASS(Value, Conditional)
4076 ENUM_CLASS(Value, Ref, Uval, Val);
4098 ENUM_CLASS(Value, Alloc, Delete, From, Release, Storage, To, Tofrom);
4099 WRAPPER_CLASS_BOILERPLATE(
OmpMapType, Value);
4111 ENUM_CLASS(Value, Always, Close, Present, Ompx_Hold)
4126 ENUM_CLASS(Value, Monotonic, Nonmonotonic, Simd)
4135 ENUM_CLASS(Value, Reproducible, Unconstrained)
4144 ENUM_CLASS(Value, Strict)
4157 ENUM_CLASS(Value, Present)
4166 ENUM_CLASS(Value, Default, Inscan, Task);
4176 ENUM_CLASS(Value, Ref_Ptee, Ref_Ptr, Ref_Ptr_Ptee)
4186 ENUM_CLASS(Value, Self)
4213 ENUM_CLASS(Value, In, Out, Inout, Inoutset, Mutexinoutset, Depobj)
4224 ENUM_CLASS(Value, Aggregate, All, Allocatable, Pointer,
Scalar)
4237 ENUM_CLASS(Value, Ompx_Hold)
4247using OmpDirectiveList = std::list<llvm::omp::Directive>;
4260 ENUM_CLASS(Value, Nothing, Need_Device_Ptr)
4263 std::tuple<OmpAdjustOp, OmpObjectList> t;
4280 WRAPPER_CLASS_BOILERPLATE(
OmpAlignClause, ScalarIntConstantExpr);
4311 WRAPPER_CLASS_BOILERPLATE(
OmpAppendOp, std::list<OmpInteropType>);
4319 ENUM_CLASS(ActionTime, Compilation, Execution);
4320 WRAPPER_CLASS_BOILERPLATE(
OmpAtClause, ActionTime);
4331 using MemoryOrder = common::OmpMemoryOrderType;
4342 ENUM_CLASS(Binding, Parallel, Teams, Thread)
4349 std::tuple<OmpDirectiveName, std::optional<ScalarLogicalExpr>> t;
4374 ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
4376 std::variant<DataSharingAttribute,
4393 ENUM_CLASS(ImplicitBehavior, Alloc, To, From, Tofrom, Firstprivate, None,
4396 std::tuple<ImplicitBehavior, MODIFIERS()> t;
4405 std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
4414 std::tuple<Name, std::optional<OmpIterationOffset>> t;
4431 OmpDependenceType::Value GetDepType()
const;
4434 EMPTY_CLASS(Source);
4436 std::variant<Sink, Source> u;
4451 OmpTaskDependenceType::Value GetTaskDepType()
const;
4452 TUPLE_CLASS_BOILERPLATE(
TaskDep);
4456 std::variant<TaskDep, OmpDoacross> u;
4493 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4509 ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
4519 WRAPPER_CLASS_BOILERPLATE(
4526 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4543 using MemoryOrder = common::OmpMemoryOrderType;
4569 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4590 WRAPPER_CLASS_BOILERPLATE(
OmpHintClause, ScalarIntConstantExpr);
4603 WRAPPER_CLASS_BOILERPLATE(
4616 std::tuple<MODIFIERS(), ScalarLogicalExpr> t;
4656 MODIFIER_BOILERPLATE(
4667 std::tuple<ScalarIntConstantExpr, ScalarIntConstantExpr> t;
4704 WRAPPER_CLASS_BOILERPLATE(
4718EMPTY_CLASS(OmpNoOpenMPClause);
4723EMPTY_CLASS(OmpNoOpenMPRoutinesClause);
4728EMPTY_CLASS(OmpNoParallelismClause);
4738 std::tuple<MODIFIERS(), ScalarIntExpr> t;
4748 ENUM_CLASS(Ordering, Concurrent)
4750 std::tuple<MODIFIERS(), Ordering> t;
4772 ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
4815 ENUM_CLASS(Kind, Static, Dynamic, Guided, Auto, Runtime)
4817 std::tuple<MODIFIERS(), Kind, std::optional<ScalarIntExpr>> t;
4832 ENUM_CLASS(Severity, Fatal, Warning);
4850 ENUM_CLASS(ThreadsetPolicy, Omp_Pool, Omp_Team)
4893 WRAPPER_CLASS_BOILERPLATE(
4911 std::variant<OmpDependenceType, OmpTaskDependenceType> u;
4921 MODIFIER_BOILERPLATE(OmpContextSelector);
4922 std::tuple<MODIFIERS(),
4923 std::optional<common::Indirection<OmpDirectiveSpecification>>>
4951 llvm::omp::Clause Id()
const;
4953#define GEN_FLANG_CLAUSE_PARSER_CLASSES
4954#include "llvm/Frontend/OpenMP/OMP.inc"
4959#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
4960#include "llvm/Frontend/OpenMP/OMP.inc"
4966 WRAPPER_CLASS_BOILERPLATE(
OmpClauseList, std::list<OmpClause>);
4973 ENUM_CLASS(Flags, None, DeprecatedSyntax);
4976 return std::get<OmpDirectiveName>(t);
4978 llvm::omp::Directive DirId()
const {
4985 std::tuple<OmpDirectiveName, std::optional<OmpArgumentList>,
4986 std::optional<OmpClauseList>, Flags>
4995 INHERITED_TUPLE_CLASS_BOILERPLATE(
5007 return std::get<OmpBeginDirective>(t);
5009 const std::optional<OmpEndDirective> &EndDir()
const {
5010 return std::get<std::optional<OmpEndDirective>>(t);
5014 std::tuple<OmpBeginDirective, Block, std::optional<OmpEndDirective>> t;
5018 WRAPPER_CLASS_BOILERPLATE(
5039 std::variant<OmpErrorDirective, OmpNothingDirective> u;
5048 WRAPPER_CLASS_BOILERPLATE(
5066 INHERITED_TUPLE_CLASS_BOILERPLATE(
5081 std::tuple<std::optional<OmpDirectiveSpecification>, Block> t;
5089 return std::get<OmpBeginSectionsDirective>(t);
5091 const std::optional<OmpEndSectionsDirective> &EndDir()
const {
5092 return std::get<std::optional<OmpEndSectionsDirective>>(t);
5099 std::tuple<OmpBeginSectionsDirective, std::list<OpenMPConstruct>,
5100 std::optional<OmpEndSectionsDirective>>
5109 WRAPPER_CLASS_BOILERPLATE(
5121 WRAPPER_CLASS_BOILERPLATE(
5129 WRAPPER_CLASS_BOILERPLATE(
5138 WRAPPER_CLASS_BOILERPLATE(
5146 WRAPPER_CLASS_BOILERPLATE(
5227 INHERITED_TUPLE_CLASS_BOILERPLATE(
5232 llvm::omp::Clause GetKind()
const;
5233 bool IsCapture()
const;
5234 bool IsCompare()
const;
5240 static constexpr int None = 0;
5241 static constexpr int Read = 1;
5242 static constexpr int Write = 2;
5243 static constexpr int Update = Read | Write;
5244 static constexpr int Action = 3;
5245 static constexpr int IfTrue = 4;
5246 static constexpr int IfFalse = 8;
5247 static constexpr int Condition = 12;
5251 AssignmentStmt::TypedAssignment assign;
5253 TypedExpr atom, cond;
5262 WRAPPER_CLASS_BOILERPLATE(
5323 WRAPPER_CLASS_BOILERPLATE(
5346struct OpenMPLoopConstruct {
5347 TUPLE_CLASS_BOILERPLATE(OpenMPLoopConstruct);
5349 : t({std::move(a), Block{}, std::nullopt}) {}
5352 return std::get<OmpBeginLoopDirective>(t);
5354 const std::optional<OmpEndLoopDirective> &EndDir()
const {
5355 return std::get<std::optional<OmpEndLoopDirective>>(t);
5358 const OpenMPLoopConstruct *GetNestedConstruct()
const;
5361 std::tuple<OmpBeginLoopDirective, Block, std::optional<OmpEndLoopDirective>>
5389WRAPPER_CLASS(AccObjectList, std::list<AccObject>);
5421 std::variant<Name, ScalarDefaultCharExpr> u;
5431 ENUM_CLASS(Modifier, ReadOnly, Zero)
5438 std::tuple<std::optional<AccDataModifier>, AccObjectList> t;
5443 std::tuple<ReductionOperator, AccObjectList> t;
5448 std::tuple<std::optional<ScalarIntExpr>, std::list<ScalarIntExpr>> t;
5452 WRAPPER_CLASS_BOILERPLATE(
5458 WRAPPER_CLASS_BOILERPLATE(
5465 std::tuple<std::optional<ScalarIntConstantExpr>> t;
5473 WRAPPER_CLASS_BOILERPLATE(
AccSizeExpr, std::optional<ScalarIntExpr>);
5482 std::variant<std::optional<ScalarLogicalExpr>, AccObjectList> u;
5489 WRAPPER_CLASS(Num, ScalarIntExpr);
5490 WRAPPER_CLASS(Dim, ScalarIntExpr);
5492 std::variant<Num, Dim, Static> u;
5497 WRAPPER_CLASS_BOILERPLATE(
AccGangArgList, std::list<AccGangArg>);
5502 std::tuple<bool, ScalarIntConstantExpr> t;
5508#define GEN_FLANG_CLAUSE_PARSER_CLASSES
5509#include "llvm/Frontend/OpenACC/ACC.inc"
5514#define GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
5515#include "llvm/Frontend/OpenACC/ACC.inc"
5521 WRAPPER_CLASS_BOILERPLATE(
AccClauseList, std::list<AccClause>);
5534 std::tuple<Verbatim, AccObjectListWithModifier> t;
5540 std::tuple<Verbatim, std::optional<AccWaitArgument>,
AccClauseList> t;
5545 std::tuple<AccLoopDirective, AccClauseList> t;
5552 std::tuple<AccBlockDirective, AccClauseList> t;
5561EMPTY_CLASS(AccEndAtomic);
5566 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5567 std::optional<AccEndAtomic>>
5574 std::tuple<Verbatim, AccClauseList, Statement<AssignmentStmt>,
5575 std::optional<AccEndAtomic>>
5583 std::optional<AccEndAtomic>>
5592 std::tuple<Verbatim, AccClauseList, Stmt1, Stmt2, AccEndAtomic> t;
5597 std::variant<AccAtomicRead, AccAtomicWrite, AccAtomicCapture, AccAtomicUpdate>
5604 std::tuple<AccBeginBlockDirective, Block, AccEndBlockDirective> t;
5610 std::tuple<AccDeclarativeDirective, AccClauseList> t;
5616 std::tuple<AccCombinedDirective, AccClauseList> t;
5624struct OpenACCCombinedConstruct {
5625 TUPLE_CLASS_BOILERPLATE(OpenACCCombinedConstruct);
5628 : t({std::move(a), std::nullopt, std::nullopt}) {}
5629 std::tuple<AccBeginCombinedDirective, std::optional<DoConstruct>,
5630 std::optional<AccEndCombinedDirective>>
5637 std::variant<OpenACCStandaloneDeclarativeConstruct, OpenACCRoutineConstruct>
5642EMPTY_CLASS(AccEndLoop);
5643struct OpenACCLoopConstruct {
5644 TUPLE_CLASS_BOILERPLATE(OpenACCLoopConstruct);
5646 : t({std::move(a), std::nullopt, std::nullopt}) {}
5647 std::tuple<AccBeginLoopDirective, std::optional<DoConstruct>,
5648 std::optional<AccEndLoop>>
5660 std::tuple<AccStandaloneDirective, AccClauseList> t;
5686 std::tuple<Operator, std::list<Scalar<Variable>>> t;
5691 WRAPPER_CLASS(StarOrExpr, std::optional<ScalarIntExpr>);
5694 std::tuple<std::list<StarOrExpr>, std::list<StarOrExpr>,
5695 std::optional<ScalarIntExpr>>
5701 std::tuple<std::optional<ScalarIntConstantExpr>,
5702 std::optional<LaunchConfiguration>, std::list<CUFReduction>>
5705 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:1304
Definition parse-tree.h:1311
Definition parse-tree.h:1270
Definition parse-tree.h:1259
Definition parse-tree.h:1258
Definition parse-tree.h:5588
Definition parse-tree.h:5564
Definition parse-tree.h:5580
Definition parse-tree.h:5572
Definition parse-tree.h:5549
Definition parse-tree.h:5613
Definition parse-tree.h:5543
Definition parse-tree.h:5419
Definition parse-tree.h:5392
Definition parse-tree.h:5520
Definition parse-tree.h:5505
Definition parse-tree.h:5500
Definition parse-tree.h:5408
Definition parse-tree.h:5430
Definition parse-tree.h:5413
Definition parse-tree.h:5425
Definition parse-tree.h:5457
Definition parse-tree.h:5451
Definition parse-tree.h:5555
Definition parse-tree.h:5619
Definition parse-tree.h:5496
Definition parse-tree.h:5487
Definition parse-tree.h:5397
Definition parse-tree.h:5436
Definition parse-tree.h:5441
Definition parse-tree.h:5384
Definition parse-tree.h:5480
Definition parse-tree.h:5476
Definition parse-tree.h:5472
Definition parse-tree.h:5402
Definition parse-tree.h:5468
Definition parse-tree.h:5462
Definition parse-tree.h:5446
Definition parse-tree.h:910
Definition parse-tree.h:1428
Definition parse-tree.h:492
Definition parse-tree.h:3256
Definition parse-tree.h:3246
Definition parse-tree.h:1983
Definition parse-tree.h:1948
Definition parse-tree.h:1927
Definition parse-tree.h:1939
Definition parse-tree.h:1994
Definition parse-tree.h:1956
Definition parse-tree.h:3468
Definition parse-tree.h:1915
Definition parse-tree.h:1359
Definition parse-tree.h:3473
Definition parse-tree.h:3478
Definition parse-tree.h:2020
Definition parse-tree.h:2177
Definition parse-tree.h:2168
Definition parse-tree.h:2161
Definition parse-tree.h:1341
Definition parse-tree.h:1389
Definition parse-tree.h:3418
Definition parse-tree.h:1128
Definition parse-tree.h:1450
Definition parse-tree.h:1457
Definition parse-tree.h:2199
Definition parse-tree.h:3031
Definition parse-tree.h:2032
Definition parse-tree.h:3412
Definition parse-tree.h:5698
Definition parse-tree.h:5692
Definition parse-tree.h:5689
Definition parse-tree.h:5683
Definition parse-tree.h:3283
Definition parse-tree.h:3280
Definition parse-tree.h:3263
Definition parse-tree.h:2442
Definition parse-tree.h:2441
Definition parse-tree.h:2423
Definition parse-tree.h:2429
Definition parse-tree.h:2409
Definition parse-tree.h:2230
Definition parse-tree.h:2215
Definition parse-tree.h:664
Definition parse-tree.h:1844
Definition parse-tree.h:869
Definition parse-tree.h:682
Definition parse-tree.h:680
Definition parse-tree.h:2700
Definition parse-tree.h:2699
Definition parse-tree.h:2207
Definition parse-tree.h:985
Definition parse-tree.h:1463
Definition parse-tree.h:1906
Definition parse-tree.h:1627
Definition parse-tree.h:1636
Definition parse-tree.h:1635
Definition parse-tree.h:3376
Definition parse-tree.h:3369
Definition parse-tree.h:3373
Definition parse-tree.h:3381
Definition parse-tree.h:3391
Definition parse-tree.h:3388
Definition parse-tree.h:3385
Definition parse-tree.h:3367
Definition parse-tree.h:855
Definition parse-tree.h:847
Definition parse-tree.h:996
Definition parse-tree.h:1009
Definition parse-tree.h:1117
Definition parse-tree.h:1062
Definition parse-tree.h:1221
Definition parse-tree.h:2528
Definition parse-tree.h:2255
Definition parse-tree.h:2677
Definition parse-tree.h:2675
Definition parse-tree.h:301
Definition parse-tree.h:2246
Definition parse-tree.h:2237
Definition parse-tree.h:1070
Definition parse-tree.h:1517
Definition parse-tree.h:1529
Definition parse-tree.h:1822
Definition parse-tree.h:1488
Definition parse-tree.h:1537
Definition parse-tree.h:1503
Definition parse-tree.h:1543
Definition parse-tree.h:1509
Definition parse-tree.h:2014
Definition parse-tree.h:433
Definition parse-tree.h:776
Definition parse-tree.h:771
Definition parse-tree.h:769
Definition parse-tree.h:325
Definition parse-tree.h:606
Definition parse-tree.h:1206
Definition parse-tree.h:751
Definition parse-tree.h:927
Definition parse-tree.h:1861
Definition parse-tree.h:1555
Definition parse-tree.h:1554
Definition parse-tree.h:2342
Definition parse-tree.h:3164
Definition parse-tree.h:2362
Definition parse-tree.h:2224
Definition parse-tree.h:1404
Definition parse-tree.h:3336
Definition parse-tree.h:1250
Definition parse-tree.h:1236
Definition parse-tree.h:2582
Definition parse-tree.h:2588
Definition parse-tree.h:2596
Definition parse-tree.h:525
Definition parse-tree.h:548
Definition parse-tree.h:979
Definition parse-tree.h:966
Definition parse-tree.h:1768
Definition parse-tree.h:1741
Definition parse-tree.h:1782
Definition parse-tree.h:1747
Definition parse-tree.h:1786
Definition parse-tree.h:1723
Definition parse-tree.h:1738
Definition parse-tree.h:1774
Definition parse-tree.h:1756
Definition parse-tree.h:1762
Definition parse-tree.h:1765
Definition parse-tree.h:1728
Definition parse-tree.h:1753
Definition parse-tree.h:1750
Definition parse-tree.h:1735
Definition parse-tree.h:1777
Definition parse-tree.h:1759
Definition parse-tree.h:1717
Definition parse-tree.h:1714
Definition parse-tree.h:1771
Definition parse-tree.h:1708
Definition parse-tree.h:1732
Definition parse-tree.h:1744
Definition parse-tree.h:1711
Definition parse-tree.h:1704
Definition parse-tree.h:1056
Definition parse-tree.h:2118
Definition parse-tree.h:2134
Definition parse-tree.h:2112
Definition parse-tree.h:2147
Definition parse-tree.h:2124
Definition parse-tree.h:3268
Definition parse-tree.h:3153
Definition parse-tree.h:3302
Definition parse-tree.h:3044
Definition parse-tree.h:3059
Definition parse-tree.h:876
Definition parse-tree.h:2381
Definition parse-tree.h:2377
Definition parse-tree.h:2376
Definition parse-tree.h:2392
Definition parse-tree.h:2355
Definition parse-tree.h:1688
Definition parse-tree.h:1698
Definition parse-tree.h:415
Definition parse-tree.h:1611
Definition parse-tree.h:1620
Definition parse-tree.h:619
Definition parse-tree.h:1027
Definition parse-tree.h:2893
Definition parse-tree.h:2901
Definition parse-tree.h:2906
Definition parse-tree.h:2891
Definition parse-tree.h:2921
Definition parse-tree.h:2919
Definition parse-tree.h:803
Definition parse-tree.h:309
Definition parse-tree.h:1367
Definition parse-tree.h:1563
Definition parse-tree.h:3220
Definition parse-tree.h:3187
Definition parse-tree.h:3193
Definition parse-tree.h:3185
Definition parse-tree.h:3210
Definition parse-tree.h:471
Definition parse-tree.h:459
Definition parse-tree.h:714
Definition parse-tree.h:709
Definition parse-tree.h:719
Definition parse-tree.h:703
Definition parse-tree.h:701
Definition parse-tree.h:2735
Definition parse-tree.h:2733
Definition parse-tree.h:2647
Definition parse-tree.h:790
Definition parse-tree.h:652
Definition parse-tree.h:2319
Definition parse-tree.h:1320
Definition parse-tree.h:670
Definition parse-tree.h:1605
Definition parse-tree.h:901
Definition parse-tree.h:2291
Definition parse-tree.h:2287
Definition parse-tree.h:2623
Definition parse-tree.h:2622
Definition parse-tree.h:883
Definition parse-tree.h:317
Definition parse-tree.h:1285
Definition parse-tree.h:2309
Definition parse-tree.h:2307
Definition parse-tree.h:2940
Definition parse-tree.h:3434
Definition parse-tree.h:2079
Definition parse-tree.h:2964
Definition parse-tree.h:2954
Definition parse-tree.h:2975
Definition parse-tree.h:581
Definition parse-tree.h:1326
Definition parse-tree.h:633
Definition parse-tree.h:632
Definition parse-tree.h:2325
Definition parse-tree.h:2550
Definition parse-tree.h:1437
Definition parse-tree.h:4253
Definition parse-tree.h:4259
Definition parse-tree.h:4257
Definition parse-tree.h:4272
Definition parse-tree.h:4279
Definition parse-tree.h:4287
Definition parse-tree.h:4302
Definition parse-tree.h:5200
Definition parse-tree.h:4310
Definition parse-tree.h:4309
Definition parse-tree.h:4318
Definition parse-tree.h:4330
Definition parse-tree.h:4994
Definition parse-tree.h:5337
Definition parse-tree.h:5065
Definition parse-tree.h:4341
Definition parse-tree.h:5004
Definition parse-tree.h:4347
Definition parse-tree.h:4965
Definition parse-tree.h:4949
Definition parse-tree.h:3603
Definition parse-tree.h:4356
Definition parse-tree.h:5108
Definition parse-tree.h:4373
Definition parse-tree.h:4391
Definition parse-tree.h:4450
Definition parse-tree.h:4448
Definition parse-tree.h:4472
Definition parse-tree.h:4480
Definition parse-tree.h:4490
Definition parse-tree.h:4500
Definition parse-tree.h:4508
Definition parse-tree.h:3504
Definition parse-tree.h:4972
Definition parse-tree.h:4463
Definition parse-tree.h:4430
Definition parse-tree.h:4523
Definition parse-tree.h:4518
Definition parse-tree.h:4999
Definition parse-tree.h:5341
Definition parse-tree.h:5070
Definition parse-tree.h:4534
Definition parse-tree.h:5032
Definition parse-tree.h:4542
Definition parse-tree.h:4555
Definition parse-tree.h:4566
Definition parse-tree.h:4576
Definition parse-tree.h:4584
Definition parse-tree.h:4589
Definition parse-tree.h:4597
Definition parse-tree.h:4613
Definition parse-tree.h:4623
Definition parse-tree.h:4602
Definition parse-tree.h:4935
Definition parse-tree.h:4630
Definition parse-tree.h:3615
Definition parse-tree.h:4403
Definition parse-tree.h:4421
Definition parse-tree.h:4412
Definition parse-tree.h:4639
Definition parse-tree.h:4654
Definition parse-tree.h:4665
Definition parse-tree.h:4690
Definition parse-tree.h:4702
Definition parse-tree.h:4711
Definition parse-tree.h:5026
Definition parse-tree.h:4735
Definition parse-tree.h:3549
Definition parse-tree.h:3540
Definition parse-tree.h:3537
Definition parse-tree.h:4746
Definition parse-tree.h:4759
Definition parse-tree.h:4771
Definition parse-tree.h:4782
Definition parse-tree.h:3593
Definition parse-tree.h:4792
Definition parse-tree.h:4801
Definition parse-tree.h:4813
Definition parse-tree.h:4824
Definition parse-tree.h:4831
Definition parse-tree.h:3553
Definition parse-tree.h:3575
Definition parse-tree.h:3563
Definition parse-tree.h:3562
Definition parse-tree.h:4840
Definition parse-tree.h:4849
Definition parse-tree.h:4864
Definition parse-tree.h:4874
Definition parse-tree.h:3529
Definition parse-tree.h:3522
Definition parse-tree.h:4883
Definition parse-tree.h:4892
Definition parse-tree.h:4908
Definition parse-tree.h:4944
Definition parse-tree.h:4919
Definition parse-tree.h:3075
Definition parse-tree.h:5595
Definition parse-tree.h:5602
Definition parse-tree.h:5531
Definition parse-tree.h:5624
Definition parse-tree.h:5663
Definition parse-tree.h:5634
Definition parse-tree.h:5652
Definition parse-tree.h:5643
Definition parse-tree.h:5525
Definition parse-tree.h:5657
Definition parse-tree.h:5607
Definition parse-tree.h:5537
Definition parse-tree.h:5226
Definition parse-tree.h:5059
Definition parse-tree.h:5249
Definition parse-tree.h:5239
Definition parse-tree.h:5231
Definition parse-tree.h:5268
Definition parse-tree.h:5261
Definition parse-tree.h:5372
Definition parse-tree.h:5216
Definition parse-tree.h:5047
Definition parse-tree.h:5204
Definition parse-tree.h:5128
Definition parse-tree.h:5137
Definition parse-tree.h:5145
Definition parse-tree.h:5120
Definition parse-tree.h:5279
Definition parse-tree.h:5293
Definition parse-tree.h:5367
Definition parse-tree.h:5309
Definition parse-tree.h:5155
Definition parse-tree.h:5317
Definition parse-tree.h:5346
Definition parse-tree.h:5161
Definition parse-tree.h:5079
Definition parse-tree.h:5085
Definition parse-tree.h:5322
Definition parse-tree.h:5328
Definition parse-tree.h:5167
Definition parse-tree.h:5036
Definition parse-tree.h:374
Definition parse-tree.h:2811
Definition parse-tree.h:2774
Definition parse-tree.h:3000
Definition parse-tree.h:2045
Definition parse-tree.h:2044
Definition parse-tree.h:1573
Definition parse-tree.h:2003
Definition parse-tree.h:2837
Definition parse-tree.h:3120
Definition parse-tree.h:2795
Definition parse-tree.h:940
Definition parse-tree.h:3098
Definition parse-tree.h:1081
Definition parse-tree.h:1109
Definition parse-tree.h:1901
Definition parse-tree.h:1101
Definition parse-tree.h:1095
Definition parse-tree.h:1088
Definition parse-tree.h:3108
Definition parse-tree.h:3235
Definition parse-tree.h:3203
Definition parse-tree.h:565
Definition parse-tree.h:2758
Definition parse-tree.h:824
Definition parse-tree.h:822
Definition parse-tree.h:2276
Definition parse-tree.h:2988
Definition parse-tree.h:2992
Definition parse-tree.h:2986
Definition parse-tree.h:1586
Definition parse-tree.h:293
Definition parse-tree.h:1673
Definition parse-tree.h:2399
Definition parse-tree.h:2465
Definition parse-tree.h:2464
Definition parse-tree.h:2478
Definition parse-tree.h:2476
Definition parse-tree.h:2455
Definition parse-tree.h:2512
Definition parse-tree.h:2510
Definition parse-tree.h:2490
Definition parse-tree.h:2155
Definition parse-tree.h:3328
Definition parse-tree.h:861
Definition parse-tree.h:796
Definition parse-tree.h:836
Definition parse-tree.h:396
Definition parse-tree.h:447
Definition parse-tree.h:1972
Definition parse-tree.h:357
Definition parse-tree.h:3346
Definition parse-tree.h:2542
Definition parse-tree.h:1891
Definition parse-tree.h:1227
Definition parse-tree.h:3455
Definition parse-tree.h:3427
Definition parse-tree.h:3450
Definition parse-tree.h:3006
Definition parse-tree.h:3017
Definition parse-tree.h:3172
Definition parse-tree.h:3312
Definition parse-tree.h:1664
Definition parse-tree.h:1853
Definition parse-tree.h:1655
Definition parse-tree.h:1839
Definition parse-tree.h:2561
Definition parse-tree.h:2560
Definition parse-tree.h:2573
Definition parse-tree.h:918
Definition parse-tree.h:1170
Definition parse-tree.h:1183
Definition parse-tree.h:1136
Definition parse-tree.h:1192
Definition parse-tree.h:1146
Definition parse-tree.h:1418
Definition parse-tree.h:2500
Definition parse-tree.h:2499
Definition parse-tree.h:946
Definition parse-tree.h:954
Definition parse-tree.h:745
Definition parse-tree.h:643
Definition parse-tree.h:758
Definition parse-tree.h:3443
Definition parse-tree.h:352
Definition parse-tree.h:2632
Definition parse-tree.h:809
Definition parse-tree.h:3084
Definition parse-tree.h:1869
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:280
Definition parse-tree.h:2821
Definition parse-tree.h:2070
Definition parse-tree.h:2063
Definition parse-tree.h:2099
Definition parse-tree.h:2095
Definition parse-tree.h:2094
Definition parse-tree.h:2057
Definition parse-tree.h:2780
Definition parse-tree.h:3677
Definition parse-tree.h:3668
Definition parse-tree.h:3638
Definition parse-tree.h:3627
Definition parse-tree.h:3622
Definition parse-tree.h:3648
Definition parse-tree.h:3661
Definition parse-tree.h:3832
Definition parse-tree.h:3849
Definition parse-tree.h:3841
Definition parse-tree.h:3865
Definition parse-tree.h:3857
Definition parse-tree.h:3877
Definition parse-tree.h:3889
Definition parse-tree.h:3899
Definition parse-tree.h:3910
Definition parse-tree.h:3923
Definition parse-tree.h:3935
Definition parse-tree.h:3956
Definition parse-tree.h:3965
Definition parse-tree.h:3983
Definition parse-tree.h:3998
Definition parse-tree.h:4009
Definition parse-tree.h:4027
Definition parse-tree.h:4018
Definition parse-tree.h:4036
Definition parse-tree.h:4048
Definition parse-tree.h:4058
Definition parse-tree.h:4066
Definition parse-tree.h:4075
Definition parse-tree.h:4110
Definition parse-tree.h:4097
Definition parse-tree.h:4084
Definition parse-tree.h:4134
Definition parse-tree.h:4125
Definition parse-tree.h:4143
Definition parse-tree.h:4156
Definition parse-tree.h:4165
Definition parse-tree.h:4175
Definition parse-tree.h:4185
Definition parse-tree.h:4194
Definition parse-tree.h:4202
Definition parse-tree.h:4212
Definition parse-tree.h:4223
Definition parse-tree.h:4236
Definition parse-tree.h:3808
Definition parse-tree.h:3718
Definition parse-tree.h:3715
Definition parse-tree.h:3698
Definition parse-tree.h:3739
Definition parse-tree.h:3705
Definition parse-tree.h:3766
Definition parse-tree.h:3781
Definition parse-tree.h:3778
Definition parse-tree.h:3791
Definition parse-tree.h:3800