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, IVDep)
211 NODE(CompilerDirective, ForceInline)
212 NODE(CompilerDirective, LoopCount)
213 NODE(CompilerDirective, NameValue)
214 NODE(CompilerDirective, NoInline)
215 NODE(CompilerDirective, Unrecognized)
216 NODE(CompilerDirective, VectorAlways)
217 NODE(CompilerDirective, Unroll)
218 NODE(CompilerDirective, UnrollAndJam)
219 NODE(CompilerDirective, NoVector)
220 NODE(CompilerDirective, NoUnroll)
221 NODE(CompilerDirective, NoUnrollAndJam)
222 NODE(CompilerDirective, Prefetch)
224 NODE(parser, ComplexPart)
227 NODE(parser, ComponentDataSource)
228 NODE(parser, ComponentDecl)
229 NODE(parser, FillDecl)
232 NODE(parser, ComponentSpec)
236 NODE(parser, ConnectSpec)
237 NODE(ConnectSpec, CharExpr)
238 NODE_ENUM(ConnectSpec::CharExpr, Kind)
239 NODE(ConnectSpec, Newunit)
240 NODE(ConnectSpec, Recl)
241 NODE(parser, ContainsStmt)
242 NODE(parser, Contiguous)
243 NODE(parser, ContiguousStmt)
244 NODE(parser, ContinueStmt)
246 NODE(parser, CriticalStmt)
249 NODE(CUFKernelDoConstruct, StarOrExpr)
250 NODE(CUFKernelDoConstruct, Directive)
251 NODE(CUFKernelDoConstruct, LaunchConfiguration)
252 NODE(parser, CUFReduction)
253 NODE(parser, CycleStmt)
255 NODE(parser, DataIDoObject)
256 NODE(parser, DataImpliedDo)
257 NODE(parser, DataRef)
258 NODE(parser, DataStmt)
262 NODE(parser, DataStmtSet)
263 NODE(parser, DataStmtValue)
267 NODE(DeclarationTypeSpec, Class)
268 NODE(DeclarationTypeSpec, ClassStar)
269 NODE(DeclarationTypeSpec, Record)
270 NODE(DeclarationTypeSpec, Type)
271 NODE(DeclarationTypeSpec, TypeStar)
272 NODE(parser, Default)
273 NODE(parser, DeferredCoshapeSpecList)
274 NODE(parser, DeferredShapeSpecList)
275 NODE(parser, DefinedOpName)
277 NODE_ENUM(DefinedOperator, IntrinsicOperator)
281 NODE(parser, Designator)
282 NODE(parser, DimensionStmt)
283 NODE(DimensionStmt, Declaration)
284 NODE(parser, DoConstruct)
285 NODE(parser, DummyArg)
286 NODE(parser, ElseIfStmt)
287 NODE(parser, ElseStmt)
288 NODE(parser, ElsewhereStmt)
289 NODE(parser, EndAssociateStmt)
290 NODE(parser, EndBlockDataStmt)
291 NODE(parser, EndBlockStmt)
293 NODE(parser, EndCriticalStmt)
294 NODE(parser, EndDoStmt)
295 NODE(parser, EndEnumStmt)
296 NODE(parser, EndForallStmt)
297 NODE(parser, EndFunctionStmt)
298 NODE(parser, EndIfStmt)
299 NODE(parser, EndInterfaceStmt)
300 NODE(parser, EndLabel)
301 NODE(parser, EndModuleStmt)
302 NODE(parser, EndMpSubprogramStmt)
303 NODE(parser, EndProgramStmt)
304 NODE(parser, EndSelectStmt)
305 NODE(parser, EndSubmoduleStmt)
306 NODE(parser, EndSubroutineStmt)
307 NODE(parser, EndTypeStmt)
308 NODE(parser, EndWhereStmt)
309 NODE(parser, EndfileStmt)
310 NODE(parser, EntityDecl)
311 NODE(parser, EntryStmt)
312 NODE(parser, EnumDef)
313 NODE(parser, EnumDefStmt)
314 NODE(parser, Enumerator)
315 NODE(parser, EnumeratorDefStmt)
316 NODE(parser, EorLabel)
317 NODE(parser, EquivalenceObject)
318 NODE(parser, EquivalenceStmt)
319 NODE(parser, ErrLabel)
320 NODE(parser, ErrorRecovery)
321 NODE(parser, EventPostStmt)
322 NODE(parser, EventWaitSpec)
323 NODE(parser, EventWaitStmt)
325 NODE(parser, ExecutionPart)
327 NODE(parser, ExitStmt)
330 NODE(parser, Expr)
331 NODE(Expr, Parentheses)
332 NODE(Expr, UnaryPlus)
333 NODE(Expr, Negate)
334 NODE(Expr, NOT)
335 NODE(Expr, PercentLoc)
336 NODE(Expr, DefinedUnary)
337 NODE(Expr, Power)
338 NODE(Expr, Multiply)
339 NODE(Expr, Divide)
340 NODE(Expr, Add)
341 NODE(Expr, Subtract)
342 NODE(Expr, Concat)
343 NODE(Expr, LT)
344 NODE(Expr, LE)
345 NODE(Expr, EQ)
346 NODE(Expr, NE)
347 NODE(Expr, GE)
348 NODE(Expr, GT)
349 NODE(Expr, AND)
350 NODE(Expr, OR)
351 NODE(Expr, EQV)
352 NODE(Expr, NEQV)
353 NODE(Expr, DefinedBinary)
354 NODE(Expr, ComplexConstructor)
355 NODE(parser, External)
356 NODE(parser, ExternalStmt)
357 NODE(parser, FailImageStmt)
358 NODE(parser, FileUnitNumber)
359 NODE(parser, FinalProcedureStmt)
360 NODE(parser, FlushStmt)
365 NODE(parser, ForallStmt)
366 NODE(parser, FormTeamStmt)
367 NODE(FormTeamStmt, FormTeamSpec)
368 NODE(parser, Format)
369 NODE(parser, FormatStmt)
371 NODE(parser, FunctionStmt)
373 NODE(parser, GenericSpec)
374 NODE(GenericSpec, Assignment)
375 NODE(GenericSpec, ReadFormatted)
376 NODE(GenericSpec, ReadUnformatted)
377 NODE(GenericSpec, WriteFormatted)
378 NODE(GenericSpec, WriteUnformatted)
379 NODE(parser, GenericStmt)
380 NODE(parser, GotoStmt)
382 NODE(parser, IdExpr)
383 NODE(parser, IdVariable)
384 NODE(parser, IfConstruct)
385 NODE(IfConstruct, ElseBlock)
386 NODE(IfConstruct, ElseIfBlock)
387 NODE(parser, IfStmt)
388 NODE(parser, IfThenStmt)
389 NODE(parser, TeamValue)
390 NODE(parser, ImageSelector)
392 NODE(ImageSelectorSpec, Notify)
393 NODE(ImageSelectorSpec, Stat)
394 NODE(ImageSelectorSpec, Team_Number)
395 NODE(parser, ImplicitPart)
397 NODE(parser, ImplicitSpec)
398 NODE(parser, ImplicitStmt)
399 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
400 NODE(parser, ImpliedShapeSpec)
401 NODE(parser, ImportStmt)
404 NODE(parser, InputItem)
405 NODE(parser, InquireSpec)
406 NODE(InquireSpec, CharVar)
407 NODE_ENUM(InquireSpec::CharVar, Kind)
408 NODE(InquireSpec, IntVar)
409 NODE_ENUM(InquireSpec::IntVar, Kind)
410 NODE(InquireSpec, LogVar)
411 NODE_ENUM(InquireSpec::LogVar, Kind)
412 NODE(parser, InquireStmt)
413 NODE(InquireStmt, Iolength)
414 NODE(parser, IntegerTypeSpec)
415 NODE(parser, IntentSpec)
416 NODE_ENUM(IntentSpec, Intent)
417 NODE(parser, IntentStmt)
419 NODE(parser, InterfaceBody)
420 NODE(InterfaceBody, Function)
421 NODE(InterfaceBody, Subroutine)
423 NODE(parser, InterfaceStmt)
426 NODE(parser, Intrinsic)
427 NODE(parser, IntrinsicStmt)
429 NODE(IntrinsicTypeSpec, Character)
430 NODE(IntrinsicTypeSpec, Complex)
431 NODE(IntrinsicTypeSpec, DoubleComplex)
432 NODE(IntrinsicTypeSpec, DoublePrecision)
434 NODE(IntrinsicTypeSpec, Real)
435 NODE(parser, IoControlSpec)
436 NODE(IoControlSpec, Asynchronous)
437 NODE(IoControlSpec, CharExpr)
438 NODE_ENUM(IoControlSpec::CharExpr, Kind)
439 NODE(IoControlSpec, Pos)
440 NODE(IoControlSpec, Rec)
441 NODE(IoControlSpec, Size)
442 NODE(parser, IoUnit)
443 NODE(parser, Keyword)
444 NODE(parser, KindParam)
445 NODE(parser, KindSelector)
446 NODE(KindSelector, StarSize)
447 NODE(parser, LabelDoStmt)
450 NODE(parser, LetterSpec)
454 NODE_ENUM(parser::ReductionOperator, Operator)
455 NODE(parser, LocalitySpec)
456 NODE(LocalitySpec, DefaultNone)
457 NODE(LocalitySpec, Local)
458 NODE(LocalitySpec, LocalInit)
459 NODE(LocalitySpec, Reduce)
460 NODE(LocalitySpec, Shared)
461 NODE(parser, LockStmt)
462 NODE(LockStmt, LockStat)
464 NODE_NAME(LoopControl::Bounds, "LoopBounds")
465 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
466 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
467 NODE(parser, LoopControl)
468 NODE(LoopControl, Concurrent)
469 NODE(parser, MainProgram)
470 NODE(parser, Map)
471 NODE(Map, EndMapStmt)
472 NODE(Map, MapStmt)
474 NODE(parser, Module)
475 NODE(parser, ModuleStmt)
478 NODE(parser, MpSubprogramStmt)
479 NODE(parser, MsgVariable)
480 NODE(parser, Name)
481 NODE(parser, NamedConstant)
483 NODE(parser, NamelistStmt)
484 NODE(NamelistStmt, Group)
486 NODE(parser, NoPass)
488 NODE(parser, NullifyStmt)
489 NODE(parser, NullInit)
490 NODE(parser, ObjectDecl)
491 NODE(parser, OldParameterStmt)
492
493 static std::string GetNodeName(const llvm::omp::Directive &x) {
494 return llvm::Twine("llvm::omp::Directive = ",
495 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
496 .str();
497 }
498 static std::string GetNodeName(const llvm::omp::Clause &x) {
499 return llvm::Twine(
500 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
501 .str();
502 }
505 NODE_ENUM(OmpAccessGroup, Value)
507 NODE(OmpAdjustArgsClause, OmpAdjustOp)
508 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
510 NODE(OmpAffinityClause, Modifier)
513 NODE(OmpAlignedClause, Modifier)
514 NODE(parser, OmpAlignment)
517 NODE(OmpAllocateClause, Modifier)
522 NODE_ENUM(OmpAlwaysModifier, Value)
524 NODE(OmpAppendArgsClause, OmpAppendOp)
525 NODE(parser, OmpArgument)
527 NODE(parser, OmpAtClause)
528 NODE_ENUM(OmpAtClause, ActionTime)
531 NODE_ENUM(OmpAttachModifier, Value)
533 NODE_ENUM(OmpAutomapModifier, Value)
538 NODE(parser, OmpBindClause)
539 NODE_ENUM(OmpBindClause, Binding)
543 NODE_ENUM(OmpChunkModifier, Value)
544 NODE(parser, OmpClause)
545 NODE(parser, OmpClauseList)
547 NODE_ENUM(OmpCloseModifier, Value)
553 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
555 NODE(OmpDefaultmapClause, Modifier)
556 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
558 NODE_ENUM(OmpDeleteModifier, Value)
560 NODE(OmpDependClause, TaskDep)
561 NODE(OmpDependClause::TaskDep, Modifier)
563 NODE_ENUM(OmpDependenceType, Value)
567 NODE(OmpDeviceClause, Modifier)
569 NODE_ENUM(OmpDeviceModifier, Value)
572 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
575 NODE_ENUM(OmpDirectiveSpecification, Flags)
576 NODE(parser, OmpDoacross)
577 NODE(OmpDoacross, Sink)
578 NODE(OmpDoacross, Source)
582 NODE(OmpDynGroupprivateClause, Modifier)
587 NODE(OmpEnterClause, Modifier)
590 NODE_ENUM(OmpExpectation, Value)
591 NODE(parser, OmpFailClause)
593 NODE_ENUM(OmpFallbackModifier, Value)
594 NODE(parser, OmpFromClause)
595 NODE(OmpFromClause, Modifier)
597 NODE(OmpGrainsizeClause, Modifier)
600 NODE(parser, OmpHintClause)
602 NODE(parser, OmpIfClause)
603 NODE(OmpIfClause, Modifier)
605 NODE(parser, OmpInitClause)
606 NODE(OmpInitClause, Modifier)
610 NODE(OmpInReductionClause, Modifier)
614 NODE_ENUM(OmpInteropType, Value)
615 NODE(parser, OmpIteration)
618 NODE(parser, OmpIterator)
621 NODE(OmpLastprivateClause, Modifier)
623 NODE_ENUM(OmpLastprivateModifier, Value)
625 NODE(OmpLinearClause, Modifier)
627 NODE_ENUM(OmpLinearModifier, Value)
628 NODE(parser, OmpLocator)
631 NODE(parser, OmpMapClause)
632 NODE(OmpMapClause, Modifier)
633 NODE(parser, OmpMapper)
635 NODE(parser, OmpMapType)
636 NODE_ENUM(OmpMapType, Value)
638 NODE_ENUM(OmpMapTypeModifier, Value)
642 NODE(parser, OmpNoOpenMPClause)
643 NODE(parser, OmpNoOpenMPRoutinesClause)
644 NODE(parser, OmpNoParallelismClause)
647 NODE(OmpNumTasksClause, Modifier)
648 NODE(parser, OmpObject)
649 NODE(OmpObject, Invalid)
650 NODE_ENUM(OmpObject::Invalid, Kind)
651 NODE(parser, OmpObjectList)
653 NODE(OmpOrderClause, Modifier)
654 NODE_ENUM(OmpOrderClause, Ordering)
656 NODE_ENUM(OmpOrderingModifier, Value)
658 NODE_ENUM(OmpOrderModifier, Value)
661 NODE_ENUM(OmpPrescriptiveness, Value)
663 NODE_ENUM(OmpPresentModifier, Value)
665 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
667 NODE(OmpReductionClause, Modifier)
670 NODE_ENUM(OmpReductionModifier, Value)
673 NODE_ENUM(OmpRefModifier, Value)
677 NODE(OmpScheduleClause, Modifier)
678 NODE_ENUM(OmpScheduleClause, Kind)
681 NODE_ENUM(OmpSelfModifier, Value)
683 NODE_ENUM(OmpSeverityClause, Severity)
689 NODE(OmpStylizedInstance, Instance)
691 NODE_ENUM(OmpTaskDependenceType, Value)
693 NODE(OmpTaskReductionClause, Modifier)
695 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
696 NODE(parser, OmpToClause)
697 NODE(OmpToClause, Modifier)
700 NODE(OmpTraitPropertyExtension, Complex)
702 NODE(parser, OmpTraitScore)
704 NODE(OmpTraitSelector, Properties)
706 NODE_ENUM(OmpTraitSelectorName, Value)
709 NODE_ENUM(OmpTraitSetSelectorName, Value)
711 NODE(parser, OmpTypeName)
716 NODE(parser, OmpUseClause)
718 NODE_ENUM(OmpVariableCategory, Value)
719 NODE(parser, OmpWhenClause)
720 NODE(OmpWhenClause, Modifier)
722 NODE_ENUM(OmpxHoldModifier, Value)
723#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
724#include "llvm/Frontend/OpenMP/OMP.inc"
725
726 NODE(parser, Only)
740
766
767 NODE(parser, OpenStmt)
768 NODE(parser, Optional)
769 NODE(parser, OptionalStmt)
772 NODE(parser, OutputItem)
773 NODE(parser, Parameter)
774 NODE(parser, ParameterStmt)
776 NODE(parser, Pass)
777 NODE(parser, PauseStmt)
778 NODE(parser, Pointer)
780 NODE(PointerAssignmentStmt, Bounds)
781 NODE(parser, PointerDecl)
782 NODE(parser, PointerObject)
783 NODE(parser, PointerStmt)
785 NODE(parser, PrefixSpec)
786 NODE(PrefixSpec, Elemental)
787 NODE(PrefixSpec, Impure)
788 NODE(PrefixSpec, Module)
789 NODE(PrefixSpec, Non_Recursive)
790 NODE(PrefixSpec, Pure)
791 NODE(PrefixSpec, Recursive)
792 NODE(PrefixSpec, Attributes)
793 NODE(PrefixSpec, Launch_Bounds)
794 NODE(PrefixSpec, Cluster_Dims)
795 NODE(parser, PrintStmt)
796 NODE(parser, PrivateStmt)
798 NODE(parser, ProcAttrSpec)
802 NODE(parser, ProcDecl)
803 NODE(parser, ProcInterface)
807 NODE(parser, ProcedureStmt)
808 NODE_ENUM(ProcedureStmt, Kind)
809 NODE(parser, Program)
810 NODE(parser, ProgramStmt)
811 NODE(parser, ProgramUnit)
812 NODE(parser, Protected)
813 NODE(parser, ProtectedStmt)
814 NODE(parser, ReadStmt)
816 NODE(RealLiteralConstant, Real)
817 NODE(parser, Rename)
818 NODE(Rename, Names)
819 NODE(Rename, Operators)
820 NODE(parser, ReturnStmt)
821 NODE(parser, RewindStmt)
822 NODE(parser, Save)
823 NODE(parser, SaveStmt)
824 NODE(parser, SavedEntity)
825 NODE_ENUM(SavedEntity, Kind)
829 NODE(SelectRankCaseStmt, Rank)
831 NODE(SelectRankConstruct, RankCase)
834 NODE(SelectTypeConstruct, TypeCase)
836 NODE(parser, Selector)
838 NODE(parser, SequenceStmt)
839 NODE(parser, Sign)
844 NODE(parser, SpecificationExpr)
846 NODE(parser, Star)
847 NODE(parser, StatOrErrmsg)
848 NODE(parser, StatVariable)
849 NODE(parser, StatusExpr)
851 NODE(parser, StopCode)
852 NODE(parser, StopStmt)
853 NODE_ENUM(StopStmt, Kind)
856 NODE(parser, StructureDef)
857 NODE(StructureDef, EndStructureStmt)
859 NODE(parser, StructureStmt)
860 NODE(parser, Submodule)
861 NODE(parser, SubmoduleStmt)
865 NODE(parser, Substring)
868 NODE(parser, Suffix)
869 NODE(parser, SyncAllStmt)
871 NODE(SyncImagesStmt, ImageSet)
872 NODE(parser, SyncMemoryStmt)
873 NODE(parser, SyncTeamStmt)
874 NODE(parser, Target)
875 NODE(parser, TargetStmt)
876 NODE(parser, TypeAttrSpec)
877 NODE(TypeAttrSpec, BindC)
878 NODE(TypeAttrSpec, Extends)
884 NODE(TypeBoundProcedureStmt, WithInterface)
885 NODE(TypeBoundProcedureStmt, WithoutInterface)
887 NODE(parser, TypeGuardStmt)
888 NODE(TypeGuardStmt, Guard)
889 NODE(parser, TypeParamDecl)
891 NODE(common, TypeParamAttr)
892 NODE(parser, TypeParamSpec)
894 NODE(TypeParamValue, Deferred)
895 NODE(parser, TypeSpec)
896 NODE(parser, Union)
897 NODE(Union, EndUnionStmt)
898 NODE(Union, UnionStmt)
899 NODE(parser, UnlockStmt)
901 NODE(parser, UnsignedTypeSpec)
902 NODE(parser, UseStmt)
903 NODE_ENUM(UseStmt, ModuleNature)
904 NODE(parser, Value)
905 NODE(parser, ValueStmt)
906 NODE(parser, Variable)
908 NODE(VectorTypeSpec, PairVectorTypeSpec)
909 NODE(VectorTypeSpec, QuadVectorTypeSpec)
910 NODE(parser, IntrinsicVectorTypeSpec)
912 NODE(parser, Verbatim)
913 NODE(parser, Volatile)
914 NODE(parser, VolatileStmt)
915 NODE(parser, WaitSpec)
916 NODE(parser, WaitStmt)
919 NODE(WhereConstruct, Elsewhere)
920 NODE(WhereConstruct, MaskedElsewhere)
922 NODE(parser, WhereStmt)
923 NODE(parser, WriteStmt)
924#undef NODE
925#undef NODE_NAME
926
927 template <typename T> bool Pre(const T &x) {
928 std::string fortran{AsFortran<T>(x)};
929 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
930 Prefix(GetNodeName(x));
931 } else {
932 IndentEmptyLine();
933 out_ << GetNodeName(x);
934 if (!fortran.empty()) {
935 out_ << " = '" << fortran << '\'';
936 }
937 EndLine();
938 ++indent_;
939 }
940 return true;
941 }
942
943 template <typename T> void Post(const T &x) {
944 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
945 EndLineIfNonempty();
946 } else {
947 --indent_;
948 }
949 }
950
951 // A few types we want to ignore
952
953 bool Pre(const CharBlock &) { return true; }
954 void Post(const CharBlock &) {}
955
956 template <typename T> bool Pre(const Statement<T> &) { return true; }
957 template <typename T> void Post(const Statement<T> &) {}
958 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
959 template <typename T> void Post(const UnlabeledStatement<T> &) {}
960
961 template <typename T> bool Pre(const common::Indirection<T> &) {
962 return true;
963 }
964 template <typename T> void Post(const common::Indirection<T> &) {}
965
966 template <typename A> bool Pre(const Scalar<A> &) {
967 Prefix("Scalar");
968 return true;
969 }
970 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
971
972 template <typename A> bool Pre(const Constant<A> &) {
973 Prefix("Constant");
974 return true;
975 }
976 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
977
978 template <typename A> bool Pre(const Integer<A> &) {
979 Prefix("Integer");
980 return true;
981 }
982 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
983
984 template <typename A> bool Pre(const Logical<A> &) {
985 Prefix("Logical");
986 return true;
987 }
988 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
989
990 template <typename A> bool Pre(const DefaultChar<A> &) {
991 Prefix("DefaultChar");
992 return true;
993 }
994 template <typename A> void Post(const DefaultChar<A> &) {
995 EndLineIfNonempty();
996 }
997
998 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
999 template <typename... A> void Post(const std::tuple<A...> &) {}
1000
1001 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1002 template <typename... A> void Post(const std::variant<A...> &) {}
1003
1004protected:
1005 // Return a Fortran representation of this node to include in the dump
1006 template <typename T> std::string AsFortran(const T &x) {
1007 std::string buf;
1008 llvm::raw_string_ostream ss{buf};
1009 if constexpr (HasTypedExpr<T>::value) {
1010 if (asFortran_ && x.typedExpr) {
1011 asFortran_->expr(ss, *x.typedExpr);
1012 }
1013 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1014 std::is_same_v<T, PointerAssignmentStmt>) {
1015 if (asFortran_ && x.typedAssignment) {
1016 asFortran_->assignment(ss, *x.typedAssignment);
1017 }
1018 } else if constexpr (std::is_same_v<T, CallStmt>) {
1019 if (asFortran_ && x.typedCall) {
1020 asFortran_->call(ss, *x.typedCall);
1021 }
1022 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1023 std::is_same_v<T, SignedIntLiteralConstant> ||
1024 std::is_same_v<T, UnsignedLiteralConstant>) {
1025 ss << std::get<CharBlock>(x.t);
1026 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1027 ss << x.source;
1028 } else if constexpr (std::is_same_v<T, std::string> ||
1029 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1030 ss << x;
1031 }
1032 if (ss.tell()) {
1033 return buf;
1034 }
1035 if constexpr (std::is_same_v<T, Name>) {
1036 return x.source.ToString();
1037#ifdef SHOW_ALL_SOURCE_MEMBERS
1038 } else if constexpr (HasSource<T>::value) {
1039 return x.source.ToString();
1040#endif
1041 } else if constexpr (std::is_same_v<T, int>) {
1042 return std::to_string(x);
1043 } else if constexpr (std::is_same_v<T, bool>) {
1044 return x ? "true" : "false";
1045 } else {
1046 return "";
1047 }
1048 }
1049
1050 void IndentEmptyLine() {
1051 if (emptyline_ && indent_ > 0) {
1052 for (int i{0}; i < indent_; ++i) {
1053 out_ << "| ";
1054 }
1055 emptyline_ = false;
1056 }
1057 }
1058
1059 void Prefix(const char *str) {
1060 IndentEmptyLine();
1061 out_ << str << " -> ";
1062 emptyline_ = false;
1063 }
1064
1065 void Prefix(const std::string &str) {
1066 IndentEmptyLine();
1067 out_ << str << " -> ";
1068 emptyline_ = false;
1069 }
1070
1071 void EndLine() {
1072 out_ << '\n';
1073 emptyline_ = true;
1074 }
1075
1076 void EndLineIfNonempty() {
1077 if (!emptyline_) {
1078 EndLine();
1079 }
1080 }
1081
1082private:
1083 int indent_{0};
1084 llvm::raw_ostream &out_;
1085 const AnalyzedObjectsAsFortran *const asFortran_;
1086 bool emptyline_{false};
1087};
1088
1089template <typename T>
1090llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1091 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1092 ParseTreeDumper dumper{out, asFortran};
1093 Walk(x, dumper);
1094 return out;
1095}
1096
1097} // namespace Fortran::parser
1098#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:1304
Definition parse-tree.h:1311
Definition parse-tree.h:1270
Definition parse-tree.h:1258
Definition parse-tree.h:5588
Definition parse-tree.h:5564
Definition parse-tree.h:5580
Definition parse-tree.h:5572
Definition parse-tree.h:5549
Definition parse-tree.h:5613
Definition parse-tree.h:5543
Definition parse-tree.h:5419
Definition parse-tree.h:5392
Definition parse-tree.h:5520
Definition parse-tree.h:5505
Definition parse-tree.h:5500
Definition parse-tree.h:5408
Definition parse-tree.h:5430
Definition parse-tree.h:5413
Definition parse-tree.h:5425
Definition parse-tree.h:5457
Definition parse-tree.h:5451
Definition parse-tree.h:5555
Definition parse-tree.h:5619
Definition parse-tree.h:5496
Definition parse-tree.h:5487
Definition parse-tree.h:5397
Definition parse-tree.h:5436
Definition parse-tree.h:5384
Definition parse-tree.h:5480
Definition parse-tree.h:5476
Definition parse-tree.h:5472
Definition parse-tree.h:5402
Definition parse-tree.h:5468
Definition parse-tree.h:5462
Definition parse-tree.h:5446
Definition parse-tree.h:910
Definition parse-tree.h:1428
Definition parse-tree.h:492
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:3468
Definition parse-tree.h:1915
Definition parse-tree.h:1359
Definition parse-tree.h:3473
Definition parse-tree.h:3478
Definition parse-tree.h:2020
Definition parse-tree.h:2177
Definition parse-tree.h:2168
Definition parse-tree.h:2161
Definition parse-tree.h:1341
Definition parse-tree.h:1389
Definition parse-tree.h:3418
Definition parse-tree.h:1128
Definition parse-tree.h:1450
Definition parse-tree.h:1457
Definition parse-tree.h:2199
Definition parse-tree.h:3031
Definition parse-tree.h:2032
Definition parse-tree.h:3412
Definition parse-tree.h:5689
Definition parse-tree.h:5683
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:664
Definition parse-tree.h:869
Definition parse-tree.h:680
Definition parse-tree.h:2699
Definition parse-tree.h:2207
Definition parse-tree.h:985
Definition parse-tree.h:1463
Definition parse-tree.h:1906
Definition parse-tree.h:1627
Definition parse-tree.h:1635
Definition parse-tree.h:3367
Definition parse-tree.h:855
Definition parse-tree.h:847
Definition parse-tree.h:996
Definition parse-tree.h:1009
Definition parse-tree.h:1040
Definition parse-tree.h:1117
Definition parse-tree.h:1062
Definition parse-tree.h:1221
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:301
Definition parse-tree.h:2246
Definition parse-tree.h:2237
Definition parse-tree.h:1070
Definition parse-tree.h:1517
Definition parse-tree.h:1529
Definition parse-tree.h:1822
Definition parse-tree.h:1488
Definition parse-tree.h:1537
Definition parse-tree.h:1503
Definition parse-tree.h:1543
Definition parse-tree.h:1509
Definition parse-tree.h:2014
Definition parse-tree.h:433
Definition parse-tree.h:769
Definition parse-tree.h:325
Definition parse-tree.h:606
Definition parse-tree.h:1206
Definition parse-tree.h:751
Definition parse-tree.h:927
Definition parse-tree.h:1861
Definition parse-tree.h:1554
Definition parse-tree.h:2342
Definition parse-tree.h:3164
Definition parse-tree.h:2362
Definition parse-tree.h:2224
Definition parse-tree.h:1404
Definition parse-tree.h:3336
Definition parse-tree.h:1250
Definition parse-tree.h:1236
Definition parse-tree.h:2582
Definition parse-tree.h:2588
Definition parse-tree.h:2596
Definition parse-tree.h:525
Definition parse-tree.h:548
Definition parse-tree.h:979
Definition parse-tree.h:966
Definition parse-tree.h:1704
Definition parse-tree.h:1056
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:1688
Definition parse-tree.h:1698
Definition parse-tree.h:415
Definition parse-tree.h:1611
Definition parse-tree.h:1620
Definition parse-tree.h:619
Definition parse-tree.h:1027
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:803
Definition parse-tree.h:309
Definition parse-tree.h:1367
Definition parse-tree.h:1563
Definition parse-tree.h:3220
Definition parse-tree.h:3185
Definition parse-tree.h:3210
Definition parse-tree.h:3065
Definition parse-tree.h:471
Definition parse-tree.h:459
Definition parse-tree.h:701
Definition parse-tree.h:2735
Definition parse-tree.h:2733
Definition parse-tree.h:2647
Definition parse-tree.h:790
Definition parse-tree.h:652
Definition parse-tree.h:2319
Definition parse-tree.h:1320
Definition parse-tree.h:670
Definition parse-tree.h:1605
Definition parse-tree.h:901
Definition parse-tree.h:2287
Definition parse-tree.h:2622
Definition parse-tree.h:883
Definition parse-tree.h:317
Definition parse-tree.h:2307
Definition parse-tree.h:2940
Definition parse-tree.h:3434
Definition parse-tree.h:2079
Definition parse-tree.h:2964
Definition parse-tree.h:2954
Definition parse-tree.h:2975
Definition parse-tree.h:581
Definition parse-tree.h:1326
Definition parse-tree.h:632
Definition parse-tree.h:2325
Definition parse-tree.h:2550
Definition parse-tree.h:1437
Definition parse-tree.h:4253
Definition parse-tree.h:4257
Definition parse-tree.h:4272
Definition parse-tree.h:4279
Definition parse-tree.h:4287
Definition parse-tree.h:4302
Definition parse-tree.h:5200
Definition parse-tree.h:4309
Definition parse-tree.h:4318
Definition parse-tree.h:4994
Definition parse-tree.h:5337
Definition parse-tree.h:5065
Definition parse-tree.h:4341
Definition parse-tree.h:5004
Definition parse-tree.h:4965
Definition parse-tree.h:4949
Definition parse-tree.h:3603
Definition parse-tree.h:4356
Definition parse-tree.h:4373
Definition parse-tree.h:4391
Definition parse-tree.h:4450
Definition parse-tree.h:4448
Definition parse-tree.h:4472
Definition parse-tree.h:4480
Definition parse-tree.h:4490
Definition parse-tree.h:4500
Definition parse-tree.h:4508
Definition parse-tree.h:3504
Definition parse-tree.h:4972
Definition parse-tree.h:4463
Definition parse-tree.h:4430
Definition parse-tree.h:4523
Definition parse-tree.h:4999
Definition parse-tree.h:5341
Definition parse-tree.h:5070
Definition parse-tree.h:4534
Definition parse-tree.h:5032
Definition parse-tree.h:4542
Definition parse-tree.h:4555
Definition parse-tree.h:4566
Definition parse-tree.h:4576
Definition parse-tree.h:4584
Definition parse-tree.h:4589
Definition parse-tree.h:4597
Definition parse-tree.h:4613
Definition parse-tree.h:4623
Definition parse-tree.h:4602
Definition parse-tree.h:4935
Definition parse-tree.h:4630
Definition parse-tree.h:3615
Definition parse-tree.h:4403
Definition parse-tree.h:4421
Definition parse-tree.h:4412
Definition parse-tree.h:4639
Definition parse-tree.h:4654
Definition parse-tree.h:4665
Definition parse-tree.h:4690
Definition parse-tree.h:4702
Definition parse-tree.h:4711
Definition parse-tree.h:5017
Definition parse-tree.h:5026
Definition parse-tree.h:4735
Definition parse-tree.h:3549
Definition parse-tree.h:3540
Definition parse-tree.h:3537
Definition parse-tree.h:4746
Definition parse-tree.h:4759
Definition parse-tree.h:4771
Definition parse-tree.h:4782
Definition parse-tree.h:3593
Definition parse-tree.h:4792
Definition parse-tree.h:4801
Definition parse-tree.h:4813
Definition parse-tree.h:4824
Definition parse-tree.h:4831
Definition parse-tree.h:3553
Definition parse-tree.h:3575
Definition parse-tree.h:3562
Definition parse-tree.h:4840
Definition parse-tree.h:4849
Definition parse-tree.h:4864
Definition parse-tree.h:4874
Definition parse-tree.h:3529
Definition parse-tree.h:3522
Definition parse-tree.h:4883
Definition parse-tree.h:4908
Definition parse-tree.h:4944
Definition parse-tree.h:4919
Definition parse-tree.h:3075
Definition parse-tree.h:5595
Definition parse-tree.h:5602
Definition parse-tree.h:5531
Definition parse-tree.h:5624
Definition parse-tree.h:5663
Definition parse-tree.h:5652
Definition parse-tree.h:5643
Definition parse-tree.h:5525
Definition parse-tree.h:5537
Definition parse-tree.h:5226
Definition parse-tree.h:5059
Definition parse-tree.h:5231
Definition parse-tree.h:5268
Definition parse-tree.h:5372
Definition parse-tree.h:5216
Definition parse-tree.h:5047
Definition parse-tree.h:5279
Definition parse-tree.h:5293
Definition parse-tree.h:5309
Definition parse-tree.h:5155
Definition parse-tree.h:5317
Definition parse-tree.h:5346
Definition parse-tree.h:5161
Definition parse-tree.h:5079
Definition parse-tree.h:5085
Definition parse-tree.h:5328
Definition parse-tree.h:5167
Definition parse-tree.h:5036
Definition parse-tree.h:374
Definition parse-tree.h:2811
Definition parse-tree.h:2774
Definition parse-tree.h:3000
Definition parse-tree.h:2044
Definition parse-tree.h:1573
Definition parse-tree.h:2003
Definition parse-tree.h:2837
Definition parse-tree.h:3120
Definition parse-tree.h:2795
Definition parse-tree.h:940
Definition parse-tree.h:3098
Definition parse-tree.h:1081
Definition parse-tree.h:1109
Definition parse-tree.h:1901
Definition parse-tree.h:1101
Definition parse-tree.h:1095
Definition parse-tree.h:1088
Definition parse-tree.h:3108
Definition parse-tree.h:3235
Definition parse-tree.h:3203
Definition parse-tree.h:565
Definition parse-tree.h:2758
Definition parse-tree.h:822
Definition parse-tree.h:2276
Definition parse-tree.h:2986
Definition parse-tree.h:1586
Definition parse-tree.h:293
Definition parse-tree.h:1673
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:396
Definition parse-tree.h:447
Definition parse-tree.h:1972
Definition parse-tree.h:357
Definition parse-tree.h:3346
Definition parse-tree.h:2542
Definition parse-tree.h:1891
Definition parse-tree.h:1227
Definition parse-tree.h:3455
Definition parse-tree.h:3427
Definition parse-tree.h:3450
Definition parse-tree.h:3006
Definition parse-tree.h:3017
Definition parse-tree.h:3172
Definition parse-tree.h:3312
Definition parse-tree.h:1664
Definition parse-tree.h:1853
Definition parse-tree.h:1655
Definition parse-tree.h:1839
Definition parse-tree.h:3139
Definition parse-tree.h:2560
Definition parse-tree.h:2573
Definition parse-tree.h:918
Definition parse-tree.h:1170
Definition parse-tree.h:1183
Definition parse-tree.h:1136
Definition parse-tree.h:1192
Definition parse-tree.h:1146
Definition parse-tree.h:1418
Definition parse-tree.h:2499
Definition parse-tree.h:946
Definition parse-tree.h:954
Definition parse-tree.h:745
Definition parse-tree.h:643
Definition parse-tree.h:758
Definition parse-tree.h:3443
Definition parse-tree.h:352
Definition parse-tree.h:2632
Definition parse-tree.h:809
Definition parse-tree.h:3084
Definition parse-tree.h:1869
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:280
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:3677
Definition parse-tree.h:3668
Definition parse-tree.h:3638
Definition parse-tree.h:3627
Definition parse-tree.h:3622
Definition parse-tree.h:3648
Definition parse-tree.h:3661
Definition parse-tree.h:3832
Definition parse-tree.h:3849
Definition parse-tree.h:3841
Definition parse-tree.h:3877
Definition parse-tree.h:3889
Definition parse-tree.h:3899
Definition parse-tree.h:3910
Definition parse-tree.h:3923
Definition parse-tree.h:3935
Definition parse-tree.h:3956
Definition parse-tree.h:3965
Definition parse-tree.h:3998
Definition parse-tree.h:4009
Definition parse-tree.h:4027
Definition parse-tree.h:4036
Definition parse-tree.h:4048
Definition parse-tree.h:4058
Definition parse-tree.h:4066
Definition parse-tree.h:4075
Definition parse-tree.h:4110
Definition parse-tree.h:4097
Definition parse-tree.h:4084
Definition parse-tree.h:4134
Definition parse-tree.h:4125
Definition parse-tree.h:4143
Definition parse-tree.h:4156
Definition parse-tree.h:4165
Definition parse-tree.h:4175
Definition parse-tree.h:4185
Definition parse-tree.h:4194
Definition parse-tree.h:4202
Definition parse-tree.h:4212
Definition parse-tree.h:4223
Definition parse-tree.h:4236
Definition parse-tree.h:3715
Definition parse-tree.h:3698
Definition parse-tree.h:3739
Definition parse-tree.h:3705
Definition parse-tree.h:3766
Definition parse-tree.h:3778
Definition parse-tree.h:3791
Definition parse-tree.h:3800