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, OmpDeviceType)
70 NODE_ENUM(common, OmpMemoryOrderType)
71 NODE_ENUM(common, OpenACCDeviceType)
72 NODE(format, ControlEditDesc)
73 NODE(format::ControlEditDesc, Kind)
74 NODE(format, DerivedTypeDataEditDesc)
75 NODE(format, FormatItem)
76 NODE(format, FormatSpecification)
77 NODE(format, IntrinsicTypeDataEditDesc)
79 NODE(parser, Abstract)
81 NODE(AccAtomicCapture, Stmt1)
82 NODE(AccAtomicCapture, Stmt2)
90 NODE(parser, AccClause)
91#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
92#include "llvm/Frontend/OpenACC/ACC.inc"
95 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
96 return llvm::Twine(
97 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
98 .str();
99 }
100 NODE(parser, AccClauseList)
103 NODE_ENUM(parser::AccDataModifier, Modifier)
105 NODE(parser, AccEndAtomic)
109 NODE(parser, AccGangArg)
110 NODE(AccGangArg, Num)
111 NODE(AccGangArg, Dim)
112 NODE(AccGangArg, Static)
114 NODE(parser, AccObject)
115 NODE(parser, AccObjectList)
118 NODE(parser, AccSizeExpr)
120 NODE(parser, AccSelfClause)
123
125 NODE(parser, AccTileExpr)
128 NODE(parser, AccEndLoop)
130 static std::string GetNodeName(const llvm::acc::Directive &x) {
131 return llvm::Twine(
132 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
133 .str();
134 }
135 NODE(parser, AcImpliedDo)
137 NODE(parser, AcValue)
138 NODE(parser, AccessStmt)
139 NODE(parser, AccessId)
140 NODE(parser, AccessSpec)
141 NODE_ENUM(AccessSpec, Kind)
142 NODE(parser, AcSpec)
143 NODE(parser, ActionStmt)
144 NODE(parser, ActualArg)
145 NODE(ActualArg, PercentRef)
146 NODE(ActualArg, PercentVal)
147 NODE(parser, ActualArgSpec)
148 NODE(AcValue, Triplet)
149 NODE(parser, AllocOpt)
150 NODE(AllocOpt, Mold)
151 NODE(AllocOpt, Source)
152 NODE(AllocOpt, Stream)
153 NODE(AllocOpt, Pinned)
154 NODE(parser, Allocatable)
155 NODE(parser, AllocatableStmt)
159 NODE(parser, AllocateStmt)
160 NODE(parser, Allocation)
161 NODE(parser, AltReturnSpec)
163 NODE(parser, ArrayConstructor)
164 NODE(parser, ArrayElement)
165 NODE(parser, ArraySpec)
166 NODE(parser, AssignStmt)
170 NODE(parser, AssociateStmt)
171 NODE(parser, Association)
172 NODE(parser, AssumedImpliedSpec)
173 NODE(parser, AssumedRankSpec)
174 NODE(parser, AssumedShapeSpec)
175 NODE(parser, AssumedShapeBoundsSpec)
177 NODE(parser, Asynchronous)
178 NODE(parser, AsynchronousStmt)
179 NODE(parser, AttrSpec)
180 NODE(parser, BOZLiteralConstant)
181 NODE(parser, BackspaceStmt)
182 NODE(parser, BasedPointer)
183 NODE(parser, BasedPointerStmt)
184 NODE(parser, BindAttr)
185 NODE(BindAttr, Deferred)
186 NODE(BindAttr, Non_Overridable)
187 NODE(parser, BindEntity)
188 NODE_ENUM(BindEntity, Kind)
189 NODE(parser, BindStmt)
190 NODE(parser, Block)
192 NODE(parser, BlockData)
193 NODE(parser, BlockDataStmt)
194 NODE(parser, BlockSpecificationPart)
195 NODE(parser, BlockStmt)
197 NODE(parser, BoundsSpec)
198 NODE(parser, Call)
199 NODE(parser, CallStmt)
200 NODE(CallStmt, Chevrons)
201 NODE(CallStmt, StarOrExpr)
202 NODE(parser, CaseConstruct)
203 NODE(CaseConstruct, Case)
204 NODE(parser, CaseSelector)
205 NODE(parser, CaseStmt)
207 NODE(CaseValueRange, Range)
210 NODE(parser, CharLength)
213 NODE(parser, CharSelector)
214 NODE(CharSelector, LengthAndKind)
215 NODE(parser, CloseStmt)
216 NODE(CloseStmt, CloseSpec)
218 NODE(parser, CoarraySpec)
220 NODE(parser, CodimensionStmt)
223 NODE(parser, CommonStmt)
224 NODE(CommonStmt, Block)
226 NODE(CompilerDirective, AssumeAligned)
227 NODE(CompilerDirective, IgnoreTKR)
228 NODE(CompilerDirective, Inline)
229 NODE(CompilerDirective, IVDep)
230 NODE(CompilerDirective, ForceInline)
231 NODE(CompilerDirective, LoopCount)
232 NODE(CompilerDirective, NameValue)
233 NODE(CompilerDirective, NoInline)
234 NODE(CompilerDirective, Unrecognized)
235 NODE(CompilerDirective, VectorAlways)
236 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
237 NODE(CompilerDirective, VectorLength)
238 NODE(CompilerDirective, Unroll)
239 NODE(CompilerDirective, UnrollAndJam)
240 NODE(CompilerDirective, NoVector)
241 NODE(CompilerDirective, NoUnroll)
242 NODE(CompilerDirective, NoUnrollAndJam)
243 NODE(CompilerDirective, Prefetch)
244 NODE(CompilerDirective, InlineAlways)
245 NODE(CompilerDirective, Simd)
247 NODE(parser, ComplexPart)
250 NODE(parser, ComponentDataSource)
251 NODE(parser, ComponentDecl)
252 NODE(parser, FillDecl)
255 NODE(parser, ComponentSpec)
261 NODE(ConditionalArg, Consequent)
263 NODE(parser, ConditionalArgNil)
264 NODE(parser, ConnectSpec)
265 NODE(ConnectSpec, CharExpr)
266 NODE_ENUM(ConnectSpec::CharExpr, Kind)
267 NODE(ConnectSpec, Newunit)
268 NODE(ConnectSpec, Recl)
269 NODE(parser, ContainsStmt)
270 NODE(parser, Contiguous)
271 NODE(parser, ContiguousStmt)
272 NODE(parser, ContinueStmt)
274 NODE(parser, CriticalStmt)
277 NODE(CUFKernelDoConstruct, StarOrExpr)
278 NODE(CUFKernelDoConstruct, Directive)
279 NODE(CUFKernelDoConstruct, LaunchConfiguration)
280 NODE(parser, CUFReduction)
281 NODE(parser, CycleStmt)
283 NODE(parser, DataIDoObject)
284 NODE(parser, DataImpliedDo)
285 NODE(parser, DataRef)
286 NODE(parser, DataStmt)
290 NODE(parser, DataStmtSet)
291 NODE(parser, DataStmtValue)
295 NODE(DeclarationTypeSpec, Class)
296 NODE(DeclarationTypeSpec, ClassOf)
297 NODE(DeclarationTypeSpec, ClassStar)
298 NODE(DeclarationTypeSpec, Record)
299 NODE(DeclarationTypeSpec, Type)
300 NODE(DeclarationTypeSpec, TypeOf)
301 NODE(DeclarationTypeSpec, TypeStar)
302 NODE(parser, Default)
303 NODE(parser, DeferredCoshapeSpecList)
304 NODE(parser, DeferredShapeSpecList)
305 NODE(parser, DefinedOpName)
307 NODE_ENUM(DefinedOperator, IntrinsicOperator)
311 NODE(parser, Designator)
312 NODE(parser, DimensionStmt)
313 NODE(DimensionStmt, Declaration)
314 NODE(parser, DoConstruct)
315 NODE(parser, DummyArg)
316 NODE(parser, ElseIfStmt)
317 NODE(parser, ElseStmt)
318 NODE(parser, ElsewhereStmt)
319 NODE(parser, EndAssociateStmt)
320 NODE(parser, EndBlockDataStmt)
321 NODE(parser, EndBlockStmt)
323 NODE(parser, EndCriticalStmt)
324 NODE(parser, EndDoStmt)
325 NODE(parser, EndEnumerationTypeStmt)
326 NODE(parser, EndEnumStmt)
327 NODE(parser, EndForallStmt)
328 NODE(parser, EndFunctionStmt)
329 NODE(parser, EndIfStmt)
330 NODE(parser, EndInterfaceStmt)
331 NODE(parser, EndLabel)
332 NODE(parser, EndModuleStmt)
333 NODE(parser, EndMpSubprogramStmt)
334 NODE(parser, EndProgramStmt)
335 NODE(parser, EndSelectStmt)
336 NODE(parser, EndSubmoduleStmt)
337 NODE(parser, EndSubroutineStmt)
338 NODE(parser, EndTypeStmt)
339 NODE(parser, EndWhereStmt)
340 NODE(parser, EndfileStmt)
341 NODE(parser, EntityDecl)
342 NODE(parser, EntryStmt)
343 NODE(parser, EnumDef)
344 NODE(parser, EnumDefStmt)
345 NODE(parser, Enumerator)
346 NODE(parser, EnumeratorDefStmt)
347 NODE(parser, EnumerationEnumeratorStmt)
350 NODE(parser, EorLabel)
351 NODE(parser, EquivalenceObject)
352 NODE(parser, EquivalenceStmt)
353 NODE(parser, ErrLabel)
354 NODE(parser, ErrorRecovery)
355 NODE(parser, EventPostStmt)
356 NODE(parser, EventWaitSpec)
357 NODE(parser, EventWaitStmt)
359 NODE(parser, ExecutionPart)
361 NODE(parser, ExitStmt)
365 NODE(parser, Expr)
366 NODE(Expr, Parentheses)
367 NODE(Expr, UnaryPlus)
368 NODE(Expr, Negate)
369 NODE(Expr, NOT)
370 NODE(Expr, PercentLoc)
371 NODE(Expr, DefinedUnary)
372 NODE(Expr, Power)
373 NODE(Expr, Multiply)
374 NODE(Expr, Divide)
375 NODE(Expr, Add)
376 NODE(Expr, Subtract)
377 NODE(Expr, Concat)
378 NODE(Expr, LT)
379 NODE(Expr, LE)
380 NODE(Expr, EQ)
381 NODE(Expr, NE)
382 NODE(Expr, GE)
383 NODE(Expr, GT)
384 NODE(Expr, AND)
385 NODE(Expr, OR)
386 NODE(Expr, EQV)
387 NODE(Expr, NEQV)
388 NODE(Expr, DefinedBinary)
389 NODE(Expr, ComplexConstructor)
390 NODE(parser, External)
391 NODE(parser, ExternalStmt)
392 NODE(parser, FailImageStmt)
393 NODE(parser, FileUnitNumber)
394 NODE(parser, FinalProcedureStmt)
395 NODE(parser, FlushStmt)
400 NODE(parser, ForallStmt)
401 NODE(parser, FormTeamStmt)
402 NODE(FormTeamStmt, FormTeamSpec)
403 NODE(parser, Format)
404 NODE(parser, FormatStmt)
406 NODE(parser, FunctionStmt)
408 NODE(parser, GenericSpec)
409 NODE(GenericSpec, Assignment)
410 NODE(GenericSpec, ReadFormatted)
411 NODE(GenericSpec, ReadUnformatted)
412 NODE(GenericSpec, WriteFormatted)
413 NODE(GenericSpec, WriteUnformatted)
414 NODE(parser, GenericStmt)
415 NODE(parser, GotoStmt)
417 NODE(parser, IdExpr)
418 NODE(parser, IdVariable)
419 NODE(parser, IfConstruct)
420 NODE(IfConstruct, ElseBlock)
421 NODE(IfConstruct, ElseIfBlock)
422 NODE(parser, IfStmt)
423 NODE(parser, IfThenStmt)
424 NODE(parser, TeamValue)
425 NODE(parser, ImageSelector)
427 NODE(ImageSelectorSpec, Notify)
428 NODE(ImageSelectorSpec, Stat)
429 NODE(ImageSelectorSpec, Team_Number)
430 NODE(parser, ImplicitPart)
432 NODE(parser, ImplicitSpec)
433 NODE(parser, ImplicitStmt)
434 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
435 NODE(parser, ImpliedShapeSpec)
436 NODE(parser, ImportStmt)
439 NODE(parser, InputItem)
440 NODE(parser, InquireSpec)
441 NODE(InquireSpec, CharVar)
442 NODE_ENUM(InquireSpec::CharVar, Kind)
443 NODE(InquireSpec, IntVar)
444 NODE_ENUM(InquireSpec::IntVar, Kind)
445 NODE(InquireSpec, LogVar)
446 NODE_ENUM(InquireSpec::LogVar, Kind)
447 NODE(parser, InquireStmt)
448 NODE(InquireStmt, Iolength)
449 NODE(parser, IntegerTypeSpec)
450 NODE(parser, IntentSpec)
451 NODE_ENUM(IntentSpec, Intent)
452 NODE(parser, IntentStmt)
454 NODE(parser, InterfaceBody)
455 NODE(InterfaceBody, Function)
456 NODE(InterfaceBody, Subroutine)
458 NODE(parser, InterfaceStmt)
461 NODE(parser, Intrinsic)
462 NODE(parser, IntrinsicStmt)
464 NODE(IntrinsicTypeSpec, Character)
465 NODE(IntrinsicTypeSpec, Complex)
466 NODE(IntrinsicTypeSpec, DoubleComplex)
467 NODE(IntrinsicTypeSpec, DoublePrecision)
469 NODE(IntrinsicTypeSpec, Real)
470 NODE(parser, IoControlSpec)
471 NODE(IoControlSpec, Asynchronous)
472 NODE(IoControlSpec, CharExpr)
473 NODE_ENUM(IoControlSpec::CharExpr, Kind)
474 NODE(IoControlSpec, Pos)
475 NODE(IoControlSpec, Rec)
476 NODE(IoControlSpec, Size)
477 NODE(parser, IoUnit)
478 NODE(parser, Keyword)
479 NODE(parser, KindParam)
480 NODE(parser, KindSelector)
481 NODE(KindSelector, StarSize)
482 NODE(parser, LabelDoStmt)
485 NODE(parser, LetterSpec)
489 NODE_ENUM(parser::ReductionOperator, Operator)
490 NODE(parser, LocalitySpec)
491 NODE(LocalitySpec, DefaultNone)
492 NODE(LocalitySpec, Local)
493 NODE(LocalitySpec, LocalInit)
494 NODE(LocalitySpec, Reduce)
495 NODE(LocalitySpec, Shared)
496 NODE(parser, LockStmt)
497 NODE(LockStmt, LockStat)
499 NODE_NAME(LoopControl::Bounds, "LoopBounds")
500 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
501 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
502 NODE(parser, LoopControl)
503 NODE(LoopControl, Concurrent)
504 NODE(parser, MainProgram)
505 NODE(parser, Map)
506 NODE(Map, EndMapStmt)
507 NODE(Map, MapStmt)
509 NODE(parser, Module)
510 NODE(parser, ModuleStmt)
513 NODE(parser, MpSubprogramStmt)
514 NODE(parser, MsgVariable)
515 NODE(parser, Name)
516 NODE(parser, NamedConstant)
518 NODE(parser, NamelistStmt)
519 NODE(NamelistStmt, Group)
521 NODE(parser, NoPass)
523 NODE(parser, NullifyStmt)
524 NODE(parser, NullInit)
525 NODE(parser, ObjectDecl)
526 NODE(parser, OldParameterStmt)
527
528 static std::string GetNodeName(const llvm::omp::Directive &x) {
529 return llvm::Twine("llvm::omp::Directive = ",
530 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
531 .str();
532 }
533 static std::string GetNodeName(const llvm::omp::Clause &x) {
534 return llvm::Twine(
535 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
536 .str();
537 }
540 NODE_ENUM(OmpAccessGroup, Value)
542 NODE(OmpAdjustArgsClause, Modifier)
543 NODE(parser, OmpAdjustOp)
544 NODE_ENUM(OmpAdjustOp, Value)
546 NODE(OmpAffinityClause, Modifier)
549 NODE(OmpAlignedClause, Modifier)
550 NODE(parser, OmpAlignment)
553 NODE(OmpAllocateClause, Modifier)
558 NODE_ENUM(OmpAlwaysModifier, Value)
560 NODE(OmpAppendArgsClause, OmpAppendOp)
562
563 static std::string GetNodeName(const llvm::omp::LoopModifier &x) {
564 return llvm::Twine(
565 "llvm::omp::LoopModifier = ", llvm::omp::getLoopModifierName(x))
566 .str();
567 }
569 NODE(OmpApplyClause, Modifier)
570 NODE(parser, OmpArgument)
574 NODE(parser, OmpAtClause)
575 NODE_ENUM(OmpAtClause, ActionTime)
578 NODE_ENUM(OmpAttachModifier, Value)
580 NODE_ENUM(OmpAutomapModifier, Value)
584 NODE(parser, OmpBindClause)
585 NODE_ENUM(OmpBindClause, Binding)
589 NODE_ENUM(OmpChunkModifier, Value)
590 NODE(parser, OmpClause)
591 NODE(parser, OmpClauseList)
593 NODE_ENUM(OmpCloseModifier, Value)
604 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
607 NODE(OmpDefaultmapClause, Modifier)
608 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
610 NODE_ENUM(OmpDeleteModifier, Value)
613 NODE(OmpDependClause, TaskDep)
614 NODE(OmpDependClause::TaskDep, Modifier)
616 NODE_ENUM(OmpDependenceType, Value)
621 NODE(OmpDeviceClause, Modifier)
623 NODE_ENUM(OmpDeviceModifier, Value)
629 NODE_ENUM(OmpDirectiveSpecification, Flag)
630 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
631 NODE(parser, OmpDoacross)
632 NODE(OmpDoacross, Modifier)
636 NODE(OmpDynGroupprivateClause, Modifier)
640 NODE(OmpEnterClause, Modifier)
643 NODE_ENUM(OmpExpectation, Value)
644 NODE(parser, OmpFailClause)
646 NODE_ENUM(OmpFallbackModifier, Value)
647 NODE(parser, OmpFromClause)
648 NODE(OmpFromClause, Modifier)
650 NODE(OmpGrainsizeClause, Modifier)
654 NODE(parser, OmpHintClause)
656 NODE(parser, OmpIfClause)
657 NODE(OmpIfClause, Modifier)
659 NODE(parser, OmpInitClause)
660 NODE(OmpInitClause, Modifier)
664 NODE(OmpInReductionClause, Modifier)
666 NODE_ENUM(OmpInteropType, Value)
667 NODE(parser, OmpIteration)
670 NODE(parser, OmpIterator)
673 NODE(OmpLastprivateClause, Modifier)
675 NODE_ENUM(OmpLastprivateModifier, Value)
677 NODE(OmpLinearClause, Modifier)
679 NODE_ENUM(OmpLinearModifier, Value)
680 NODE(parser, OmpLinearStep)
681 NODE(parser, OmpLocator)
683 NODE(parser, OmpLowerBound)
684 NODE(parser, OmpMapClause)
685 NODE(OmpMapClause, Modifier)
686 NODE(parser, OmpMapper)
688 NODE(parser, OmpMapType)
689 NODE_ENUM(OmpMapType, Value)
691 NODE_ENUM(OmpMapTypeModifier, Value)
693 NODE(parser, OmpMemSpace)
697 NODE_ENUM(OmpMotionModifier, Value)
698 NODE(parser, OmpNoOpenMPClause)
699 NODE(parser, OmpNoOpenMPRoutinesClause)
700 NODE(parser, OmpNoParallelismClause)
704 NODE(OmpNumTeamsClause, Modifier)
706 NODE(OmpNumThreadsClause, Modifier)
707 NODE(OmpNumTasksClause, Modifier)
708 NODE(parser, OmpObject)
709 NODE(OmpObject, Invalid)
710 NODE_ENUM(OmpObject::Invalid, Kind)
711 NODE(parser, OmpObjectList)
713 NODE(OmpOrderClause, Modifier)
714 NODE_ENUM(OmpOrderClause, Ordering)
716 NODE_ENUM(OmpOrderingModifier, Value)
718 NODE_ENUM(OmpOrderModifier, Value)
722 NODE(parser, OmpPreferType)
724 NODE_ENUM(OmpPrescriptiveness, Value)
726 NODE_ENUM(OmpPresentModifier, Value)
728 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
730 NODE(OmpReductionClause, Modifier)
733 NODE_ENUM(OmpReductionModifier, Value)
736 NODE_ENUM(OmpRefModifier, Value)
742 NODE(OmpScheduleClause, Modifier)
743 NODE_ENUM(OmpScheduleClause, Kind)
747 NODE_ENUM(OmpSelfModifier, Value)
749 NODE_ENUM(OmpSeverityClause, SevLevel)
755 NODE(OmpStylizedInstance, Instance)
758 NODE(OmpTaskReductionClause, Modifier)
760 NODE(OmpThreadLimitClause, Modifier)
763 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
764 NODE(parser, OmpToClause)
765 NODE(OmpToClause, Modifier)
769 NODE(OmpTraitPropertyExtension, Complex)
771 NODE(parser, OmpTraitScore)
773 NODE(OmpTraitSelector, Properties)
775 NODE_ENUM(OmpTraitSelectorName, Value)
778 NODE_ENUM(OmpTraitSetSelectorName, Value)
780 NODE(parser, OmpTypeName)
785 NODE(parser, OmpUseClause)
787 NODE(OmpUsesAllocatorsClause, AllocatorSpec)
791 NODE_ENUM(OmpVariableCategory, Value)
792 NODE(parser, OmpWhenClause)
793 NODE(OmpWhenClause, Modifier)
795 NODE_ENUM(OmpxHoldModifier, Value)
796#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
797#include "llvm/Frontend/OpenMP/OMP.inc"
798
799 NODE(parser, Only)
813
830
831 NODE(parser, OpenStmt)
832 NODE(parser, Optional)
833 NODE(parser, OptionalStmt)
836 NODE(parser, OutputItem)
837 NODE(parser, Parameter)
838 NODE(parser, ParameterStmt)
840 NODE(parser, Pass)
841 NODE(parser, PauseStmt)
842 NODE(parser, Pointer)
844 NODE(PointerAssignmentStmt, Bounds)
845 NODE(parser, PointerDecl)
846 NODE(parser, PointerObject)
847 NODE(parser, PointerStmt)
849 NODE(parser, PrefixSpec)
850 NODE(PrefixSpec, Elemental)
851 NODE(PrefixSpec, Impure)
852 NODE(PrefixSpec, Module)
853 NODE(PrefixSpec, Non_Recursive)
854 NODE(PrefixSpec, Pure)
855 NODE(PrefixSpec, Recursive)
856 NODE(PrefixSpec, Simple)
857 NODE(PrefixSpec, Attributes)
858 NODE(PrefixSpec, Launch_Bounds)
859 NODE(PrefixSpec, Cluster_Dims)
860 NODE(parser, PrintStmt)
861 NODE(parser, PrivateStmt)
863 NODE(parser, ProcAttrSpec)
867 NODE(parser, ProcDecl)
868 NODE(parser, ProcInterface)
872 NODE(parser, ProcedureStmt)
873 NODE_ENUM(ProcedureStmt, Kind)
874 NODE(parser, Program)
875 NODE(parser, ProgramStmt)
876 NODE(parser, ProgramUnit)
877 NODE(parser, Protected)
878 NODE(parser, ProtectedStmt)
879 NODE(parser, RankClause)
880 NODE(parser, ReadStmt)
882 NODE(RealLiteralConstant, Real)
883 NODE(parser, Rename)
884 NODE(Rename, Names)
885 NODE(Rename, Operators)
886 NODE(parser, ReturnStmt)
887 NODE(parser, RewindStmt)
888 NODE(parser, Save)
889 NODE(parser, SaveStmt)
890 NODE(parser, SavedEntity)
891 NODE_ENUM(SavedEntity, Kind)
895 NODE(SelectRankCaseStmt, Rank)
897 NODE(SelectRankConstruct, RankCase)
900 NODE(SelectTypeConstruct, TypeCase)
902 NODE(parser, Selector)
904 NODE(parser, SequenceStmt)
905 NODE(parser, Sign)
910 NODE(parser, SpecificationExpr)
912 NODE(parser, Star)
913 NODE(parser, StatOrErrmsg)
914 NODE(parser, StatVariable)
915 NODE(parser, StatusExpr)
917 NODE(parser, StopCode)
918 NODE(parser, StopStmt)
919 NODE_ENUM(StopStmt, Kind)
922 NODE(parser, StructureDef)
923 NODE(StructureDef, EndStructureStmt)
925 NODE(parser, StructureStmt)
926 NODE(parser, Submodule)
927 NODE(parser, SubmoduleStmt)
931 NODE(parser, Substring)
934 NODE(parser, Suffix)
935 NODE(parser, SyncAllStmt)
937 NODE(SyncImagesStmt, ImageSet)
938 NODE(parser, SyncMemoryStmt)
939 NODE(parser, SyncTeamStmt)
940 NODE(parser, Target)
941 NODE(parser, TargetStmt)
942 NODE(parser, TypeAttrSpec)
943 NODE(TypeAttrSpec, BindC)
944 NODE(TypeAttrSpec, Extends)
950 NODE(TypeBoundProcedureStmt, WithInterface)
951 NODE(TypeBoundProcedureStmt, WithoutInterface)
953 NODE(parser, TypeGuardStmt)
954 NODE(TypeGuardStmt, Guard)
955 NODE(parser, TypeParamDecl)
957 NODE(common, TypeParamAttr)
958 NODE(parser, TypeParamSpec)
960 NODE(TypeParamValue, Deferred)
961 NODE(parser, TypeSpec)
962 NODE(parser, Union)
963 NODE(Union, EndUnionStmt)
964 NODE(Union, UnionStmt)
965 NODE(parser, UnlockStmt)
967 NODE(parser, UnsignedTypeSpec)
968 NODE(parser, UseStmt)
969 NODE_ENUM(UseStmt, ModuleNature)
970 NODE(parser, Value)
971 NODE(parser, ValueStmt)
972 NODE(parser, Variable)
974 NODE(VectorTypeSpec, PairVectorTypeSpec)
975 NODE(VectorTypeSpec, QuadVectorTypeSpec)
976 NODE(parser, IntrinsicVectorTypeSpec)
978 NODE(parser, Verbatim)
979 NODE(parser, Volatile)
980 NODE(parser, VolatileStmt)
981 NODE(parser, WaitSpec)
982 NODE(parser, WaitStmt)
985 NODE(WhereConstruct, Elsewhere)
986 NODE(WhereConstruct, MaskedElsewhere)
988 NODE(parser, WhereStmt)
989 NODE(parser, WriteStmt)
990#undef NODE
991#undef NODE_NAME
992
993 template <typename T> bool Pre(const T &x) {
994 std::string fortran{AsFortran<T>(x)};
995 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
996 Prefix(GetNodeName(x));
997 } else {
998 IndentEmptyLine();
999 out_ << GetNodeName(x);
1000 if (!fortran.empty()) {
1001 out_ << " = '" << fortran << '\'';
1002 }
1003 EndLine();
1004 ++indent_;
1005 }
1006 return true;
1007 }
1008
1009 template <typename T> void Post(const T &x) {
1010 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
1011 EndLineIfNonempty();
1012 } else {
1013 --indent_;
1014 }
1015 }
1016
1017 // A few types we want to ignore
1018
1019 bool Pre(const CharBlock &) { return true; }
1020 void Post(const CharBlock &) {}
1021
1022 template <typename T> bool Pre(const Statement<T> &) { return true; }
1023 template <typename T> void Post(const Statement<T> &) {}
1024 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
1025 template <typename T> void Post(const UnlabeledStatement<T> &) {}
1026
1027 template <typename T> bool Pre(const common::Indirection<T> &) {
1028 return true;
1029 }
1030 template <typename T> void Post(const common::Indirection<T> &) {}
1031
1032 template <typename A> bool Pre(const Scalar<A> &) {
1033 Prefix("Scalar");
1034 return true;
1035 }
1036 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1037
1038 template <typename A> bool Pre(const Constant<A> &) {
1039 Prefix("Constant");
1040 return true;
1041 }
1042 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1043
1044 template <typename A> bool Pre(const Integer<A> &) {
1045 Prefix("Integer");
1046 return true;
1047 }
1048 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1049
1050 template <typename A> bool Pre(const Logical<A> &) {
1051 Prefix("Logical");
1052 return true;
1053 }
1054 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1055
1056 template <typename A> bool Pre(const DefaultChar<A> &) {
1057 Prefix("DefaultChar");
1058 return true;
1059 }
1060 template <typename A> void Post(const DefaultChar<A> &) {
1061 EndLineIfNonempty();
1062 }
1063
1064 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1065 template <typename... A> void Post(const std::tuple<A...> &) {}
1066
1067 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1068 template <typename... A> void Post(const std::variant<A...> &) {}
1069
1070protected:
1071 // Return a Fortran representation of this node to include in the dump
1072 template <typename T> std::string AsFortran(const T &x) {
1073 std::string buf;
1074 llvm::raw_string_ostream ss{buf};
1075 if constexpr (HasTypedExpr<T>::value) {
1076 if (asFortran_ && x.typedExpr) {
1077 asFortran_->expr(ss, *x.typedExpr);
1078 }
1079 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1080 std::is_same_v<T, PointerAssignmentStmt>) {
1081 if (asFortran_ && x.typedAssignment) {
1082 asFortran_->assignment(ss, *x.typedAssignment);
1083 }
1084 } else if constexpr (std::is_same_v<T, CallStmt>) {
1085 if (asFortran_ && x.typedCall) {
1086 asFortran_->call(ss, *x.typedCall);
1087 }
1088 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1089 std::is_same_v<T, SignedIntLiteralConstant> ||
1090 std::is_same_v<T, UnsignedLiteralConstant>) {
1091 ss << std::get<CharBlock>(x.t);
1092 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1093 ss << x.source;
1094 } else if constexpr (std::is_same_v<T, std::string> ||
1095 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1096 ss << x;
1097 }
1098 if (ss.tell()) {
1099 return buf;
1100 }
1101 if constexpr (std::is_same_v<T, Name>) {
1102 return x.source.ToString();
1103#ifdef SHOW_ALL_SOURCE_MEMBERS
1104 } else if constexpr (HasSource<T>::value) {
1105 return x.source.ToString();
1106#endif
1107 } else if constexpr (std::is_same_v<T, int>) {
1108 return std::to_string(x);
1109 } else if constexpr (std::is_same_v<T, bool>) {
1110 return x ? "true" : "false";
1111 } else {
1112 return "";
1113 }
1114 }
1115
1116 void IndentEmptyLine() {
1117 if (emptyline_ && indent_ > 0) {
1118 for (int i{0}; i < indent_; ++i) {
1119 out_ << "| ";
1120 }
1121 emptyline_ = false;
1122 }
1123 }
1124
1125 void Prefix(const char *str) {
1126 IndentEmptyLine();
1127 out_ << str << " -> ";
1128 emptyline_ = false;
1129 }
1130
1131 void Prefix(const std::string &str) {
1132 IndentEmptyLine();
1133 out_ << str << " -> ";
1134 emptyline_ = false;
1135 }
1136
1137 void EndLine() {
1138 out_ << '\n';
1139 emptyline_ = true;
1140 }
1141
1142 void EndLineIfNonempty() {
1143 if (!emptyline_) {
1144 EndLine();
1145 }
1146 }
1147
1148private:
1149 int indent_{0};
1150 llvm::raw_ostream &out_;
1151 const AnalyzedObjectsAsFortran *const asFortran_;
1152 bool emptyline_{false};
1153};
1154
1155template <typename T>
1156llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1157 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1158 ParseTreeDumper dumper{out, asFortran};
1159 Walk(x, dumper);
1160 return out;
1161}
1162
1163} // namespace Fortran::parser
1164#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition enum-set.h:28
Definition indirection.h:31
Definition char-block.h:26
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:1310
Definition parse-tree.h:1317
Definition parse-tree.h:1281
Definition parse-tree.h:1269
Definition parse-tree.h:5909
Definition parse-tree.h:5885
Definition parse-tree.h:5901
Definition parse-tree.h:5893
Definition parse-tree.h:5870
Definition parse-tree.h:5934
Definition parse-tree.h:5864
Definition parse-tree.h:5740
Definition parse-tree.h:5713
Definition parse-tree.h:5841
Definition parse-tree.h:5826
Definition parse-tree.h:5821
Definition parse-tree.h:5729
Definition parse-tree.h:5751
Definition parse-tree.h:5734
Definition parse-tree.h:5746
Definition parse-tree.h:5778
Definition parse-tree.h:5772
Definition parse-tree.h:5876
Definition parse-tree.h:5940
Definition parse-tree.h:5817
Definition parse-tree.h:5808
Definition parse-tree.h:5718
Definition parse-tree.h:5757
Definition parse-tree.h:5705
Definition parse-tree.h:5801
Definition parse-tree.h:5797
Definition parse-tree.h:5793
Definition parse-tree.h:5723
Definition parse-tree.h:5789
Definition parse-tree.h:5783
Definition parse-tree.h:5767
Definition parse-tree.h:903
Definition parse-tree.h:1449
Definition parse-tree.h:501
Definition parse-tree.h:3322
Definition parse-tree.h:3311
Definition parse-tree.h:2011
Definition parse-tree.h:1976
Definition parse-tree.h:1955
Definition parse-tree.h:1967
Definition parse-tree.h:2022
Definition parse-tree.h:1984
Definition parse-tree.h:3544
Definition parse-tree.h:1941
Definition parse-tree.h:1374
Definition parse-tree.h:3549
Definition parse-tree.h:3554
Definition parse-tree.h:2048
Definition parse-tree.h:2203
Definition parse-tree.h:2194
Definition parse-tree.h:2187
Definition parse-tree.h:1347
Definition parse-tree.h:1410
Definition parse-tree.h:3494
Definition parse-tree.h:1121
Definition parse-tree.h:1471
Definition parse-tree.h:1478
Definition parse-tree.h:2225
Definition parse-tree.h:3064
Definition parse-tree.h:2058
Definition parse-tree.h:3488
Definition parse-tree.h:6010
Definition parse-tree.h:6004
Definition parse-tree.h:3346
Definition parse-tree.h:3329
Definition parse-tree.h:2466
Definition parse-tree.h:2448
Definition parse-tree.h:2454
Definition parse-tree.h:2435
Definition parse-tree.h:2256
Definition parse-tree.h:2241
Definition parse-tree.h:675
Definition parse-tree.h:862
Definition parse-tree.h:691
Definition parse-tree.h:2725
Definition parse-tree.h:2233
Definition parse-tree.h:978
Definition parse-tree.h:1484
Definition parse-tree.h:1935
Definition parse-tree.h:1651
Definition parse-tree.h:1659
Definition parse-tree.h:3433
Definition parse-tree.h:848
Definition parse-tree.h:840
Definition parse-tree.h:989
Definition parse-tree.h:1002
Definition parse-tree.h:1033
Definition parse-tree.h:1110
Definition parse-tree.h:1055
Definition parse-tree.h:1205
Definition parse-tree.h:2553
Definition parse-tree.h:2281
Definition parse-tree.h:2290
Definition parse-tree.h:3303
Definition parse-tree.h:3290
Definition parse-tree.h:1730
Definition parse-tree.h:2703
Definition parse-tree.h:2701
Definition parse-tree.h:306
Definition parse-tree.h:2272
Definition parse-tree.h:2263
Definition parse-tree.h:1063
Definition parse-tree.h:1541
Definition parse-tree.h:1553
Definition parse-tree.h:1851
Definition parse-tree.h:1512
Definition parse-tree.h:1561
Definition parse-tree.h:1527
Definition parse-tree.h:1567
Definition parse-tree.h:1533
Definition parse-tree.h:2042
Definition parse-tree.h:442
Definition parse-tree.h:770
Definition parse-tree.h:330
Definition parse-tree.h:617
Definition parse-tree.h:1190
Definition parse-tree.h:751
Definition parse-tree.h:920
Definition parse-tree.h:1890
Definition parse-tree.h:1578
Definition parse-tree.h:2368
Definition parse-tree.h:3195
Definition parse-tree.h:2388
Definition parse-tree.h:2250
Definition parse-tree.h:1425
Definition parse-tree.h:3400
Definition parse-tree.h:1234
Definition parse-tree.h:1260
Definition parse-tree.h:1243
Definition parse-tree.h:1220
Definition parse-tree.h:2607
Definition parse-tree.h:2613
Definition parse-tree.h:2621
Definition parse-tree.h:534
Definition parse-tree.h:559
Definition parse-tree.h:972
Definition parse-tree.h:1369
Definition parse-tree.h:959
Definition parse-tree.h:1738
Definition parse-tree.h:1049
Definition parse-tree.h:2144
Definition parse-tree.h:2160
Definition parse-tree.h:2138
Definition parse-tree.h:2173
Definition parse-tree.h:2150
Definition parse-tree.h:2633
Definition parse-tree.h:2737
Definition parse-tree.h:3334
Definition parse-tree.h:3184
Definition parse-tree.h:3366
Definition parse-tree.h:3077
Definition parse-tree.h:3092
Definition tools.h:139
Definition tools.h:145
Definition parse-tree.h:2402
Definition parse-tree.h:2418
Definition parse-tree.h:2381
Definition parse-tree.h:1711
Definition parse-tree.h:1721
Definition parse-tree.h:424
Definition parse-tree.h:1635
Definition parse-tree.h:1644
Definition parse-tree.h:630
Definition parse-tree.h:1020
Definition parse-tree.h:2836
Definition parse-tree.h:2780
Definition parse-tree.h:2924
Definition parse-tree.h:2933
Definition parse-tree.h:2938
Definition parse-tree.h:2922
Definition parse-tree.h:2951
Definition parse-tree.h:798
Definition parse-tree.h:314
Definition parse-tree.h:1383
Definition parse-tree.h:1587
Definition parse-tree.h:3258
Definition parse-tree.h:3216
Definition parse-tree.h:3245
Definition parse-tree.h:3098
Definition parse-tree.h:480
Definition parse-tree.h:468
Definition parse-tree.h:709
Definition parse-tree.h:2763
Definition parse-tree.h:2761
Definition parse-tree.h:2672
Definition parse-tree.h:785
Definition parse-tree.h:663
Definition parse-tree.h:2345
Definition parse-tree.h:1326
Definition parse-tree.h:681
Definition parse-tree.h:1629
Definition parse-tree.h:894
Definition parse-tree.h:2313
Definition parse-tree.h:2647
Definition parse-tree.h:876
Definition parse-tree.h:322
Definition parse-tree.h:2333
Definition parse-tree.h:2972
Definition parse-tree.h:3510
Definition parse-tree.h:2105
Definition parse-tree.h:2997
Definition parse-tree.h:2986
Definition parse-tree.h:3008
Definition parse-tree.h:592
Definition parse-tree.h:1332
Definition parse-tree.h:643
Definition parse-tree.h:2351
Definition parse-tree.h:2575
Definition parse-tree.h:1458
Definition parse-tree.h:4476
Definition parse-tree.h:4480
Definition parse-tree.h:4492
Definition parse-tree.h:4499
Definition parse-tree.h:4507
Definition parse-tree.h:4522
Definition parse-tree.h:5518
Definition parse-tree.h:4529
Definition parse-tree.h:4592
Definition parse-tree.h:5376
Definition parse-tree.h:5365
Definition parse-tree.h:4538
Definition parse-tree.h:5307
Definition parse-tree.h:5382
Definition parse-tree.h:4561
Definition parse-tree.h:5317
Definition parse-tree.h:5276
Definition parse-tree.h:5260
Definition parse-tree.h:4576
Definition parse-tree.h:3690
Definition parse-tree.h:4584
Definition parse-tree.h:5445
Definition parse-tree.h:5462
Definition parse-tree.h:5437
Definition parse-tree.h:4606
Definition parse-tree.h:4634
Definition parse-tree.h:4621
Definition parse-tree.h:4688
Definition parse-tree.h:4686
Definition parse-tree.h:4710
Definition parse-tree.h:4718
Definition parse-tree.h:4728
Definition parse-tree.h:4738
Definition parse-tree.h:4746
Definition parse-tree.h:3580
Definition parse-tree.h:5283
Definition parse-tree.h:4701
Definition parse-tree.h:4670
Definition parse-tree.h:4761
Definition parse-tree.h:5312
Definition parse-tree.h:5387
Definition parse-tree.h:4772
Definition parse-tree.h:5350
Definition parse-tree.h:4780
Definition parse-tree.h:4799
Definition parse-tree.h:4811
Definition parse-tree.h:4821
Definition parse-tree.h:4829
Definition parse-tree.h:5471
Definition parse-tree.h:4834
Definition parse-tree.h:4842
Definition parse-tree.h:4858
Definition parse-tree.h:4881
Definition parse-tree.h:4847
Definition parse-tree.h:4871
Definition parse-tree.h:4888
Definition parse-tree.h:3702
Definition parse-tree.h:4643
Definition parse-tree.h:4661
Definition parse-tree.h:4652
Definition parse-tree.h:4897
Definition parse-tree.h:4915
Definition parse-tree.h:3614
Definition parse-tree.h:4926
Definition parse-tree.h:4951
Definition parse-tree.h:4963
Definition parse-tree.h:4972
Definition parse-tree.h:5330
Definition parse-tree.h:5344
Definition parse-tree.h:4996
Definition parse-tree.h:5008
Definition parse-tree.h:5020
Definition parse-tree.h:3635
Definition parse-tree.h:3626
Definition parse-tree.h:3623
Definition parse-tree.h:5031
Definition parse-tree.h:5044
Definition parse-tree.h:5056
Definition parse-tree.h:5067
Definition parse-tree.h:3679
Definition parse-tree.h:5077
Definition parse-tree.h:5478
Definition parse-tree.h:3609
Definition parse-tree.h:5086
Definition parse-tree.h:5098
Definition parse-tree.h:5396
Definition parse-tree.h:5109
Definition parse-tree.h:5116
Definition parse-tree.h:3639
Definition parse-tree.h:3661
Definition parse-tree.h:3648
Definition parse-tree.h:5125
Definition parse-tree.h:5136
Definition parse-tree.h:5484
Definition parse-tree.h:5145
Definition parse-tree.h:5166
Definition parse-tree.h:5177
Definition parse-tree.h:3605
Definition parse-tree.h:3598
Definition parse-tree.h:5186
Definition parse-tree.h:5233
Definition parse-tree.h:5246
Definition parse-tree.h:5354
Definition parse-tree.h:5222
Definition parse-tree.h:3108
Definition parse-tree.h:5916
Definition parse-tree.h:5923
Definition parse-tree.h:5852
Definition parse-tree.h:5945
Definition parse-tree.h:5984
Definition parse-tree.h:5973
Definition parse-tree.h:5964
Definition parse-tree.h:5846
Definition parse-tree.h:5858
Definition parse-tree.h:5544
Definition parse-tree.h:5549
Definition parse-tree.h:5586
Definition parse-tree.h:5670
Definition parse-tree.h:5534
Definition parse-tree.h:5597
Definition parse-tree.h:5611
Definition parse-tree.h:5627
Definition parse-tree.h:5635
Definition parse-tree.h:5694
Definition parse-tree.h:5656
Definition parse-tree.h:5402
Definition parse-tree.h:5646
Definition parse-tree.h:379
Definition parse-tree.h:2841
Definition parse-tree.h:2804
Definition parse-tree.h:3033
Definition parse-tree.h:2070
Definition parse-tree.h:1597
Definition parse-tree.h:2031
Definition parse-tree.h:2867
Definition parse-tree.h:3153
Definition parse-tree.h:2825
Definition parse-tree.h:933
Definition parse-tree.h:3131
Definition parse-tree.h:1074
Definition parse-tree.h:1102
Definition parse-tree.h:1930
Definition parse-tree.h:1094
Definition parse-tree.h:1088
Definition parse-tree.h:1081
Definition parse-tree.h:3141
Definition parse-tree.h:3273
Definition parse-tree.h:3234
Definition parse-tree.h:576
Definition parse-tree.h:2788
Definition parse-tree.h:817
Definition parse-tree.h:2302
Definition parse-tree.h:3019
Definition parse-tree.h:1610
Definition parse-tree.h:298
Definition parse-tree.h:1696
Definition parse-tree.h:2425
Definition parse-tree.h:2489
Definition parse-tree.h:2501
Definition parse-tree.h:2480
Definition parse-tree.h:2535
Definition parse-tree.h:2515
Definition parse-tree.h:2181
Definition parse-tree.h:3392
Definition parse-tree.h:402
Definition parse-tree.h:456
Definition parse-tree.h:2000
Definition parse-tree.h:362
Definition parse-tree.h:3410
Definition parse-tree.h:2567
Definition parse-tree.h:1920
Definition parse-tree.h:1211
Definition parse-tree.h:3531
Definition parse-tree.h:3503
Definition parse-tree.h:3526
Definition parse-tree.h:3039
Definition parse-tree.h:3050
Definition parse-tree.h:3203
Definition parse-tree.h:3376
Definition parse-tree.h:1687
Definition parse-tree.h:1882
Definition parse-tree.h:1678
Definition parse-tree.h:1868
Definition parse-tree.h:3173
Definition parse-tree.h:2585
Definition parse-tree.h:2598
Definition parse-tree.h:911
Definition parse-tree.h:1154
Definition parse-tree.h:1167
Definition parse-tree.h:1129
Definition parse-tree.h:1176
Definition parse-tree.h:1139
Definition parse-tree.h:1439
Definition parse-tree.h:2524
Definition parse-tree.h:939
Definition parse-tree.h:947
Definition parse-tree.h:745
Definition parse-tree.h:654
Definition parse-tree.h:758
Definition parse-tree.h:3519
Definition parse-tree.h:357
Definition parse-tree.h:2657
Definition parse-tree.h:804
Definition parse-tree.h:3117
Definition parse-tree.h:1898
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:285
Definition parse-tree.h:2851
Definition parse-tree.h:2096
Definition parse-tree.h:2089
Definition parse-tree.h:2120
Definition parse-tree.h:2083
Definition parse-tree.h:2810
Definition parse-tree.h:3755
Definition parse-tree.h:3746
Definition parse-tree.h:3716
Definition parse-tree.h:3726
Definition parse-tree.h:3739
Definition parse-tree.h:3911
Definition parse-tree.h:3922
Definition parse-tree.h:3941
Definition parse-tree.h:3932
Definition parse-tree.h:3972
Definition parse-tree.h:3985
Definition parse-tree.h:3996
Definition parse-tree.h:4008
Definition parse-tree.h:4022
Definition parse-tree.h:4035
Definition parse-tree.h:4057
Definition parse-tree.h:4069
Definition parse-tree.h:4080
Definition parse-tree.h:4090
Definition parse-tree.h:4120
Definition parse-tree.h:4132
Definition parse-tree.h:4144
Definition parse-tree.h:4157
Definition parse-tree.h:4167
Definition parse-tree.h:4176
Definition parse-tree.h:4186
Definition parse-tree.h:4196
Definition parse-tree.h:4211
Definition parse-tree.h:4224
Definition parse-tree.h:4260
Definition parse-tree.h:4247
Definition parse-tree.h:4233
Definition parse-tree.h:4270
Definition parse-tree.h:4283
Definition parse-tree.h:4309
Definition parse-tree.h:4299
Definition parse-tree.h:4344
Definition parse-tree.h:4320
Definition parse-tree.h:4354
Definition parse-tree.h:4364
Definition parse-tree.h:4374
Definition parse-tree.h:4385
Definition parse-tree.h:4396
Definition parse-tree.h:4406
Definition parse-tree.h:4415
Definition parse-tree.h:4426
Definition parse-tree.h:4436
Definition parse-tree.h:4447
Definition parse-tree.h:4458
Definition parse-tree.h:3793
Definition parse-tree.h:3776
Definition parse-tree.h:3817
Definition parse-tree.h:3783
Definition parse-tree.h:3844
Definition parse-tree.h:3856
Definition parse-tree.h:3869
Definition parse-tree.h:3878