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/idioms.h"
18#include "flang/Common/indirection.h"
19#include "flang/Support/Fortran.h"
20#include "llvm/Frontend/OpenMP/OMP.h"
21#include "llvm/Support/raw_ostream.h"
22#include <string>
23#include <type_traits>
24
25namespace Fortran::parser {
26
27//
28// Dump the Parse Tree hierarchy of any node 'x' of the parse tree.
29//
30
31class ParseTreeDumper {
32public:
33 explicit ParseTreeDumper(llvm::raw_ostream &out,
34 const AnalyzedObjectsAsFortran *asFortran = nullptr)
35 : out_(out), asFortran_{asFortran} {}
36
37 static constexpr const char *GetNodeName(const char *) { return "char *"; }
38#define NODE_NAME(T, N) \
39 static constexpr const char *GetNodeName(const T &) { return N; }
40#define NODE_ENUM(T, E) \
41 static std::string GetNodeName(const T::E &x) { \
42 return #E " = "s + std::string{T::EnumToString(x)}; \
43 }
44#define NODE(T1, T2) NODE_NAME(T1::T2, #T2)
45 NODE_NAME(bool, "bool")
46 NODE_NAME(int, "int")
47 NODE(std, string)
48 NODE(std, int64_t)
49 NODE(std, uint64_t)
50 NODE_ENUM(common, CUDADataAttr)
51 NODE_ENUM(common, CUDASubprogramAttrs)
52 NODE_ENUM(common, OmpMemoryOrderType)
53 NODE_ENUM(common, OpenACCDeviceType)
54 NODE(format, ControlEditDesc)
55 NODE(format::ControlEditDesc, Kind)
56 NODE(format, DerivedTypeDataEditDesc)
57 NODE(format, FormatItem)
58 NODE(format, FormatSpecification)
59 NODE(format, IntrinsicTypeDataEditDesc)
61 NODE(parser, Abstract)
63 NODE(AccAtomicCapture, Stmt1)
64 NODE(AccAtomicCapture, Stmt2)
72 NODE(parser, AccClause)
73#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
74#include "llvm/Frontend/OpenACC/ACC.inc"
77 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
78 return llvm::Twine(
79 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
80 .str();
81 }
85 NODE_ENUM(parser::AccDataModifier, Modifier)
87 NODE(parser, AccEndAtomic)
91 NODE(parser, AccGangArg)
92 NODE(AccGangArg, Num)
93 NODE(AccGangArg, Dim)
94 NODE(AccGangArg, Static)
96 NODE(parser, AccObject)
97 NODE(parser, AccObjectList)
100 NODE(parser, AccSizeExpr)
102 NODE(parser, AccSelfClause)
105
107 NODE(parser, AccTileExpr)
110 NODE(parser, AccEndLoop)
112 static std::string GetNodeName(const llvm::acc::Directive &x) {
113 return llvm::Twine(
114 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
115 .str();
116 }
117 NODE(parser, AcImpliedDo)
119 NODE(parser, AcValue)
120 NODE(parser, AccessStmt)
121 NODE(parser, AccessId)
122 NODE(parser, AccessSpec)
123 NODE_ENUM(AccessSpec, Kind)
124 NODE(parser, AcSpec)
125 NODE(parser, ActionStmt)
126 NODE(parser, ActualArg)
127 NODE(ActualArg, PercentRef)
128 NODE(ActualArg, PercentVal)
129 NODE(parser, ActualArgSpec)
130 NODE(AcValue, Triplet)
131 NODE(parser, AllocOpt)
132 NODE(AllocOpt, Mold)
133 NODE(AllocOpt, Source)
134 NODE(AllocOpt, Stream)
135 NODE(AllocOpt, Pinned)
136 NODE(parser, Allocatable)
137 NODE(parser, AllocatableStmt)
141 NODE(parser, AllocateStmt)
142 NODE(parser, Allocation)
143 NODE(parser, AltReturnSpec)
145 NODE(parser, ArrayConstructor)
146 NODE(parser, ArrayElement)
147 NODE(parser, ArraySpec)
148 NODE(parser, AssignStmt)
152 NODE(parser, AssociateStmt)
153 NODE(parser, Association)
154 NODE(parser, AssumedImpliedSpec)
155 NODE(parser, AssumedRankSpec)
156 NODE(parser, AssumedShapeSpec)
158 NODE(parser, Asynchronous)
159 NODE(parser, AsynchronousStmt)
160 NODE(parser, AttrSpec)
161 NODE(parser, BOZLiteralConstant)
162 NODE(parser, BackspaceStmt)
163 NODE(parser, BasedPointer)
164 NODE(parser, BasedPointerStmt)
165 NODE(parser, BindAttr)
166 NODE(BindAttr, Deferred)
167 NODE(BindAttr, Non_Overridable)
168 NODE(parser, BindEntity)
169 NODE_ENUM(BindEntity, Kind)
170 NODE(parser, BindStmt)
171 NODE(parser, Block)
173 NODE(parser, BlockData)
174 NODE(parser, BlockDataStmt)
175 NODE(parser, BlockSpecificationPart)
176 NODE(parser, BlockStmt)
178 NODE(parser, BoundsSpec)
179 NODE(parser, Call)
180 NODE(parser, CallStmt)
181 NODE(CallStmt, Chevrons)
182 NODE(CallStmt, StarOrExpr)
183 NODE(parser, CaseConstruct)
184 NODE(CaseConstruct, Case)
185 NODE(parser, CaseSelector)
186 NODE(parser, CaseStmt)
188 NODE(CaseValueRange, Range)
191 NODE(parser, CharLength)
194 NODE(parser, CharSelector)
195 NODE(CharSelector, LengthAndKind)
196 NODE(parser, CloseStmt)
197 NODE(CloseStmt, CloseSpec)
199 NODE(parser, CoarraySpec)
201 NODE(parser, CodimensionStmt)
204 NODE(parser, CommonStmt)
205 NODE(CommonStmt, Block)
207 NODE(CompilerDirective, AssumeAligned)
208 NODE(CompilerDirective, IgnoreTKR)
209 NODE(CompilerDirective, Inline)
210 NODE(CompilerDirective, ForceInline)
211 NODE(CompilerDirective, LoopCount)
212 NODE(CompilerDirective, NameValue)
213 NODE(CompilerDirective, NoInline)
214 NODE(CompilerDirective, Unrecognized)
215 NODE(CompilerDirective, VectorAlways)
216 NODE(CompilerDirective, Unroll)
217 NODE(CompilerDirective, UnrollAndJam)
218 NODE(CompilerDirective, NoVector)
219 NODE(CompilerDirective, NoUnroll)
220 NODE(CompilerDirective, NoUnrollAndJam)
222 NODE(parser, ComplexPart)
225 NODE(parser, ComponentDataSource)
226 NODE(parser, ComponentDecl)
227 NODE(parser, FillDecl)
230 NODE(parser, ComponentSpec)
234 NODE(parser, ConnectSpec)
235 NODE(ConnectSpec, CharExpr)
236 NODE_ENUM(ConnectSpec::CharExpr, Kind)
237 NODE(ConnectSpec, Newunit)
238 NODE(ConnectSpec, Recl)
239 NODE(parser, ContainsStmt)
240 NODE(parser, Contiguous)
241 NODE(parser, ContiguousStmt)
242 NODE(parser, ContinueStmt)
244 NODE(parser, CriticalStmt)
247 NODE(CUFKernelDoConstruct, StarOrExpr)
248 NODE(CUFKernelDoConstruct, Directive)
249 NODE(CUFKernelDoConstruct, LaunchConfiguration)
250 NODE(parser, CUFReduction)
251 NODE(parser, CycleStmt)
253 NODE(parser, DataIDoObject)
254 NODE(parser, DataImpliedDo)
255 NODE(parser, DataRef)
256 NODE(parser, DataStmt)
260 NODE(parser, DataStmtSet)
261 NODE(parser, DataStmtValue)
265 NODE(DeclarationTypeSpec, Class)
266 NODE(DeclarationTypeSpec, ClassStar)
267 NODE(DeclarationTypeSpec, Record)
268 NODE(DeclarationTypeSpec, Type)
269 NODE(DeclarationTypeSpec, TypeStar)
270 NODE(parser, Default)
271 NODE(parser, DeferredCoshapeSpecList)
272 NODE(parser, DeferredShapeSpecList)
273 NODE(parser, DefinedOpName)
275 NODE_ENUM(DefinedOperator, IntrinsicOperator)
279 NODE(parser, Designator)
280 NODE(parser, DimensionStmt)
281 NODE(DimensionStmt, Declaration)
282 NODE(parser, DoConstruct)
283 NODE(parser, DummyArg)
284 NODE(parser, ElseIfStmt)
285 NODE(parser, ElseStmt)
286 NODE(parser, ElsewhereStmt)
287 NODE(parser, EndAssociateStmt)
288 NODE(parser, EndBlockDataStmt)
289 NODE(parser, EndBlockStmt)
291 NODE(parser, EndCriticalStmt)
292 NODE(parser, EndDoStmt)
293 NODE(parser, EndEnumStmt)
294 NODE(parser, EndForallStmt)
295 NODE(parser, EndFunctionStmt)
296 NODE(parser, EndIfStmt)
297 NODE(parser, EndInterfaceStmt)
298 NODE(parser, EndLabel)
299 NODE(parser, EndModuleStmt)
300 NODE(parser, EndMpSubprogramStmt)
301 NODE(parser, EndProgramStmt)
302 NODE(parser, EndSelectStmt)
303 NODE(parser, EndSubmoduleStmt)
304 NODE(parser, EndSubroutineStmt)
305 NODE(parser, EndTypeStmt)
306 NODE(parser, EndWhereStmt)
307 NODE(parser, EndfileStmt)
308 NODE(parser, EntityDecl)
309 NODE(parser, EntryStmt)
310 NODE(parser, EnumDef)
311 NODE(parser, EnumDefStmt)
312 NODE(parser, Enumerator)
313 NODE(parser, EnumeratorDefStmt)
314 NODE(parser, EorLabel)
315 NODE(parser, EquivalenceObject)
316 NODE(parser, EquivalenceStmt)
317 NODE(parser, ErrLabel)
318 NODE(parser, ErrorRecovery)
319 NODE(parser, EventPostStmt)
320 NODE(parser, EventWaitSpec)
321 NODE(parser, EventWaitStmt)
323 NODE(parser, ExecutionPart)
325 NODE(parser, ExitStmt)
328 NODE(parser, Expr)
329 NODE(Expr, Parentheses)
330 NODE(Expr, UnaryPlus)
331 NODE(Expr, Negate)
332 NODE(Expr, NOT)
333 NODE(Expr, PercentLoc)
334 NODE(Expr, DefinedUnary)
335 NODE(Expr, Power)
336 NODE(Expr, Multiply)
337 NODE(Expr, Divide)
338 NODE(Expr, Add)
339 NODE(Expr, Subtract)
340 NODE(Expr, Concat)
341 NODE(Expr, LT)
342 NODE(Expr, LE)
343 NODE(Expr, EQ)
344 NODE(Expr, NE)
345 NODE(Expr, GE)
346 NODE(Expr, GT)
347 NODE(Expr, AND)
348 NODE(Expr, OR)
349 NODE(Expr, EQV)
350 NODE(Expr, NEQV)
351 NODE(Expr, DefinedBinary)
352 NODE(Expr, ComplexConstructor)
353 NODE(parser, External)
354 NODE(parser, ExternalStmt)
355 NODE(parser, FailImageStmt)
356 NODE(parser, FileUnitNumber)
357 NODE(parser, FinalProcedureStmt)
358 NODE(parser, FlushStmt)
363 NODE(parser, ForallStmt)
364 NODE(parser, FormTeamStmt)
365 NODE(FormTeamStmt, FormTeamSpec)
366 NODE(parser, Format)
367 NODE(parser, FormatStmt)
369 NODE(parser, FunctionStmt)
371 NODE(parser, GenericSpec)
372 NODE(GenericSpec, Assignment)
373 NODE(GenericSpec, ReadFormatted)
374 NODE(GenericSpec, ReadUnformatted)
375 NODE(GenericSpec, WriteFormatted)
376 NODE(GenericSpec, WriteUnformatted)
377 NODE(parser, GenericStmt)
378 NODE(parser, GotoStmt)
380 NODE(parser, IdExpr)
381 NODE(parser, IdVariable)
382 NODE(parser, IfConstruct)
383 NODE(IfConstruct, ElseBlock)
384 NODE(IfConstruct, ElseIfBlock)
385 NODE(parser, IfStmt)
386 NODE(parser, IfThenStmt)
387 NODE(parser, TeamValue)
388 NODE(parser, ImageSelector)
390 NODE(ImageSelectorSpec, Stat)
391 NODE(ImageSelectorSpec, Team_Number)
392 NODE(parser, ImplicitPart)
394 NODE(parser, ImplicitSpec)
395 NODE(parser, ImplicitStmt)
396 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
397 NODE(parser, ImpliedShapeSpec)
398 NODE(parser, ImportStmt)
401 NODE(parser, InputItem)
402 NODE(parser, InquireSpec)
403 NODE(InquireSpec, CharVar)
404 NODE_ENUM(InquireSpec::CharVar, Kind)
405 NODE(InquireSpec, IntVar)
406 NODE_ENUM(InquireSpec::IntVar, Kind)
407 NODE(InquireSpec, LogVar)
408 NODE_ENUM(InquireSpec::LogVar, Kind)
409 NODE(parser, InquireStmt)
410 NODE(InquireStmt, Iolength)
411 NODE(parser, IntegerTypeSpec)
412 NODE(parser, IntentSpec)
413 NODE_ENUM(IntentSpec, Intent)
414 NODE(parser, IntentStmt)
416 NODE(parser, InterfaceBody)
417 NODE(InterfaceBody, Function)
418 NODE(InterfaceBody, Subroutine)
420 NODE(parser, InterfaceStmt)
423 NODE(parser, Intrinsic)
424 NODE(parser, IntrinsicStmt)
426 NODE(IntrinsicTypeSpec, Character)
427 NODE(IntrinsicTypeSpec, Complex)
428 NODE(IntrinsicTypeSpec, DoubleComplex)
429 NODE(IntrinsicTypeSpec, DoublePrecision)
431 NODE(IntrinsicTypeSpec, Real)
432 NODE(parser, IoControlSpec)
433 NODE(IoControlSpec, Asynchronous)
434 NODE(IoControlSpec, CharExpr)
435 NODE_ENUM(IoControlSpec::CharExpr, Kind)
436 NODE(IoControlSpec, Pos)
437 NODE(IoControlSpec, Rec)
438 NODE(IoControlSpec, Size)
439 NODE(parser, IoUnit)
440 NODE(parser, Keyword)
441 NODE(parser, KindParam)
442 NODE(parser, KindSelector)
443 NODE(KindSelector, StarSize)
444 NODE(parser, LabelDoStmt)
447 NODE(parser, LetterSpec)
451 NODE_ENUM(parser::ReductionOperator, Operator)
452 NODE(parser, LocalitySpec)
453 NODE(LocalitySpec, DefaultNone)
454 NODE(LocalitySpec, Local)
455 NODE(LocalitySpec, LocalInit)
456 NODE(LocalitySpec, Reduce)
457 NODE(LocalitySpec, Shared)
458 NODE(parser, LockStmt)
459 NODE(LockStmt, LockStat)
461 NODE_NAME(LoopControl::Bounds, "LoopBounds")
462 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
463 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
464 NODE(parser, LoopControl)
465 NODE(LoopControl, Concurrent)
466 NODE(parser, MainProgram)
467 NODE(parser, Map)
468 NODE(Map, EndMapStmt)
469 NODE(Map, MapStmt)
471 NODE(parser, Module)
472 NODE(parser, ModuleStmt)
475 NODE(parser, MpSubprogramStmt)
476 NODE(parser, MsgVariable)
477 NODE(parser, Name)
478 NODE(parser, NamedConstant)
480 NODE(parser, NamelistStmt)
481 NODE(NamelistStmt, Group)
483 NODE(parser, NoPass)
485 NODE(parser, NullifyStmt)
486 NODE(parser, NullInit)
487 NODE(parser, ObjectDecl)
488 NODE(parser, OldParameterStmt)
489
490 static std::string GetNodeName(const llvm::omp::Directive &x) {
491 return llvm::Twine("llvm::omp::Directive = ",
492 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
493 .str();
494 }
495 static std::string GetNodeName(const llvm::omp::Clause &x) {
496 return llvm::Twine(
497 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
498 .str();
499 }
502 NODE_ENUM(OmpAccessGroup, Value)
504 NODE(OmpAdjustArgsClause, OmpAdjustOp)
505 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
507 NODE(OmpAffinityClause, Modifier)
510 NODE(OmpAlignedClause, Modifier)
511 NODE(parser, OmpAlignment)
514 NODE(OmpAllocateClause, Modifier)
518 NODE_ENUM(OmpAlwaysModifier, Value)
520 NODE(OmpAppendArgsClause, OmpAppendOp)
521 NODE(parser, OmpArgument)
523 NODE(parser, OmpAtClause)
524 NODE_ENUM(OmpAtClause, ActionTime)
527 NODE_ENUM(OmpAttachModifier, Value)
529 NODE_ENUM(OmpAutomapModifier, Value)
534 NODE(parser, OmpBindClause)
535 NODE_ENUM(OmpBindClause, Binding)
539 NODE_ENUM(OmpChunkModifier, Value)
540 NODE(parser, OmpClause)
541 NODE(parser, OmpClauseList)
543 NODE_ENUM(OmpCloseModifier, Value)
549 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
551 NODE(OmpDefaultmapClause, Modifier)
552 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
554 NODE_ENUM(OmpDeleteModifier, Value)
556 NODE(OmpDependClause, TaskDep)
557 NODE(OmpDependClause::TaskDep, Modifier)
559 NODE_ENUM(OmpDependenceType, Value)
563 NODE(OmpDeviceClause, Modifier)
565 NODE_ENUM(OmpDeviceModifier, Value)
568 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
571 NODE_ENUM(OmpDirectiveSpecification, Flags)
572 NODE(parser, OmpDoacross)
573 NODE(OmpDoacross, Sink)
574 NODE(OmpDoacross, Source)
578 NODE(OmpDynGroupprivateClause, Modifier)
583 NODE(OmpEnterClause, Modifier)
586 NODE_ENUM(OmpExpectation, Value)
587 NODE(parser, OmpFailClause)
588 NODE(parser, OmpFromClause)
589 NODE(OmpFromClause, Modifier)
591 NODE(OmpGrainsizeClause, Modifier)
594 NODE(parser, OmpHintClause)
596 NODE(parser, OmpIfClause)
597 NODE(OmpIfClause, Modifier)
599 NODE(parser, OmpInitClause)
600 NODE(OmpInitClause, Modifier)
604 NODE(OmpInReductionClause, Modifier)
608 NODE_ENUM(OmpInteropType, Value)
609 NODE(parser, OmpIteration)
612 NODE(parser, OmpIterator)
615 NODE(OmpLastprivateClause, Modifier)
617 NODE_ENUM(OmpLastprivateModifier, Value)
619 NODE(OmpLinearClause, Modifier)
621 NODE_ENUM(OmpLinearModifier, Value)
622 NODE(parser, OmpLocator)
625 NODE(parser, OmpMapClause)
626 NODE(OmpMapClause, Modifier)
627 NODE(parser, OmpMapper)
629 NODE(parser, OmpMapType)
630 NODE_ENUM(OmpMapType, Value)
632 NODE_ENUM(OmpMapTypeModifier, Value)
636 NODE(parser, OmpNoOpenMPClause)
637 NODE(parser, OmpNoOpenMPRoutinesClause)
638 NODE(parser, OmpNoParallelismClause)
641 NODE(OmpNumTasksClause, Modifier)
642 NODE(parser, OmpObject)
643 NODE(OmpObject, Invalid)
644 NODE_ENUM(OmpObject::Invalid, Kind)
645 NODE(parser, OmpObjectList)
647 NODE(OmpOrderClause, Modifier)
648 NODE_ENUM(OmpOrderClause, Ordering)
650 NODE_ENUM(OmpOrderingModifier, Value)
652 NODE_ENUM(OmpOrderModifier, Value)
655 NODE_ENUM(OmpPrescriptiveness, Value)
657 NODE_ENUM(OmpPresentModifier, Value)
659 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
661 NODE(OmpReductionClause, Modifier)
664 NODE_ENUM(OmpReductionModifier, Value)
667 NODE_ENUM(OmpRefModifier, Value)
671 NODE(OmpScheduleClause, Modifier)
672 NODE_ENUM(OmpScheduleClause, Kind)
675 NODE_ENUM(OmpSelfModifier, Value)
677 NODE_ENUM(OmpSeverityClause, Severity)
683 NODE(OmpStylizedInstance, Instance)
685 NODE_ENUM(OmpTaskDependenceType, Value)
687 NODE(OmpTaskReductionClause, Modifier)
689 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
690 NODE(parser, OmpToClause)
691 NODE(OmpToClause, Modifier)
694 NODE(OmpTraitPropertyExtension, Complex)
696 NODE(parser, OmpTraitScore)
698 NODE(OmpTraitSelector, Properties)
700 NODE_ENUM(OmpTraitSelectorName, Value)
703 NODE_ENUM(OmpTraitSetSelectorName, Value)
705 NODE(parser, OmpTypeName)
710 NODE(parser, OmpUseClause)
712 NODE_ENUM(OmpVariableCategory, Value)
713 NODE(parser, OmpWhenClause)
714 NODE(OmpWhenClause, Modifier)
716 NODE_ENUM(OmpxHoldModifier, Value)
717#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
718#include "llvm/Frontend/OpenMP/OMP.inc"
719
720 NODE(parser, Only)
734
762
763 NODE(parser, OpenStmt)
764 NODE(parser, Optional)
765 NODE(parser, OptionalStmt)
768 NODE(parser, OutputItem)
769 NODE(parser, Parameter)
770 NODE(parser, ParameterStmt)
772 NODE(parser, Pass)
773 NODE(parser, PauseStmt)
774 NODE(parser, Pointer)
776 NODE(PointerAssignmentStmt, Bounds)
777 NODE(parser, PointerDecl)
778 NODE(parser, PointerObject)
779 NODE(parser, PointerStmt)
781 NODE(parser, PrefixSpec)
782 NODE(PrefixSpec, Elemental)
783 NODE(PrefixSpec, Impure)
784 NODE(PrefixSpec, Module)
785 NODE(PrefixSpec, Non_Recursive)
786 NODE(PrefixSpec, Pure)
787 NODE(PrefixSpec, Recursive)
788 NODE(PrefixSpec, Attributes)
789 NODE(PrefixSpec, Launch_Bounds)
790 NODE(PrefixSpec, Cluster_Dims)
791 NODE(parser, PrintStmt)
792 NODE(parser, PrivateStmt)
794 NODE(parser, ProcAttrSpec)
798 NODE(parser, ProcDecl)
799 NODE(parser, ProcInterface)
803 NODE(parser, ProcedureStmt)
804 NODE_ENUM(ProcedureStmt, Kind)
805 NODE(parser, Program)
806 NODE(parser, ProgramStmt)
807 NODE(parser, ProgramUnit)
808 NODE(parser, Protected)
809 NODE(parser, ProtectedStmt)
810 NODE(parser, ReadStmt)
812 NODE(RealLiteralConstant, Real)
813 NODE(parser, Rename)
814 NODE(Rename, Names)
815 NODE(Rename, Operators)
816 NODE(parser, ReturnStmt)
817 NODE(parser, RewindStmt)
818 NODE(parser, Save)
819 NODE(parser, SaveStmt)
820 NODE(parser, SavedEntity)
821 NODE_ENUM(SavedEntity, Kind)
825 NODE(SelectRankCaseStmt, Rank)
827 NODE(SelectRankConstruct, RankCase)
830 NODE(SelectTypeConstruct, TypeCase)
832 NODE(parser, Selector)
834 NODE(parser, SequenceStmt)
835 NODE(parser, Sign)
840 NODE(parser, SpecificationExpr)
842 NODE(parser, Star)
843 NODE(parser, StatOrErrmsg)
844 NODE(parser, StatVariable)
845 NODE(parser, StatusExpr)
847 NODE(parser, StopCode)
848 NODE(parser, StopStmt)
849 NODE_ENUM(StopStmt, Kind)
852 NODE(parser, StructureDef)
853 NODE(StructureDef, EndStructureStmt)
855 NODE(parser, StructureStmt)
856 NODE(parser, Submodule)
857 NODE(parser, SubmoduleStmt)
861 NODE(parser, Substring)
864 NODE(parser, Suffix)
865 NODE(parser, SyncAllStmt)
867 NODE(SyncImagesStmt, ImageSet)
868 NODE(parser, SyncMemoryStmt)
869 NODE(parser, SyncTeamStmt)
870 NODE(parser, Target)
871 NODE(parser, TargetStmt)
872 NODE(parser, TypeAttrSpec)
873 NODE(TypeAttrSpec, BindC)
874 NODE(TypeAttrSpec, Extends)
880 NODE(TypeBoundProcedureStmt, WithInterface)
881 NODE(TypeBoundProcedureStmt, WithoutInterface)
883 NODE(parser, TypeGuardStmt)
884 NODE(TypeGuardStmt, Guard)
885 NODE(parser, TypeParamDecl)
887 NODE(common, TypeParamAttr)
888 NODE(parser, TypeParamSpec)
890 NODE(TypeParamValue, Deferred)
891 NODE(parser, TypeSpec)
892 NODE(parser, Union)
893 NODE(Union, EndUnionStmt)
894 NODE(Union, UnionStmt)
895 NODE(parser, UnlockStmt)
897 NODE(parser, UnsignedTypeSpec)
898 NODE(parser, UseStmt)
899 NODE_ENUM(UseStmt, ModuleNature)
900 NODE(parser, Value)
901 NODE(parser, ValueStmt)
902 NODE(parser, Variable)
904 NODE(VectorTypeSpec, PairVectorTypeSpec)
905 NODE(VectorTypeSpec, QuadVectorTypeSpec)
906 NODE(parser, IntrinsicVectorTypeSpec)
908 NODE(parser, Verbatim)
909 NODE(parser, Volatile)
910 NODE(parser, VolatileStmt)
911 NODE(parser, WaitSpec)
912 NODE(parser, WaitStmt)
915 NODE(WhereConstruct, Elsewhere)
916 NODE(WhereConstruct, MaskedElsewhere)
918 NODE(parser, WhereStmt)
919 NODE(parser, WriteStmt)
920#undef NODE
921#undef NODE_NAME
922
923 template <typename T> bool Pre(const T &x) {
924 std::string fortran{AsFortran<T>(x)};
925 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
926 Prefix(GetNodeName(x));
927 } else {
928 IndentEmptyLine();
929 out_ << GetNodeName(x);
930 if (!fortran.empty()) {
931 out_ << " = '" << fortran << '\'';
932 }
933 EndLine();
934 ++indent_;
935 }
936 return true;
937 }
938
939 template <typename T> void Post(const T &x) {
940 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
941 EndLineIfNonempty();
942 } else {
943 --indent_;
944 }
945 }
946
947 // A few types we want to ignore
948
949 bool Pre(const CharBlock &) { return true; }
950 void Post(const CharBlock &) {}
951
952 template <typename T> bool Pre(const Statement<T> &) { return true; }
953 template <typename T> void Post(const Statement<T> &) {}
954 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
955 template <typename T> void Post(const UnlabeledStatement<T> &) {}
956
957 template <typename T> bool Pre(const common::Indirection<T> &) {
958 return true;
959 }
960 template <typename T> void Post(const common::Indirection<T> &) {}
961
962 template <typename A> bool Pre(const Scalar<A> &) {
963 Prefix("Scalar");
964 return true;
965 }
966 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
967
968 template <typename A> bool Pre(const Constant<A> &) {
969 Prefix("Constant");
970 return true;
971 }
972 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
973
974 template <typename A> bool Pre(const Integer<A> &) {
975 Prefix("Integer");
976 return true;
977 }
978 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
979
980 template <typename A> bool Pre(const Logical<A> &) {
981 Prefix("Logical");
982 return true;
983 }
984 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
985
986 template <typename A> bool Pre(const DefaultChar<A> &) {
987 Prefix("DefaultChar");
988 return true;
989 }
990 template <typename A> void Post(const DefaultChar<A> &) {
991 EndLineIfNonempty();
992 }
993
994 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
995 template <typename... A> void Post(const std::tuple<A...> &) {}
996
997 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
998 template <typename... A> void Post(const std::variant<A...> &) {}
999
1000protected:
1001 // Return a Fortran representation of this node to include in the dump
1002 template <typename T> std::string AsFortran(const T &x) {
1003 std::string buf;
1004 llvm::raw_string_ostream ss{buf};
1005 if constexpr (HasTypedExpr<T>::value) {
1006 if (asFortran_ && x.typedExpr) {
1007 asFortran_->expr(ss, *x.typedExpr);
1008 }
1009 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1010 std::is_same_v<T, PointerAssignmentStmt>) {
1011 if (asFortran_ && x.typedAssignment) {
1012 asFortran_->assignment(ss, *x.typedAssignment);
1013 }
1014 } else if constexpr (std::is_same_v<T, CallStmt>) {
1015 if (asFortran_ && x.typedCall) {
1016 asFortran_->call(ss, *x.typedCall);
1017 }
1018 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1019 std::is_same_v<T, SignedIntLiteralConstant> ||
1020 std::is_same_v<T, UnsignedLiteralConstant>) {
1021 ss << std::get<CharBlock>(x.t);
1022 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1023 ss << x.source;
1024 } else if constexpr (std::is_same_v<T, std::string> ||
1025 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1026 ss << x;
1027 }
1028 if (ss.tell()) {
1029 return buf;
1030 }
1031 if constexpr (std::is_same_v<T, Name>) {
1032 return x.source.ToString();
1033#ifdef SHOW_ALL_SOURCE_MEMBERS
1034 } else if constexpr (HasSource<T>::value) {
1035 return x.source.ToString();
1036#endif
1037 } else if constexpr (std::is_same_v<T, int>) {
1038 return std::to_string(x);
1039 } else if constexpr (std::is_same_v<T, bool>) {
1040 return x ? "true" : "false";
1041 } else {
1042 return "";
1043 }
1044 }
1045
1046 void IndentEmptyLine() {
1047 if (emptyline_ && indent_ > 0) {
1048 for (int i{0}; i < indent_; ++i) {
1049 out_ << "| ";
1050 }
1051 emptyline_ = false;
1052 }
1053 }
1054
1055 void Prefix(const char *str) {
1056 IndentEmptyLine();
1057 out_ << str << " -> ";
1058 emptyline_ = false;
1059 }
1060
1061 void Prefix(const std::string &str) {
1062 IndentEmptyLine();
1063 out_ << str << " -> ";
1064 emptyline_ = false;
1065 }
1066
1067 void EndLine() {
1068 out_ << '\n';
1069 emptyline_ = true;
1070 }
1071
1072 void EndLineIfNonempty() {
1073 if (!emptyline_) {
1074 EndLine();
1075 }
1076 }
1077
1078private:
1079 int indent_{0};
1080 llvm::raw_ostream &out_;
1081 const AnalyzedObjectsAsFortran *const asFortran_;
1082 bool emptyline_{false};
1083};
1084
1085template <typename T>
1086llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1087 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1088 ParseTreeDumper dumper{out, asFortran};
1089 Walk(x, dumper);
1090 return out;
1091}
1092
1093} // namespace Fortran::parser
1094#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition indirection.h:31
Definition char-block.h:28
Definition dump-parse-tree.h:31
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:1306
Definition parse-tree.h:1313
Definition parse-tree.h:1272
Definition parse-tree.h:1260
Definition parse-tree.h:5557
Definition parse-tree.h:5533
Definition parse-tree.h:5549
Definition parse-tree.h:5541
Definition parse-tree.h:5518
Definition parse-tree.h:5582
Definition parse-tree.h:5512
Definition parse-tree.h:5388
Definition parse-tree.h:5361
Definition parse-tree.h:5489
Definition parse-tree.h:5474
Definition parse-tree.h:5469
Definition parse-tree.h:5377
Definition parse-tree.h:5399
Definition parse-tree.h:5382
Definition parse-tree.h:5394
Definition parse-tree.h:5426
Definition parse-tree.h:5420
Definition parse-tree.h:5524
Definition parse-tree.h:5588
Definition parse-tree.h:5465
Definition parse-tree.h:5456
Definition parse-tree.h:5366
Definition parse-tree.h:5405
Definition parse-tree.h:5353
Definition parse-tree.h:5449
Definition parse-tree.h:5445
Definition parse-tree.h:5441
Definition parse-tree.h:5371
Definition parse-tree.h:5437
Definition parse-tree.h:5431
Definition parse-tree.h:5415
Definition parse-tree.h:912
Definition parse-tree.h:1430
Definition parse-tree.h:493
Definition parse-tree.h:3256
Definition parse-tree.h:3246
Definition parse-tree.h:1983
Definition parse-tree.h:1948
Definition parse-tree.h:1927
Definition parse-tree.h:1939
Definition parse-tree.h:1994
Definition parse-tree.h:1956
Definition parse-tree.h:3460
Definition parse-tree.h:1915
Definition parse-tree.h:1361
Definition parse-tree.h:3465
Definition parse-tree.h:3470
Definition parse-tree.h:2020
Definition parse-tree.h:2177
Definition parse-tree.h:2168
Definition parse-tree.h:2161
Definition parse-tree.h:1343
Definition parse-tree.h:1391
Definition parse-tree.h:3410
Definition parse-tree.h:1130
Definition parse-tree.h:1452
Definition parse-tree.h:1459
Definition parse-tree.h:2199
Definition parse-tree.h:3031
Definition parse-tree.h:2032
Definition parse-tree.h:3404
Definition parse-tree.h:5658
Definition parse-tree.h:5652
Definition parse-tree.h:3280
Definition parse-tree.h:3263
Definition parse-tree.h:2441
Definition parse-tree.h:2423
Definition parse-tree.h:2429
Definition parse-tree.h:2409
Definition parse-tree.h:2230
Definition parse-tree.h:2215
Definition parse-tree.h:666
Definition parse-tree.h:871
Definition parse-tree.h:682
Definition parse-tree.h:2699
Definition parse-tree.h:2207
Definition parse-tree.h:987
Definition parse-tree.h:1465
Definition parse-tree.h:1906
Definition parse-tree.h:1629
Definition parse-tree.h:1637
Definition parse-tree.h:3365
Definition parse-tree.h:857
Definition parse-tree.h:849
Definition parse-tree.h:998
Definition parse-tree.h:1011
Definition parse-tree.h:1042
Definition parse-tree.h:1119
Definition parse-tree.h:1064
Definition parse-tree.h:1223
Definition parse-tree.h:2528
Definition parse-tree.h:2255
Definition parse-tree.h:2264
Definition parse-tree.h:2677
Definition parse-tree.h:2675
Definition parse-tree.h:302
Definition parse-tree.h:2246
Definition parse-tree.h:2237
Definition parse-tree.h:1072
Definition parse-tree.h:1519
Definition parse-tree.h:1531
Definition parse-tree.h:1822
Definition parse-tree.h:1490
Definition parse-tree.h:1539
Definition parse-tree.h:1505
Definition parse-tree.h:1545
Definition parse-tree.h:1511
Definition parse-tree.h:2014
Definition parse-tree.h:434
Definition parse-tree.h:771
Definition parse-tree.h:326
Definition parse-tree.h:608
Definition parse-tree.h:1208
Definition parse-tree.h:753
Definition parse-tree.h:929
Definition parse-tree.h:1861
Definition parse-tree.h:1556
Definition parse-tree.h:2342
Definition parse-tree.h:3164
Definition parse-tree.h:2362
Definition parse-tree.h:2224
Definition parse-tree.h:1406
Definition parse-tree.h:3336
Definition parse-tree.h:1252
Definition parse-tree.h:1238
Definition parse-tree.h:2582
Definition parse-tree.h:2588
Definition parse-tree.h:2596
Definition parse-tree.h:526
Definition parse-tree.h:550
Definition parse-tree.h:981
Definition parse-tree.h:968
Definition parse-tree.h:1704
Definition parse-tree.h:1058
Definition parse-tree.h:2118
Definition parse-tree.h:2134
Definition parse-tree.h:2112
Definition parse-tree.h:2147
Definition parse-tree.h:2124
Definition parse-tree.h:2608
Definition parse-tree.h:2711
Definition parse-tree.h:3268
Definition parse-tree.h:3153
Definition parse-tree.h:3302
Definition parse-tree.h:3044
Definition parse-tree.h:3059
Definition tools.h:134
Definition tools.h:140
Definition parse-tree.h:2376
Definition parse-tree.h:2392
Definition parse-tree.h:2355
Definition parse-tree.h:1689
Definition parse-tree.h:1698
Definition parse-tree.h:416
Definition parse-tree.h:1613
Definition parse-tree.h:1622
Definition parse-tree.h:621
Definition parse-tree.h:1029
Definition parse-tree.h:2806
Definition parse-tree.h:2750
Definition parse-tree.h:2893
Definition parse-tree.h:2901
Definition parse-tree.h:2906
Definition parse-tree.h:2891
Definition parse-tree.h:2919
Definition parse-tree.h:805
Definition parse-tree.h:310
Definition parse-tree.h:1369
Definition parse-tree.h:1565
Definition parse-tree.h:3220
Definition parse-tree.h:3185
Definition parse-tree.h:3210
Definition parse-tree.h:3065
Definition parse-tree.h:472
Definition parse-tree.h:460
Definition parse-tree.h:703
Definition parse-tree.h:2735
Definition parse-tree.h:2733
Definition parse-tree.h:2647
Definition parse-tree.h:792
Definition parse-tree.h:654
Definition parse-tree.h:2319
Definition parse-tree.h:1322
Definition parse-tree.h:672
Definition parse-tree.h:1607
Definition parse-tree.h:903
Definition parse-tree.h:2287
Definition parse-tree.h:2622
Definition parse-tree.h:885
Definition parse-tree.h:318
Definition parse-tree.h:2307
Definition parse-tree.h:2940
Definition parse-tree.h:3426
Definition parse-tree.h:2079
Definition parse-tree.h:2964
Definition parse-tree.h:2954
Definition parse-tree.h:2975
Definition parse-tree.h:583
Definition parse-tree.h:1328
Definition parse-tree.h:634
Definition parse-tree.h:2325
Definition parse-tree.h:2550
Definition parse-tree.h:1439
Definition parse-tree.h:4235
Definition parse-tree.h:4239
Definition parse-tree.h:4254
Definition parse-tree.h:4261
Definition parse-tree.h:4269
Definition parse-tree.h:4284
Definition parse-tree.h:4291
Definition parse-tree.h:4300
Definition parse-tree.h:4976
Definition parse-tree.h:5307
Definition parse-tree.h:5047
Definition parse-tree.h:4323
Definition parse-tree.h:4986
Definition parse-tree.h:4947
Definition parse-tree.h:4931
Definition parse-tree.h:3595
Definition parse-tree.h:4338
Definition parse-tree.h:4355
Definition parse-tree.h:4373
Definition parse-tree.h:4432
Definition parse-tree.h:4430
Definition parse-tree.h:4454
Definition parse-tree.h:4462
Definition parse-tree.h:4472
Definition parse-tree.h:4482
Definition parse-tree.h:4490
Definition parse-tree.h:3496
Definition parse-tree.h:4954
Definition parse-tree.h:4445
Definition parse-tree.h:4412
Definition parse-tree.h:4505
Definition parse-tree.h:4981
Definition parse-tree.h:5311
Definition parse-tree.h:5052
Definition parse-tree.h:4516
Definition parse-tree.h:5014
Definition parse-tree.h:4524
Definition parse-tree.h:4537
Definition parse-tree.h:4548
Definition parse-tree.h:4558
Definition parse-tree.h:4566
Definition parse-tree.h:4571
Definition parse-tree.h:4579
Definition parse-tree.h:4595
Definition parse-tree.h:4605
Definition parse-tree.h:4584
Definition parse-tree.h:4917
Definition parse-tree.h:4612
Definition parse-tree.h:3607
Definition parse-tree.h:4385
Definition parse-tree.h:4403
Definition parse-tree.h:4394
Definition parse-tree.h:4621
Definition parse-tree.h:4636
Definition parse-tree.h:4647
Definition parse-tree.h:4672
Definition parse-tree.h:4684
Definition parse-tree.h:4693
Definition parse-tree.h:4999
Definition parse-tree.h:5008
Definition parse-tree.h:4717
Definition parse-tree.h:3541
Definition parse-tree.h:3532
Definition parse-tree.h:3529
Definition parse-tree.h:4728
Definition parse-tree.h:4741
Definition parse-tree.h:4753
Definition parse-tree.h:4764
Definition parse-tree.h:3585
Definition parse-tree.h:4774
Definition parse-tree.h:4783
Definition parse-tree.h:4795
Definition parse-tree.h:4806
Definition parse-tree.h:4813
Definition parse-tree.h:3545
Definition parse-tree.h:3567
Definition parse-tree.h:3554
Definition parse-tree.h:4822
Definition parse-tree.h:4831
Definition parse-tree.h:4846
Definition parse-tree.h:4856
Definition parse-tree.h:3521
Definition parse-tree.h:3514
Definition parse-tree.h:4865
Definition parse-tree.h:4890
Definition parse-tree.h:4926
Definition parse-tree.h:4901
Definition parse-tree.h:3075
Definition parse-tree.h:5564
Definition parse-tree.h:5571
Definition parse-tree.h:5500
Definition parse-tree.h:5593
Definition parse-tree.h:5632
Definition parse-tree.h:5621
Definition parse-tree.h:5612
Definition parse-tree.h:5494
Definition parse-tree.h:5506
Definition parse-tree.h:5196
Definition parse-tree.h:5041
Definition parse-tree.h:5201
Definition parse-tree.h:5238
Definition parse-tree.h:5341
Definition parse-tree.h:5173
Definition parse-tree.h:5155
Definition parse-tree.h:5029
Definition parse-tree.h:5249
Definition parse-tree.h:5263
Definition parse-tree.h:5181
Definition parse-tree.h:5279
Definition parse-tree.h:5137
Definition parse-tree.h:5287
Definition parse-tree.h:5318
Definition parse-tree.h:5143
Definition parse-tree.h:5061
Definition parse-tree.h:5067
Definition parse-tree.h:5298
Definition parse-tree.h:5149
Definition parse-tree.h:5018
Definition parse-tree.h:375
Definition parse-tree.h:2811
Definition parse-tree.h:2774
Definition parse-tree.h:3000
Definition parse-tree.h:2044
Definition parse-tree.h:1575
Definition parse-tree.h:2003
Definition parse-tree.h:2837
Definition parse-tree.h:3120
Definition parse-tree.h:2795
Definition parse-tree.h:942
Definition parse-tree.h:3098
Definition parse-tree.h:1083
Definition parse-tree.h:1111
Definition parse-tree.h:1901
Definition parse-tree.h:1103
Definition parse-tree.h:1097
Definition parse-tree.h:1090
Definition parse-tree.h:3108
Definition parse-tree.h:3235
Definition parse-tree.h:3203
Definition parse-tree.h:567
Definition parse-tree.h:2758
Definition parse-tree.h:824
Definition parse-tree.h:2276
Definition parse-tree.h:2986
Definition parse-tree.h:1588
Definition parse-tree.h:294
Definition parse-tree.h:1675
Definition parse-tree.h:2399
Definition parse-tree.h:2464
Definition parse-tree.h:2476
Definition parse-tree.h:2455
Definition parse-tree.h:2510
Definition parse-tree.h:2490
Definition parse-tree.h:2155
Definition parse-tree.h:3328
Definition parse-tree.h:397
Definition parse-tree.h:448
Definition parse-tree.h:1972
Definition parse-tree.h:358
Definition parse-tree.h:3346
Definition parse-tree.h:2542
Definition parse-tree.h:1891
Definition parse-tree.h:1229
Definition parse-tree.h:3447
Definition parse-tree.h:3419
Definition parse-tree.h:3442
Definition parse-tree.h:3006
Definition parse-tree.h:3017
Definition parse-tree.h:3172
Definition parse-tree.h:3312
Definition parse-tree.h:1666
Definition parse-tree.h:1853
Definition parse-tree.h:1657
Definition parse-tree.h:1839
Definition parse-tree.h:3139
Definition parse-tree.h:2560
Definition parse-tree.h:2573
Definition parse-tree.h:920
Definition parse-tree.h:1172
Definition parse-tree.h:1185
Definition parse-tree.h:1138
Definition parse-tree.h:1194
Definition parse-tree.h:1148
Definition parse-tree.h:1420
Definition parse-tree.h:2499
Definition parse-tree.h:948
Definition parse-tree.h:956
Definition parse-tree.h:747
Definition parse-tree.h:645
Definition parse-tree.h:760
Definition parse-tree.h:3435
Definition parse-tree.h:353
Definition parse-tree.h:2632
Definition parse-tree.h:811
Definition parse-tree.h:3084
Definition parse-tree.h:1869
Definition parse-tree.h:733
Definition parse-tree.h:738
Definition parse-tree.h:281
Definition parse-tree.h:2821
Definition parse-tree.h:2070
Definition parse-tree.h:2063
Definition parse-tree.h:2094
Definition parse-tree.h:2057
Definition parse-tree.h:2780
Definition parse-tree.h:3669
Definition parse-tree.h:3660
Definition parse-tree.h:3630
Definition parse-tree.h:3619
Definition parse-tree.h:3614
Definition parse-tree.h:3640
Definition parse-tree.h:3653
Definition parse-tree.h:3824
Definition parse-tree.h:3841
Definition parse-tree.h:3833
Definition parse-tree.h:3869
Definition parse-tree.h:3881
Definition parse-tree.h:3891
Definition parse-tree.h:3902
Definition parse-tree.h:3915
Definition parse-tree.h:3927
Definition parse-tree.h:3948
Definition parse-tree.h:3957
Definition parse-tree.h:3990
Definition parse-tree.h:4008
Definition parse-tree.h:4017
Definition parse-tree.h:4029
Definition parse-tree.h:4039
Definition parse-tree.h:4047
Definition parse-tree.h:4056
Definition parse-tree.h:4091
Definition parse-tree.h:4078
Definition parse-tree.h:4065
Definition parse-tree.h:4115
Definition parse-tree.h:4106
Definition parse-tree.h:4125
Definition parse-tree.h:4138
Definition parse-tree.h:4147
Definition parse-tree.h:4157
Definition parse-tree.h:4167
Definition parse-tree.h:4176
Definition parse-tree.h:4184
Definition parse-tree.h:4194
Definition parse-tree.h:4205
Definition parse-tree.h:4218
Definition parse-tree.h:3707
Definition parse-tree.h:3690
Definition parse-tree.h:3731
Definition parse-tree.h:3697
Definition parse-tree.h:3758
Definition parse-tree.h:3770
Definition parse-tree.h:3783
Definition parse-tree.h:3792