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)
555 NODE(parser, OmpAtClause)
556 NODE_ENUM(OmpAtClause, ActionTime)
559 NODE_ENUM(OmpAttachModifier, Value)
561 NODE_ENUM(OmpAutomapModifier, Value)
565 NODE(parser, OmpBindClause)
566 NODE_ENUM(OmpBindClause, Binding)
570 NODE_ENUM(OmpChunkModifier, Value)
571 NODE(parser, OmpClause)
572 NODE(parser, OmpClauseList)
574 NODE_ENUM(OmpCloseModifier, Value)
585 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
587 NODE(OmpDefaultmapClause, Modifier)
588 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
590 NODE_ENUM(OmpDeleteModifier, Value)
593 NODE(OmpDependClause, TaskDep)
594 NODE(OmpDependClause::TaskDep, Modifier)
596 NODE_ENUM(OmpDependenceType, Value)
601 NODE(OmpDeviceClause, Modifier)
603 NODE_ENUM(OmpDeviceModifier, Value)
606 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
610 NODE_ENUM(OmpDirectiveSpecification, Flag)
611 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
612 NODE(parser, OmpDoacross)
613 NODE(OmpDoacross, Sink)
614 NODE(OmpDoacross, Source)
618 NODE(OmpDynGroupprivateClause, Modifier)
622 NODE(OmpEnterClause, Modifier)
625 NODE_ENUM(OmpExpectation, Value)
626 NODE(parser, OmpFailClause)
628 NODE_ENUM(OmpFallbackModifier, Value)
629 NODE(parser, OmpFromClause)
630 NODE(OmpFromClause, Modifier)
632 NODE(OmpGrainsizeClause, Modifier)
636 NODE(parser, OmpHintClause)
638 NODE(parser, OmpIfClause)
639 NODE(OmpIfClause, Modifier)
641 NODE(parser, OmpInitClause)
642 NODE(OmpInitClause, Modifier)
646 NODE(OmpInReductionClause, Modifier)
648 NODE_ENUM(OmpInteropType, Value)
649 NODE(parser, OmpIteration)
652 NODE(parser, OmpIterator)
655 NODE(OmpLastprivateClause, Modifier)
657 NODE_ENUM(OmpLastprivateModifier, Value)
659 NODE(OmpLinearClause, Modifier)
661 NODE_ENUM(OmpLinearModifier, Value)
662 NODE(parser, OmpLocator)
665 NODE(parser, OmpLowerBound)
666 NODE(parser, OmpMapClause)
667 NODE(OmpMapClause, Modifier)
668 NODE(parser, OmpMapper)
670 NODE(parser, OmpMapType)
671 NODE_ENUM(OmpMapType, Value)
673 NODE_ENUM(OmpMapTypeModifier, Value)
677 NODE(parser, OmpNoOpenMPClause)
678 NODE(parser, OmpNoOpenMPRoutinesClause)
679 NODE(parser, OmpNoParallelismClause)
683 NODE(OmpNumTeamsClause, Modifier)
685 NODE(OmpNumThreadsClause, Modifier)
686 NODE(OmpNumTasksClause, Modifier)
687 NODE(parser, OmpObject)
688 NODE(OmpObject, Invalid)
689 NODE_ENUM(OmpObject::Invalid, Kind)
690 NODE(parser, OmpObjectList)
692 NODE(OmpOrderClause, Modifier)
693 NODE_ENUM(OmpOrderClause, Ordering)
695 NODE_ENUM(OmpOrderingModifier, Value)
697 NODE_ENUM(OmpOrderModifier, Value)
701 NODE(parser, OmpPreferType)
703 NODE_ENUM(OmpPrescriptiveness, Value)
705 NODE_ENUM(OmpPresentModifier, Value)
707 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
709 NODE(OmpReductionClause, Modifier)
712 NODE_ENUM(OmpReductionModifier, Value)
715 NODE_ENUM(OmpRefModifier, Value)
720 NODE(OmpScheduleClause, Modifier)
721 NODE_ENUM(OmpScheduleClause, Kind)
725 NODE_ENUM(OmpSelfModifier, Value)
727 NODE_ENUM(OmpSeverityClause, SevLevel)
733 NODE(OmpStylizedInstance, Instance)
736 NODE(OmpTaskReductionClause, Modifier)
738 NODE(OmpThreadLimitClause, Modifier)
741 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
742 NODE(parser, OmpToClause)
743 NODE(OmpToClause, Modifier)
746 NODE(OmpTraitPropertyExtension, Complex)
748 NODE(parser, OmpTraitScore)
750 NODE(OmpTraitSelector, Properties)
752 NODE_ENUM(OmpTraitSelectorName, Value)
755 NODE_ENUM(OmpTraitSetSelectorName, Value)
757 NODE(parser, OmpTypeName)
762 NODE(parser, OmpUseClause)
765 NODE_ENUM(OmpVariableCategory, Value)
766 NODE(parser, OmpWhenClause)
767 NODE(OmpWhenClause, Modifier)
769 NODE_ENUM(OmpxHoldModifier, Value)
770#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
771#include "llvm/Frontend/OpenMP/OMP.inc"
772
773 NODE(parser, Only)
787
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:5704
Definition parse-tree.h:5680
Definition parse-tree.h:5696
Definition parse-tree.h:5688
Definition parse-tree.h:5665
Definition parse-tree.h:5729
Definition parse-tree.h:5659
Definition parse-tree.h:5535
Definition parse-tree.h:5508
Definition parse-tree.h:5636
Definition parse-tree.h:5621
Definition parse-tree.h:5616
Definition parse-tree.h:5524
Definition parse-tree.h:5546
Definition parse-tree.h:5529
Definition parse-tree.h:5541
Definition parse-tree.h:5573
Definition parse-tree.h:5567
Definition parse-tree.h:5671
Definition parse-tree.h:5735
Definition parse-tree.h:5612
Definition parse-tree.h:5603
Definition parse-tree.h:5513
Definition parse-tree.h:5552
Definition parse-tree.h:5500
Definition parse-tree.h:5596
Definition parse-tree.h:5592
Definition parse-tree.h:5588
Definition parse-tree.h:5518
Definition parse-tree.h:5584
Definition parse-tree.h:5578
Definition parse-tree.h:5562
Definition parse-tree.h:897
Definition parse-tree.h:1406
Definition parse-tree.h:498
Definition parse-tree.h:3274
Definition parse-tree.h:3263
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:3496
Definition parse-tree.h:1898
Definition parse-tree.h:1332
Definition parse-tree.h:3501
Definition parse-tree.h:3506
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:3446
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:3440
Definition parse-tree.h:5805
Definition parse-tree.h:5799
Definition parse-tree.h:3298
Definition parse-tree.h:3281
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:3385
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:3255
Definition parse-tree.h:3242
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:3352
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:3286
Definition parse-tree.h:3140
Definition parse-tree.h:3318
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:3210
Definition parse-tree.h:3172
Definition parse-tree.h:3198
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:3462
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:4327
Definition parse-tree.h:4331
Definition parse-tree.h:4346
Definition parse-tree.h:4353
Definition parse-tree.h:4361
Definition parse-tree.h:4376
Definition parse-tree.h:5323
Definition parse-tree.h:4383
Definition parse-tree.h:5181
Definition parse-tree.h:5170
Definition parse-tree.h:4392
Definition parse-tree.h:5112
Definition parse-tree.h:5187
Definition parse-tree.h:4415
Definition parse-tree.h:5122
Definition parse-tree.h:5081
Definition parse-tree.h:5065
Definition parse-tree.h:4430
Definition parse-tree.h:3631
Definition parse-tree.h:4438
Definition parse-tree.h:5250
Definition parse-tree.h:5267
Definition parse-tree.h:5242
Definition parse-tree.h:4455
Definition parse-tree.h:4473
Definition parse-tree.h:4532
Definition parse-tree.h:4530
Definition parse-tree.h:4554
Definition parse-tree.h:4562
Definition parse-tree.h:4572
Definition parse-tree.h:4582
Definition parse-tree.h:4590
Definition parse-tree.h:3532
Definition parse-tree.h:5088
Definition parse-tree.h:4545
Definition parse-tree.h:4512
Definition parse-tree.h:4605
Definition parse-tree.h:5117
Definition parse-tree.h:5192
Definition parse-tree.h:4616
Definition parse-tree.h:5155
Definition parse-tree.h:4624
Definition parse-tree.h:4637
Definition parse-tree.h:4648
Definition parse-tree.h:4658
Definition parse-tree.h:4666
Definition parse-tree.h:5276
Definition parse-tree.h:4671
Definition parse-tree.h:4679
Definition parse-tree.h:4695
Definition parse-tree.h:4718
Definition parse-tree.h:4684
Definition parse-tree.h:4708
Definition parse-tree.h:4725
Definition parse-tree.h:3643
Definition parse-tree.h:4485
Definition parse-tree.h:4503
Definition parse-tree.h:4494
Definition parse-tree.h:4734
Definition parse-tree.h:4749
Definition parse-tree.h:4760
Definition parse-tree.h:4785
Definition parse-tree.h:4797
Definition parse-tree.h:4806
Definition parse-tree.h:5135
Definition parse-tree.h:5149
Definition parse-tree.h:4830
Definition parse-tree.h:4842
Definition parse-tree.h:4854
Definition parse-tree.h:3577
Definition parse-tree.h:3568
Definition parse-tree.h:3565
Definition parse-tree.h:4865
Definition parse-tree.h:4878
Definition parse-tree.h:4890
Definition parse-tree.h:4901
Definition parse-tree.h:3621
Definition parse-tree.h:4911
Definition parse-tree.h:5283
Definition parse-tree.h:4920
Definition parse-tree.h:4932
Definition parse-tree.h:5201
Definition parse-tree.h:4943
Definition parse-tree.h:4950
Definition parse-tree.h:3581
Definition parse-tree.h:3603
Definition parse-tree.h:3590
Definition parse-tree.h:4959
Definition parse-tree.h:4970
Definition parse-tree.h:5289
Definition parse-tree.h:4979
Definition parse-tree.h:4994
Definition parse-tree.h:5004
Definition parse-tree.h:3557
Definition parse-tree.h:3550
Definition parse-tree.h:5013
Definition parse-tree.h:5038
Definition parse-tree.h:5060
Definition parse-tree.h:5159
Definition parse-tree.h:5049
Definition parse-tree.h:3064
Definition parse-tree.h:5711
Definition parse-tree.h:5718
Definition parse-tree.h:5647
Definition parse-tree.h:5740
Definition parse-tree.h:5779
Definition parse-tree.h:5768
Definition parse-tree.h:5759
Definition parse-tree.h:5641
Definition parse-tree.h:5653
Definition parse-tree.h:5349
Definition parse-tree.h:5354
Definition parse-tree.h:5391
Definition parse-tree.h:5475
Definition parse-tree.h:5339
Definition parse-tree.h:5402
Definition parse-tree.h:5416
Definition parse-tree.h:5432
Definition parse-tree.h:5440
Definition parse-tree.h:5493
Definition parse-tree.h:5461
Definition parse-tree.h:5207
Definition parse-tree.h:5451
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:3225
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:3344
Definition parse-tree.h:400
Definition parse-tree.h:453
Definition parse-tree.h:1957
Definition parse-tree.h:361
Definition parse-tree.h:3362
Definition parse-tree.h:2524
Definition parse-tree.h:1877
Definition parse-tree.h:1205
Definition parse-tree.h:3483
Definition parse-tree.h:3455
Definition parse-tree.h:3478
Definition parse-tree.h:2995
Definition parse-tree.h:3006
Definition parse-tree.h:3159
Definition parse-tree.h:3328
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:3471
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:3705
Definition parse-tree.h:3696
Definition parse-tree.h:3666
Definition parse-tree.h:3655
Definition parse-tree.h:3650
Definition parse-tree.h:3676
Definition parse-tree.h:3689
Definition parse-tree.h:3860
Definition parse-tree.h:3877
Definition parse-tree.h:3869
Definition parse-tree.h:3905
Definition parse-tree.h:3917
Definition parse-tree.h:3927
Definition parse-tree.h:3938
Definition parse-tree.h:3951
Definition parse-tree.h:3963
Definition parse-tree.h:3984
Definition parse-tree.h:3995
Definition parse-tree.h:4005
Definition parse-tree.h:4014
Definition parse-tree.h:4046
Definition parse-tree.h:4057
Definition parse-tree.h:4068
Definition parse-tree.h:4080
Definition parse-tree.h:4090
Definition parse-tree.h:4098
Definition parse-tree.h:4107
Definition parse-tree.h:4116
Definition parse-tree.h:4150
Definition parse-tree.h:4137
Definition parse-tree.h:4124
Definition parse-tree.h:4174
Definition parse-tree.h:4165
Definition parse-tree.h:4208
Definition parse-tree.h:4184
Definition parse-tree.h:4217
Definition parse-tree.h:4230
Definition parse-tree.h:4239
Definition parse-tree.h:4249
Definition parse-tree.h:4259
Definition parse-tree.h:4268
Definition parse-tree.h:4276
Definition parse-tree.h:4286
Definition parse-tree.h:4297
Definition parse-tree.h:4310
Definition parse-tree.h:3743
Definition parse-tree.h:3726
Definition parse-tree.h:3767
Definition parse-tree.h:3733
Definition parse-tree.h:3794
Definition parse-tree.h:3806
Definition parse-tree.h:3819
Definition parse-tree.h:3828