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)
696 NODE(parser, OmpNoOpenMPClause)
697 NODE(parser, OmpNoOpenMPRoutinesClause)
698 NODE(parser, OmpNoParallelismClause)
702 NODE(OmpNumTeamsClause, Modifier)
704 NODE(OmpNumThreadsClause, Modifier)
705 NODE(OmpNumTasksClause, Modifier)
706 NODE(parser, OmpObject)
707 NODE(OmpObject, Invalid)
708 NODE_ENUM(OmpObject::Invalid, Kind)
709 NODE(parser, OmpObjectList)
711 NODE(OmpOrderClause, Modifier)
712 NODE_ENUM(OmpOrderClause, Ordering)
714 NODE_ENUM(OmpOrderingModifier, Value)
716 NODE_ENUM(OmpOrderModifier, Value)
720 NODE(parser, OmpPreferType)
722 NODE_ENUM(OmpPrescriptiveness, Value)
724 NODE_ENUM(OmpPresentModifier, Value)
726 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
728 NODE(OmpReductionClause, Modifier)
731 NODE_ENUM(OmpReductionModifier, Value)
734 NODE_ENUM(OmpRefModifier, Value)
740 NODE(OmpScheduleClause, Modifier)
741 NODE_ENUM(OmpScheduleClause, Kind)
745 NODE_ENUM(OmpSelfModifier, Value)
747 NODE_ENUM(OmpSeverityClause, SevLevel)
753 NODE(OmpStylizedInstance, Instance)
756 NODE(OmpTaskReductionClause, Modifier)
758 NODE(OmpThreadLimitClause, Modifier)
761 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
762 NODE(parser, OmpToClause)
763 NODE(OmpToClause, Modifier)
767 NODE(OmpTraitPropertyExtension, Complex)
769 NODE(parser, OmpTraitScore)
771 NODE(OmpTraitSelector, Properties)
773 NODE_ENUM(OmpTraitSelectorName, Value)
776 NODE_ENUM(OmpTraitSetSelectorName, Value)
778 NODE(parser, OmpTypeName)
783 NODE(parser, OmpUseClause)
785 NODE(OmpUsesAllocatorsClause, AllocatorSpec)
789 NODE_ENUM(OmpVariableCategory, Value)
790 NODE(parser, OmpWhenClause)
791 NODE(OmpWhenClause, Modifier)
793 NODE_ENUM(OmpxHoldModifier, Value)
794#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
795#include "llvm/Frontend/OpenMP/OMP.inc"
796
797 NODE(parser, Only)
811
828
829 NODE(parser, OpenStmt)
830 NODE(parser, Optional)
831 NODE(parser, OptionalStmt)
834 NODE(parser, OutputItem)
835 NODE(parser, Parameter)
836 NODE(parser, ParameterStmt)
838 NODE(parser, Pass)
839 NODE(parser, PauseStmt)
840 NODE(parser, Pointer)
842 NODE(PointerAssignmentStmt, Bounds)
843 NODE(parser, PointerDecl)
844 NODE(parser, PointerObject)
845 NODE(parser, PointerStmt)
847 NODE(parser, PrefixSpec)
848 NODE(PrefixSpec, Elemental)
849 NODE(PrefixSpec, Impure)
850 NODE(PrefixSpec, Module)
851 NODE(PrefixSpec, Non_Recursive)
852 NODE(PrefixSpec, Pure)
853 NODE(PrefixSpec, Recursive)
854 NODE(PrefixSpec, Simple)
855 NODE(PrefixSpec, Attributes)
856 NODE(PrefixSpec, Launch_Bounds)
857 NODE(PrefixSpec, Cluster_Dims)
858 NODE(parser, PrintStmt)
859 NODE(parser, PrivateStmt)
861 NODE(parser, ProcAttrSpec)
865 NODE(parser, ProcDecl)
866 NODE(parser, ProcInterface)
870 NODE(parser, ProcedureStmt)
871 NODE_ENUM(ProcedureStmt, Kind)
872 NODE(parser, Program)
873 NODE(parser, ProgramStmt)
874 NODE(parser, ProgramUnit)
875 NODE(parser, Protected)
876 NODE(parser, ProtectedStmt)
877 NODE(parser, RankClause)
878 NODE(parser, ReadStmt)
880 NODE(RealLiteralConstant, Real)
881 NODE(parser, Rename)
882 NODE(Rename, Names)
883 NODE(Rename, Operators)
884 NODE(parser, ReturnStmt)
885 NODE(parser, RewindStmt)
886 NODE(parser, Save)
887 NODE(parser, SaveStmt)
888 NODE(parser, SavedEntity)
889 NODE_ENUM(SavedEntity, Kind)
893 NODE(SelectRankCaseStmt, Rank)
895 NODE(SelectRankConstruct, RankCase)
898 NODE(SelectTypeConstruct, TypeCase)
900 NODE(parser, Selector)
902 NODE(parser, SequenceStmt)
903 NODE(parser, Sign)
908 NODE(parser, SpecificationExpr)
910 NODE(parser, Star)
911 NODE(parser, StatOrErrmsg)
912 NODE(parser, StatVariable)
913 NODE(parser, StatusExpr)
915 NODE(parser, StopCode)
916 NODE(parser, StopStmt)
917 NODE_ENUM(StopStmt, Kind)
920 NODE(parser, StructureDef)
921 NODE(StructureDef, EndStructureStmt)
923 NODE(parser, StructureStmt)
924 NODE(parser, Submodule)
925 NODE(parser, SubmoduleStmt)
929 NODE(parser, Substring)
932 NODE(parser, Suffix)
933 NODE(parser, SyncAllStmt)
935 NODE(SyncImagesStmt, ImageSet)
936 NODE(parser, SyncMemoryStmt)
937 NODE(parser, SyncTeamStmt)
938 NODE(parser, Target)
939 NODE(parser, TargetStmt)
940 NODE(parser, TypeAttrSpec)
941 NODE(TypeAttrSpec, BindC)
942 NODE(TypeAttrSpec, Extends)
948 NODE(TypeBoundProcedureStmt, WithInterface)
949 NODE(TypeBoundProcedureStmt, WithoutInterface)
951 NODE(parser, TypeGuardStmt)
952 NODE(TypeGuardStmt, Guard)
953 NODE(parser, TypeParamDecl)
955 NODE(common, TypeParamAttr)
956 NODE(parser, TypeParamSpec)
958 NODE(TypeParamValue, Deferred)
959 NODE(parser, TypeSpec)
960 NODE(parser, Union)
961 NODE(Union, EndUnionStmt)
962 NODE(Union, UnionStmt)
963 NODE(parser, UnlockStmt)
965 NODE(parser, UnsignedTypeSpec)
966 NODE(parser, UseStmt)
967 NODE_ENUM(UseStmt, ModuleNature)
968 NODE(parser, Value)
969 NODE(parser, ValueStmt)
970 NODE(parser, Variable)
972 NODE(VectorTypeSpec, PairVectorTypeSpec)
973 NODE(VectorTypeSpec, QuadVectorTypeSpec)
974 NODE(parser, IntrinsicVectorTypeSpec)
976 NODE(parser, Verbatim)
977 NODE(parser, Volatile)
978 NODE(parser, VolatileStmt)
979 NODE(parser, WaitSpec)
980 NODE(parser, WaitStmt)
983 NODE(WhereConstruct, Elsewhere)
984 NODE(WhereConstruct, MaskedElsewhere)
986 NODE(parser, WhereStmt)
987 NODE(parser, WriteStmt)
988#undef NODE
989#undef NODE_NAME
990
991 template <typename T> bool Pre(const T &x) {
992 std::string fortran{AsFortran<T>(x)};
993 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
994 Prefix(GetNodeName(x));
995 } else {
996 IndentEmptyLine();
997 out_ << GetNodeName(x);
998 if (!fortran.empty()) {
999 out_ << " = '" << fortran << '\'';
1000 }
1001 EndLine();
1002 ++indent_;
1003 }
1004 return true;
1005 }
1006
1007 template <typename T> void Post(const T &x) {
1008 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
1009 EndLineIfNonempty();
1010 } else {
1011 --indent_;
1012 }
1013 }
1014
1015 // A few types we want to ignore
1016
1017 bool Pre(const CharBlock &) { return true; }
1018 void Post(const CharBlock &) {}
1019
1020 template <typename T> bool Pre(const Statement<T> &) { return true; }
1021 template <typename T> void Post(const Statement<T> &) {}
1022 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
1023 template <typename T> void Post(const UnlabeledStatement<T> &) {}
1024
1025 template <typename T> bool Pre(const common::Indirection<T> &) {
1026 return true;
1027 }
1028 template <typename T> void Post(const common::Indirection<T> &) {}
1029
1030 template <typename A> bool Pre(const Scalar<A> &) {
1031 Prefix("Scalar");
1032 return true;
1033 }
1034 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1035
1036 template <typename A> bool Pre(const Constant<A> &) {
1037 Prefix("Constant");
1038 return true;
1039 }
1040 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1041
1042 template <typename A> bool Pre(const Integer<A> &) {
1043 Prefix("Integer");
1044 return true;
1045 }
1046 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1047
1048 template <typename A> bool Pre(const Logical<A> &) {
1049 Prefix("Logical");
1050 return true;
1051 }
1052 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1053
1054 template <typename A> bool Pre(const DefaultChar<A> &) {
1055 Prefix("DefaultChar");
1056 return true;
1057 }
1058 template <typename A> void Post(const DefaultChar<A> &) {
1059 EndLineIfNonempty();
1060 }
1061
1062 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1063 template <typename... A> void Post(const std::tuple<A...> &) {}
1064
1065 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1066 template <typename... A> void Post(const std::variant<A...> &) {}
1067
1068protected:
1069 // Return a Fortran representation of this node to include in the dump
1070 template <typename T> std::string AsFortran(const T &x) {
1071 std::string buf;
1072 llvm::raw_string_ostream ss{buf};
1073 if constexpr (HasTypedExpr<T>::value) {
1074 if (asFortran_ && x.typedExpr) {
1075 asFortran_->expr(ss, *x.typedExpr);
1076 }
1077 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1078 std::is_same_v<T, PointerAssignmentStmt>) {
1079 if (asFortran_ && x.typedAssignment) {
1080 asFortran_->assignment(ss, *x.typedAssignment);
1081 }
1082 } else if constexpr (std::is_same_v<T, CallStmt>) {
1083 if (asFortran_ && x.typedCall) {
1084 asFortran_->call(ss, *x.typedCall);
1085 }
1086 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1087 std::is_same_v<T, SignedIntLiteralConstant> ||
1088 std::is_same_v<T, UnsignedLiteralConstant>) {
1089 ss << std::get<CharBlock>(x.t);
1090 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1091 ss << x.source;
1092 } else if constexpr (std::is_same_v<T, std::string> ||
1093 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1094 ss << x;
1095 }
1096 if (ss.tell()) {
1097 return buf;
1098 }
1099 if constexpr (std::is_same_v<T, Name>) {
1100 return x.source.ToString();
1101#ifdef SHOW_ALL_SOURCE_MEMBERS
1102 } else if constexpr (HasSource<T>::value) {
1103 return x.source.ToString();
1104#endif
1105 } else if constexpr (std::is_same_v<T, int>) {
1106 return std::to_string(x);
1107 } else if constexpr (std::is_same_v<T, bool>) {
1108 return x ? "true" : "false";
1109 } else {
1110 return "";
1111 }
1112 }
1113
1114 void IndentEmptyLine() {
1115 if (emptyline_ && indent_ > 0) {
1116 for (int i{0}; i < indent_; ++i) {
1117 out_ << "| ";
1118 }
1119 emptyline_ = false;
1120 }
1121 }
1122
1123 void Prefix(const char *str) {
1124 IndentEmptyLine();
1125 out_ << str << " -> ";
1126 emptyline_ = false;
1127 }
1128
1129 void Prefix(const std::string &str) {
1130 IndentEmptyLine();
1131 out_ << str << " -> ";
1132 emptyline_ = false;
1133 }
1134
1135 void EndLine() {
1136 out_ << '\n';
1137 emptyline_ = true;
1138 }
1139
1140 void EndLineIfNonempty() {
1141 if (!emptyline_) {
1142 EndLine();
1143 }
1144 }
1145
1146private:
1147 int indent_{0};
1148 llvm::raw_ostream &out_;
1149 const AnalyzedObjectsAsFortran *const asFortran_;
1150 bool emptyline_{false};
1151};
1152
1153template <typename T>
1154llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1155 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1156 ParseTreeDumper dumper{out, asFortran};
1157 Walk(x, dumper);
1158 return out;
1159}
1160
1161} // namespace Fortran::parser
1162#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:1309
Definition parse-tree.h:1316
Definition parse-tree.h:1280
Definition parse-tree.h:1268
Definition parse-tree.h:5851
Definition parse-tree.h:5827
Definition parse-tree.h:5843
Definition parse-tree.h:5835
Definition parse-tree.h:5812
Definition parse-tree.h:5876
Definition parse-tree.h:5806
Definition parse-tree.h:5682
Definition parse-tree.h:5655
Definition parse-tree.h:5783
Definition parse-tree.h:5768
Definition parse-tree.h:5763
Definition parse-tree.h:5671
Definition parse-tree.h:5693
Definition parse-tree.h:5676
Definition parse-tree.h:5688
Definition parse-tree.h:5720
Definition parse-tree.h:5714
Definition parse-tree.h:5818
Definition parse-tree.h:5882
Definition parse-tree.h:5759
Definition parse-tree.h:5750
Definition parse-tree.h:5660
Definition parse-tree.h:5699
Definition parse-tree.h:5647
Definition parse-tree.h:5743
Definition parse-tree.h:5739
Definition parse-tree.h:5735
Definition parse-tree.h:5665
Definition parse-tree.h:5731
Definition parse-tree.h:5725
Definition parse-tree.h:5709
Definition parse-tree.h:902
Definition parse-tree.h:1448
Definition parse-tree.h:500
Definition parse-tree.h:3321
Definition parse-tree.h:3310
Definition parse-tree.h:2010
Definition parse-tree.h:1975
Definition parse-tree.h:1954
Definition parse-tree.h:1966
Definition parse-tree.h:2021
Definition parse-tree.h:1983
Definition parse-tree.h:3543
Definition parse-tree.h:1940
Definition parse-tree.h:1373
Definition parse-tree.h:3548
Definition parse-tree.h:3553
Definition parse-tree.h:2047
Definition parse-tree.h:2202
Definition parse-tree.h:2193
Definition parse-tree.h:2186
Definition parse-tree.h:1346
Definition parse-tree.h:1409
Definition parse-tree.h:3493
Definition parse-tree.h:1120
Definition parse-tree.h:1470
Definition parse-tree.h:1477
Definition parse-tree.h:2224
Definition parse-tree.h:3063
Definition parse-tree.h:2057
Definition parse-tree.h:3487
Definition parse-tree.h:5952
Definition parse-tree.h:5946
Definition parse-tree.h:3345
Definition parse-tree.h:3328
Definition parse-tree.h:2465
Definition parse-tree.h:2447
Definition parse-tree.h:2453
Definition parse-tree.h:2434
Definition parse-tree.h:2255
Definition parse-tree.h:2240
Definition parse-tree.h:674
Definition parse-tree.h:861
Definition parse-tree.h:690
Definition parse-tree.h:2724
Definition parse-tree.h:2232
Definition parse-tree.h:977
Definition parse-tree.h:1483
Definition parse-tree.h:1934
Definition parse-tree.h:1650
Definition parse-tree.h:1658
Definition parse-tree.h:3432
Definition parse-tree.h:847
Definition parse-tree.h:839
Definition parse-tree.h:988
Definition parse-tree.h:1001
Definition parse-tree.h:1032
Definition parse-tree.h:1109
Definition parse-tree.h:1054
Definition parse-tree.h:1204
Definition parse-tree.h:2552
Definition parse-tree.h:2280
Definition parse-tree.h:2289
Definition parse-tree.h:3302
Definition parse-tree.h:3289
Definition parse-tree.h:1729
Definition parse-tree.h:2702
Definition parse-tree.h:2700
Definition parse-tree.h:305
Definition parse-tree.h:2271
Definition parse-tree.h:2262
Definition parse-tree.h:1062
Definition parse-tree.h:1540
Definition parse-tree.h:1552
Definition parse-tree.h:1850
Definition parse-tree.h:1511
Definition parse-tree.h:1560
Definition parse-tree.h:1526
Definition parse-tree.h:1566
Definition parse-tree.h:1532
Definition parse-tree.h:2041
Definition parse-tree.h:441
Definition parse-tree.h:769
Definition parse-tree.h:329
Definition parse-tree.h:616
Definition parse-tree.h:1189
Definition parse-tree.h:750
Definition parse-tree.h:919
Definition parse-tree.h:1889
Definition parse-tree.h:1577
Definition parse-tree.h:2367
Definition parse-tree.h:3194
Definition parse-tree.h:2387
Definition parse-tree.h:2249
Definition parse-tree.h:1424
Definition parse-tree.h:3399
Definition parse-tree.h:1233
Definition parse-tree.h:1259
Definition parse-tree.h:1242
Definition parse-tree.h:1219
Definition parse-tree.h:2606
Definition parse-tree.h:2612
Definition parse-tree.h:2620
Definition parse-tree.h:533
Definition parse-tree.h:558
Definition parse-tree.h:971
Definition parse-tree.h:1368
Definition parse-tree.h:958
Definition parse-tree.h:1737
Definition parse-tree.h:1048
Definition parse-tree.h:2143
Definition parse-tree.h:2159
Definition parse-tree.h:2137
Definition parse-tree.h:2172
Definition parse-tree.h:2149
Definition parse-tree.h:2632
Definition parse-tree.h:2736
Definition parse-tree.h:3333
Definition parse-tree.h:3183
Definition parse-tree.h:3365
Definition parse-tree.h:3076
Definition parse-tree.h:3091
Definition tools.h:139
Definition tools.h:145
Definition parse-tree.h:2401
Definition parse-tree.h:2417
Definition parse-tree.h:2380
Definition parse-tree.h:1710
Definition parse-tree.h:1720
Definition parse-tree.h:423
Definition parse-tree.h:1634
Definition parse-tree.h:1643
Definition parse-tree.h:629
Definition parse-tree.h:1019
Definition parse-tree.h:2835
Definition parse-tree.h:2779
Definition parse-tree.h:2923
Definition parse-tree.h:2932
Definition parse-tree.h:2937
Definition parse-tree.h:2921
Definition parse-tree.h:2950
Definition parse-tree.h:797
Definition parse-tree.h:313
Definition parse-tree.h:1382
Definition parse-tree.h:1586
Definition parse-tree.h:3257
Definition parse-tree.h:3215
Definition parse-tree.h:3244
Definition parse-tree.h:3097
Definition parse-tree.h:479
Definition parse-tree.h:467
Definition parse-tree.h:708
Definition parse-tree.h:2762
Definition parse-tree.h:2760
Definition parse-tree.h:2671
Definition parse-tree.h:784
Definition parse-tree.h:662
Definition parse-tree.h:2344
Definition parse-tree.h:1325
Definition parse-tree.h:680
Definition parse-tree.h:1628
Definition parse-tree.h:893
Definition parse-tree.h:2312
Definition parse-tree.h:2646
Definition parse-tree.h:875
Definition parse-tree.h:321
Definition parse-tree.h:2332
Definition parse-tree.h:2971
Definition parse-tree.h:3509
Definition parse-tree.h:2104
Definition parse-tree.h:2996
Definition parse-tree.h:2985
Definition parse-tree.h:3007
Definition parse-tree.h:591
Definition parse-tree.h:1331
Definition parse-tree.h:642
Definition parse-tree.h:2350
Definition parse-tree.h:2574
Definition parse-tree.h:1457
Definition parse-tree.h:4428
Definition parse-tree.h:4432
Definition parse-tree.h:4444
Definition parse-tree.h:4451
Definition parse-tree.h:4459
Definition parse-tree.h:4474
Definition parse-tree.h:5470
Definition parse-tree.h:4481
Definition parse-tree.h:4544
Definition parse-tree.h:5328
Definition parse-tree.h:5317
Definition parse-tree.h:4490
Definition parse-tree.h:5259
Definition parse-tree.h:5334
Definition parse-tree.h:4513
Definition parse-tree.h:5269
Definition parse-tree.h:5228
Definition parse-tree.h:5212
Definition parse-tree.h:4528
Definition parse-tree.h:3688
Definition parse-tree.h:4536
Definition parse-tree.h:5397
Definition parse-tree.h:5414
Definition parse-tree.h:5389
Definition parse-tree.h:4558
Definition parse-tree.h:4586
Definition parse-tree.h:4573
Definition parse-tree.h:4640
Definition parse-tree.h:4638
Definition parse-tree.h:4662
Definition parse-tree.h:4670
Definition parse-tree.h:4680
Definition parse-tree.h:4690
Definition parse-tree.h:4698
Definition parse-tree.h:3579
Definition parse-tree.h:5235
Definition parse-tree.h:4653
Definition parse-tree.h:4622
Definition parse-tree.h:4713
Definition parse-tree.h:5264
Definition parse-tree.h:5339
Definition parse-tree.h:4724
Definition parse-tree.h:5302
Definition parse-tree.h:4732
Definition parse-tree.h:4751
Definition parse-tree.h:4763
Definition parse-tree.h:4773
Definition parse-tree.h:4781
Definition parse-tree.h:5423
Definition parse-tree.h:4786
Definition parse-tree.h:4794
Definition parse-tree.h:4810
Definition parse-tree.h:4833
Definition parse-tree.h:4799
Definition parse-tree.h:4823
Definition parse-tree.h:4840
Definition parse-tree.h:3700
Definition parse-tree.h:4595
Definition parse-tree.h:4613
Definition parse-tree.h:4604
Definition parse-tree.h:4849
Definition parse-tree.h:4867
Definition parse-tree.h:3613
Definition parse-tree.h:4878
Definition parse-tree.h:4903
Definition parse-tree.h:4915
Definition parse-tree.h:4924
Definition parse-tree.h:5282
Definition parse-tree.h:5296
Definition parse-tree.h:4948
Definition parse-tree.h:4960
Definition parse-tree.h:4972
Definition parse-tree.h:3634
Definition parse-tree.h:3625
Definition parse-tree.h:3622
Definition parse-tree.h:4983
Definition parse-tree.h:4996
Definition parse-tree.h:5008
Definition parse-tree.h:5019
Definition parse-tree.h:3678
Definition parse-tree.h:5029
Definition parse-tree.h:5430
Definition parse-tree.h:3608
Definition parse-tree.h:5038
Definition parse-tree.h:5050
Definition parse-tree.h:5348
Definition parse-tree.h:5061
Definition parse-tree.h:5068
Definition parse-tree.h:3638
Definition parse-tree.h:3660
Definition parse-tree.h:3647
Definition parse-tree.h:5077
Definition parse-tree.h:5088
Definition parse-tree.h:5436
Definition parse-tree.h:5097
Definition parse-tree.h:5118
Definition parse-tree.h:5129
Definition parse-tree.h:3604
Definition parse-tree.h:3597
Definition parse-tree.h:5138
Definition parse-tree.h:5185
Definition parse-tree.h:5198
Definition parse-tree.h:5306
Definition parse-tree.h:5174
Definition parse-tree.h:3107
Definition parse-tree.h:5858
Definition parse-tree.h:5865
Definition parse-tree.h:5794
Definition parse-tree.h:5887
Definition parse-tree.h:5926
Definition parse-tree.h:5915
Definition parse-tree.h:5906
Definition parse-tree.h:5788
Definition parse-tree.h:5800
Definition parse-tree.h:5496
Definition parse-tree.h:5501
Definition parse-tree.h:5538
Definition parse-tree.h:5622
Definition parse-tree.h:5486
Definition parse-tree.h:5549
Definition parse-tree.h:5563
Definition parse-tree.h:5579
Definition parse-tree.h:5587
Definition parse-tree.h:5640
Definition parse-tree.h:5608
Definition parse-tree.h:5354
Definition parse-tree.h:5598
Definition parse-tree.h:378
Definition parse-tree.h:2840
Definition parse-tree.h:2803
Definition parse-tree.h:3032
Definition parse-tree.h:2069
Definition parse-tree.h:1596
Definition parse-tree.h:2030
Definition parse-tree.h:2866
Definition parse-tree.h:3152
Definition parse-tree.h:2824
Definition parse-tree.h:932
Definition parse-tree.h:3130
Definition parse-tree.h:1073
Definition parse-tree.h:1101
Definition parse-tree.h:1929
Definition parse-tree.h:1093
Definition parse-tree.h:1087
Definition parse-tree.h:1080
Definition parse-tree.h:3140
Definition parse-tree.h:3272
Definition parse-tree.h:3233
Definition parse-tree.h:575
Definition parse-tree.h:2787
Definition parse-tree.h:816
Definition parse-tree.h:2301
Definition parse-tree.h:3018
Definition parse-tree.h:1609
Definition parse-tree.h:297
Definition parse-tree.h:1695
Definition parse-tree.h:2424
Definition parse-tree.h:2488
Definition parse-tree.h:2500
Definition parse-tree.h:2479
Definition parse-tree.h:2534
Definition parse-tree.h:2514
Definition parse-tree.h:2180
Definition parse-tree.h:3391
Definition parse-tree.h:401
Definition parse-tree.h:455
Definition parse-tree.h:1999
Definition parse-tree.h:361
Definition parse-tree.h:3409
Definition parse-tree.h:2566
Definition parse-tree.h:1919
Definition parse-tree.h:1210
Definition parse-tree.h:3530
Definition parse-tree.h:3502
Definition parse-tree.h:3525
Definition parse-tree.h:3038
Definition parse-tree.h:3049
Definition parse-tree.h:3202
Definition parse-tree.h:3375
Definition parse-tree.h:1686
Definition parse-tree.h:1881
Definition parse-tree.h:1677
Definition parse-tree.h:1867
Definition parse-tree.h:3172
Definition parse-tree.h:2584
Definition parse-tree.h:2597
Definition parse-tree.h:910
Definition parse-tree.h:1153
Definition parse-tree.h:1166
Definition parse-tree.h:1128
Definition parse-tree.h:1175
Definition parse-tree.h:1138
Definition parse-tree.h:1438
Definition parse-tree.h:2523
Definition parse-tree.h:938
Definition parse-tree.h:946
Definition parse-tree.h:744
Definition parse-tree.h:653
Definition parse-tree.h:757
Definition parse-tree.h:3518
Definition parse-tree.h:356
Definition parse-tree.h:2656
Definition parse-tree.h:803
Definition parse-tree.h:3116
Definition parse-tree.h:1897
Definition parse-tree.h:730
Definition parse-tree.h:735
Definition parse-tree.h:284
Definition parse-tree.h:2850
Definition parse-tree.h:2095
Definition parse-tree.h:2088
Definition parse-tree.h:2119
Definition parse-tree.h:2082
Definition parse-tree.h:2809
Definition parse-tree.h:3753
Definition parse-tree.h:3744
Definition parse-tree.h:3714
Definition parse-tree.h:3724
Definition parse-tree.h:3737
Definition parse-tree.h:3908
Definition parse-tree.h:3918
Definition parse-tree.h:3935
Definition parse-tree.h:3927
Definition parse-tree.h:3963
Definition parse-tree.h:3975
Definition parse-tree.h:3985
Definition parse-tree.h:3996
Definition parse-tree.h:4009
Definition parse-tree.h:4021
Definition parse-tree.h:4042
Definition parse-tree.h:4053
Definition parse-tree.h:4063
Definition parse-tree.h:4072
Definition parse-tree.h:4104
Definition parse-tree.h:4115
Definition parse-tree.h:4126
Definition parse-tree.h:4138
Definition parse-tree.h:4148
Definition parse-tree.h:4156
Definition parse-tree.h:4165
Definition parse-tree.h:4174
Definition parse-tree.h:4188
Definition parse-tree.h:4200
Definition parse-tree.h:4233
Definition parse-tree.h:4221
Definition parse-tree.h:4208
Definition parse-tree.h:4242
Definition parse-tree.h:4265
Definition parse-tree.h:4256
Definition parse-tree.h:4299
Definition parse-tree.h:4275
Definition parse-tree.h:4308
Definition parse-tree.h:4323
Definition parse-tree.h:4332
Definition parse-tree.h:4342
Definition parse-tree.h:4352
Definition parse-tree.h:4361
Definition parse-tree.h:4369
Definition parse-tree.h:4379
Definition parse-tree.h:4388
Definition parse-tree.h:4398
Definition parse-tree.h:4411
Definition parse-tree.h:3791
Definition parse-tree.h:3774
Definition parse-tree.h:3815
Definition parse-tree.h:3781
Definition parse-tree.h:3842
Definition parse-tree.h:3854
Definition parse-tree.h:3867
Definition parse-tree.h:3876