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)
67 NODE(CUDADataAttrSpec, Implicit)
68 NODE_ENUM(common, CUDASubprogramAttrs)
69 NODE_ENUM(common, ImportKind)
70 NODE_ENUM(common, OmpDependenceKind)
71 NODE_ENUM(common, OmpDeviceType)
72 NODE_ENUM(common, OmpMemoryOrderType)
73 NODE_ENUM(common, OpenACCDeviceType)
74 NODE(format, ControlEditDesc)
75 NODE(format::ControlEditDesc, Kind)
76 NODE(format, DerivedTypeDataEditDesc)
77 NODE(format, FormatItem)
78 NODE(format, FormatSpecification)
79 NODE(format, IntrinsicTypeDataEditDesc)
81 NODE(parser, Abstract)
83 NODE(AccAtomicCapture, Stmt1)
84 NODE(AccAtomicCapture, Stmt2)
92 NODE(parser, AccClause)
93#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
94#include "llvm/Frontend/OpenACC/ACC.inc"
97 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
98 return llvm::Twine(
99 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
100 .str();
101 }
102 NODE(parser, AccClauseList)
105 NODE_ENUM(parser::AccDataModifier, Modifier)
107 NODE(parser, AccEndAtomic)
111 NODE(parser, AccGangArg)
112 NODE(AccGangArg, Num)
113 NODE(AccGangArg, Dim)
114 NODE(AccGangArg, Static)
116 NODE(parser, AccObject)
117 NODE(parser, AccObjectList)
120 NODE(parser, AccSizeExpr)
122 NODE(parser, AccSelfClause)
125
127 NODE(parser, AccTileExpr)
130 NODE(parser, AccEndLoop)
132 static std::string GetNodeName(const llvm::acc::Directive &x) {
133 return llvm::Twine(
134 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
135 .str();
136 }
137 NODE(parser, AcImpliedDo)
139 NODE(parser, AcValue)
140 NODE(parser, AccessStmt)
141 NODE(parser, AccessId)
142 NODE(parser, AccessSpec)
143 NODE_ENUM(AccessSpec, Kind)
144 NODE(parser, AcSpec)
145 NODE(parser, ActionStmt)
146 NODE(parser, ActualArg)
147 NODE(ActualArg, PercentRef)
148 NODE(ActualArg, PercentVal)
149 NODE(parser, ActualArgSpec)
150 NODE(AcValue, Triplet)
151 NODE(parser, AllocOpt)
152 NODE(AllocOpt, Mold)
153 NODE(AllocOpt, Source)
154 NODE(AllocOpt, Stream)
155 NODE(AllocOpt, Pinned)
156 NODE(parser, Allocatable)
157 NODE(parser, AllocatableStmt)
161 NODE(parser, AllocateStmt)
162 NODE(parser, Allocation)
163 NODE(parser, AltReturnSpec)
165 NODE(parser, ArrayConstructor)
166 NODE(parser, ArrayElement)
167 NODE(parser, ArraySpec)
168 NODE(parser, AssignStmt)
172 NODE(parser, AssociateStmt)
173 NODE(parser, Association)
174 NODE(parser, AssumedImpliedSpec)
175 NODE(parser, AssumedRankSpec)
176 NODE(parser, AssumedShapeSpec)
177 NODE(parser, AssumedShapeBoundsSpec)
179 NODE(parser, Asynchronous)
180 NODE(parser, AsynchronousStmt)
181 NODE(parser, AttrSpec)
182 NODE(parser, BOZLiteralConstant)
183 NODE(parser, BackspaceStmt)
184 NODE(parser, BasedPointer)
185 NODE(parser, BasedPointerStmt)
186 NODE(parser, BindAttr)
187 NODE(BindAttr, Deferred)
188 NODE(BindAttr, Non_Overridable)
189 NODE(parser, BindEntity)
190 NODE_ENUM(BindEntity, Kind)
191 NODE(parser, BindStmt)
192 NODE(parser, Block)
194 NODE(parser, BlockData)
195 NODE(parser, BlockDataStmt)
196 NODE(parser, BlockSpecificationPart)
197 NODE(parser, BlockStmt)
199 NODE(parser, BoundsSpec)
200 NODE(parser, Call)
201 NODE(parser, CallStmt)
202 NODE(CallStmt, Chevrons)
203 NODE(CallStmt, StarOrExpr)
204 NODE(parser, CaseConstruct)
205 NODE(CaseConstruct, Case)
206 NODE(parser, CaseSelector)
207 NODE(parser, CaseStmt)
209 NODE(CaseValueRange, Range)
212 NODE(parser, CharLength)
215 NODE(parser, CharSelector)
216 NODE(CharSelector, LengthAndKind)
217 NODE(parser, CloseStmt)
218 NODE(CloseStmt, CloseSpec)
220 NODE(parser, CoarraySpec)
222 NODE(parser, CodimensionStmt)
225 NODE(parser, CommonStmt)
226 NODE(CommonStmt, Block)
228 NODE(CompilerDirective, AssumeAligned)
229 NODE(CompilerDirective, IgnoreTKR)
230 NODE(CompilerDirective, Inline)
231 NODE(CompilerDirective, IVDep)
232 NODE(CompilerDirective, ForceInline)
233 NODE(CompilerDirective, LoopCount)
234 NODE(CompilerDirective, NameValue)
235 NODE(CompilerDirective, NoInline)
236 NODE(CompilerDirective, Unrecognized)
237 NODE(CompilerDirective, VectorAlways)
238 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
239 NODE(CompilerDirective, VectorLength)
240 NODE(CompilerDirective, Unroll)
241 NODE(CompilerDirective, UnrollAndJam)
242 NODE(CompilerDirective, NoVector)
243 NODE(CompilerDirective, NoUnroll)
244 NODE(CompilerDirective, NoUnrollAndJam)
245 NODE(CompilerDirective, Prefetch)
246 NODE(CompilerDirective, InlineAlways)
247 NODE(CompilerDirective, Simd)
249 NODE(parser, ComplexPart)
252 NODE(parser, ComponentDataSource)
253 NODE(parser, ComponentDecl)
254 NODE(parser, FillDecl)
257 NODE(parser, ComponentSpec)
263 NODE(ConditionalArg, Consequent)
265 NODE(parser, ConditionalArgNil)
266 NODE(parser, ConnectSpec)
267 NODE(ConnectSpec, CharExpr)
268 NODE_ENUM(ConnectSpec::CharExpr, Kind)
269 NODE(ConnectSpec, Newunit)
270 NODE(ConnectSpec, Recl)
271 NODE(parser, ContainsStmt)
272 NODE(parser, Contiguous)
273 NODE(parser, ContiguousStmt)
274 NODE(parser, ContinueStmt)
276 NODE(parser, CriticalStmt)
279 NODE(CUFKernelDoConstruct, StarOrExpr)
280 NODE(CUFKernelDoConstruct, Directive)
281 NODE(CUFKernelDoConstruct, LaunchConfiguration)
282 NODE(parser, CUFReduction)
283 NODE(parser, CycleStmt)
285 NODE(parser, DataIDoObject)
286 NODE(parser, DataImpliedDo)
287 NODE(parser, DataRef)
288 NODE(parser, DataStmt)
292 NODE(parser, DataStmtSet)
293 NODE(parser, DataStmtValue)
297 NODE(DeclarationTypeSpec, Class)
298 NODE(DeclarationTypeSpec, ClassOf)
299 NODE(DeclarationTypeSpec, ClassStar)
300 NODE(DeclarationTypeSpec, Record)
301 NODE(DeclarationTypeSpec, Type)
302 NODE(DeclarationTypeSpec, TypeOf)
303 NODE(DeclarationTypeSpec, TypeStar)
304 NODE(parser, Default)
305 NODE(parser, DeferredCoshapeSpecList)
306 NODE(parser, DeferredShapeSpecList)
307 NODE(parser, DefinedOpName)
309 NODE_ENUM(DefinedOperator, IntrinsicOperator)
313 NODE(parser, Designator)
314 NODE(parser, DimensionStmt)
315 NODE(DimensionStmt, Declaration)
316 NODE(parser, DoConstruct)
317 NODE(parser, DummyArg)
318 NODE(parser, ElseIfStmt)
319 NODE(parser, ElseStmt)
320 NODE(parser, ElsewhereStmt)
321 NODE(parser, EndAssociateStmt)
322 NODE(parser, EndBlockDataStmt)
323 NODE(parser, EndBlockStmt)
325 NODE(parser, EndCriticalStmt)
326 NODE(parser, EndDoStmt)
327 NODE(parser, EndEnumerationTypeStmt)
328 NODE(parser, EndEnumStmt)
329 NODE(parser, EndForallStmt)
330 NODE(parser, EndFunctionStmt)
331 NODE(parser, EndIfStmt)
332 NODE(parser, EndInterfaceStmt)
333 NODE(parser, EndLabel)
334 NODE(parser, EndModuleStmt)
335 NODE(parser, EndMpSubprogramStmt)
336 NODE(parser, EndProgramStmt)
337 NODE(parser, EndSelectStmt)
338 NODE(parser, EndSubmoduleStmt)
339 NODE(parser, EndSubroutineStmt)
340 NODE(parser, EndTypeStmt)
341 NODE(parser, EndWhereStmt)
342 NODE(parser, EndfileStmt)
343 NODE(parser, EntityDecl)
344 NODE(parser, EntryStmt)
345 NODE(parser, EnumDef)
346 NODE(parser, EnumDefStmt)
347 NODE(parser, Enumerator)
348 NODE(parser, EnumeratorDefStmt)
349 NODE(parser, EnumerationEnumeratorStmt)
352 NODE(parser, EorLabel)
353 NODE(parser, EquivalenceObject)
354 NODE(parser, EquivalenceStmt)
355 NODE(parser, ErrLabel)
356 NODE(parser, ErrorRecovery)
357 NODE(parser, EventPostStmt)
358 NODE(parser, EventWaitSpec)
359 NODE(parser, EventWaitStmt)
361 NODE(parser, ExecutionPart)
363 NODE(parser, ExitStmt)
367 NODE(parser, Expr)
368 NODE(Expr, Parentheses)
369 NODE(Expr, UnaryPlus)
370 NODE(Expr, Negate)
371 NODE(Expr, NOT)
372 NODE(Expr, PercentLoc)
373 NODE(Expr, DefinedUnary)
374 NODE(Expr, Power)
375 NODE(Expr, Multiply)
376 NODE(Expr, Divide)
377 NODE(Expr, Add)
378 NODE(Expr, Subtract)
379 NODE(Expr, Concat)
380 NODE(Expr, LT)
381 NODE(Expr, LE)
382 NODE(Expr, EQ)
383 NODE(Expr, NE)
384 NODE(Expr, GE)
385 NODE(Expr, GT)
386 NODE(Expr, AND)
387 NODE(Expr, OR)
388 NODE(Expr, EQV)
389 NODE(Expr, NEQV)
390 NODE(Expr, DefinedBinary)
391 NODE(Expr, ComplexConstructor)
392 NODE(parser, External)
393 NODE(parser, ExternalStmt)
394 NODE(parser, FailImageStmt)
395 NODE(parser, FileUnitNumber)
396 NODE(parser, FinalProcedureStmt)
397 NODE(parser, FlushStmt)
402 NODE(parser, ForallStmt)
403 NODE(parser, FormTeamStmt)
404 NODE(FormTeamStmt, FormTeamSpec)
405 NODE(parser, Format)
406 NODE(parser, FormatStmt)
408 NODE(parser, FunctionStmt)
410 NODE(parser, GenericSpec)
411 NODE(GenericSpec, Assignment)
412 NODE(GenericSpec, ReadFormatted)
413 NODE(GenericSpec, ReadUnformatted)
414 NODE(GenericSpec, WriteFormatted)
415 NODE(GenericSpec, WriteUnformatted)
416 NODE(parser, GenericStmt)
417 NODE(parser, GotoStmt)
419 NODE(parser, IdExpr)
420 NODE(parser, IdVariable)
421 NODE(parser, IfConstruct)
422 NODE(IfConstruct, ElseBlock)
423 NODE(IfConstruct, ElseIfBlock)
424 NODE(parser, IfStmt)
425 NODE(parser, IfThenStmt)
426 NODE(parser, TeamValue)
427 NODE(parser, ImageSelector)
429 NODE(ImageSelectorSpec, Notify)
430 NODE(ImageSelectorSpec, Stat)
431 NODE(ImageSelectorSpec, Team_Number)
432 NODE(parser, ImplicitPart)
434 NODE(parser, ImplicitSpec)
435 NODE(parser, ImplicitStmt)
436 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
437 NODE(parser, ImpliedShapeSpec)
438 NODE(parser, ImportStmt)
441 NODE(parser, InputItem)
442 NODE(parser, InquireSpec)
443 NODE(InquireSpec, CharVar)
444 NODE_ENUM(InquireSpec::CharVar, Kind)
445 NODE(InquireSpec, IntVar)
446 NODE_ENUM(InquireSpec::IntVar, Kind)
447 NODE(InquireSpec, LogVar)
448 NODE_ENUM(InquireSpec::LogVar, Kind)
449 NODE(parser, InquireStmt)
450 NODE(InquireStmt, Iolength)
451 NODE(parser, IntegerTypeSpec)
452 NODE(parser, IntentSpec)
453 NODE_ENUM(IntentSpec, Intent)
454 NODE(parser, IntentStmt)
456 NODE(parser, InterfaceBody)
457 NODE(InterfaceBody, Function)
458 NODE(InterfaceBody, Subroutine)
460 NODE(parser, InterfaceStmt)
463 NODE(parser, Intrinsic)
464 NODE(parser, IntrinsicStmt)
466 NODE(IntrinsicTypeSpec, Character)
467 NODE(IntrinsicTypeSpec, Complex)
468 NODE(IntrinsicTypeSpec, DoubleComplex)
469 NODE(IntrinsicTypeSpec, DoublePrecision)
471 NODE(IntrinsicTypeSpec, Real)
472 NODE(parser, IoControlSpec)
473 NODE(IoControlSpec, Asynchronous)
474 NODE(IoControlSpec, CharExpr)
475 NODE_ENUM(IoControlSpec::CharExpr, Kind)
476 NODE(IoControlSpec, Pos)
477 NODE(IoControlSpec, Rec)
478 NODE(IoControlSpec, Size)
479 NODE(parser, IoUnit)
480 NODE(parser, Keyword)
481 NODE(parser, KindParam)
482 NODE(parser, KindSelector)
483 NODE(KindSelector, StarSize)
484 NODE(parser, LabelDoStmt)
487 NODE(parser, LetterSpec)
491 NODE_ENUM(parser::ReductionOperator, Operator)
492 NODE(parser, LocalitySpec)
493 NODE(LocalitySpec, DefaultNone)
494 NODE(LocalitySpec, Local)
495 NODE(LocalitySpec, LocalInit)
496 NODE(LocalitySpec, Reduce)
497 NODE(LocalitySpec, Shared)
498 NODE(parser, LockStmt)
499 NODE(LockStmt, LockStat)
501 NODE_NAME(LoopControl::Bounds, "LoopBounds")
502 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
503 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
504 NODE(parser, LoopControl)
505 NODE(LoopControl, Concurrent)
506 NODE(parser, MainProgram)
507 NODE(parser, Map)
508 NODE(Map, EndMapStmt)
509 NODE(Map, MapStmt)
511 NODE(parser, Module)
512 NODE(parser, ModuleStmt)
515 NODE(parser, MpSubprogramStmt)
516 NODE(parser, MsgVariable)
517 NODE(parser, Name)
518 NODE(parser, NamedConstant)
520 NODE(parser, NamelistStmt)
521 NODE(NamelistStmt, Group)
523 NODE(parser, NoPass)
525 NODE(parser, NullifyStmt)
526 NODE(parser, NullInit)
527 NODE(parser, ObjectDecl)
528 NODE(parser, OldParameterStmt)
529
530 static std::string GetNodeName(const llvm::omp::Directive &x) {
531 return llvm::Twine("llvm::omp::Directive = ",
532 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
533 .str();
534 }
535 static std::string GetNodeName(const llvm::omp::Clause &x) {
536 return llvm::Twine(
537 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
538 .str();
539 }
542 NODE_ENUM(OmpAccessGroup, Value)
544 NODE(OmpAdjustArgsClause, Modifier)
545 NODE(parser, OmpAdjustOp)
546 NODE_ENUM(OmpAdjustOp, Value)
548 NODE(OmpAffinityClause, Modifier)
551 NODE(OmpAlignedClause, Modifier)
552 NODE(parser, OmpAlignment)
555 NODE(OmpAllocateClause, Modifier)
560 NODE_ENUM(OmpAlwaysModifier, Value)
562 NODE(OmpAppendArgsClause, OmpAppendOp)
564
565 static std::string GetNodeName(const llvm::omp::LoopModifier &x) {
566 return llvm::Twine(
567 "llvm::omp::LoopModifier = ", llvm::omp::getLoopModifierName(x))
568 .str();
569 }
571 NODE(OmpApplyClause, Modifier)
572 NODE(parser, OmpArgument)
576 NODE(parser, OmpAtClause)
577 NODE_ENUM(OmpAtClause, ActionTime)
580 NODE_ENUM(OmpAttachModifier, Value)
582 NODE_ENUM(OmpAutomapModifier, Value)
586 NODE(parser, OmpBindClause)
587 NODE_ENUM(OmpBindClause, Binding)
591 NODE_ENUM(OmpChunkModifier, Value)
592 NODE(parser, OmpClause)
593 NODE(parser, OmpClauseList)
595 NODE_ENUM(OmpCloseModifier, Value)
606 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
609 NODE(OmpDefaultmapClause, Modifier)
610 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
612 NODE_ENUM(OmpDeleteModifier, Value)
615 NODE(OmpDependClause, TaskDep)
616 NODE(OmpDependClause::TaskDep, Modifier)
618 NODE_ENUM(OmpDependenceType, Value)
623 NODE(OmpDeviceClause, Modifier)
625 NODE_ENUM(OmpDeviceModifier, Value)
631 NODE_ENUM(OmpDirectiveSpecification, Flag)
632 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
633 NODE(parser, OmpDoacross)
634 NODE(OmpDoacross, Modifier)
638 NODE(OmpDynGroupprivateClause, Modifier)
642 NODE(OmpEnterClause, Modifier)
645 NODE_ENUM(OmpExpectation, Value)
646 NODE(parser, OmpFailClause)
648 NODE_ENUM(OmpFallbackModifier, Value)
649 NODE(parser, OmpFromClause)
650 NODE(OmpFromClause, Modifier)
652 NODE(OmpGrainsizeClause, Modifier)
656 NODE(parser, OmpHintClause)
658 NODE(parser, OmpIfClause)
659 NODE(OmpIfClause, Modifier)
661 NODE(parser, OmpInitClause)
662 NODE(OmpInitClause, Modifier)
666 NODE(OmpInReductionClause, Modifier)
668 NODE_ENUM(OmpInteropType, Value)
669 NODE(parser, OmpIteration)
672 NODE(parser, OmpIterator)
675 NODE(OmpLastprivateClause, Modifier)
677 NODE_ENUM(OmpLastprivateModifier, Value)
679 NODE(OmpLinearClause, Modifier)
681 NODE_ENUM(OmpLinearModifier, Value)
682 NODE(parser, OmpLinearStep)
683 NODE(parser, OmpLocator)
685 NODE(parser, OmpLowerBound)
686 NODE(parser, OmpMapClause)
687 NODE(OmpMapClause, Modifier)
688 NODE(parser, OmpMapper)
690 NODE(parser, OmpMapType)
691 NODE_ENUM(OmpMapType, Value)
693 NODE_ENUM(OmpMapTypeModifier, Value)
695 NODE(parser, OmpMemSpace)
699 NODE_ENUM(OmpMotionModifier, Value)
700 NODE(parser, OmpNoOpenMPClause)
701 NODE(parser, OmpNoOpenMPRoutinesClause)
702 NODE(parser, OmpNoParallelismClause)
706 NODE(OmpNumTeamsClause, Modifier)
708 NODE(OmpNumThreadsClause, Modifier)
709 NODE(OmpNumTasksClause, Modifier)
710 NODE(parser, OmpObject)
711 NODE(OmpObject, Invalid)
712 NODE_ENUM(OmpObject::Invalid, Kind)
713 NODE(parser, OmpObjectList)
715 NODE(OmpOrderClause, Modifier)
716 NODE_ENUM(OmpOrderClause, Ordering)
718 NODE_ENUM(OmpOrderingModifier, Value)
720 NODE_ENUM(OmpOrderModifier, Value)
724 NODE(parser, OmpPreferType)
726 NODE_ENUM(OmpPrescriptiveness, Value)
728 NODE_ENUM(OmpPresentModifier, Value)
730 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
732 NODE(OmpReductionClause, Modifier)
735 NODE_ENUM(OmpReductionModifier, Value)
738 NODE_ENUM(OmpRefModifier, Value)
744 NODE(OmpScheduleClause, Modifier)
745 NODE_ENUM(OmpScheduleClause, Kind)
749 NODE_ENUM(OmpSelfModifier, Value)
751 NODE_ENUM(OmpSeverityClause, SevLevel)
757 NODE(OmpStylizedInstance, Instance)
760 NODE(OmpTaskReductionClause, Modifier)
762 NODE(OmpThreadLimitClause, Modifier)
765 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
766 NODE(parser, OmpToClause)
767 NODE(OmpToClause, Modifier)
771 NODE(OmpTraitPropertyExtension, Complex)
773 NODE(parser, OmpTraitScore)
775 NODE(OmpTraitSelector, Properties)
777 NODE_ENUM(OmpTraitSelectorName, Value)
780 NODE_ENUM(OmpTraitSetSelectorName, Value)
782 NODE(parser, OmpTypeName)
787 NODE(parser, OmpUseClause)
789 NODE(OmpUsesAllocatorsClause, AllocatorSpec)
793 NODE_ENUM(OmpVariableCategory, Value)
794 NODE(parser, OmpWhenClause)
795 NODE(OmpWhenClause, Modifier)
797 NODE_ENUM(OmpxHoldModifier, Value)
798#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
799#include "llvm/Frontend/OpenMP/OMP.inc"
800
801 NODE(parser, Only)
815
832
833 NODE(parser, OpenStmt)
834 NODE(parser, Optional)
835 NODE(parser, OptionalStmt)
838 NODE(parser, OutputItem)
839 NODE(parser, Parameter)
840 NODE(parser, ParameterStmt)
842 NODE(parser, Pass)
843 NODE(parser, PauseStmt)
844 NODE(parser, Pointer)
846 NODE(PointerAssignmentStmt, Bounds)
847 NODE(parser, PointerDecl)
848 NODE(parser, PointerObject)
849 NODE(parser, PointerStmt)
851 NODE(parser, PrefixSpec)
852 NODE(PrefixSpec, Elemental)
853 NODE(PrefixSpec, Impure)
854 NODE(PrefixSpec, Module)
855 NODE(PrefixSpec, Non_Recursive)
856 NODE(PrefixSpec, Pure)
857 NODE(PrefixSpec, Recursive)
858 NODE(PrefixSpec, Simple)
859 NODE(PrefixSpec, Attributes)
860 NODE(PrefixSpec, Launch_Bounds)
861 NODE(PrefixSpec, Cluster_Dims)
862 NODE(parser, PrintStmt)
863 NODE(parser, PrivateStmt)
865 NODE(parser, ProcAttrSpec)
869 NODE(parser, ProcDecl)
870 NODE(parser, ProcInterface)
874 NODE(parser, ProcedureStmt)
875 NODE_ENUM(ProcedureStmt, Kind)
876 NODE(parser, Program)
877 NODE(parser, ProgramStmt)
878 NODE(parser, ProgramUnit)
879 NODE(parser, Protected)
880 NODE(parser, ProtectedStmt)
881 NODE(parser, RankClause)
882 NODE(parser, ReadStmt)
884 NODE(RealLiteralConstant, Real)
885 NODE(parser, Rename)
886 NODE(Rename, Names)
887 NODE(Rename, Operators)
888 NODE(parser, ReturnStmt)
889 NODE(parser, RewindStmt)
890 NODE(parser, Save)
891 NODE(parser, SaveStmt)
892 NODE(parser, SavedEntity)
893 NODE_ENUM(SavedEntity, Kind)
897 NODE(SelectRankCaseStmt, Rank)
899 NODE(SelectRankConstruct, RankCase)
902 NODE(SelectTypeConstruct, TypeCase)
904 NODE(parser, Selector)
906 NODE(parser, SequenceStmt)
907 NODE(parser, Sign)
912 NODE(parser, SpecificationExpr)
914 NODE(parser, Star)
915 NODE(parser, StatOrErrmsg)
916 NODE(parser, StatVariable)
917 NODE(parser, StatusExpr)
919 NODE(parser, StopCode)
920 NODE(parser, StopStmt)
921 NODE_ENUM(StopStmt, Kind)
924 NODE(parser, StructureDef)
925 NODE(StructureDef, EndStructureStmt)
927 NODE(parser, StructureStmt)
928 NODE(parser, Submodule)
929 NODE(parser, SubmoduleStmt)
933 NODE(parser, Substring)
936 NODE(parser, Suffix)
937 NODE(parser, SyncAllStmt)
939 NODE(SyncImagesStmt, ImageSet)
940 NODE(parser, SyncMemoryStmt)
941 NODE(parser, SyncTeamStmt)
942 NODE(parser, Target)
943 NODE(parser, TargetStmt)
944 NODE(parser, TypeAttrSpec)
945 NODE(TypeAttrSpec, BindC)
946 NODE(TypeAttrSpec, Extends)
952 NODE(TypeBoundProcedureStmt, WithInterface)
953 NODE(TypeBoundProcedureStmt, WithoutInterface)
955 NODE(parser, TypeGuardStmt)
956 NODE(TypeGuardStmt, Guard)
957 NODE(parser, TypeParamDecl)
959 NODE(common, TypeParamAttr)
960 NODE(parser, TypeParamSpec)
962 NODE(TypeParamValue, Deferred)
963 NODE(parser, TypeSpec)
964 NODE(parser, Union)
965 NODE(Union, EndUnionStmt)
966 NODE(Union, UnionStmt)
967 NODE(parser, UnlockStmt)
969 NODE(parser, UnsignedTypeSpec)
970 NODE(parser, UseStmt)
971 NODE_ENUM(UseStmt, ModuleNature)
972 NODE(parser, Value)
973 NODE(parser, ValueStmt)
974 NODE(parser, Variable)
976 NODE(VectorTypeSpec, PairVectorTypeSpec)
977 NODE(VectorTypeSpec, QuadVectorTypeSpec)
978 NODE(parser, IntrinsicVectorTypeSpec)
980 NODE(parser, Verbatim)
981 NODE(parser, Volatile)
982 NODE(parser, VolatileStmt)
983 NODE(parser, WaitSpec)
984 NODE(parser, WaitStmt)
987 NODE(WhereConstruct, Elsewhere)
988 NODE(WhereConstruct, MaskedElsewhere)
990 NODE(parser, WhereStmt)
991 NODE(parser, WriteStmt)
992#undef NODE
993#undef NODE_NAME
994
995 template <typename T> bool Pre(const T &x) {
996 std::string fortran{AsFortran<T>(x)};
997 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
998 Prefix(GetNodeName(x));
999 } else {
1000 IndentEmptyLine();
1001 out_ << GetNodeName(x);
1002 if (!fortran.empty()) {
1003 out_ << " = '" << fortran << '\'';
1004 }
1005 EndLine();
1006 ++indent_;
1007 }
1008 return true;
1009 }
1010
1011 template <typename T> void Post(const T &x) {
1012 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
1013 EndLineIfNonempty();
1014 } else {
1015 --indent_;
1016 }
1017 }
1018
1019 // A few types we want to ignore
1020
1021 bool Pre(const CharBlock &) { return true; }
1022 void Post(const CharBlock &) {}
1023
1024 template <typename T> bool Pre(const Statement<T> &) { return true; }
1025 template <typename T> void Post(const Statement<T> &) {}
1026 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
1027 template <typename T> void Post(const UnlabeledStatement<T> &) {}
1028
1029 template <typename T> bool Pre(const common::Indirection<T> &) {
1030 return true;
1031 }
1032 template <typename T> void Post(const common::Indirection<T> &) {}
1033
1034 template <typename A> bool Pre(const Scalar<A> &) {
1035 Prefix("Scalar");
1036 return true;
1037 }
1038 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1039
1040 template <typename A> bool Pre(const Constant<A> &) {
1041 Prefix("Constant");
1042 return true;
1043 }
1044 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1045
1046 template <typename A> bool Pre(const Integer<A> &) {
1047 Prefix("Integer");
1048 return true;
1049 }
1050 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1051
1052 template <typename A> bool Pre(const Logical<A> &) {
1053 Prefix("Logical");
1054 return true;
1055 }
1056 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1057
1058 template <typename A> bool Pre(const DefaultChar<A> &) {
1059 Prefix("DefaultChar");
1060 return true;
1061 }
1062 template <typename A> void Post(const DefaultChar<A> &) {
1063 EndLineIfNonempty();
1064 }
1065
1066 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1067 template <typename... A> void Post(const std::tuple<A...> &) {}
1068
1069 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1070 template <typename... A> void Post(const std::variant<A...> &) {}
1071
1072protected:
1073 // Return a Fortran representation of this node to include in the dump
1074 template <typename T> std::string AsFortran(const T &x) {
1075 std::string buf;
1076 llvm::raw_string_ostream ss{buf};
1077 if constexpr (HasTypedExpr<T>::value) {
1078 if (asFortran_ && x.typedExpr) {
1079 asFortran_->expr(ss, *x.typedExpr);
1080 }
1081 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1082 std::is_same_v<T, PointerAssignmentStmt>) {
1083 if (asFortran_ && x.typedAssignment) {
1084 asFortran_->assignment(ss, *x.typedAssignment);
1085 }
1086 } else if constexpr (std::is_same_v<T, CallStmt>) {
1087 if (asFortran_ && x.typedCall) {
1088 asFortran_->call(ss, *x.typedCall);
1089 }
1090 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1091 std::is_same_v<T, SignedIntLiteralConstant> ||
1092 std::is_same_v<T, UnsignedLiteralConstant>) {
1093 ss << std::get<CharBlock>(x.t);
1094 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1095 ss << x.source;
1096 } else if constexpr (std::is_same_v<T, std::string> ||
1097 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1098 ss << x;
1099 }
1100 if (ss.tell()) {
1101 return buf;
1102 }
1103 if constexpr (std::is_same_v<T, Name>) {
1104 return x.source.ToString();
1105#ifdef SHOW_ALL_SOURCE_MEMBERS
1106 } else if constexpr (HasSource<T>::value) {
1107 return x.source.ToString();
1108#endif
1109 } else if constexpr (std::is_same_v<T, int>) {
1110 return std::to_string(x);
1111 } else if constexpr (std::is_same_v<T, bool>) {
1112 return x ? "true" : "false";
1113 } else {
1114 return "";
1115 }
1116 }
1117
1118 void IndentEmptyLine() {
1119 if (emptyline_ && indent_ > 0) {
1120 for (int i{0}; i < indent_; ++i) {
1121 out_ << "| ";
1122 }
1123 emptyline_ = false;
1124 }
1125 }
1126
1127 void Prefix(const char *str) {
1128 IndentEmptyLine();
1129 out_ << str << " -> ";
1130 emptyline_ = false;
1131 }
1132
1133 void Prefix(const std::string &str) {
1134 IndentEmptyLine();
1135 out_ << str << " -> ";
1136 emptyline_ = false;
1137 }
1138
1139 void EndLine() {
1140 out_ << '\n';
1141 emptyline_ = true;
1142 }
1143
1144 void EndLineIfNonempty() {
1145 if (!emptyline_) {
1146 EndLine();
1147 }
1148 }
1149
1150private:
1151 int indent_{0};
1152 llvm::raw_ostream &out_;
1153 const AnalyzedObjectsAsFortran *const asFortran_;
1154 bool emptyline_{false};
1155};
1156
1157template <typename T>
1158llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1159 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1160 ParseTreeDumper dumper{out, asFortran};
1161 Walk(x, dumper);
1162 return out;
1163}
1164
1165} // namespace Fortran::parser
1166#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:1321
Definition parse-tree.h:1328
Definition parse-tree.h:1292
Definition parse-tree.h:1280
Definition parse-tree.h:5920
Definition parse-tree.h:5896
Definition parse-tree.h:5912
Definition parse-tree.h:5904
Definition parse-tree.h:5881
Definition parse-tree.h:5945
Definition parse-tree.h:5875
Definition parse-tree.h:5751
Definition parse-tree.h:5724
Definition parse-tree.h:5852
Definition parse-tree.h:5837
Definition parse-tree.h:5832
Definition parse-tree.h:5740
Definition parse-tree.h:5762
Definition parse-tree.h:5745
Definition parse-tree.h:5757
Definition parse-tree.h:5789
Definition parse-tree.h:5783
Definition parse-tree.h:5887
Definition parse-tree.h:5951
Definition parse-tree.h:5828
Definition parse-tree.h:5819
Definition parse-tree.h:5729
Definition parse-tree.h:5768
Definition parse-tree.h:5716
Definition parse-tree.h:5812
Definition parse-tree.h:5808
Definition parse-tree.h:5804
Definition parse-tree.h:5734
Definition parse-tree.h:5800
Definition parse-tree.h:5794
Definition parse-tree.h:5778
Definition parse-tree.h:903
Definition parse-tree.h:1460
Definition parse-tree.h:501
Definition parse-tree.h:3333
Definition parse-tree.h:3322
Definition parse-tree.h:2022
Definition parse-tree.h:1987
Definition parse-tree.h:1966
Definition parse-tree.h:1978
Definition parse-tree.h:2033
Definition parse-tree.h:1995
Definition parse-tree.h:3555
Definition parse-tree.h:1952
Definition parse-tree.h:1385
Definition parse-tree.h:3560
Definition parse-tree.h:3565
Definition parse-tree.h:2059
Definition parse-tree.h:2214
Definition parse-tree.h:2205
Definition parse-tree.h:2198
Definition parse-tree.h:1358
Definition parse-tree.h:1421
Definition parse-tree.h:3505
Definition parse-tree.h:1132
Definition parse-tree.h:1482
Definition parse-tree.h:1489
Definition parse-tree.h:2236
Definition parse-tree.h:3075
Definition parse-tree.h:2069
Definition parse-tree.h:3499
Definition parse-tree.h:1007
Definition parse-tree.h:6021
Definition parse-tree.h:6015
Definition parse-tree.h:3357
Definition parse-tree.h:3340
Definition parse-tree.h:2477
Definition parse-tree.h:2459
Definition parse-tree.h:2465
Definition parse-tree.h:2446
Definition parse-tree.h:2267
Definition parse-tree.h:2252
Definition parse-tree.h:675
Definition parse-tree.h:862
Definition parse-tree.h:691
Definition parse-tree.h:2736
Definition parse-tree.h:2244
Definition parse-tree.h:978
Definition parse-tree.h:1495
Definition parse-tree.h:1946
Definition parse-tree.h:1662
Definition parse-tree.h:1670
Definition parse-tree.h:3444
Definition parse-tree.h:848
Definition parse-tree.h:840
Definition parse-tree.h:989
Definition parse-tree.h:1013
Definition parse-tree.h:1044
Definition parse-tree.h:1121
Definition parse-tree.h:1066
Definition parse-tree.h:1216
Definition parse-tree.h:2564
Definition parse-tree.h:2292
Definition parse-tree.h:2301
Definition parse-tree.h:3314
Definition parse-tree.h:3301
Definition parse-tree.h:1741
Definition parse-tree.h:2714
Definition parse-tree.h:2712
Definition parse-tree.h:306
Definition parse-tree.h:2283
Definition parse-tree.h:2274
Definition parse-tree.h:1074
Definition parse-tree.h:1552
Definition parse-tree.h:1564
Definition parse-tree.h:1862
Definition parse-tree.h:1523
Definition parse-tree.h:1572
Definition parse-tree.h:1538
Definition parse-tree.h:1578
Definition parse-tree.h:1544
Definition parse-tree.h:2053
Definition parse-tree.h:442
Definition parse-tree.h:770
Definition parse-tree.h:330
Definition parse-tree.h:617
Definition parse-tree.h:1201
Definition parse-tree.h:751
Definition parse-tree.h:920
Definition parse-tree.h:1901
Definition parse-tree.h:1589
Definition parse-tree.h:2379
Definition parse-tree.h:3206
Definition parse-tree.h:2399
Definition parse-tree.h:2261
Definition parse-tree.h:1436
Definition parse-tree.h:3411
Definition parse-tree.h:1245
Definition parse-tree.h:1271
Definition parse-tree.h:1254
Definition parse-tree.h:1231
Definition parse-tree.h:2618
Definition parse-tree.h:2624
Definition parse-tree.h:2632
Definition parse-tree.h:534
Definition parse-tree.h:559
Definition parse-tree.h:972
Definition parse-tree.h:1380
Definition parse-tree.h:959
Definition parse-tree.h:1749
Definition parse-tree.h:1060
Definition parse-tree.h:2155
Definition parse-tree.h:2171
Definition parse-tree.h:2149
Definition parse-tree.h:2184
Definition parse-tree.h:2161
Definition parse-tree.h:2644
Definition parse-tree.h:2748
Definition parse-tree.h:3345
Definition parse-tree.h:3195
Definition parse-tree.h:3377
Definition parse-tree.h:3088
Definition parse-tree.h:3103
Definition tools.h:139
Definition tools.h:145
Definition parse-tree.h:2413
Definition parse-tree.h:2429
Definition parse-tree.h:2392
Definition parse-tree.h:1722
Definition parse-tree.h:1732
Definition parse-tree.h:424
Definition parse-tree.h:1646
Definition parse-tree.h:1655
Definition parse-tree.h:630
Definition parse-tree.h:1031
Definition parse-tree.h:2847
Definition parse-tree.h:2791
Definition parse-tree.h:2935
Definition parse-tree.h:2944
Definition parse-tree.h:2949
Definition parse-tree.h:2933
Definition parse-tree.h:2962
Definition parse-tree.h:798
Definition parse-tree.h:314
Definition parse-tree.h:1394
Definition parse-tree.h:1598
Definition parse-tree.h:3269
Definition parse-tree.h:3227
Definition parse-tree.h:3256
Definition parse-tree.h:3109
Definition parse-tree.h:480
Definition parse-tree.h:468
Definition parse-tree.h:709
Definition parse-tree.h:2774
Definition parse-tree.h:2772
Definition parse-tree.h:2683
Definition parse-tree.h:785
Definition parse-tree.h:663
Definition parse-tree.h:2356
Definition parse-tree.h:1337
Definition parse-tree.h:681
Definition parse-tree.h:1640
Definition parse-tree.h:894
Definition parse-tree.h:2324
Definition parse-tree.h:2658
Definition parse-tree.h:876
Definition parse-tree.h:322
Definition parse-tree.h:2344
Definition parse-tree.h:2983
Definition parse-tree.h:3521
Definition parse-tree.h:2116
Definition parse-tree.h:3008
Definition parse-tree.h:2997
Definition parse-tree.h:3019
Definition parse-tree.h:592
Definition parse-tree.h:1343
Definition parse-tree.h:643
Definition parse-tree.h:2362
Definition parse-tree.h:2586
Definition parse-tree.h:1469
Definition parse-tree.h:4487
Definition parse-tree.h:4491
Definition parse-tree.h:4503
Definition parse-tree.h:4510
Definition parse-tree.h:4518
Definition parse-tree.h:4533
Definition parse-tree.h:5529
Definition parse-tree.h:4540
Definition parse-tree.h:4603
Definition parse-tree.h:5387
Definition parse-tree.h:5376
Definition parse-tree.h:4549
Definition parse-tree.h:5318
Definition parse-tree.h:5393
Definition parse-tree.h:4572
Definition parse-tree.h:5328
Definition parse-tree.h:5287
Definition parse-tree.h:5271
Definition parse-tree.h:4587
Definition parse-tree.h:3701
Definition parse-tree.h:4595
Definition parse-tree.h:5456
Definition parse-tree.h:5473
Definition parse-tree.h:5448
Definition parse-tree.h:4617
Definition parse-tree.h:4645
Definition parse-tree.h:4632
Definition parse-tree.h:4699
Definition parse-tree.h:4697
Definition parse-tree.h:4721
Definition parse-tree.h:4729
Definition parse-tree.h:4739
Definition parse-tree.h:4749
Definition parse-tree.h:4757
Definition parse-tree.h:3591
Definition parse-tree.h:5294
Definition parse-tree.h:4712
Definition parse-tree.h:4681
Definition parse-tree.h:4772
Definition parse-tree.h:5323
Definition parse-tree.h:5398
Definition parse-tree.h:4783
Definition parse-tree.h:5361
Definition parse-tree.h:4791
Definition parse-tree.h:4810
Definition parse-tree.h:4822
Definition parse-tree.h:4832
Definition parse-tree.h:4840
Definition parse-tree.h:5482
Definition parse-tree.h:4845
Definition parse-tree.h:4853
Definition parse-tree.h:4869
Definition parse-tree.h:4892
Definition parse-tree.h:4858
Definition parse-tree.h:4882
Definition parse-tree.h:4899
Definition parse-tree.h:3713
Definition parse-tree.h:4654
Definition parse-tree.h:4672
Definition parse-tree.h:4663
Definition parse-tree.h:4908
Definition parse-tree.h:4926
Definition parse-tree.h:3625
Definition parse-tree.h:4937
Definition parse-tree.h:4962
Definition parse-tree.h:4974
Definition parse-tree.h:4983
Definition parse-tree.h:5341
Definition parse-tree.h:5355
Definition parse-tree.h:5007
Definition parse-tree.h:5019
Definition parse-tree.h:5031
Definition parse-tree.h:3646
Definition parse-tree.h:3637
Definition parse-tree.h:3634
Definition parse-tree.h:5042
Definition parse-tree.h:5055
Definition parse-tree.h:5067
Definition parse-tree.h:5078
Definition parse-tree.h:3690
Definition parse-tree.h:5088
Definition parse-tree.h:5489
Definition parse-tree.h:3620
Definition parse-tree.h:5097
Definition parse-tree.h:5109
Definition parse-tree.h:5407
Definition parse-tree.h:5120
Definition parse-tree.h:5127
Definition parse-tree.h:3650
Definition parse-tree.h:3672
Definition parse-tree.h:3659
Definition parse-tree.h:5136
Definition parse-tree.h:5147
Definition parse-tree.h:5495
Definition parse-tree.h:5156
Definition parse-tree.h:5177
Definition parse-tree.h:5188
Definition parse-tree.h:3616
Definition parse-tree.h:3609
Definition parse-tree.h:5197
Definition parse-tree.h:5244
Definition parse-tree.h:5257
Definition parse-tree.h:5365
Definition parse-tree.h:5233
Definition parse-tree.h:3119
Definition parse-tree.h:5927
Definition parse-tree.h:5934
Definition parse-tree.h:5863
Definition parse-tree.h:5956
Definition parse-tree.h:5995
Definition parse-tree.h:5984
Definition parse-tree.h:5975
Definition parse-tree.h:5857
Definition parse-tree.h:5869
Definition parse-tree.h:5555
Definition parse-tree.h:5560
Definition parse-tree.h:5597
Definition parse-tree.h:5681
Definition parse-tree.h:5545
Definition parse-tree.h:5608
Definition parse-tree.h:5622
Definition parse-tree.h:5638
Definition parse-tree.h:5646
Definition parse-tree.h:5705
Definition parse-tree.h:5667
Definition parse-tree.h:5413
Definition parse-tree.h:5657
Definition parse-tree.h:379
Definition parse-tree.h:2852
Definition parse-tree.h:2815
Definition parse-tree.h:3044
Definition parse-tree.h:2081
Definition parse-tree.h:1608
Definition parse-tree.h:2042
Definition parse-tree.h:2878
Definition parse-tree.h:3164
Definition parse-tree.h:2836
Definition parse-tree.h:933
Definition parse-tree.h:3142
Definition parse-tree.h:1085
Definition parse-tree.h:1113
Definition parse-tree.h:1941
Definition parse-tree.h:1105
Definition parse-tree.h:1099
Definition parse-tree.h:1092
Definition parse-tree.h:3152
Definition parse-tree.h:3284
Definition parse-tree.h:3245
Definition parse-tree.h:576
Definition parse-tree.h:2799
Definition parse-tree.h:817
Definition parse-tree.h:2313
Definition parse-tree.h:3030
Definition parse-tree.h:1621
Definition parse-tree.h:298
Definition parse-tree.h:1707
Definition parse-tree.h:2436
Definition parse-tree.h:2500
Definition parse-tree.h:2512
Definition parse-tree.h:2491
Definition parse-tree.h:2546
Definition parse-tree.h:2526
Definition parse-tree.h:2192
Definition parse-tree.h:3403
Definition parse-tree.h:402
Definition parse-tree.h:456
Definition parse-tree.h:2011
Definition parse-tree.h:362
Definition parse-tree.h:3421
Definition parse-tree.h:2578
Definition parse-tree.h:1931
Definition parse-tree.h:1222
Definition parse-tree.h:3542
Definition parse-tree.h:3514
Definition parse-tree.h:3537
Definition parse-tree.h:3050
Definition parse-tree.h:3061
Definition parse-tree.h:3214
Definition parse-tree.h:3387
Definition parse-tree.h:1698
Definition parse-tree.h:1893
Definition parse-tree.h:1689
Definition parse-tree.h:1879
Definition parse-tree.h:3184
Definition parse-tree.h:2596
Definition parse-tree.h:2609
Definition parse-tree.h:911
Definition parse-tree.h:1165
Definition parse-tree.h:1178
Definition parse-tree.h:1140
Definition parse-tree.h:1187
Definition parse-tree.h:1150
Definition parse-tree.h:1450
Definition parse-tree.h:2535
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:3530
Definition parse-tree.h:357
Definition parse-tree.h:2668
Definition parse-tree.h:804
Definition parse-tree.h:3128
Definition parse-tree.h:1909
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:285
Definition parse-tree.h:2862
Definition parse-tree.h:2107
Definition parse-tree.h:2100
Definition parse-tree.h:2131
Definition parse-tree.h:2094
Definition parse-tree.h:2821
Definition parse-tree.h:3766
Definition parse-tree.h:3757
Definition parse-tree.h:3727
Definition parse-tree.h:3737
Definition parse-tree.h:3750
Definition parse-tree.h:3922
Definition parse-tree.h:3933
Definition parse-tree.h:3952
Definition parse-tree.h:3943
Definition parse-tree.h:3983
Definition parse-tree.h:3996
Definition parse-tree.h:4007
Definition parse-tree.h:4019
Definition parse-tree.h:4033
Definition parse-tree.h:4046
Definition parse-tree.h:4068
Definition parse-tree.h:4080
Definition parse-tree.h:4091
Definition parse-tree.h:4101
Definition parse-tree.h:4131
Definition parse-tree.h:4143
Definition parse-tree.h:4155
Definition parse-tree.h:4168
Definition parse-tree.h:4178
Definition parse-tree.h:4187
Definition parse-tree.h:4197
Definition parse-tree.h:4207
Definition parse-tree.h:4222
Definition parse-tree.h:4235
Definition parse-tree.h:4271
Definition parse-tree.h:4258
Definition parse-tree.h:4244
Definition parse-tree.h:4281
Definition parse-tree.h:4294
Definition parse-tree.h:4320
Definition parse-tree.h:4310
Definition parse-tree.h:4355
Definition parse-tree.h:4331
Definition parse-tree.h:4365
Definition parse-tree.h:4375
Definition parse-tree.h:4385
Definition parse-tree.h:4396
Definition parse-tree.h:4407
Definition parse-tree.h:4417
Definition parse-tree.h:4426
Definition parse-tree.h:4437
Definition parse-tree.h:4447
Definition parse-tree.h:4458
Definition parse-tree.h:4469
Definition parse-tree.h:3804
Definition parse-tree.h:3787
Definition parse-tree.h:3828
Definition parse-tree.h:3794
Definition parse-tree.h:3855
Definition parse-tree.h:3867
Definition parse-tree.h:3880
Definition parse-tree.h:3889