FLANG
dump-parse-tree.h
1//===-- include/flang/Parser/dump-parse-tree.h ------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef FORTRAN_PARSER_DUMP_PARSE_TREE_H_
10#define FORTRAN_PARSER_DUMP_PARSE_TREE_H_
11
12#include "format-specification.h"
13#include "parse-tree-visitor.h"
14#include "parse-tree.h"
15#include "tools.h"
16#include "unparse.h"
17#include "flang/Common/enum-set.h"
18#include "flang/Common/idioms.h"
19#include "flang/Common/indirection.h"
20#include "flang/Support/Fortran.h"
21#include "llvm/ADT/StringExtras.h"
22#include "llvm/Frontend/OpenMP/OMP.h"
23#include "llvm/Support/raw_ostream.h"
24#include <string>
25#include <type_traits>
26
27namespace Fortran::parser {
28
29//
30// Dump the Parse Tree hierarchy of any node 'x' of the parse tree.
31//
32
33class ParseTreeDumper {
34public:
35 explicit ParseTreeDumper(llvm::raw_ostream &out,
36 const AnalyzedObjectsAsFortran *asFortran = nullptr)
37 : out_(out), asFortran_{asFortran} {}
38
39 static constexpr const char *GetNodeName(const char *) { return "char *"; }
40
41 template <typename T, typename E, size_t B>
42 static std::string GetMemberNames(const common::EnumSet<E, B> &x) {
43 llvm::ListSeparator sep;
44 std::string s;
45 llvm::raw_string_ostream stream(s);
46 x.IterateOverMembers([&](E e) { stream << sep << T::EnumToString(e); });
47 return stream.str();
48 }
49#define NODE_ENUMSET(T, S) \
50 static std::string GetNodeName(const T::S &x) { \
51 return #S " = {"s + GetMemberNames<T>(x) + "}"s; \
52 }
53#define NODE_NAME(T, N) \
54 static constexpr const char *GetNodeName(const T &) { return N; }
55#define NODE_ENUM(T, E) \
56 static std::string GetNodeName(const T::E &x) { \
57 return #E " = "s + std::string{T::EnumToString(x)}; \
58 }
59#define NODE(T1, T2) NODE_NAME(T1::T2, #T2)
60 NODE_NAME(bool, "bool")
61 NODE_NAME(int, "int")
62 NODE(std, string)
63 NODE(std, int64_t)
64 NODE(std, uint64_t)
65 NODE_ENUM(common, CUDADataAttr)
66 NODE_ENUM(common, CUDASubprogramAttrs)
67 NODE_ENUM(common, ImportKind)
68 NODE_ENUM(common, OmpDependenceKind)
69 NODE_ENUM(common, OmpMemoryOrderType)
70 NODE_ENUM(common, OpenACCDeviceType)
71 NODE(format, ControlEditDesc)
72 NODE(format::ControlEditDesc, Kind)
73 NODE(format, DerivedTypeDataEditDesc)
74 NODE(format, FormatItem)
75 NODE(format, FormatSpecification)
76 NODE(format, IntrinsicTypeDataEditDesc)
78 NODE(parser, Abstract)
80 NODE(AccAtomicCapture, Stmt1)
81 NODE(AccAtomicCapture, Stmt2)
89 NODE(parser, AccClause)
90#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
91#include "llvm/Frontend/OpenACC/ACC.inc"
94 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
95 return llvm::Twine(
96 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
97 .str();
98 }
102 NODE_ENUM(parser::AccDataModifier, Modifier)
104 NODE(parser, AccEndAtomic)
108 NODE(parser, AccGangArg)
109 NODE(AccGangArg, Num)
110 NODE(AccGangArg, Dim)
111 NODE(AccGangArg, Static)
113 NODE(parser, AccObject)
114 NODE(parser, AccObjectList)
117 NODE(parser, AccSizeExpr)
119 NODE(parser, AccSelfClause)
122
124 NODE(parser, AccTileExpr)
127 NODE(parser, AccEndLoop)
129 static std::string GetNodeName(const llvm::acc::Directive &x) {
130 return llvm::Twine(
131 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
132 .str();
133 }
134 NODE(parser, AcImpliedDo)
136 NODE(parser, AcValue)
137 NODE(parser, AccessStmt)
138 NODE(parser, AccessId)
139 NODE(parser, AccessSpec)
140 NODE_ENUM(AccessSpec, Kind)
141 NODE(parser, AcSpec)
142 NODE(parser, ActionStmt)
143 NODE(parser, ActualArg)
144 NODE(ActualArg, PercentRef)
145 NODE(ActualArg, PercentVal)
146 NODE(parser, ActualArgSpec)
147 NODE(AcValue, Triplet)
148 NODE(parser, AllocOpt)
149 NODE(AllocOpt, Mold)
150 NODE(AllocOpt, Source)
151 NODE(AllocOpt, Stream)
152 NODE(AllocOpt, Pinned)
153 NODE(parser, Allocatable)
154 NODE(parser, AllocatableStmt)
158 NODE(parser, AllocateStmt)
159 NODE(parser, Allocation)
160 NODE(parser, AltReturnSpec)
162 NODE(parser, ArrayConstructor)
163 NODE(parser, ArrayElement)
164 NODE(parser, ArraySpec)
165 NODE(parser, AssignStmt)
169 NODE(parser, AssociateStmt)
170 NODE(parser, Association)
171 NODE(parser, AssumedImpliedSpec)
172 NODE(parser, AssumedRankSpec)
173 NODE(parser, AssumedShapeSpec)
175 NODE(parser, Asynchronous)
176 NODE(parser, AsynchronousStmt)
177 NODE(parser, AttrSpec)
178 NODE(parser, BOZLiteralConstant)
179 NODE(parser, BackspaceStmt)
180 NODE(parser, BasedPointer)
181 NODE(parser, BasedPointerStmt)
182 NODE(parser, BindAttr)
183 NODE(BindAttr, Deferred)
184 NODE(BindAttr, Non_Overridable)
185 NODE(parser, BindEntity)
186 NODE_ENUM(BindEntity, Kind)
187 NODE(parser, BindStmt)
188 NODE(parser, Block)
190 NODE(parser, BlockData)
191 NODE(parser, BlockDataStmt)
192 NODE(parser, BlockSpecificationPart)
193 NODE(parser, BlockStmt)
195 NODE(parser, BoundsSpec)
196 NODE(parser, Call)
197 NODE(parser, CallStmt)
198 NODE(CallStmt, Chevrons)
199 NODE(CallStmt, StarOrExpr)
200 NODE(parser, CaseConstruct)
201 NODE(CaseConstruct, Case)
202 NODE(parser, CaseSelector)
203 NODE(parser, CaseStmt)
205 NODE(CaseValueRange, Range)
208 NODE(parser, CharLength)
211 NODE(parser, CharSelector)
212 NODE(CharSelector, LengthAndKind)
213 NODE(parser, CloseStmt)
214 NODE(CloseStmt, CloseSpec)
216 NODE(parser, CoarraySpec)
218 NODE(parser, CodimensionStmt)
221 NODE(parser, CommonStmt)
222 NODE(CommonStmt, Block)
224 NODE(CompilerDirective, AssumeAligned)
225 NODE(CompilerDirective, IgnoreTKR)
226 NODE(CompilerDirective, Inline)
227 NODE(CompilerDirective, IVDep)
228 NODE(CompilerDirective, ForceInline)
229 NODE(CompilerDirective, LoopCount)
230 NODE(CompilerDirective, NameValue)
231 NODE(CompilerDirective, NoInline)
232 NODE(CompilerDirective, Unrecognized)
233 NODE(CompilerDirective, VectorAlways)
234 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
235 NODE(CompilerDirective, VectorLength)
236 NODE(CompilerDirective, Unroll)
237 NODE(CompilerDirective, UnrollAndJam)
238 NODE(CompilerDirective, NoVector)
239 NODE(CompilerDirective, NoUnroll)
240 NODE(CompilerDirective, NoUnrollAndJam)
241 NODE(CompilerDirective, Prefetch)
243 NODE(parser, ComplexPart)
246 NODE(parser, ComponentDataSource)
247 NODE(parser, ComponentDecl)
248 NODE(parser, FillDecl)
251 NODE(parser, ComponentSpec)
255 NODE(parser, ConnectSpec)
256 NODE(ConnectSpec, CharExpr)
257 NODE_ENUM(ConnectSpec::CharExpr, Kind)
258 NODE(ConnectSpec, Newunit)
259 NODE(ConnectSpec, Recl)
260 NODE(parser, ContainsStmt)
261 NODE(parser, Contiguous)
262 NODE(parser, ContiguousStmt)
263 NODE(parser, ContinueStmt)
265 NODE(parser, CriticalStmt)
268 NODE(CUFKernelDoConstruct, StarOrExpr)
269 NODE(CUFKernelDoConstruct, Directive)
270 NODE(CUFKernelDoConstruct, LaunchConfiguration)
271 NODE(parser, CUFReduction)
272 NODE(parser, CycleStmt)
274 NODE(parser, DataIDoObject)
275 NODE(parser, DataImpliedDo)
276 NODE(parser, DataRef)
277 NODE(parser, DataStmt)
281 NODE(parser, DataStmtSet)
282 NODE(parser, DataStmtValue)
286 NODE(DeclarationTypeSpec, Class)
287 NODE(DeclarationTypeSpec, ClassStar)
288 NODE(DeclarationTypeSpec, Record)
289 NODE(DeclarationTypeSpec, Type)
290 NODE(DeclarationTypeSpec, TypeStar)
291 NODE(parser, Default)
292 NODE(parser, DeferredCoshapeSpecList)
293 NODE(parser, DeferredShapeSpecList)
294 NODE(parser, DefinedOpName)
296 NODE_ENUM(DefinedOperator, IntrinsicOperator)
300 NODE(parser, Designator)
301 NODE(parser, DimensionStmt)
302 NODE(DimensionStmt, Declaration)
303 NODE(parser, DoConstruct)
304 NODE(parser, DummyArg)
305 NODE(parser, ElseIfStmt)
306 NODE(parser, ElseStmt)
307 NODE(parser, ElsewhereStmt)
308 NODE(parser, EndAssociateStmt)
309 NODE(parser, EndBlockDataStmt)
310 NODE(parser, EndBlockStmt)
312 NODE(parser, EndCriticalStmt)
313 NODE(parser, EndDoStmt)
314 NODE(parser, EndEnumStmt)
315 NODE(parser, EndForallStmt)
316 NODE(parser, EndFunctionStmt)
317 NODE(parser, EndIfStmt)
318 NODE(parser, EndInterfaceStmt)
319 NODE(parser, EndLabel)
320 NODE(parser, EndModuleStmt)
321 NODE(parser, EndMpSubprogramStmt)
322 NODE(parser, EndProgramStmt)
323 NODE(parser, EndSelectStmt)
324 NODE(parser, EndSubmoduleStmt)
325 NODE(parser, EndSubroutineStmt)
326 NODE(parser, EndTypeStmt)
327 NODE(parser, EndWhereStmt)
328 NODE(parser, EndfileStmt)
329 NODE(parser, EntityDecl)
330 NODE(parser, EntryStmt)
331 NODE(parser, EnumDef)
332 NODE(parser, EnumDefStmt)
333 NODE(parser, Enumerator)
334 NODE(parser, EnumeratorDefStmt)
335 NODE(parser, EorLabel)
336 NODE(parser, EquivalenceObject)
337 NODE(parser, EquivalenceStmt)
338 NODE(parser, ErrLabel)
339 NODE(parser, ErrorRecovery)
340 NODE(parser, EventPostStmt)
341 NODE(parser, EventWaitSpec)
342 NODE(parser, EventWaitStmt)
344 NODE(parser, ExecutionPart)
346 NODE(parser, ExitStmt)
349 NODE(parser, Expr)
350 NODE(Expr, Parentheses)
351 NODE(Expr, UnaryPlus)
352 NODE(Expr, Negate)
353 NODE(Expr, NOT)
354 NODE(Expr, PercentLoc)
355 NODE(Expr, DefinedUnary)
356 NODE(Expr, Power)
357 NODE(Expr, Multiply)
358 NODE(Expr, Divide)
359 NODE(Expr, Add)
360 NODE(Expr, Subtract)
361 NODE(Expr, Concat)
362 NODE(Expr, LT)
363 NODE(Expr, LE)
364 NODE(Expr, EQ)
365 NODE(Expr, NE)
366 NODE(Expr, GE)
367 NODE(Expr, GT)
368 NODE(Expr, AND)
369 NODE(Expr, OR)
370 NODE(Expr, EQV)
371 NODE(Expr, NEQV)
372 NODE(Expr, DefinedBinary)
373 NODE(Expr, ComplexConstructor)
374 NODE(parser, External)
375 NODE(parser, ExternalStmt)
376 NODE(parser, FailImageStmt)
377 NODE(parser, FileUnitNumber)
378 NODE(parser, FinalProcedureStmt)
379 NODE(parser, FlushStmt)
384 NODE(parser, ForallStmt)
385 NODE(parser, FormTeamStmt)
386 NODE(FormTeamStmt, FormTeamSpec)
387 NODE(parser, Format)
388 NODE(parser, FormatStmt)
390 NODE(parser, FunctionStmt)
392 NODE(parser, GenericSpec)
393 NODE(GenericSpec, Assignment)
394 NODE(GenericSpec, ReadFormatted)
395 NODE(GenericSpec, ReadUnformatted)
396 NODE(GenericSpec, WriteFormatted)
397 NODE(GenericSpec, WriteUnformatted)
398 NODE(parser, GenericStmt)
399 NODE(parser, GotoStmt)
401 NODE(parser, IdExpr)
402 NODE(parser, IdVariable)
403 NODE(parser, IfConstruct)
404 NODE(IfConstruct, ElseBlock)
405 NODE(IfConstruct, ElseIfBlock)
406 NODE(parser, IfStmt)
407 NODE(parser, IfThenStmt)
408 NODE(parser, TeamValue)
409 NODE(parser, ImageSelector)
411 NODE(ImageSelectorSpec, Notify)
412 NODE(ImageSelectorSpec, Stat)
413 NODE(ImageSelectorSpec, Team_Number)
414 NODE(parser, ImplicitPart)
416 NODE(parser, ImplicitSpec)
417 NODE(parser, ImplicitStmt)
418 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
419 NODE(parser, ImpliedShapeSpec)
420 NODE(parser, ImportStmt)
423 NODE(parser, InputItem)
424 NODE(parser, InquireSpec)
425 NODE(InquireSpec, CharVar)
426 NODE_ENUM(InquireSpec::CharVar, Kind)
427 NODE(InquireSpec, IntVar)
428 NODE_ENUM(InquireSpec::IntVar, Kind)
429 NODE(InquireSpec, LogVar)
430 NODE_ENUM(InquireSpec::LogVar, Kind)
431 NODE(parser, InquireStmt)
432 NODE(InquireStmt, Iolength)
433 NODE(parser, IntegerTypeSpec)
434 NODE(parser, IntentSpec)
435 NODE_ENUM(IntentSpec, Intent)
436 NODE(parser, IntentStmt)
438 NODE(parser, InterfaceBody)
439 NODE(InterfaceBody, Function)
440 NODE(InterfaceBody, Subroutine)
442 NODE(parser, InterfaceStmt)
445 NODE(parser, Intrinsic)
446 NODE(parser, IntrinsicStmt)
448 NODE(IntrinsicTypeSpec, Character)
449 NODE(IntrinsicTypeSpec, Complex)
450 NODE(IntrinsicTypeSpec, DoubleComplex)
451 NODE(IntrinsicTypeSpec, DoublePrecision)
453 NODE(IntrinsicTypeSpec, Real)
454 NODE(parser, IoControlSpec)
455 NODE(IoControlSpec, Asynchronous)
456 NODE(IoControlSpec, CharExpr)
457 NODE_ENUM(IoControlSpec::CharExpr, Kind)
458 NODE(IoControlSpec, Pos)
459 NODE(IoControlSpec, Rec)
460 NODE(IoControlSpec, Size)
461 NODE(parser, IoUnit)
462 NODE(parser, Keyword)
463 NODE(parser, KindParam)
464 NODE(parser, KindSelector)
465 NODE(KindSelector, StarSize)
466 NODE(parser, LabelDoStmt)
469 NODE(parser, LetterSpec)
473 NODE_ENUM(parser::ReductionOperator, Operator)
474 NODE(parser, LocalitySpec)
475 NODE(LocalitySpec, DefaultNone)
476 NODE(LocalitySpec, Local)
477 NODE(LocalitySpec, LocalInit)
478 NODE(LocalitySpec, Reduce)
479 NODE(LocalitySpec, Shared)
480 NODE(parser, LockStmt)
481 NODE(LockStmt, LockStat)
483 NODE_NAME(LoopControl::Bounds, "LoopBounds")
484 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
485 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
486 NODE(parser, LoopControl)
487 NODE(LoopControl, Concurrent)
488 NODE(parser, MainProgram)
489 NODE(parser, Map)
490 NODE(Map, EndMapStmt)
491 NODE(Map, MapStmt)
493 NODE(parser, Module)
494 NODE(parser, ModuleStmt)
497 NODE(parser, MpSubprogramStmt)
498 NODE(parser, MsgVariable)
499 NODE(parser, Name)
500 NODE(parser, NamedConstant)
502 NODE(parser, NamelistStmt)
503 NODE(NamelistStmt, Group)
505 NODE(parser, NoPass)
507 NODE(parser, NullifyStmt)
508 NODE(parser, NullInit)
509 NODE(parser, ObjectDecl)
510 NODE(parser, OldParameterStmt)
511
512 static std::string GetNodeName(const llvm::omp::Directive &x) {
513 return llvm::Twine("llvm::omp::Directive = ",
514 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
515 .str();
516 }
517 static std::string GetNodeName(const llvm::omp::Clause &x) {
518 return llvm::Twine(
519 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
520 .str();
521 }
524 NODE_ENUM(OmpAccessGroup, Value)
526 NODE(OmpAdjustArgsClause, OmpAdjustOp)
527 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
529 NODE(OmpAffinityClause, Modifier)
532 NODE(OmpAlignedClause, Modifier)
533 NODE(parser, OmpAlignment)
536 NODE(OmpAllocateClause, Modifier)
541 NODE_ENUM(OmpAlwaysModifier, Value)
543 NODE(OmpAppendArgsClause, OmpAppendOp)
544 NODE(parser, OmpArgument)
546 NODE(parser, OmpAtClause)
547 NODE_ENUM(OmpAtClause, ActionTime)
550 NODE_ENUM(OmpAttachModifier, Value)
552 NODE_ENUM(OmpAutomapModifier, Value)
557 NODE(parser, OmpBindClause)
558 NODE_ENUM(OmpBindClause, Binding)
562 NODE_ENUM(OmpChunkModifier, Value)
563 NODE(parser, OmpClause)
564 NODE(parser, OmpClauseList)
566 NODE_ENUM(OmpCloseModifier, Value)
573 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
575 NODE(OmpDefaultmapClause, Modifier)
576 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
578 NODE_ENUM(OmpDeleteModifier, Value)
580 NODE(OmpDependClause, TaskDep)
581 NODE(OmpDependClause::TaskDep, Modifier)
583 NODE_ENUM(OmpDependenceType, Value)
588 NODE(OmpDeviceClause, Modifier)
590 NODE_ENUM(OmpDeviceModifier, Value)
593 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
597 NODE_ENUM(OmpDirectiveSpecification, Flag)
598 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
599 NODE(parser, OmpDoacross)
600 NODE(OmpDoacross, Sink)
601 NODE(OmpDoacross, Source)
605 NODE(OmpDynGroupprivateClause, Modifier)
610 NODE(OmpEnterClause, Modifier)
613 NODE_ENUM(OmpExpectation, Value)
614 NODE(parser, OmpFailClause)
616 NODE_ENUM(OmpFallbackModifier, Value)
617 NODE(parser, OmpFromClause)
618 NODE(OmpFromClause, Modifier)
620 NODE(OmpGrainsizeClause, Modifier)
623 NODE(parser, OmpHintClause)
625 NODE(parser, OmpIfClause)
626 NODE(OmpIfClause, Modifier)
628 NODE(parser, OmpInitClause)
629 NODE(OmpInitClause, Modifier)
633 NODE(OmpInReductionClause, Modifier)
635 NODE_ENUM(OmpInteropType, Value)
636 NODE(parser, OmpIteration)
639 NODE(parser, OmpIterator)
642 NODE(OmpLastprivateClause, Modifier)
644 NODE_ENUM(OmpLastprivateModifier, Value)
646 NODE(OmpLinearClause, Modifier)
648 NODE_ENUM(OmpLinearModifier, Value)
649 NODE(parser, OmpLocator)
652 NODE(parser, OmpLowerBound)
653 NODE(parser, OmpMapClause)
654 NODE(OmpMapClause, Modifier)
655 NODE(parser, OmpMapper)
657 NODE(parser, OmpMapType)
658 NODE_ENUM(OmpMapType, Value)
660 NODE_ENUM(OmpMapTypeModifier, Value)
664 NODE(parser, OmpNoOpenMPClause)
665 NODE(parser, OmpNoOpenMPRoutinesClause)
666 NODE(parser, OmpNoParallelismClause)
670 NODE(OmpNumTeamsClause, Modifier)
672 NODE(OmpNumThreadsClause, Modifier)
673 NODE(OmpNumTasksClause, Modifier)
674 NODE(parser, OmpObject)
675 NODE(OmpObject, Invalid)
676 NODE_ENUM(OmpObject::Invalid, Kind)
677 NODE(parser, OmpObjectList)
679 NODE(OmpOrderClause, Modifier)
680 NODE_ENUM(OmpOrderClause, Ordering)
682 NODE_ENUM(OmpOrderingModifier, Value)
684 NODE_ENUM(OmpOrderModifier, Value)
688 NODE(parser, OmpPreferType)
690 NODE_ENUM(OmpPrescriptiveness, Value)
692 NODE_ENUM(OmpPresentModifier, Value)
694 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
696 NODE(OmpReductionClause, Modifier)
699 NODE_ENUM(OmpReductionModifier, Value)
702 NODE_ENUM(OmpRefModifier, Value)
706 NODE(OmpScheduleClause, Modifier)
707 NODE_ENUM(OmpScheduleClause, Kind)
710 NODE_ENUM(OmpSelfModifier, Value)
712 NODE_ENUM(OmpSeverityClause, SevLevel)
718 NODE(OmpStylizedInstance, Instance)
721 NODE(OmpTaskReductionClause, Modifier)
723 NODE(OmpThreadLimitClause, Modifier)
725 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
726 NODE(parser, OmpToClause)
727 NODE(OmpToClause, Modifier)
730 NODE(OmpTraitPropertyExtension, Complex)
732 NODE(parser, OmpTraitScore)
734 NODE(OmpTraitSelector, Properties)
736 NODE_ENUM(OmpTraitSelectorName, Value)
739 NODE_ENUM(OmpTraitSetSelectorName, Value)
741 NODE(parser, OmpTypeName)
746 NODE(parser, OmpUseClause)
748 NODE_ENUM(OmpVariableCategory, Value)
749 NODE(parser, OmpWhenClause)
750 NODE(OmpWhenClause, Modifier)
752 NODE_ENUM(OmpxHoldModifier, Value)
753#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
754#include "llvm/Frontend/OpenMP/OMP.inc"
755
756 NODE(parser, Only)
770
798
799 NODE(parser, OpenStmt)
800 NODE(parser, Optional)
801 NODE(parser, OptionalStmt)
804 NODE(parser, OutputItem)
805 NODE(parser, Parameter)
806 NODE(parser, ParameterStmt)
808 NODE(parser, Pass)
809 NODE(parser, PauseStmt)
810 NODE(parser, Pointer)
812 NODE(PointerAssignmentStmt, Bounds)
813 NODE(parser, PointerDecl)
814 NODE(parser, PointerObject)
815 NODE(parser, PointerStmt)
817 NODE(parser, PrefixSpec)
818 NODE(PrefixSpec, Elemental)
819 NODE(PrefixSpec, Impure)
820 NODE(PrefixSpec, Module)
821 NODE(PrefixSpec, Non_Recursive)
822 NODE(PrefixSpec, Pure)
823 NODE(PrefixSpec, Recursive)
824 NODE(PrefixSpec, Attributes)
825 NODE(PrefixSpec, Launch_Bounds)
826 NODE(PrefixSpec, Cluster_Dims)
827 NODE(parser, PrintStmt)
828 NODE(parser, PrivateStmt)
830 NODE(parser, ProcAttrSpec)
834 NODE(parser, ProcDecl)
835 NODE(parser, ProcInterface)
839 NODE(parser, ProcedureStmt)
840 NODE_ENUM(ProcedureStmt, Kind)
841 NODE(parser, Program)
842 NODE(parser, ProgramStmt)
843 NODE(parser, ProgramUnit)
844 NODE(parser, Protected)
845 NODE(parser, ProtectedStmt)
846 NODE(parser, RankClause)
847 NODE(parser, ReadStmt)
849 NODE(RealLiteralConstant, Real)
850 NODE(parser, Rename)
851 NODE(Rename, Names)
852 NODE(Rename, Operators)
853 NODE(parser, ReturnStmt)
854 NODE(parser, RewindStmt)
855 NODE(parser, Save)
856 NODE(parser, SaveStmt)
857 NODE(parser, SavedEntity)
858 NODE_ENUM(SavedEntity, Kind)
862 NODE(SelectRankCaseStmt, Rank)
864 NODE(SelectRankConstruct, RankCase)
867 NODE(SelectTypeConstruct, TypeCase)
869 NODE(parser, Selector)
871 NODE(parser, SequenceStmt)
872 NODE(parser, Sign)
877 NODE(parser, SpecificationExpr)
879 NODE(parser, Star)
880 NODE(parser, StatOrErrmsg)
881 NODE(parser, StatVariable)
882 NODE(parser, StatusExpr)
884 NODE(parser, StopCode)
885 NODE(parser, StopStmt)
886 NODE_ENUM(StopStmt, Kind)
889 NODE(parser, StructureDef)
890 NODE(StructureDef, EndStructureStmt)
892 NODE(parser, StructureStmt)
893 NODE(parser, Submodule)
894 NODE(parser, SubmoduleStmt)
898 NODE(parser, Substring)
901 NODE(parser, Suffix)
902 NODE(parser, SyncAllStmt)
904 NODE(SyncImagesStmt, ImageSet)
905 NODE(parser, SyncMemoryStmt)
906 NODE(parser, SyncTeamStmt)
907 NODE(parser, Target)
908 NODE(parser, TargetStmt)
909 NODE(parser, TypeAttrSpec)
910 NODE(TypeAttrSpec, BindC)
911 NODE(TypeAttrSpec, Extends)
917 NODE(TypeBoundProcedureStmt, WithInterface)
918 NODE(TypeBoundProcedureStmt, WithoutInterface)
920 NODE(parser, TypeGuardStmt)
921 NODE(TypeGuardStmt, Guard)
922 NODE(parser, TypeParamDecl)
924 NODE(common, TypeParamAttr)
925 NODE(parser, TypeParamSpec)
927 NODE(TypeParamValue, Deferred)
928 NODE(parser, TypeSpec)
929 NODE(parser, Union)
930 NODE(Union, EndUnionStmt)
931 NODE(Union, UnionStmt)
932 NODE(parser, UnlockStmt)
934 NODE(parser, UnsignedTypeSpec)
935 NODE(parser, UseStmt)
936 NODE_ENUM(UseStmt, ModuleNature)
937 NODE(parser, Value)
938 NODE(parser, ValueStmt)
939 NODE(parser, Variable)
941 NODE(VectorTypeSpec, PairVectorTypeSpec)
942 NODE(VectorTypeSpec, QuadVectorTypeSpec)
943 NODE(parser, IntrinsicVectorTypeSpec)
945 NODE(parser, Verbatim)
946 NODE(parser, Volatile)
947 NODE(parser, VolatileStmt)
948 NODE(parser, WaitSpec)
949 NODE(parser, WaitStmt)
952 NODE(WhereConstruct, Elsewhere)
953 NODE(WhereConstruct, MaskedElsewhere)
955 NODE(parser, WhereStmt)
956 NODE(parser, WriteStmt)
957#undef NODE
958#undef NODE_NAME
959
960 template <typename T> bool Pre(const T &x) {
961 std::string fortran{AsFortran<T>(x)};
962 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
963 Prefix(GetNodeName(x));
964 } else {
965 IndentEmptyLine();
966 out_ << GetNodeName(x);
967 if (!fortran.empty()) {
968 out_ << " = '" << fortran << '\'';
969 }
970 EndLine();
971 ++indent_;
972 }
973 return true;
974 }
975
976 template <typename T> void Post(const T &x) {
977 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
978 EndLineIfNonempty();
979 } else {
980 --indent_;
981 }
982 }
983
984 // A few types we want to ignore
985
986 bool Pre(const CharBlock &) { return true; }
987 void Post(const CharBlock &) {}
988
989 template <typename T> bool Pre(const Statement<T> &) { return true; }
990 template <typename T> void Post(const Statement<T> &) {}
991 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
992 template <typename T> void Post(const UnlabeledStatement<T> &) {}
993
994 template <typename T> bool Pre(const common::Indirection<T> &) {
995 return true;
996 }
997 template <typename T> void Post(const common::Indirection<T> &) {}
998
999 template <typename A> bool Pre(const Scalar<A> &) {
1000 Prefix("Scalar");
1001 return true;
1002 }
1003 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1004
1005 template <typename A> bool Pre(const Constant<A> &) {
1006 Prefix("Constant");
1007 return true;
1008 }
1009 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1010
1011 template <typename A> bool Pre(const Integer<A> &) {
1012 Prefix("Integer");
1013 return true;
1014 }
1015 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1016
1017 template <typename A> bool Pre(const Logical<A> &) {
1018 Prefix("Logical");
1019 return true;
1020 }
1021 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1022
1023 template <typename A> bool Pre(const DefaultChar<A> &) {
1024 Prefix("DefaultChar");
1025 return true;
1026 }
1027 template <typename A> void Post(const DefaultChar<A> &) {
1028 EndLineIfNonempty();
1029 }
1030
1031 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1032 template <typename... A> void Post(const std::tuple<A...> &) {}
1033
1034 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1035 template <typename... A> void Post(const std::variant<A...> &) {}
1036
1037protected:
1038 // Return a Fortran representation of this node to include in the dump
1039 template <typename T> std::string AsFortran(const T &x) {
1040 std::string buf;
1041 llvm::raw_string_ostream ss{buf};
1042 if constexpr (HasTypedExpr<T>::value) {
1043 if (asFortran_ && x.typedExpr) {
1044 asFortran_->expr(ss, *x.typedExpr);
1045 }
1046 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1047 std::is_same_v<T, PointerAssignmentStmt>) {
1048 if (asFortran_ && x.typedAssignment) {
1049 asFortran_->assignment(ss, *x.typedAssignment);
1050 }
1051 } else if constexpr (std::is_same_v<T, CallStmt>) {
1052 if (asFortran_ && x.typedCall) {
1053 asFortran_->call(ss, *x.typedCall);
1054 }
1055 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1056 std::is_same_v<T, SignedIntLiteralConstant> ||
1057 std::is_same_v<T, UnsignedLiteralConstant>) {
1058 ss << std::get<CharBlock>(x.t);
1059 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1060 ss << x.source;
1061 } else if constexpr (std::is_same_v<T, std::string> ||
1062 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1063 ss << x;
1064 }
1065 if (ss.tell()) {
1066 return buf;
1067 }
1068 if constexpr (std::is_same_v<T, Name>) {
1069 return x.source.ToString();
1070#ifdef SHOW_ALL_SOURCE_MEMBERS
1071 } else if constexpr (HasSource<T>::value) {
1072 return x.source.ToString();
1073#endif
1074 } else if constexpr (std::is_same_v<T, int>) {
1075 return std::to_string(x);
1076 } else if constexpr (std::is_same_v<T, bool>) {
1077 return x ? "true" : "false";
1078 } else {
1079 return "";
1080 }
1081 }
1082
1083 void IndentEmptyLine() {
1084 if (emptyline_ && indent_ > 0) {
1085 for (int i{0}; i < indent_; ++i) {
1086 out_ << "| ";
1087 }
1088 emptyline_ = false;
1089 }
1090 }
1091
1092 void Prefix(const char *str) {
1093 IndentEmptyLine();
1094 out_ << str << " -> ";
1095 emptyline_ = false;
1096 }
1097
1098 void Prefix(const std::string &str) {
1099 IndentEmptyLine();
1100 out_ << str << " -> ";
1101 emptyline_ = false;
1102 }
1103
1104 void EndLine() {
1105 out_ << '\n';
1106 emptyline_ = true;
1107 }
1108
1109 void EndLineIfNonempty() {
1110 if (!emptyline_) {
1111 EndLine();
1112 }
1113 }
1114
1115private:
1116 int indent_{0};
1117 llvm::raw_ostream &out_;
1118 const AnalyzedObjectsAsFortran *const asFortran_;
1119 bool emptyline_{false};
1120};
1121
1122template <typename T>
1123llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1124 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1125 ParseTreeDumper dumper{out, asFortran};
1126 Walk(x, dumper);
1127 return out;
1128}
1129
1130} // namespace Fortran::parser
1131#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition enum-set.h:28
Definition indirection.h:31
Definition char-block.h:28
Definition dump-parse-tree.h:33
Definition bit-population-count.h:20
Definition check-expression.h:19
Definition format-specification.h:76
Definition format-specification.h:38
Definition parse-tree.h:1275
Definition parse-tree.h:1282
Definition parse-tree.h:1246
Definition parse-tree.h:1234
Definition parse-tree.h:5667
Definition parse-tree.h:5643
Definition parse-tree.h:5659
Definition parse-tree.h:5651
Definition parse-tree.h:5628
Definition parse-tree.h:5692
Definition parse-tree.h:5622
Definition parse-tree.h:5498
Definition parse-tree.h:5471
Definition parse-tree.h:5599
Definition parse-tree.h:5584
Definition parse-tree.h:5579
Definition parse-tree.h:5487
Definition parse-tree.h:5509
Definition parse-tree.h:5492
Definition parse-tree.h:5504
Definition parse-tree.h:5536
Definition parse-tree.h:5530
Definition parse-tree.h:5634
Definition parse-tree.h:5698
Definition parse-tree.h:5575
Definition parse-tree.h:5566
Definition parse-tree.h:5476
Definition parse-tree.h:5515
Definition parse-tree.h:5463
Definition parse-tree.h:5559
Definition parse-tree.h:5555
Definition parse-tree.h:5551
Definition parse-tree.h:5481
Definition parse-tree.h:5547
Definition parse-tree.h:5541
Definition parse-tree.h:5525
Definition parse-tree.h:895
Definition parse-tree.h:1404
Definition parse-tree.h:496
Definition parse-tree.h:3228
Definition parse-tree.h:3218
Definition parse-tree.h:1954
Definition parse-tree.h:1919
Definition parse-tree.h:1898
Definition parse-tree.h:1910
Definition parse-tree.h:1965
Definition parse-tree.h:1927
Definition parse-tree.h:3444
Definition parse-tree.h:1884
Definition parse-tree.h:1330
Definition parse-tree.h:3449
Definition parse-tree.h:3454
Definition parse-tree.h:1991
Definition parse-tree.h:2146
Definition parse-tree.h:2137
Definition parse-tree.h:2130
Definition parse-tree.h:1312
Definition parse-tree.h:1365
Definition parse-tree.h:3394
Definition parse-tree.h:1113
Definition parse-tree.h:1426
Definition parse-tree.h:1433
Definition parse-tree.h:2168
Definition parse-tree.h:3006
Definition parse-tree.h:2001
Definition parse-tree.h:3388
Definition parse-tree.h:5768
Definition parse-tree.h:5762
Definition parse-tree.h:3252
Definition parse-tree.h:3235
Definition parse-tree.h:2409
Definition parse-tree.h:2391
Definition parse-tree.h:2397
Definition parse-tree.h:2378
Definition parse-tree.h:2199
Definition parse-tree.h:2184
Definition parse-tree.h:670
Definition parse-tree.h:854
Definition parse-tree.h:686
Definition parse-tree.h:2668
Definition parse-tree.h:2176
Definition parse-tree.h:970
Definition parse-tree.h:1439
Definition parse-tree.h:1878
Definition parse-tree.h:1606
Definition parse-tree.h:1614
Definition parse-tree.h:3337
Definition parse-tree.h:840
Definition parse-tree.h:832
Definition parse-tree.h:981
Definition parse-tree.h:994
Definition parse-tree.h:1025
Definition parse-tree.h:1102
Definition parse-tree.h:1047
Definition parse-tree.h:1197
Definition parse-tree.h:2496
Definition parse-tree.h:2224
Definition parse-tree.h:2233
Definition parse-tree.h:2646
Definition parse-tree.h:2644
Definition parse-tree.h:303
Definition parse-tree.h:2215
Definition parse-tree.h:2206
Definition parse-tree.h:1055
Definition parse-tree.h:1496
Definition parse-tree.h:1508
Definition parse-tree.h:1794
Definition parse-tree.h:1467
Definition parse-tree.h:1516
Definition parse-tree.h:1482
Definition parse-tree.h:1522
Definition parse-tree.h:1488
Definition parse-tree.h:1985
Definition parse-tree.h:437
Definition parse-tree.h:764
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1182
Definition parse-tree.h:746
Definition parse-tree.h:912
Definition parse-tree.h:1833
Definition parse-tree.h:1533
Definition parse-tree.h:2311
Definition parse-tree.h:3136
Definition parse-tree.h:2331
Definition parse-tree.h:2193
Definition parse-tree.h:1380
Definition parse-tree.h:3306
Definition parse-tree.h:1226
Definition parse-tree.h:1212
Definition parse-tree.h:2550
Definition parse-tree.h:2556
Definition parse-tree.h:2564
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:964
Definition parse-tree.h:951
Definition parse-tree.h:1682
Definition parse-tree.h:1041
Definition parse-tree.h:2087
Definition parse-tree.h:2103
Definition parse-tree.h:2081
Definition parse-tree.h:2116
Definition parse-tree.h:2093
Definition parse-tree.h:2576
Definition parse-tree.h:2680
Definition parse-tree.h:3240
Definition parse-tree.h:3125
Definition parse-tree.h:3272
Definition parse-tree.h:3019
Definition parse-tree.h:3034
Definition tools.h:134
Definition tools.h:140
Definition parse-tree.h:2345
Definition parse-tree.h:2361
Definition parse-tree.h:2324
Definition parse-tree.h:1666
Definition parse-tree.h:1676
Definition parse-tree.h:419
Definition parse-tree.h:1590
Definition parse-tree.h:1599
Definition parse-tree.h:625
Definition parse-tree.h:1012
Definition parse-tree.h:2779
Definition parse-tree.h:2723
Definition parse-tree.h:2867
Definition parse-tree.h:2876
Definition parse-tree.h:2881
Definition parse-tree.h:2865
Definition parse-tree.h:2894
Definition parse-tree.h:790
Definition parse-tree.h:311
Definition parse-tree.h:1338
Definition parse-tree.h:1542
Definition parse-tree.h:3192
Definition parse-tree.h:3157
Definition parse-tree.h:3182
Definition parse-tree.h:3040
Definition parse-tree.h:475
Definition parse-tree.h:463
Definition parse-tree.h:704
Definition parse-tree.h:2706
Definition parse-tree.h:2704
Definition parse-tree.h:2615
Definition parse-tree.h:777
Definition parse-tree.h:658
Definition parse-tree.h:2288
Definition parse-tree.h:1291
Definition parse-tree.h:676
Definition parse-tree.h:1584
Definition parse-tree.h:886
Definition parse-tree.h:2256
Definition parse-tree.h:2590
Definition parse-tree.h:868
Definition parse-tree.h:319
Definition parse-tree.h:2276
Definition parse-tree.h:2915
Definition parse-tree.h:3410
Definition parse-tree.h:2048
Definition parse-tree.h:2939
Definition parse-tree.h:2929
Definition parse-tree.h:2950
Definition parse-tree.h:587
Definition parse-tree.h:1297
Definition parse-tree.h:638
Definition parse-tree.h:2294
Definition parse-tree.h:2518
Definition parse-tree.h:1413
Definition parse-tree.h:4275
Definition parse-tree.h:4279
Definition parse-tree.h:4294
Definition parse-tree.h:4301
Definition parse-tree.h:4309
Definition parse-tree.h:4324
Definition parse-tree.h:5266
Definition parse-tree.h:4331
Definition parse-tree.h:4340
Definition parse-tree.h:5060
Definition parse-tree.h:5403
Definition parse-tree.h:5131
Definition parse-tree.h:4363
Definition parse-tree.h:5070
Definition parse-tree.h:5029
Definition parse-tree.h:5013
Definition parse-tree.h:4378
Definition parse-tree.h:3579
Definition parse-tree.h:4386
Definition parse-tree.h:4403
Definition parse-tree.h:4421
Definition parse-tree.h:4480
Definition parse-tree.h:4478
Definition parse-tree.h:4502
Definition parse-tree.h:4510
Definition parse-tree.h:4520
Definition parse-tree.h:4530
Definition parse-tree.h:4538
Definition parse-tree.h:3480
Definition parse-tree.h:5036
Definition parse-tree.h:4493
Definition parse-tree.h:4460
Definition parse-tree.h:4553
Definition parse-tree.h:5065
Definition parse-tree.h:5407
Definition parse-tree.h:5136
Definition parse-tree.h:4564
Definition parse-tree.h:5098
Definition parse-tree.h:4572
Definition parse-tree.h:4585
Definition parse-tree.h:4596
Definition parse-tree.h:4606
Definition parse-tree.h:4614
Definition parse-tree.h:4619
Definition parse-tree.h:4627
Definition parse-tree.h:4643
Definition parse-tree.h:4666
Definition parse-tree.h:4632
Definition parse-tree.h:4656
Definition parse-tree.h:4673
Definition parse-tree.h:3591
Definition parse-tree.h:4433
Definition parse-tree.h:4451
Definition parse-tree.h:4442
Definition parse-tree.h:4682
Definition parse-tree.h:4697
Definition parse-tree.h:4708
Definition parse-tree.h:4733
Definition parse-tree.h:4745
Definition parse-tree.h:4754
Definition parse-tree.h:5083
Definition parse-tree.h:5092
Definition parse-tree.h:4778
Definition parse-tree.h:4790
Definition parse-tree.h:4802
Definition parse-tree.h:3525
Definition parse-tree.h:3516
Definition parse-tree.h:3513
Definition parse-tree.h:4813
Definition parse-tree.h:4826
Definition parse-tree.h:4838
Definition parse-tree.h:4849
Definition parse-tree.h:3569
Definition parse-tree.h:4859
Definition parse-tree.h:4868
Definition parse-tree.h:4880
Definition parse-tree.h:4891
Definition parse-tree.h:4898
Definition parse-tree.h:3529
Definition parse-tree.h:3551
Definition parse-tree.h:3538
Definition parse-tree.h:4907
Definition parse-tree.h:4918
Definition parse-tree.h:4927
Definition parse-tree.h:4942
Definition parse-tree.h:4952
Definition parse-tree.h:3505
Definition parse-tree.h:3498
Definition parse-tree.h:4961
Definition parse-tree.h:4986
Definition parse-tree.h:5008
Definition parse-tree.h:4997
Definition parse-tree.h:3050
Definition parse-tree.h:5674
Definition parse-tree.h:5681
Definition parse-tree.h:5610
Definition parse-tree.h:5703
Definition parse-tree.h:5742
Definition parse-tree.h:5731
Definition parse-tree.h:5722
Definition parse-tree.h:5604
Definition parse-tree.h:5616
Definition parse-tree.h:5292
Definition parse-tree.h:5125
Definition parse-tree.h:5297
Definition parse-tree.h:5334
Definition parse-tree.h:5438
Definition parse-tree.h:5282
Definition parse-tree.h:5113
Definition parse-tree.h:5345
Definition parse-tree.h:5359
Definition parse-tree.h:5375
Definition parse-tree.h:5221
Definition parse-tree.h:5383
Definition parse-tree.h:5456
Definition parse-tree.h:5412
Definition parse-tree.h:5227
Definition parse-tree.h:5145
Definition parse-tree.h:5151
Definition parse-tree.h:5394
Definition parse-tree.h:5233
Definition parse-tree.h:5102
Definition parse-tree.h:376
Definition parse-tree.h:2784
Definition parse-tree.h:2747
Definition parse-tree.h:2975
Definition parse-tree.h:2013
Definition parse-tree.h:1552
Definition parse-tree.h:1974
Definition parse-tree.h:2810
Definition parse-tree.h:3095
Definition parse-tree.h:2768
Definition parse-tree.h:925
Definition parse-tree.h:3073
Definition parse-tree.h:1066
Definition parse-tree.h:1094
Definition parse-tree.h:1873
Definition parse-tree.h:1086
Definition parse-tree.h:1080
Definition parse-tree.h:1073
Definition parse-tree.h:3083
Definition parse-tree.h:3207
Definition parse-tree.h:3175
Definition parse-tree.h:571
Definition parse-tree.h:2731
Definition parse-tree.h:809
Definition parse-tree.h:2245
Definition parse-tree.h:2961
Definition parse-tree.h:1565
Definition parse-tree.h:295
Definition parse-tree.h:1651
Definition parse-tree.h:2368
Definition parse-tree.h:2432
Definition parse-tree.h:2444
Definition parse-tree.h:2423
Definition parse-tree.h:2478
Definition parse-tree.h:2458
Definition parse-tree.h:2124
Definition parse-tree.h:3298
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1943
Definition parse-tree.h:359
Definition parse-tree.h:3316
Definition parse-tree.h:2510
Definition parse-tree.h:1863
Definition parse-tree.h:1203
Definition parse-tree.h:3431
Definition parse-tree.h:3403
Definition parse-tree.h:3426
Definition parse-tree.h:2981
Definition parse-tree.h:2992
Definition parse-tree.h:3144
Definition parse-tree.h:3282
Definition parse-tree.h:1642
Definition parse-tree.h:1825
Definition parse-tree.h:1633
Definition parse-tree.h:1811
Definition parse-tree.h:3114
Definition parse-tree.h:2528
Definition parse-tree.h:2541
Definition parse-tree.h:903
Definition parse-tree.h:1146
Definition parse-tree.h:1159
Definition parse-tree.h:1121
Definition parse-tree.h:1168
Definition parse-tree.h:1131
Definition parse-tree.h:1394
Definition parse-tree.h:2467
Definition parse-tree.h:931
Definition parse-tree.h:939
Definition parse-tree.h:740
Definition parse-tree.h:649
Definition parse-tree.h:753
Definition parse-tree.h:3419
Definition parse-tree.h:354
Definition parse-tree.h:2600
Definition parse-tree.h:796
Definition parse-tree.h:3059
Definition parse-tree.h:1841
Definition parse-tree.h:726
Definition parse-tree.h:731
Definition parse-tree.h:282
Definition parse-tree.h:2794
Definition parse-tree.h:2039
Definition parse-tree.h:2032
Definition parse-tree.h:2063
Definition parse-tree.h:2026
Definition parse-tree.h:2753
Definition parse-tree.h:3653
Definition parse-tree.h:3644
Definition parse-tree.h:3614
Definition parse-tree.h:3603
Definition parse-tree.h:3598
Definition parse-tree.h:3624
Definition parse-tree.h:3637
Definition parse-tree.h:3808
Definition parse-tree.h:3825
Definition parse-tree.h:3817
Definition parse-tree.h:3853
Definition parse-tree.h:3865
Definition parse-tree.h:3875
Definition parse-tree.h:3886
Definition parse-tree.h:3899
Definition parse-tree.h:3911
Definition parse-tree.h:3932
Definition parse-tree.h:3943
Definition parse-tree.h:3953
Definition parse-tree.h:3962
Definition parse-tree.h:3994
Definition parse-tree.h:4005
Definition parse-tree.h:4016
Definition parse-tree.h:4028
Definition parse-tree.h:4038
Definition parse-tree.h:4046
Definition parse-tree.h:4055
Definition parse-tree.h:4064
Definition parse-tree.h:4098
Definition parse-tree.h:4085
Definition parse-tree.h:4072
Definition parse-tree.h:4122
Definition parse-tree.h:4113
Definition parse-tree.h:4156
Definition parse-tree.h:4132
Definition parse-tree.h:4165
Definition parse-tree.h:4178
Definition parse-tree.h:4187
Definition parse-tree.h:4197
Definition parse-tree.h:4207
Definition parse-tree.h:4216
Definition parse-tree.h:4224
Definition parse-tree.h:4234
Definition parse-tree.h:4245
Definition parse-tree.h:4258
Definition parse-tree.h:3691
Definition parse-tree.h:3674
Definition parse-tree.h:3715
Definition parse-tree.h:3681
Definition parse-tree.h:3742
Definition parse-tree.h:3754
Definition parse-tree.h:3767
Definition parse-tree.h:3776