FLANG
dump-parse-tree.h
1//===-- include/flang/Parser/dump-parse-tree.h ------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef FORTRAN_PARSER_DUMP_PARSE_TREE_H_
10#define FORTRAN_PARSER_DUMP_PARSE_TREE_H_
11
12#include "format-specification.h"
13#include "parse-tree-visitor.h"
14#include "parse-tree.h"
15#include "tools.h"
16#include "unparse.h"
17#include "flang/Common/enum-set.h"
18#include "flang/Common/idioms.h"
19#include "flang/Common/indirection.h"
20#include "flang/Support/Fortran.h"
21#include "llvm/ADT/StringExtras.h"
22#include "llvm/Frontend/OpenMP/OMP.h"
23#include "llvm/Support/raw_ostream.h"
24#include <string>
25#include <type_traits>
26
27namespace Fortran::parser {
28
29//
30// Dump the Parse Tree hierarchy of any node 'x' of the parse tree.
31//
32
33class ParseTreeDumper {
34public:
35 explicit ParseTreeDumper(llvm::raw_ostream &out,
36 const AnalyzedObjectsAsFortran *asFortran = nullptr)
37 : out_(out), asFortran_{asFortran} {}
38
39 static constexpr const char *GetNodeName(const char *) { return "char *"; }
40
41 template <typename T, typename E, size_t B>
42 static std::string GetMemberNames(const common::EnumSet<E, B> &x) {
43 llvm::ListSeparator sep;
44 std::string s;
45 llvm::raw_string_ostream stream(s);
46 x.IterateOverMembers([&](E e) { stream << sep << T::EnumToString(e); });
47 return stream.str();
48 }
49#define NODE_ENUMSET(T, S) \
50 static std::string GetNodeName(const T::S &x) { \
51 return #S " = {"s + GetMemberNames<T>(x) + "}"s; \
52 }
53#define NODE_NAME(T, N) \
54 static constexpr const char *GetNodeName(const T &) { return N; }
55#define NODE_ENUM(T, E) \
56 static std::string GetNodeName(const T::E &x) { \
57 return #E " = "s + std::string{T::EnumToString(x)}; \
58 }
59#define NODE(T1, T2) NODE_NAME(T1::T2, #T2)
60 NODE_NAME(bool, "bool")
61 NODE_NAME(int, "int")
62 NODE(std, string)
63 NODE(std, int64_t)
64 NODE(std, uint64_t)
65 NODE_ENUM(common, CUDADataAttr)
66 NODE_ENUM(common, CUDASubprogramAttrs)
67 NODE_ENUM(common, ImportKind)
68 NODE_ENUM(common, OmpDependenceKind)
69 NODE_ENUM(common, OmpMemoryOrderType)
70 NODE_ENUM(common, OpenACCDeviceType)
71 NODE(format, ControlEditDesc)
72 NODE(format::ControlEditDesc, Kind)
73 NODE(format, DerivedTypeDataEditDesc)
74 NODE(format, FormatItem)
75 NODE(format, FormatSpecification)
76 NODE(format, IntrinsicTypeDataEditDesc)
78 NODE(parser, Abstract)
80 NODE(AccAtomicCapture, Stmt1)
81 NODE(AccAtomicCapture, Stmt2)
89 NODE(parser, AccClause)
90#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
91#include "llvm/Frontend/OpenACC/ACC.inc"
94 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
95 return llvm::Twine(
96 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
97 .str();
98 }
102 NODE_ENUM(parser::AccDataModifier, Modifier)
104 NODE(parser, AccEndAtomic)
108 NODE(parser, AccGangArg)
109 NODE(AccGangArg, Num)
110 NODE(AccGangArg, Dim)
111 NODE(AccGangArg, Static)
113 NODE(parser, AccObject)
114 NODE(parser, AccObjectList)
117 NODE(parser, AccSizeExpr)
119 NODE(parser, AccSelfClause)
122
124 NODE(parser, AccTileExpr)
127 NODE(parser, AccEndLoop)
129 static std::string GetNodeName(const llvm::acc::Directive &x) {
130 return llvm::Twine(
131 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
132 .str();
133 }
134 NODE(parser, AcImpliedDo)
136 NODE(parser, AcValue)
137 NODE(parser, AccessStmt)
138 NODE(parser, AccessId)
139 NODE(parser, AccessSpec)
140 NODE_ENUM(AccessSpec, Kind)
141 NODE(parser, AcSpec)
142 NODE(parser, ActionStmt)
143 NODE(parser, ActualArg)
144 NODE(ActualArg, PercentRef)
145 NODE(ActualArg, PercentVal)
146 NODE(parser, ActualArgSpec)
147 NODE(AcValue, Triplet)
148 NODE(parser, AllocOpt)
149 NODE(AllocOpt, Mold)
150 NODE(AllocOpt, Source)
151 NODE(AllocOpt, Stream)
152 NODE(AllocOpt, Pinned)
153 NODE(parser, Allocatable)
154 NODE(parser, AllocatableStmt)
158 NODE(parser, AllocateStmt)
159 NODE(parser, Allocation)
160 NODE(parser, AltReturnSpec)
162 NODE(parser, ArrayConstructor)
163 NODE(parser, ArrayElement)
164 NODE(parser, ArraySpec)
165 NODE(parser, AssignStmt)
169 NODE(parser, AssociateStmt)
170 NODE(parser, Association)
171 NODE(parser, AssumedImpliedSpec)
172 NODE(parser, AssumedRankSpec)
173 NODE(parser, AssumedShapeSpec)
175 NODE(parser, Asynchronous)
176 NODE(parser, AsynchronousStmt)
177 NODE(parser, AttrSpec)
178 NODE(parser, BOZLiteralConstant)
179 NODE(parser, BackspaceStmt)
180 NODE(parser, BasedPointer)
181 NODE(parser, BasedPointerStmt)
182 NODE(parser, BindAttr)
183 NODE(BindAttr, Deferred)
184 NODE(BindAttr, Non_Overridable)
185 NODE(parser, BindEntity)
186 NODE_ENUM(BindEntity, Kind)
187 NODE(parser, BindStmt)
188 NODE(parser, Block)
190 NODE(parser, BlockData)
191 NODE(parser, BlockDataStmt)
192 NODE(parser, BlockSpecificationPart)
193 NODE(parser, BlockStmt)
195 NODE(parser, BoundsSpec)
196 NODE(parser, Call)
197 NODE(parser, CallStmt)
198 NODE(CallStmt, Chevrons)
199 NODE(CallStmt, StarOrExpr)
200 NODE(parser, CaseConstruct)
201 NODE(CaseConstruct, Case)
202 NODE(parser, CaseSelector)
203 NODE(parser, CaseStmt)
205 NODE(CaseValueRange, Range)
208 NODE(parser, CharLength)
211 NODE(parser, CharSelector)
212 NODE(CharSelector, LengthAndKind)
213 NODE(parser, CloseStmt)
214 NODE(CloseStmt, CloseSpec)
216 NODE(parser, CoarraySpec)
218 NODE(parser, CodimensionStmt)
221 NODE(parser, CommonStmt)
222 NODE(CommonStmt, Block)
224 NODE(CompilerDirective, AssumeAligned)
225 NODE(CompilerDirective, IgnoreTKR)
226 NODE(CompilerDirective, Inline)
227 NODE(CompilerDirective, IVDep)
228 NODE(CompilerDirective, ForceInline)
229 NODE(CompilerDirective, LoopCount)
230 NODE(CompilerDirective, NameValue)
231 NODE(CompilerDirective, NoInline)
232 NODE(CompilerDirective, Unrecognized)
233 NODE(CompilerDirective, VectorAlways)
234 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
235 NODE(CompilerDirective, VectorLength)
236 NODE(CompilerDirective, Unroll)
237 NODE(CompilerDirective, UnrollAndJam)
238 NODE(CompilerDirective, NoVector)
239 NODE(CompilerDirective, NoUnroll)
240 NODE(CompilerDirective, NoUnrollAndJam)
241 NODE(CompilerDirective, Prefetch)
242 NODE(CompilerDirective, InlineAlways)
243 NODE(CompilerDirective, Simd)
245 NODE(parser, ComplexPart)
248 NODE(parser, ComponentDataSource)
249 NODE(parser, ComponentDecl)
250 NODE(parser, FillDecl)
253 NODE(parser, ComponentSpec)
259 NODE(ConditionalArg, Consequent)
261 NODE(parser, ConditionalArgNil)
262 NODE(parser, ConnectSpec)
263 NODE(ConnectSpec, CharExpr)
264 NODE_ENUM(ConnectSpec::CharExpr, Kind)
265 NODE(ConnectSpec, Newunit)
266 NODE(ConnectSpec, Recl)
267 NODE(parser, ContainsStmt)
268 NODE(parser, Contiguous)
269 NODE(parser, ContiguousStmt)
270 NODE(parser, ContinueStmt)
272 NODE(parser, CriticalStmt)
275 NODE(CUFKernelDoConstruct, StarOrExpr)
276 NODE(CUFKernelDoConstruct, Directive)
277 NODE(CUFKernelDoConstruct, LaunchConfiguration)
278 NODE(parser, CUFReduction)
279 NODE(parser, CycleStmt)
281 NODE(parser, DataIDoObject)
282 NODE(parser, DataImpliedDo)
283 NODE(parser, DataRef)
284 NODE(parser, DataStmt)
288 NODE(parser, DataStmtSet)
289 NODE(parser, DataStmtValue)
293 NODE(DeclarationTypeSpec, Class)
294 NODE(DeclarationTypeSpec, ClassStar)
295 NODE(DeclarationTypeSpec, Record)
296 NODE(DeclarationTypeSpec, Type)
297 NODE(DeclarationTypeSpec, TypeStar)
298 NODE(parser, Default)
299 NODE(parser, DeferredCoshapeSpecList)
300 NODE(parser, DeferredShapeSpecList)
301 NODE(parser, DefinedOpName)
303 NODE_ENUM(DefinedOperator, IntrinsicOperator)
307 NODE(parser, Designator)
308 NODE(parser, DimensionStmt)
309 NODE(DimensionStmt, Declaration)
310 NODE(parser, DoConstruct)
311 NODE(parser, DummyArg)
312 NODE(parser, ElseIfStmt)
313 NODE(parser, ElseStmt)
314 NODE(parser, ElsewhereStmt)
315 NODE(parser, EndAssociateStmt)
316 NODE(parser, EndBlockDataStmt)
317 NODE(parser, EndBlockStmt)
319 NODE(parser, EndCriticalStmt)
320 NODE(parser, EndDoStmt)
321 NODE(parser, EndEnumStmt)
322 NODE(parser, EndForallStmt)
323 NODE(parser, EndFunctionStmt)
324 NODE(parser, EndIfStmt)
325 NODE(parser, EndInterfaceStmt)
326 NODE(parser, EndLabel)
327 NODE(parser, EndModuleStmt)
328 NODE(parser, EndMpSubprogramStmt)
329 NODE(parser, EndProgramStmt)
330 NODE(parser, EndSelectStmt)
331 NODE(parser, EndSubmoduleStmt)
332 NODE(parser, EndSubroutineStmt)
333 NODE(parser, EndTypeStmt)
334 NODE(parser, EndWhereStmt)
335 NODE(parser, EndfileStmt)
336 NODE(parser, EntityDecl)
337 NODE(parser, EntryStmt)
338 NODE(parser, EnumDef)
339 NODE(parser, EnumDefStmt)
340 NODE(parser, Enumerator)
341 NODE(parser, EnumeratorDefStmt)
342 NODE(parser, EorLabel)
343 NODE(parser, EquivalenceObject)
344 NODE(parser, EquivalenceStmt)
345 NODE(parser, ErrLabel)
346 NODE(parser, ErrorRecovery)
347 NODE(parser, EventPostStmt)
348 NODE(parser, EventWaitSpec)
349 NODE(parser, EventWaitStmt)
351 NODE(parser, ExecutionPart)
353 NODE(parser, ExitStmt)
356 NODE(parser, Expr)
357 NODE(Expr, Parentheses)
358 NODE(Expr, UnaryPlus)
359 NODE(Expr, Negate)
360 NODE(Expr, NOT)
361 NODE(Expr, PercentLoc)
362 NODE(Expr, DefinedUnary)
363 NODE(Expr, Power)
364 NODE(Expr, Multiply)
365 NODE(Expr, Divide)
366 NODE(Expr, Add)
367 NODE(Expr, Subtract)
368 NODE(Expr, Concat)
369 NODE(Expr, LT)
370 NODE(Expr, LE)
371 NODE(Expr, EQ)
372 NODE(Expr, NE)
373 NODE(Expr, GE)
374 NODE(Expr, GT)
375 NODE(Expr, AND)
376 NODE(Expr, OR)
377 NODE(Expr, EQV)
378 NODE(Expr, NEQV)
379 NODE(Expr, DefinedBinary)
380 NODE(Expr, ComplexConstructor)
381 NODE(parser, External)
382 NODE(parser, ExternalStmt)
383 NODE(parser, FailImageStmt)
384 NODE(parser, FileUnitNumber)
385 NODE(parser, FinalProcedureStmt)
386 NODE(parser, FlushStmt)
391 NODE(parser, ForallStmt)
392 NODE(parser, FormTeamStmt)
393 NODE(FormTeamStmt, FormTeamSpec)
394 NODE(parser, Format)
395 NODE(parser, FormatStmt)
397 NODE(parser, FunctionStmt)
399 NODE(parser, GenericSpec)
400 NODE(GenericSpec, Assignment)
401 NODE(GenericSpec, ReadFormatted)
402 NODE(GenericSpec, ReadUnformatted)
403 NODE(GenericSpec, WriteFormatted)
404 NODE(GenericSpec, WriteUnformatted)
405 NODE(parser, GenericStmt)
406 NODE(parser, GotoStmt)
408 NODE(parser, IdExpr)
409 NODE(parser, IdVariable)
410 NODE(parser, IfConstruct)
411 NODE(IfConstruct, ElseBlock)
412 NODE(IfConstruct, ElseIfBlock)
413 NODE(parser, IfStmt)
414 NODE(parser, IfThenStmt)
415 NODE(parser, TeamValue)
416 NODE(parser, ImageSelector)
418 NODE(ImageSelectorSpec, Notify)
419 NODE(ImageSelectorSpec, Stat)
420 NODE(ImageSelectorSpec, Team_Number)
421 NODE(parser, ImplicitPart)
423 NODE(parser, ImplicitSpec)
424 NODE(parser, ImplicitStmt)
425 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
426 NODE(parser, ImpliedShapeSpec)
427 NODE(parser, ImportStmt)
430 NODE(parser, InputItem)
431 NODE(parser, InquireSpec)
432 NODE(InquireSpec, CharVar)
433 NODE_ENUM(InquireSpec::CharVar, Kind)
434 NODE(InquireSpec, IntVar)
435 NODE_ENUM(InquireSpec::IntVar, Kind)
436 NODE(InquireSpec, LogVar)
437 NODE_ENUM(InquireSpec::LogVar, Kind)
438 NODE(parser, InquireStmt)
439 NODE(InquireStmt, Iolength)
440 NODE(parser, IntegerTypeSpec)
441 NODE(parser, IntentSpec)
442 NODE_ENUM(IntentSpec, Intent)
443 NODE(parser, IntentStmt)
445 NODE(parser, InterfaceBody)
446 NODE(InterfaceBody, Function)
447 NODE(InterfaceBody, Subroutine)
449 NODE(parser, InterfaceStmt)
452 NODE(parser, Intrinsic)
453 NODE(parser, IntrinsicStmt)
455 NODE(IntrinsicTypeSpec, Character)
456 NODE(IntrinsicTypeSpec, Complex)
457 NODE(IntrinsicTypeSpec, DoubleComplex)
458 NODE(IntrinsicTypeSpec, DoublePrecision)
460 NODE(IntrinsicTypeSpec, Real)
461 NODE(parser, IoControlSpec)
462 NODE(IoControlSpec, Asynchronous)
463 NODE(IoControlSpec, CharExpr)
464 NODE_ENUM(IoControlSpec::CharExpr, Kind)
465 NODE(IoControlSpec, Pos)
466 NODE(IoControlSpec, Rec)
467 NODE(IoControlSpec, Size)
468 NODE(parser, IoUnit)
469 NODE(parser, Keyword)
470 NODE(parser, KindParam)
471 NODE(parser, KindSelector)
472 NODE(KindSelector, StarSize)
473 NODE(parser, LabelDoStmt)
476 NODE(parser, LetterSpec)
480 NODE_ENUM(parser::ReductionOperator, Operator)
481 NODE(parser, LocalitySpec)
482 NODE(LocalitySpec, DefaultNone)
483 NODE(LocalitySpec, Local)
484 NODE(LocalitySpec, LocalInit)
485 NODE(LocalitySpec, Reduce)
486 NODE(LocalitySpec, Shared)
487 NODE(parser, LockStmt)
488 NODE(LockStmt, LockStat)
490 NODE_NAME(LoopControl::Bounds, "LoopBounds")
491 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
492 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
493 NODE(parser, LoopControl)
494 NODE(LoopControl, Concurrent)
495 NODE(parser, MainProgram)
496 NODE(parser, Map)
497 NODE(Map, EndMapStmt)
498 NODE(Map, MapStmt)
500 NODE(parser, Module)
501 NODE(parser, ModuleStmt)
504 NODE(parser, MpSubprogramStmt)
505 NODE(parser, MsgVariable)
506 NODE(parser, Name)
507 NODE(parser, NamedConstant)
509 NODE(parser, NamelistStmt)
510 NODE(NamelistStmt, Group)
512 NODE(parser, NoPass)
514 NODE(parser, NullifyStmt)
515 NODE(parser, NullInit)
516 NODE(parser, ObjectDecl)
517 NODE(parser, OldParameterStmt)
518
519 static std::string GetNodeName(const llvm::omp::Directive &x) {
520 return llvm::Twine("llvm::omp::Directive = ",
521 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
522 .str();
523 }
524 static std::string GetNodeName(const llvm::omp::Clause &x) {
525 return llvm::Twine(
526 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
527 .str();
528 }
531 NODE_ENUM(OmpAccessGroup, Value)
533 NODE(OmpAdjustArgsClause, OmpAdjustOp)
534 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
536 NODE(OmpAffinityClause, Modifier)
539 NODE(OmpAlignedClause, Modifier)
540 NODE(parser, OmpAlignment)
543 NODE(OmpAllocateClause, Modifier)
548 NODE_ENUM(OmpAlwaysModifier, Value)
550 NODE(OmpAppendArgsClause, OmpAppendOp)
551 NODE(parser, OmpArgument)
553 NODE(parser, OmpAtClause)
554 NODE_ENUM(OmpAtClause, ActionTime)
557 NODE_ENUM(OmpAttachModifier, Value)
559 NODE_ENUM(OmpAutomapModifier, Value)
563 NODE(parser, OmpBindClause)
564 NODE_ENUM(OmpBindClause, Binding)
568 NODE_ENUM(OmpChunkModifier, Value)
569 NODE(parser, OmpClause)
570 NODE(parser, OmpClauseList)
572 NODE_ENUM(OmpCloseModifier, Value)
583 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
585 NODE(OmpDefaultmapClause, Modifier)
586 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
588 NODE_ENUM(OmpDeleteModifier, Value)
591 NODE(OmpDependClause, TaskDep)
592 NODE(OmpDependClause::TaskDep, Modifier)
594 NODE_ENUM(OmpDependenceType, Value)
599 NODE(OmpDeviceClause, Modifier)
601 NODE_ENUM(OmpDeviceModifier, Value)
604 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
608 NODE_ENUM(OmpDirectiveSpecification, Flag)
609 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
610 NODE(parser, OmpDoacross)
611 NODE(OmpDoacross, Sink)
612 NODE(OmpDoacross, Source)
616 NODE(OmpDynGroupprivateClause, Modifier)
620 NODE(OmpEnterClause, Modifier)
623 NODE_ENUM(OmpExpectation, Value)
624 NODE(parser, OmpFailClause)
626 NODE_ENUM(OmpFallbackModifier, Value)
627 NODE(parser, OmpFromClause)
628 NODE(OmpFromClause, Modifier)
630 NODE(OmpGrainsizeClause, Modifier)
634 NODE(parser, OmpHintClause)
636 NODE(parser, OmpIfClause)
637 NODE(OmpIfClause, Modifier)
639 NODE(parser, OmpInitClause)
640 NODE(OmpInitClause, Modifier)
644 NODE(OmpInReductionClause, Modifier)
646 NODE_ENUM(OmpInteropType, Value)
647 NODE(parser, OmpIteration)
650 NODE(parser, OmpIterator)
653 NODE(OmpLastprivateClause, Modifier)
655 NODE_ENUM(OmpLastprivateModifier, Value)
657 NODE(OmpLinearClause, Modifier)
659 NODE_ENUM(OmpLinearModifier, Value)
660 NODE(parser, OmpLocator)
663 NODE(parser, OmpLowerBound)
664 NODE(parser, OmpMapClause)
665 NODE(OmpMapClause, Modifier)
666 NODE(parser, OmpMapper)
668 NODE(parser, OmpMapType)
669 NODE_ENUM(OmpMapType, Value)
671 NODE_ENUM(OmpMapTypeModifier, Value)
675 NODE(parser, OmpNoOpenMPClause)
676 NODE(parser, OmpNoOpenMPRoutinesClause)
677 NODE(parser, OmpNoParallelismClause)
681 NODE(OmpNumTeamsClause, Modifier)
683 NODE(OmpNumThreadsClause, Modifier)
684 NODE(OmpNumTasksClause, Modifier)
685 NODE(parser, OmpObject)
686 NODE(OmpObject, Invalid)
687 NODE_ENUM(OmpObject::Invalid, Kind)
688 NODE(parser, OmpObjectList)
690 NODE(OmpOrderClause, Modifier)
691 NODE_ENUM(OmpOrderClause, Ordering)
693 NODE_ENUM(OmpOrderingModifier, Value)
695 NODE_ENUM(OmpOrderModifier, Value)
699 NODE(parser, OmpPreferType)
701 NODE_ENUM(OmpPrescriptiveness, Value)
703 NODE_ENUM(OmpPresentModifier, Value)
705 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
707 NODE(OmpReductionClause, Modifier)
710 NODE_ENUM(OmpReductionModifier, Value)
713 NODE_ENUM(OmpRefModifier, Value)
718 NODE(OmpScheduleClause, Modifier)
719 NODE_ENUM(OmpScheduleClause, Kind)
722 NODE_ENUM(OmpSelfModifier, Value)
724 NODE_ENUM(OmpSeverityClause, SevLevel)
730 NODE(OmpStylizedInstance, Instance)
733 NODE(OmpTaskReductionClause, Modifier)
735 NODE(OmpThreadLimitClause, Modifier)
738 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
739 NODE(parser, OmpToClause)
740 NODE(OmpToClause, Modifier)
743 NODE(OmpTraitPropertyExtension, Complex)
745 NODE(parser, OmpTraitScore)
747 NODE(OmpTraitSelector, Properties)
749 NODE_ENUM(OmpTraitSelectorName, Value)
752 NODE_ENUM(OmpTraitSetSelectorName, Value)
754 NODE(parser, OmpTypeName)
759 NODE(parser, OmpUseClause)
762 NODE_ENUM(OmpVariableCategory, Value)
763 NODE(parser, OmpWhenClause)
764 NODE(OmpWhenClause, Modifier)
766 NODE_ENUM(OmpxHoldModifier, Value)
767#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
768#include "llvm/Frontend/OpenMP/OMP.inc"
769
770 NODE(parser, Only)
784
804
805 NODE(parser, OpenStmt)
806 NODE(parser, Optional)
807 NODE(parser, OptionalStmt)
810 NODE(parser, OutputItem)
811 NODE(parser, Parameter)
812 NODE(parser, ParameterStmt)
814 NODE(parser, Pass)
815 NODE(parser, PauseStmt)
816 NODE(parser, Pointer)
818 NODE(PointerAssignmentStmt, Bounds)
819 NODE(parser, PointerDecl)
820 NODE(parser, PointerObject)
821 NODE(parser, PointerStmt)
823 NODE(parser, PrefixSpec)
824 NODE(PrefixSpec, Elemental)
825 NODE(PrefixSpec, Impure)
826 NODE(PrefixSpec, Module)
827 NODE(PrefixSpec, Non_Recursive)
828 NODE(PrefixSpec, Pure)
829 NODE(PrefixSpec, Recursive)
830 NODE(PrefixSpec, Simple)
831 NODE(PrefixSpec, Attributes)
832 NODE(PrefixSpec, Launch_Bounds)
833 NODE(PrefixSpec, Cluster_Dims)
834 NODE(parser, PrintStmt)
835 NODE(parser, PrivateStmt)
837 NODE(parser, ProcAttrSpec)
841 NODE(parser, ProcDecl)
842 NODE(parser, ProcInterface)
846 NODE(parser, ProcedureStmt)
847 NODE_ENUM(ProcedureStmt, Kind)
848 NODE(parser, Program)
849 NODE(parser, ProgramStmt)
850 NODE(parser, ProgramUnit)
851 NODE(parser, Protected)
852 NODE(parser, ProtectedStmt)
853 NODE(parser, RankClause)
854 NODE(parser, ReadStmt)
856 NODE(RealLiteralConstant, Real)
857 NODE(parser, Rename)
858 NODE(Rename, Names)
859 NODE(Rename, Operators)
860 NODE(parser, ReturnStmt)
861 NODE(parser, RewindStmt)
862 NODE(parser, Save)
863 NODE(parser, SaveStmt)
864 NODE(parser, SavedEntity)
865 NODE_ENUM(SavedEntity, Kind)
869 NODE(SelectRankCaseStmt, Rank)
871 NODE(SelectRankConstruct, RankCase)
874 NODE(SelectTypeConstruct, TypeCase)
876 NODE(parser, Selector)
878 NODE(parser, SequenceStmt)
879 NODE(parser, Sign)
884 NODE(parser, SpecificationExpr)
886 NODE(parser, Star)
887 NODE(parser, StatOrErrmsg)
888 NODE(parser, StatVariable)
889 NODE(parser, StatusExpr)
891 NODE(parser, StopCode)
892 NODE(parser, StopStmt)
893 NODE_ENUM(StopStmt, Kind)
896 NODE(parser, StructureDef)
897 NODE(StructureDef, EndStructureStmt)
899 NODE(parser, StructureStmt)
900 NODE(parser, Submodule)
901 NODE(parser, SubmoduleStmt)
905 NODE(parser, Substring)
908 NODE(parser, Suffix)
909 NODE(parser, SyncAllStmt)
911 NODE(SyncImagesStmt, ImageSet)
912 NODE(parser, SyncMemoryStmt)
913 NODE(parser, SyncTeamStmt)
914 NODE(parser, Target)
915 NODE(parser, TargetStmt)
916 NODE(parser, TypeAttrSpec)
917 NODE(TypeAttrSpec, BindC)
918 NODE(TypeAttrSpec, Extends)
924 NODE(TypeBoundProcedureStmt, WithInterface)
925 NODE(TypeBoundProcedureStmt, WithoutInterface)
927 NODE(parser, TypeGuardStmt)
928 NODE(TypeGuardStmt, Guard)
929 NODE(parser, TypeParamDecl)
931 NODE(common, TypeParamAttr)
932 NODE(parser, TypeParamSpec)
934 NODE(TypeParamValue, Deferred)
935 NODE(parser, TypeSpec)
936 NODE(parser, Union)
937 NODE(Union, EndUnionStmt)
938 NODE(Union, UnionStmt)
939 NODE(parser, UnlockStmt)
941 NODE(parser, UnsignedTypeSpec)
942 NODE(parser, UseStmt)
943 NODE_ENUM(UseStmt, ModuleNature)
944 NODE(parser, Value)
945 NODE(parser, ValueStmt)
946 NODE(parser, Variable)
948 NODE(VectorTypeSpec, PairVectorTypeSpec)
949 NODE(VectorTypeSpec, QuadVectorTypeSpec)
950 NODE(parser, IntrinsicVectorTypeSpec)
952 NODE(parser, Verbatim)
953 NODE(parser, Volatile)
954 NODE(parser, VolatileStmt)
955 NODE(parser, WaitSpec)
956 NODE(parser, WaitStmt)
959 NODE(WhereConstruct, Elsewhere)
960 NODE(WhereConstruct, MaskedElsewhere)
962 NODE(parser, WhereStmt)
963 NODE(parser, WriteStmt)
964#undef NODE
965#undef NODE_NAME
966
967 template <typename T> bool Pre(const T &x) {
968 std::string fortran{AsFortran<T>(x)};
969 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
970 Prefix(GetNodeName(x));
971 } else {
972 IndentEmptyLine();
973 out_ << GetNodeName(x);
974 if (!fortran.empty()) {
975 out_ << " = '" << fortran << '\'';
976 }
977 EndLine();
978 ++indent_;
979 }
980 return true;
981 }
982
983 template <typename T> void Post(const T &x) {
984 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
985 EndLineIfNonempty();
986 } else {
987 --indent_;
988 }
989 }
990
991 // A few types we want to ignore
992
993 bool Pre(const CharBlock &) { return true; }
994 void Post(const CharBlock &) {}
995
996 template <typename T> bool Pre(const Statement<T> &) { return true; }
997 template <typename T> void Post(const Statement<T> &) {}
998 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
999 template <typename T> void Post(const UnlabeledStatement<T> &) {}
1000
1001 template <typename T> bool Pre(const common::Indirection<T> &) {
1002 return true;
1003 }
1004 template <typename T> void Post(const common::Indirection<T> &) {}
1005
1006 template <typename A> bool Pre(const Scalar<A> &) {
1007 Prefix("Scalar");
1008 return true;
1009 }
1010 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1011
1012 template <typename A> bool Pre(const Constant<A> &) {
1013 Prefix("Constant");
1014 return true;
1015 }
1016 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1017
1018 template <typename A> bool Pre(const Integer<A> &) {
1019 Prefix("Integer");
1020 return true;
1021 }
1022 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1023
1024 template <typename A> bool Pre(const Logical<A> &) {
1025 Prefix("Logical");
1026 return true;
1027 }
1028 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1029
1030 template <typename A> bool Pre(const DefaultChar<A> &) {
1031 Prefix("DefaultChar");
1032 return true;
1033 }
1034 template <typename A> void Post(const DefaultChar<A> &) {
1035 EndLineIfNonempty();
1036 }
1037
1038 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1039 template <typename... A> void Post(const std::tuple<A...> &) {}
1040
1041 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1042 template <typename... A> void Post(const std::variant<A...> &) {}
1043
1044protected:
1045 // Return a Fortran representation of this node to include in the dump
1046 template <typename T> std::string AsFortran(const T &x) {
1047 std::string buf;
1048 llvm::raw_string_ostream ss{buf};
1049 if constexpr (HasTypedExpr<T>::value) {
1050 if (asFortran_ && x.typedExpr) {
1051 asFortran_->expr(ss, *x.typedExpr);
1052 }
1053 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1054 std::is_same_v<T, PointerAssignmentStmt>) {
1055 if (asFortran_ && x.typedAssignment) {
1056 asFortran_->assignment(ss, *x.typedAssignment);
1057 }
1058 } else if constexpr (std::is_same_v<T, CallStmt>) {
1059 if (asFortran_ && x.typedCall) {
1060 asFortran_->call(ss, *x.typedCall);
1061 }
1062 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1063 std::is_same_v<T, SignedIntLiteralConstant> ||
1064 std::is_same_v<T, UnsignedLiteralConstant>) {
1065 ss << std::get<CharBlock>(x.t);
1066 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1067 ss << x.source;
1068 } else if constexpr (std::is_same_v<T, std::string> ||
1069 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1070 ss << x;
1071 }
1072 if (ss.tell()) {
1073 return buf;
1074 }
1075 if constexpr (std::is_same_v<T, Name>) {
1076 return x.source.ToString();
1077#ifdef SHOW_ALL_SOURCE_MEMBERS
1078 } else if constexpr (HasSource<T>::value) {
1079 return x.source.ToString();
1080#endif
1081 } else if constexpr (std::is_same_v<T, int>) {
1082 return std::to_string(x);
1083 } else if constexpr (std::is_same_v<T, bool>) {
1084 return x ? "true" : "false";
1085 } else {
1086 return "";
1087 }
1088 }
1089
1090 void IndentEmptyLine() {
1091 if (emptyline_ && indent_ > 0) {
1092 for (int i{0}; i < indent_; ++i) {
1093 out_ << "| ";
1094 }
1095 emptyline_ = false;
1096 }
1097 }
1098
1099 void Prefix(const char *str) {
1100 IndentEmptyLine();
1101 out_ << str << " -> ";
1102 emptyline_ = false;
1103 }
1104
1105 void Prefix(const std::string &str) {
1106 IndentEmptyLine();
1107 out_ << str << " -> ";
1108 emptyline_ = false;
1109 }
1110
1111 void EndLine() {
1112 out_ << '\n';
1113 emptyline_ = true;
1114 }
1115
1116 void EndLineIfNonempty() {
1117 if (!emptyline_) {
1118 EndLine();
1119 }
1120 }
1121
1122private:
1123 int indent_{0};
1124 llvm::raw_ostream &out_;
1125 const AnalyzedObjectsAsFortran *const asFortran_;
1126 bool emptyline_{false};
1127};
1128
1129template <typename T>
1130llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1131 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1132 ParseTreeDumper dumper{out, asFortran};
1133 Walk(x, dumper);
1134 return out;
1135}
1136
1137} // namespace Fortran::parser
1138#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition enum-set.h:28
Definition indirection.h:31
Definition char-block.h:28
Definition dump-parse-tree.h:33
Definition bit-population-count.h:20
Definition check-expression.h:19
Definition format-specification.h:76
Definition format-specification.h:38
Definition parse-tree.h:1277
Definition parse-tree.h:1284
Definition parse-tree.h:1248
Definition parse-tree.h:1236
Definition parse-tree.h:5702
Definition parse-tree.h:5678
Definition parse-tree.h:5694
Definition parse-tree.h:5686
Definition parse-tree.h:5663
Definition parse-tree.h:5727
Definition parse-tree.h:5657
Definition parse-tree.h:5533
Definition parse-tree.h:5506
Definition parse-tree.h:5634
Definition parse-tree.h:5619
Definition parse-tree.h:5614
Definition parse-tree.h:5522
Definition parse-tree.h:5544
Definition parse-tree.h:5527
Definition parse-tree.h:5539
Definition parse-tree.h:5571
Definition parse-tree.h:5565
Definition parse-tree.h:5669
Definition parse-tree.h:5733
Definition parse-tree.h:5610
Definition parse-tree.h:5601
Definition parse-tree.h:5511
Definition parse-tree.h:5550
Definition parse-tree.h:5498
Definition parse-tree.h:5594
Definition parse-tree.h:5590
Definition parse-tree.h:5586
Definition parse-tree.h:5516
Definition parse-tree.h:5582
Definition parse-tree.h:5576
Definition parse-tree.h:5560
Definition parse-tree.h:897
Definition parse-tree.h:1406
Definition parse-tree.h:498
Definition parse-tree.h:3271
Definition parse-tree.h:3260
Definition parse-tree.h:1968
Definition parse-tree.h:1933
Definition parse-tree.h:1912
Definition parse-tree.h:1924
Definition parse-tree.h:1979
Definition parse-tree.h:1941
Definition parse-tree.h:3493
Definition parse-tree.h:1898
Definition parse-tree.h:1332
Definition parse-tree.h:3498
Definition parse-tree.h:3503
Definition parse-tree.h:2005
Definition parse-tree.h:2160
Definition parse-tree.h:2151
Definition parse-tree.h:2144
Definition parse-tree.h:1314
Definition parse-tree.h:1367
Definition parse-tree.h:3443
Definition parse-tree.h:1115
Definition parse-tree.h:1428
Definition parse-tree.h:1435
Definition parse-tree.h:2182
Definition parse-tree.h:3020
Definition parse-tree.h:2015
Definition parse-tree.h:3437
Definition parse-tree.h:5803
Definition parse-tree.h:5797
Definition parse-tree.h:3295
Definition parse-tree.h:3278
Definition parse-tree.h:2423
Definition parse-tree.h:2405
Definition parse-tree.h:2411
Definition parse-tree.h:2392
Definition parse-tree.h:2213
Definition parse-tree.h:2198
Definition parse-tree.h:672
Definition parse-tree.h:856
Definition parse-tree.h:688
Definition parse-tree.h:2682
Definition parse-tree.h:2190
Definition parse-tree.h:972
Definition parse-tree.h:1441
Definition parse-tree.h:1892
Definition parse-tree.h:1608
Definition parse-tree.h:1616
Definition parse-tree.h:3382
Definition parse-tree.h:842
Definition parse-tree.h:834
Definition parse-tree.h:983
Definition parse-tree.h:996
Definition parse-tree.h:1027
Definition parse-tree.h:1104
Definition parse-tree.h:1049
Definition parse-tree.h:1199
Definition parse-tree.h:2510
Definition parse-tree.h:2238
Definition parse-tree.h:2247
Definition parse-tree.h:3252
Definition parse-tree.h:3239
Definition parse-tree.h:1687
Definition parse-tree.h:2660
Definition parse-tree.h:2658
Definition parse-tree.h:305
Definition parse-tree.h:2229
Definition parse-tree.h:2220
Definition parse-tree.h:1057
Definition parse-tree.h:1498
Definition parse-tree.h:1510
Definition parse-tree.h:1808
Definition parse-tree.h:1469
Definition parse-tree.h:1518
Definition parse-tree.h:1484
Definition parse-tree.h:1524
Definition parse-tree.h:1490
Definition parse-tree.h:1999
Definition parse-tree.h:439
Definition parse-tree.h:766
Definition parse-tree.h:329
Definition parse-tree.h:614
Definition parse-tree.h:1184
Definition parse-tree.h:748
Definition parse-tree.h:914
Definition parse-tree.h:1847
Definition parse-tree.h:1535
Definition parse-tree.h:2325
Definition parse-tree.h:3151
Definition parse-tree.h:2345
Definition parse-tree.h:2207
Definition parse-tree.h:1382
Definition parse-tree.h:3349
Definition parse-tree.h:1228
Definition parse-tree.h:1214
Definition parse-tree.h:2564
Definition parse-tree.h:2570
Definition parse-tree.h:2578
Definition parse-tree.h:531
Definition parse-tree.h:556
Definition parse-tree.h:966
Definition parse-tree.h:953
Definition parse-tree.h:1695
Definition parse-tree.h:1043
Definition parse-tree.h:2101
Definition parse-tree.h:2117
Definition parse-tree.h:2095
Definition parse-tree.h:2130
Definition parse-tree.h:2107
Definition parse-tree.h:2590
Definition parse-tree.h:2694
Definition parse-tree.h:3283
Definition parse-tree.h:3140
Definition parse-tree.h:3315
Definition parse-tree.h:3033
Definition parse-tree.h:3048
Definition tools.h:135
Definition tools.h:141
Definition parse-tree.h:2359
Definition parse-tree.h:2375
Definition parse-tree.h:2338
Definition parse-tree.h:1668
Definition parse-tree.h:1678
Definition parse-tree.h:421
Definition parse-tree.h:1592
Definition parse-tree.h:1601
Definition parse-tree.h:627
Definition parse-tree.h:1014
Definition parse-tree.h:2793
Definition parse-tree.h:2737
Definition parse-tree.h:2881
Definition parse-tree.h:2890
Definition parse-tree.h:2895
Definition parse-tree.h:2879
Definition parse-tree.h:2908
Definition parse-tree.h:792
Definition parse-tree.h:313
Definition parse-tree.h:1340
Definition parse-tree.h:1544
Definition parse-tree.h:3207
Definition parse-tree.h:3172
Definition parse-tree.h:3197
Definition parse-tree.h:3054
Definition parse-tree.h:477
Definition parse-tree.h:465
Definition parse-tree.h:706
Definition parse-tree.h:2720
Definition parse-tree.h:2718
Definition parse-tree.h:2629
Definition parse-tree.h:779
Definition parse-tree.h:660
Definition parse-tree.h:2302
Definition parse-tree.h:1293
Definition parse-tree.h:678
Definition parse-tree.h:1586
Definition parse-tree.h:888
Definition parse-tree.h:2270
Definition parse-tree.h:2604
Definition parse-tree.h:870
Definition parse-tree.h:321
Definition parse-tree.h:2290
Definition parse-tree.h:2929
Definition parse-tree.h:3459
Definition parse-tree.h:2062
Definition parse-tree.h:2953
Definition parse-tree.h:2943
Definition parse-tree.h:2964
Definition parse-tree.h:589
Definition parse-tree.h:1299
Definition parse-tree.h:640
Definition parse-tree.h:2308
Definition parse-tree.h:2532
Definition parse-tree.h:1415
Definition parse-tree.h:4324
Definition parse-tree.h:4328
Definition parse-tree.h:4343
Definition parse-tree.h:4350
Definition parse-tree.h:4358
Definition parse-tree.h:4373
Definition parse-tree.h:5321
Definition parse-tree.h:4380
Definition parse-tree.h:4389
Definition parse-tree.h:5109
Definition parse-tree.h:5185
Definition parse-tree.h:4412
Definition parse-tree.h:5119
Definition parse-tree.h:5078
Definition parse-tree.h:5062
Definition parse-tree.h:4427
Definition parse-tree.h:3628
Definition parse-tree.h:4435
Definition parse-tree.h:5248
Definition parse-tree.h:5265
Definition parse-tree.h:5240
Definition parse-tree.h:4452
Definition parse-tree.h:4470
Definition parse-tree.h:4529
Definition parse-tree.h:4527
Definition parse-tree.h:4551
Definition parse-tree.h:4559
Definition parse-tree.h:4569
Definition parse-tree.h:4579
Definition parse-tree.h:4587
Definition parse-tree.h:3529
Definition parse-tree.h:5085
Definition parse-tree.h:4542
Definition parse-tree.h:4509
Definition parse-tree.h:4602
Definition parse-tree.h:5114
Definition parse-tree.h:5190
Definition parse-tree.h:4613
Definition parse-tree.h:5152
Definition parse-tree.h:4621
Definition parse-tree.h:4634
Definition parse-tree.h:4645
Definition parse-tree.h:4655
Definition parse-tree.h:4663
Definition parse-tree.h:5274
Definition parse-tree.h:4668
Definition parse-tree.h:4676
Definition parse-tree.h:4692
Definition parse-tree.h:4715
Definition parse-tree.h:4681
Definition parse-tree.h:4705
Definition parse-tree.h:4722
Definition parse-tree.h:3640
Definition parse-tree.h:4482
Definition parse-tree.h:4500
Definition parse-tree.h:4491
Definition parse-tree.h:4731
Definition parse-tree.h:4746
Definition parse-tree.h:4757
Definition parse-tree.h:4782
Definition parse-tree.h:4794
Definition parse-tree.h:4803
Definition parse-tree.h:5132
Definition parse-tree.h:5146
Definition parse-tree.h:4827
Definition parse-tree.h:4839
Definition parse-tree.h:4851
Definition parse-tree.h:3574
Definition parse-tree.h:3565
Definition parse-tree.h:3562
Definition parse-tree.h:4862
Definition parse-tree.h:4875
Definition parse-tree.h:4887
Definition parse-tree.h:4898
Definition parse-tree.h:3618
Definition parse-tree.h:4908
Definition parse-tree.h:5281
Definition parse-tree.h:4917
Definition parse-tree.h:4929
Definition parse-tree.h:4940
Definition parse-tree.h:4947
Definition parse-tree.h:3578
Definition parse-tree.h:3600
Definition parse-tree.h:3587
Definition parse-tree.h:4956
Definition parse-tree.h:4967
Definition parse-tree.h:5287
Definition parse-tree.h:4976
Definition parse-tree.h:4991
Definition parse-tree.h:5001
Definition parse-tree.h:3554
Definition parse-tree.h:3547
Definition parse-tree.h:5010
Definition parse-tree.h:5035
Definition parse-tree.h:5057
Definition parse-tree.h:5156
Definition parse-tree.h:5046
Definition parse-tree.h:3064
Definition parse-tree.h:5709
Definition parse-tree.h:5716
Definition parse-tree.h:5645
Definition parse-tree.h:5738
Definition parse-tree.h:5777
Definition parse-tree.h:5766
Definition parse-tree.h:5757
Definition parse-tree.h:5639
Definition parse-tree.h:5651
Definition parse-tree.h:5347
Definition parse-tree.h:5179
Definition parse-tree.h:5352
Definition parse-tree.h:5389
Definition parse-tree.h:5473
Definition parse-tree.h:5337
Definition parse-tree.h:5167
Definition parse-tree.h:5400
Definition parse-tree.h:5414
Definition parse-tree.h:5430
Definition parse-tree.h:5438
Definition parse-tree.h:5491
Definition parse-tree.h:5459
Definition parse-tree.h:5199
Definition parse-tree.h:5205
Definition parse-tree.h:5449
Definition parse-tree.h:378
Definition parse-tree.h:2798
Definition parse-tree.h:2761
Definition parse-tree.h:2989
Definition parse-tree.h:2027
Definition parse-tree.h:1554
Definition parse-tree.h:1988
Definition parse-tree.h:2824
Definition parse-tree.h:3109
Definition parse-tree.h:2782
Definition parse-tree.h:927
Definition parse-tree.h:3087
Definition parse-tree.h:1068
Definition parse-tree.h:1096
Definition parse-tree.h:1887
Definition parse-tree.h:1088
Definition parse-tree.h:1082
Definition parse-tree.h:1075
Definition parse-tree.h:3097
Definition parse-tree.h:3222
Definition parse-tree.h:3190
Definition parse-tree.h:573
Definition parse-tree.h:2745
Definition parse-tree.h:811
Definition parse-tree.h:2259
Definition parse-tree.h:2975
Definition parse-tree.h:1567
Definition parse-tree.h:297
Definition parse-tree.h:1653
Definition parse-tree.h:2382
Definition parse-tree.h:2446
Definition parse-tree.h:2458
Definition parse-tree.h:2437
Definition parse-tree.h:2492
Definition parse-tree.h:2472
Definition parse-tree.h:2138
Definition parse-tree.h:3341
Definition parse-tree.h:400
Definition parse-tree.h:453
Definition parse-tree.h:1957
Definition parse-tree.h:361
Definition parse-tree.h:3359
Definition parse-tree.h:2524
Definition parse-tree.h:1877
Definition parse-tree.h:1205
Definition parse-tree.h:3480
Definition parse-tree.h:3452
Definition parse-tree.h:3475
Definition parse-tree.h:2995
Definition parse-tree.h:3006
Definition parse-tree.h:3159
Definition parse-tree.h:3325
Definition parse-tree.h:1644
Definition parse-tree.h:1839
Definition parse-tree.h:1635
Definition parse-tree.h:1825
Definition parse-tree.h:3129
Definition parse-tree.h:2542
Definition parse-tree.h:2555
Definition parse-tree.h:905
Definition parse-tree.h:1148
Definition parse-tree.h:1161
Definition parse-tree.h:1123
Definition parse-tree.h:1170
Definition parse-tree.h:1133
Definition parse-tree.h:1396
Definition parse-tree.h:2481
Definition parse-tree.h:933
Definition parse-tree.h:941
Definition parse-tree.h:742
Definition parse-tree.h:651
Definition parse-tree.h:755
Definition parse-tree.h:3468
Definition parse-tree.h:356
Definition parse-tree.h:2614
Definition parse-tree.h:798
Definition parse-tree.h:3073
Definition parse-tree.h:1855
Definition parse-tree.h:728
Definition parse-tree.h:733
Definition parse-tree.h:284
Definition parse-tree.h:2808
Definition parse-tree.h:2053
Definition parse-tree.h:2046
Definition parse-tree.h:2077
Definition parse-tree.h:2040
Definition parse-tree.h:2767
Definition parse-tree.h:3702
Definition parse-tree.h:3693
Definition parse-tree.h:3663
Definition parse-tree.h:3652
Definition parse-tree.h:3647
Definition parse-tree.h:3673
Definition parse-tree.h:3686
Definition parse-tree.h:3857
Definition parse-tree.h:3874
Definition parse-tree.h:3866
Definition parse-tree.h:3902
Definition parse-tree.h:3914
Definition parse-tree.h:3924
Definition parse-tree.h:3935
Definition parse-tree.h:3948
Definition parse-tree.h:3960
Definition parse-tree.h:3981
Definition parse-tree.h:3992
Definition parse-tree.h:4002
Definition parse-tree.h:4011
Definition parse-tree.h:4043
Definition parse-tree.h:4054
Definition parse-tree.h:4065
Definition parse-tree.h:4077
Definition parse-tree.h:4087
Definition parse-tree.h:4095
Definition parse-tree.h:4104
Definition parse-tree.h:4113
Definition parse-tree.h:4147
Definition parse-tree.h:4134
Definition parse-tree.h:4121
Definition parse-tree.h:4171
Definition parse-tree.h:4162
Definition parse-tree.h:4205
Definition parse-tree.h:4181
Definition parse-tree.h:4214
Definition parse-tree.h:4227
Definition parse-tree.h:4236
Definition parse-tree.h:4246
Definition parse-tree.h:4256
Definition parse-tree.h:4265
Definition parse-tree.h:4273
Definition parse-tree.h:4283
Definition parse-tree.h:4294
Definition parse-tree.h:4307
Definition parse-tree.h:3740
Definition parse-tree.h:3723
Definition parse-tree.h:3764
Definition parse-tree.h:3730
Definition parse-tree.h:3791
Definition parse-tree.h:3803
Definition parse-tree.h:3816
Definition parse-tree.h:3825