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, OmpDependenceKind)
68 NODE_ENUM(common, OmpMemoryOrderType)
69 NODE_ENUM(common, OpenACCDeviceType)
70 NODE(format, ControlEditDesc)
71 NODE(format::ControlEditDesc, Kind)
72 NODE(format, DerivedTypeDataEditDesc)
73 NODE(format, FormatItem)
74 NODE(format, FormatSpecification)
75 NODE(format, IntrinsicTypeDataEditDesc)
77 NODE(parser, Abstract)
79 NODE(AccAtomicCapture, Stmt1)
80 NODE(AccAtomicCapture, Stmt2)
88 NODE(parser, AccClause)
89#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
90#include "llvm/Frontend/OpenACC/ACC.inc"
93 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
94 return llvm::Twine(
95 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
96 .str();
97 }
101 NODE_ENUM(parser::AccDataModifier, Modifier)
103 NODE(parser, AccEndAtomic)
107 NODE(parser, AccGangArg)
108 NODE(AccGangArg, Num)
109 NODE(AccGangArg, Dim)
110 NODE(AccGangArg, Static)
112 NODE(parser, AccObject)
113 NODE(parser, AccObjectList)
116 NODE(parser, AccSizeExpr)
118 NODE(parser, AccSelfClause)
121
123 NODE(parser, AccTileExpr)
126 NODE(parser, AccEndLoop)
128 static std::string GetNodeName(const llvm::acc::Directive &x) {
129 return llvm::Twine(
130 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
131 .str();
132 }
133 NODE(parser, AcImpliedDo)
135 NODE(parser, AcValue)
136 NODE(parser, AccessStmt)
137 NODE(parser, AccessId)
138 NODE(parser, AccessSpec)
139 NODE_ENUM(AccessSpec, Kind)
140 NODE(parser, AcSpec)
141 NODE(parser, ActionStmt)
142 NODE(parser, ActualArg)
143 NODE(ActualArg, PercentRef)
144 NODE(ActualArg, PercentVal)
145 NODE(parser, ActualArgSpec)
146 NODE(AcValue, Triplet)
147 NODE(parser, AllocOpt)
148 NODE(AllocOpt, Mold)
149 NODE(AllocOpt, Source)
150 NODE(AllocOpt, Stream)
151 NODE(AllocOpt, Pinned)
152 NODE(parser, Allocatable)
153 NODE(parser, AllocatableStmt)
157 NODE(parser, AllocateStmt)
158 NODE(parser, Allocation)
159 NODE(parser, AltReturnSpec)
161 NODE(parser, ArrayConstructor)
162 NODE(parser, ArrayElement)
163 NODE(parser, ArraySpec)
164 NODE(parser, AssignStmt)
168 NODE(parser, AssociateStmt)
169 NODE(parser, Association)
170 NODE(parser, AssumedImpliedSpec)
171 NODE(parser, AssumedRankSpec)
172 NODE(parser, AssumedShapeSpec)
174 NODE(parser, Asynchronous)
175 NODE(parser, AsynchronousStmt)
176 NODE(parser, AttrSpec)
177 NODE(parser, BOZLiteralConstant)
178 NODE(parser, BackspaceStmt)
179 NODE(parser, BasedPointer)
180 NODE(parser, BasedPointerStmt)
181 NODE(parser, BindAttr)
182 NODE(BindAttr, Deferred)
183 NODE(BindAttr, Non_Overridable)
184 NODE(parser, BindEntity)
185 NODE_ENUM(BindEntity, Kind)
186 NODE(parser, BindStmt)
187 NODE(parser, Block)
189 NODE(parser, BlockData)
190 NODE(parser, BlockDataStmt)
191 NODE(parser, BlockSpecificationPart)
192 NODE(parser, BlockStmt)
194 NODE(parser, BoundsSpec)
195 NODE(parser, Call)
196 NODE(parser, CallStmt)
197 NODE(CallStmt, Chevrons)
198 NODE(CallStmt, StarOrExpr)
199 NODE(parser, CaseConstruct)
200 NODE(CaseConstruct, Case)
201 NODE(parser, CaseSelector)
202 NODE(parser, CaseStmt)
204 NODE(CaseValueRange, Range)
207 NODE(parser, CharLength)
210 NODE(parser, CharSelector)
211 NODE(CharSelector, LengthAndKind)
212 NODE(parser, CloseStmt)
213 NODE(CloseStmt, CloseSpec)
215 NODE(parser, CoarraySpec)
217 NODE(parser, CodimensionStmt)
220 NODE(parser, CommonStmt)
221 NODE(CommonStmt, Block)
223 NODE(CompilerDirective, AssumeAligned)
224 NODE(CompilerDirective, IgnoreTKR)
225 NODE(CompilerDirective, Inline)
226 NODE(CompilerDirective, IVDep)
227 NODE(CompilerDirective, ForceInline)
228 NODE(CompilerDirective, LoopCount)
229 NODE(CompilerDirective, NameValue)
230 NODE(CompilerDirective, NoInline)
231 NODE(CompilerDirective, Unrecognized)
232 NODE(CompilerDirective, VectorAlways)
233 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
234 NODE(CompilerDirective, VectorLength)
235 NODE(CompilerDirective, Unroll)
236 NODE(CompilerDirective, UnrollAndJam)
237 NODE(CompilerDirective, NoVector)
238 NODE(CompilerDirective, NoUnroll)
239 NODE(CompilerDirective, NoUnrollAndJam)
240 NODE(CompilerDirective, Prefetch)
242 NODE(parser, ComplexPart)
245 NODE(parser, ComponentDataSource)
246 NODE(parser, ComponentDecl)
247 NODE(parser, FillDecl)
250 NODE(parser, ComponentSpec)
254 NODE(parser, ConnectSpec)
255 NODE(ConnectSpec, CharExpr)
256 NODE_ENUM(ConnectSpec::CharExpr, Kind)
257 NODE(ConnectSpec, Newunit)
258 NODE(ConnectSpec, Recl)
259 NODE(parser, ContainsStmt)
260 NODE(parser, Contiguous)
261 NODE(parser, ContiguousStmt)
262 NODE(parser, ContinueStmt)
264 NODE(parser, CriticalStmt)
267 NODE(CUFKernelDoConstruct, StarOrExpr)
268 NODE(CUFKernelDoConstruct, Directive)
269 NODE(CUFKernelDoConstruct, LaunchConfiguration)
270 NODE(parser, CUFReduction)
271 NODE(parser, CycleStmt)
273 NODE(parser, DataIDoObject)
274 NODE(parser, DataImpliedDo)
275 NODE(parser, DataRef)
276 NODE(parser, DataStmt)
280 NODE(parser, DataStmtSet)
281 NODE(parser, DataStmtValue)
285 NODE(DeclarationTypeSpec, Class)
286 NODE(DeclarationTypeSpec, ClassStar)
287 NODE(DeclarationTypeSpec, Record)
288 NODE(DeclarationTypeSpec, Type)
289 NODE(DeclarationTypeSpec, TypeStar)
290 NODE(parser, Default)
291 NODE(parser, DeferredCoshapeSpecList)
292 NODE(parser, DeferredShapeSpecList)
293 NODE(parser, DefinedOpName)
295 NODE_ENUM(DefinedOperator, IntrinsicOperator)
299 NODE(parser, Designator)
300 NODE(parser, DimensionStmt)
301 NODE(DimensionStmt, Declaration)
302 NODE(parser, DoConstruct)
303 NODE(parser, DummyArg)
304 NODE(parser, ElseIfStmt)
305 NODE(parser, ElseStmt)
306 NODE(parser, ElsewhereStmt)
307 NODE(parser, EndAssociateStmt)
308 NODE(parser, EndBlockDataStmt)
309 NODE(parser, EndBlockStmt)
311 NODE(parser, EndCriticalStmt)
312 NODE(parser, EndDoStmt)
313 NODE(parser, EndEnumStmt)
314 NODE(parser, EndForallStmt)
315 NODE(parser, EndFunctionStmt)
316 NODE(parser, EndIfStmt)
317 NODE(parser, EndInterfaceStmt)
318 NODE(parser, EndLabel)
319 NODE(parser, EndModuleStmt)
320 NODE(parser, EndMpSubprogramStmt)
321 NODE(parser, EndProgramStmt)
322 NODE(parser, EndSelectStmt)
323 NODE(parser, EndSubmoduleStmt)
324 NODE(parser, EndSubroutineStmt)
325 NODE(parser, EndTypeStmt)
326 NODE(parser, EndWhereStmt)
327 NODE(parser, EndfileStmt)
328 NODE(parser, EntityDecl)
329 NODE(parser, EntryStmt)
330 NODE(parser, EnumDef)
331 NODE(parser, EnumDefStmt)
332 NODE(parser, Enumerator)
333 NODE(parser, EnumeratorDefStmt)
334 NODE(parser, EorLabel)
335 NODE(parser, EquivalenceObject)
336 NODE(parser, EquivalenceStmt)
337 NODE(parser, ErrLabel)
338 NODE(parser, ErrorRecovery)
339 NODE(parser, EventPostStmt)
340 NODE(parser, EventWaitSpec)
341 NODE(parser, EventWaitStmt)
343 NODE(parser, ExecutionPart)
345 NODE(parser, ExitStmt)
348 NODE(parser, Expr)
349 NODE(Expr, Parentheses)
350 NODE(Expr, UnaryPlus)
351 NODE(Expr, Negate)
352 NODE(Expr, NOT)
353 NODE(Expr, PercentLoc)
354 NODE(Expr, DefinedUnary)
355 NODE(Expr, Power)
356 NODE(Expr, Multiply)
357 NODE(Expr, Divide)
358 NODE(Expr, Add)
359 NODE(Expr, Subtract)
360 NODE(Expr, Concat)
361 NODE(Expr, LT)
362 NODE(Expr, LE)
363 NODE(Expr, EQ)
364 NODE(Expr, NE)
365 NODE(Expr, GE)
366 NODE(Expr, GT)
367 NODE(Expr, AND)
368 NODE(Expr, OR)
369 NODE(Expr, EQV)
370 NODE(Expr, NEQV)
371 NODE(Expr, DefinedBinary)
372 NODE(Expr, ComplexConstructor)
373 NODE(parser, External)
374 NODE(parser, ExternalStmt)
375 NODE(parser, FailImageStmt)
376 NODE(parser, FileUnitNumber)
377 NODE(parser, FinalProcedureStmt)
378 NODE(parser, FlushStmt)
383 NODE(parser, ForallStmt)
384 NODE(parser, FormTeamStmt)
385 NODE(FormTeamStmt, FormTeamSpec)
386 NODE(parser, Format)
387 NODE(parser, FormatStmt)
389 NODE(parser, FunctionStmt)
391 NODE(parser, GenericSpec)
392 NODE(GenericSpec, Assignment)
393 NODE(GenericSpec, ReadFormatted)
394 NODE(GenericSpec, ReadUnformatted)
395 NODE(GenericSpec, WriteFormatted)
396 NODE(GenericSpec, WriteUnformatted)
397 NODE(parser, GenericStmt)
398 NODE(parser, GotoStmt)
400 NODE(parser, IdExpr)
401 NODE(parser, IdVariable)
402 NODE(parser, IfConstruct)
403 NODE(IfConstruct, ElseBlock)
404 NODE(IfConstruct, ElseIfBlock)
405 NODE(parser, IfStmt)
406 NODE(parser, IfThenStmt)
407 NODE(parser, TeamValue)
408 NODE(parser, ImageSelector)
410 NODE(ImageSelectorSpec, Notify)
411 NODE(ImageSelectorSpec, Stat)
412 NODE(ImageSelectorSpec, Team_Number)
413 NODE(parser, ImplicitPart)
415 NODE(parser, ImplicitSpec)
416 NODE(parser, ImplicitStmt)
417 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
418 NODE(parser, ImpliedShapeSpec)
419 NODE(parser, ImportStmt)
422 NODE(parser, InputItem)
423 NODE(parser, InquireSpec)
424 NODE(InquireSpec, CharVar)
425 NODE_ENUM(InquireSpec::CharVar, Kind)
426 NODE(InquireSpec, IntVar)
427 NODE_ENUM(InquireSpec::IntVar, Kind)
428 NODE(InquireSpec, LogVar)
429 NODE_ENUM(InquireSpec::LogVar, Kind)
430 NODE(parser, InquireStmt)
431 NODE(InquireStmt, Iolength)
432 NODE(parser, IntegerTypeSpec)
433 NODE(parser, IntentSpec)
434 NODE_ENUM(IntentSpec, Intent)
435 NODE(parser, IntentStmt)
437 NODE(parser, InterfaceBody)
438 NODE(InterfaceBody, Function)
439 NODE(InterfaceBody, Subroutine)
441 NODE(parser, InterfaceStmt)
444 NODE(parser, Intrinsic)
445 NODE(parser, IntrinsicStmt)
447 NODE(IntrinsicTypeSpec, Character)
448 NODE(IntrinsicTypeSpec, Complex)
449 NODE(IntrinsicTypeSpec, DoubleComplex)
450 NODE(IntrinsicTypeSpec, DoublePrecision)
452 NODE(IntrinsicTypeSpec, Real)
453 NODE(parser, IoControlSpec)
454 NODE(IoControlSpec, Asynchronous)
455 NODE(IoControlSpec, CharExpr)
456 NODE_ENUM(IoControlSpec::CharExpr, Kind)
457 NODE(IoControlSpec, Pos)
458 NODE(IoControlSpec, Rec)
459 NODE(IoControlSpec, Size)
460 NODE(parser, IoUnit)
461 NODE(parser, Keyword)
462 NODE(parser, KindParam)
463 NODE(parser, KindSelector)
464 NODE(KindSelector, StarSize)
465 NODE(parser, LabelDoStmt)
468 NODE(parser, LetterSpec)
472 NODE_ENUM(parser::ReductionOperator, Operator)
473 NODE(parser, LocalitySpec)
474 NODE(LocalitySpec, DefaultNone)
475 NODE(LocalitySpec, Local)
476 NODE(LocalitySpec, LocalInit)
477 NODE(LocalitySpec, Reduce)
478 NODE(LocalitySpec, Shared)
479 NODE(parser, LockStmt)
480 NODE(LockStmt, LockStat)
482 NODE_NAME(LoopControl::Bounds, "LoopBounds")
483 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
484 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
485 NODE(parser, LoopControl)
486 NODE(LoopControl, Concurrent)
487 NODE(parser, MainProgram)
488 NODE(parser, Map)
489 NODE(Map, EndMapStmt)
490 NODE(Map, MapStmt)
492 NODE(parser, Module)
493 NODE(parser, ModuleStmt)
496 NODE(parser, MpSubprogramStmt)
497 NODE(parser, MsgVariable)
498 NODE(parser, Name)
499 NODE(parser, NamedConstant)
501 NODE(parser, NamelistStmt)
502 NODE(NamelistStmt, Group)
504 NODE(parser, NoPass)
506 NODE(parser, NullifyStmt)
507 NODE(parser, NullInit)
508 NODE(parser, ObjectDecl)
509 NODE(parser, OldParameterStmt)
510
511 static std::string GetNodeName(const llvm::omp::Directive &x) {
512 return llvm::Twine("llvm::omp::Directive = ",
513 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
514 .str();
515 }
516 static std::string GetNodeName(const llvm::omp::Clause &x) {
517 return llvm::Twine(
518 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
519 .str();
520 }
523 NODE_ENUM(OmpAccessGroup, Value)
525 NODE(OmpAdjustArgsClause, OmpAdjustOp)
526 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
528 NODE(OmpAffinityClause, Modifier)
531 NODE(OmpAlignedClause, Modifier)
532 NODE(parser, OmpAlignment)
535 NODE(OmpAllocateClause, Modifier)
540 NODE_ENUM(OmpAlwaysModifier, Value)
542 NODE(OmpAppendArgsClause, OmpAppendOp)
543 NODE(parser, OmpArgument)
545 NODE(parser, OmpAtClause)
546 NODE_ENUM(OmpAtClause, ActionTime)
549 NODE_ENUM(OmpAttachModifier, Value)
551 NODE_ENUM(OmpAutomapModifier, Value)
556 NODE(parser, OmpBindClause)
557 NODE_ENUM(OmpBindClause, Binding)
561 NODE_ENUM(OmpChunkModifier, Value)
562 NODE(parser, OmpClause)
563 NODE(parser, OmpClauseList)
565 NODE_ENUM(OmpCloseModifier, Value)
572 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
574 NODE(OmpDefaultmapClause, Modifier)
575 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
577 NODE_ENUM(OmpDeleteModifier, Value)
579 NODE(OmpDependClause, TaskDep)
580 NODE(OmpDependClause::TaskDep, Modifier)
582 NODE_ENUM(OmpDependenceType, Value)
587 NODE(OmpDeviceClause, Modifier)
589 NODE_ENUM(OmpDeviceModifier, Value)
592 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
596 NODE_ENUM(OmpDirectiveSpecification, Flag)
597 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
598 NODE(parser, OmpDoacross)
599 NODE(OmpDoacross, Sink)
600 NODE(OmpDoacross, Source)
604 NODE(OmpDynGroupprivateClause, Modifier)
609 NODE(OmpEnterClause, Modifier)
612 NODE_ENUM(OmpExpectation, Value)
613 NODE(parser, OmpFailClause)
615 NODE_ENUM(OmpFallbackModifier, Value)
616 NODE(parser, OmpFromClause)
617 NODE(OmpFromClause, Modifier)
619 NODE(OmpGrainsizeClause, Modifier)
622 NODE(parser, OmpHintClause)
624 NODE(parser, OmpIfClause)
625 NODE(OmpIfClause, Modifier)
627 NODE(parser, OmpInitClause)
628 NODE(OmpInitClause, Modifier)
632 NODE(OmpInReductionClause, Modifier)
634 NODE_ENUM(OmpInteropType, Value)
635 NODE(parser, OmpIteration)
638 NODE(parser, OmpIterator)
641 NODE(OmpLastprivateClause, Modifier)
643 NODE_ENUM(OmpLastprivateModifier, Value)
645 NODE(OmpLinearClause, Modifier)
647 NODE_ENUM(OmpLinearModifier, Value)
648 NODE(parser, OmpLocator)
651 NODE(parser, OmpLowerBound)
652 NODE(parser, OmpMapClause)
653 NODE(OmpMapClause, Modifier)
654 NODE(parser, OmpMapper)
656 NODE(parser, OmpMapType)
657 NODE_ENUM(OmpMapType, Value)
659 NODE_ENUM(OmpMapTypeModifier, Value)
663 NODE(parser, OmpNoOpenMPClause)
664 NODE(parser, OmpNoOpenMPRoutinesClause)
665 NODE(parser, OmpNoParallelismClause)
669 NODE(OmpNumTeamsClause, Modifier)
671 NODE(OmpNumThreadsClause, Modifier)
672 NODE(OmpNumTasksClause, Modifier)
673 NODE(parser, OmpObject)
674 NODE(OmpObject, Invalid)
675 NODE_ENUM(OmpObject::Invalid, Kind)
676 NODE(parser, OmpObjectList)
678 NODE(OmpOrderClause, Modifier)
679 NODE_ENUM(OmpOrderClause, Ordering)
681 NODE_ENUM(OmpOrderingModifier, Value)
683 NODE_ENUM(OmpOrderModifier, Value)
687 NODE(parser, OmpPreferType)
689 NODE_ENUM(OmpPrescriptiveness, Value)
691 NODE_ENUM(OmpPresentModifier, Value)
693 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
695 NODE(OmpReductionClause, Modifier)
698 NODE_ENUM(OmpReductionModifier, Value)
701 NODE_ENUM(OmpRefModifier, Value)
705 NODE(OmpScheduleClause, Modifier)
706 NODE_ENUM(OmpScheduleClause, Kind)
709 NODE_ENUM(OmpSelfModifier, Value)
711 NODE_ENUM(OmpSeverityClause, SevLevel)
717 NODE(OmpStylizedInstance, Instance)
720 NODE(OmpTaskReductionClause, Modifier)
722 NODE(OmpThreadLimitClause, Modifier)
724 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
725 NODE(parser, OmpToClause)
726 NODE(OmpToClause, Modifier)
729 NODE(OmpTraitPropertyExtension, Complex)
731 NODE(parser, OmpTraitScore)
733 NODE(OmpTraitSelector, Properties)
735 NODE_ENUM(OmpTraitSelectorName, Value)
738 NODE_ENUM(OmpTraitSetSelectorName, Value)
740 NODE(parser, OmpTypeName)
745 NODE(parser, OmpUseClause)
747 NODE_ENUM(OmpVariableCategory, Value)
748 NODE(parser, OmpWhenClause)
749 NODE(OmpWhenClause, Modifier)
751 NODE_ENUM(OmpxHoldModifier, Value)
752#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
753#include "llvm/Frontend/OpenMP/OMP.inc"
754
755 NODE(parser, Only)
769
797
798 NODE(parser, OpenStmt)
799 NODE(parser, Optional)
800 NODE(parser, OptionalStmt)
803 NODE(parser, OutputItem)
804 NODE(parser, Parameter)
805 NODE(parser, ParameterStmt)
807 NODE(parser, Pass)
808 NODE(parser, PauseStmt)
809 NODE(parser, Pointer)
811 NODE(PointerAssignmentStmt, Bounds)
812 NODE(parser, PointerDecl)
813 NODE(parser, PointerObject)
814 NODE(parser, PointerStmt)
816 NODE(parser, PrefixSpec)
817 NODE(PrefixSpec, Elemental)
818 NODE(PrefixSpec, Impure)
819 NODE(PrefixSpec, Module)
820 NODE(PrefixSpec, Non_Recursive)
821 NODE(PrefixSpec, Pure)
822 NODE(PrefixSpec, Recursive)
823 NODE(PrefixSpec, Attributes)
824 NODE(PrefixSpec, Launch_Bounds)
825 NODE(PrefixSpec, Cluster_Dims)
826 NODE(parser, PrintStmt)
827 NODE(parser, PrivateStmt)
829 NODE(parser, ProcAttrSpec)
833 NODE(parser, ProcDecl)
834 NODE(parser, ProcInterface)
838 NODE(parser, ProcedureStmt)
839 NODE_ENUM(ProcedureStmt, Kind)
840 NODE(parser, Program)
841 NODE(parser, ProgramStmt)
842 NODE(parser, ProgramUnit)
843 NODE(parser, Protected)
844 NODE(parser, ProtectedStmt)
845 NODE(parser, ReadStmt)
847 NODE(RealLiteralConstant, Real)
848 NODE(parser, Rename)
849 NODE(Rename, Names)
850 NODE(Rename, Operators)
851 NODE(parser, ReturnStmt)
852 NODE(parser, RewindStmt)
853 NODE(parser, Save)
854 NODE(parser, SaveStmt)
855 NODE(parser, SavedEntity)
856 NODE_ENUM(SavedEntity, Kind)
860 NODE(SelectRankCaseStmt, Rank)
862 NODE(SelectRankConstruct, RankCase)
865 NODE(SelectTypeConstruct, TypeCase)
867 NODE(parser, Selector)
869 NODE(parser, SequenceStmt)
870 NODE(parser, Sign)
875 NODE(parser, SpecificationExpr)
877 NODE(parser, Star)
878 NODE(parser, StatOrErrmsg)
879 NODE(parser, StatVariable)
880 NODE(parser, StatusExpr)
882 NODE(parser, StopCode)
883 NODE(parser, StopStmt)
884 NODE_ENUM(StopStmt, Kind)
887 NODE(parser, StructureDef)
888 NODE(StructureDef, EndStructureStmt)
890 NODE(parser, StructureStmt)
891 NODE(parser, Submodule)
892 NODE(parser, SubmoduleStmt)
896 NODE(parser, Substring)
899 NODE(parser, Suffix)
900 NODE(parser, SyncAllStmt)
902 NODE(SyncImagesStmt, ImageSet)
903 NODE(parser, SyncMemoryStmt)
904 NODE(parser, SyncTeamStmt)
905 NODE(parser, Target)
906 NODE(parser, TargetStmt)
907 NODE(parser, TypeAttrSpec)
908 NODE(TypeAttrSpec, BindC)
909 NODE(TypeAttrSpec, Extends)
915 NODE(TypeBoundProcedureStmt, WithInterface)
916 NODE(TypeBoundProcedureStmt, WithoutInterface)
918 NODE(parser, TypeGuardStmt)
919 NODE(TypeGuardStmt, Guard)
920 NODE(parser, TypeParamDecl)
922 NODE(common, TypeParamAttr)
923 NODE(parser, TypeParamSpec)
925 NODE(TypeParamValue, Deferred)
926 NODE(parser, TypeSpec)
927 NODE(parser, Union)
928 NODE(Union, EndUnionStmt)
929 NODE(Union, UnionStmt)
930 NODE(parser, UnlockStmt)
932 NODE(parser, UnsignedTypeSpec)
933 NODE(parser, UseStmt)
934 NODE_ENUM(UseStmt, ModuleNature)
935 NODE(parser, Value)
936 NODE(parser, ValueStmt)
937 NODE(parser, Variable)
939 NODE(VectorTypeSpec, PairVectorTypeSpec)
940 NODE(VectorTypeSpec, QuadVectorTypeSpec)
941 NODE(parser, IntrinsicVectorTypeSpec)
943 NODE(parser, Verbatim)
944 NODE(parser, Volatile)
945 NODE(parser, VolatileStmt)
946 NODE(parser, WaitSpec)
947 NODE(parser, WaitStmt)
950 NODE(WhereConstruct, Elsewhere)
951 NODE(WhereConstruct, MaskedElsewhere)
953 NODE(parser, WhereStmt)
954 NODE(parser, WriteStmt)
955#undef NODE
956#undef NODE_NAME
957
958 template <typename T> bool Pre(const T &x) {
959 std::string fortran{AsFortran<T>(x)};
960 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
961 Prefix(GetNodeName(x));
962 } else {
963 IndentEmptyLine();
964 out_ << GetNodeName(x);
965 if (!fortran.empty()) {
966 out_ << " = '" << fortran << '\'';
967 }
968 EndLine();
969 ++indent_;
970 }
971 return true;
972 }
973
974 template <typename T> void Post(const T &x) {
975 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
976 EndLineIfNonempty();
977 } else {
978 --indent_;
979 }
980 }
981
982 // A few types we want to ignore
983
984 bool Pre(const CharBlock &) { return true; }
985 void Post(const CharBlock &) {}
986
987 template <typename T> bool Pre(const Statement<T> &) { return true; }
988 template <typename T> void Post(const Statement<T> &) {}
989 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
990 template <typename T> void Post(const UnlabeledStatement<T> &) {}
991
992 template <typename T> bool Pre(const common::Indirection<T> &) {
993 return true;
994 }
995 template <typename T> void Post(const common::Indirection<T> &) {}
996
997 template <typename A> bool Pre(const Scalar<A> &) {
998 Prefix("Scalar");
999 return true;
1000 }
1001 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1002
1003 template <typename A> bool Pre(const Constant<A> &) {
1004 Prefix("Constant");
1005 return true;
1006 }
1007 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1008
1009 template <typename A> bool Pre(const Integer<A> &) {
1010 Prefix("Integer");
1011 return true;
1012 }
1013 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1014
1015 template <typename A> bool Pre(const Logical<A> &) {
1016 Prefix("Logical");
1017 return true;
1018 }
1019 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1020
1021 template <typename A> bool Pre(const DefaultChar<A> &) {
1022 Prefix("DefaultChar");
1023 return true;
1024 }
1025 template <typename A> void Post(const DefaultChar<A> &) {
1026 EndLineIfNonempty();
1027 }
1028
1029 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1030 template <typename... A> void Post(const std::tuple<A...> &) {}
1031
1032 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1033 template <typename... A> void Post(const std::variant<A...> &) {}
1034
1035protected:
1036 // Return a Fortran representation of this node to include in the dump
1037 template <typename T> std::string AsFortran(const T &x) {
1038 std::string buf;
1039 llvm::raw_string_ostream ss{buf};
1040 if constexpr (HasTypedExpr<T>::value) {
1041 if (asFortran_ && x.typedExpr) {
1042 asFortran_->expr(ss, *x.typedExpr);
1043 }
1044 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1045 std::is_same_v<T, PointerAssignmentStmt>) {
1046 if (asFortran_ && x.typedAssignment) {
1047 asFortran_->assignment(ss, *x.typedAssignment);
1048 }
1049 } else if constexpr (std::is_same_v<T, CallStmt>) {
1050 if (asFortran_ && x.typedCall) {
1051 asFortran_->call(ss, *x.typedCall);
1052 }
1053 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1054 std::is_same_v<T, SignedIntLiteralConstant> ||
1055 std::is_same_v<T, UnsignedLiteralConstant>) {
1056 ss << std::get<CharBlock>(x.t);
1057 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1058 ss << x.source;
1059 } else if constexpr (std::is_same_v<T, std::string> ||
1060 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1061 ss << x;
1062 }
1063 if (ss.tell()) {
1064 return buf;
1065 }
1066 if constexpr (std::is_same_v<T, Name>) {
1067 return x.source.ToString();
1068#ifdef SHOW_ALL_SOURCE_MEMBERS
1069 } else if constexpr (HasSource<T>::value) {
1070 return x.source.ToString();
1071#endif
1072 } else if constexpr (std::is_same_v<T, int>) {
1073 return std::to_string(x);
1074 } else if constexpr (std::is_same_v<T, bool>) {
1075 return x ? "true" : "false";
1076 } else {
1077 return "";
1078 }
1079 }
1080
1081 void IndentEmptyLine() {
1082 if (emptyline_ && indent_ > 0) {
1083 for (int i{0}; i < indent_; ++i) {
1084 out_ << "| ";
1085 }
1086 emptyline_ = false;
1087 }
1088 }
1089
1090 void Prefix(const char *str) {
1091 IndentEmptyLine();
1092 out_ << str << " -> ";
1093 emptyline_ = false;
1094 }
1095
1096 void Prefix(const std::string &str) {
1097 IndentEmptyLine();
1098 out_ << str << " -> ";
1099 emptyline_ = false;
1100 }
1101
1102 void EndLine() {
1103 out_ << '\n';
1104 emptyline_ = true;
1105 }
1106
1107 void EndLineIfNonempty() {
1108 if (!emptyline_) {
1109 EndLine();
1110 }
1111 }
1112
1113private:
1114 int indent_{0};
1115 llvm::raw_ostream &out_;
1116 const AnalyzedObjectsAsFortran *const asFortran_;
1117 bool emptyline_{false};
1118};
1119
1120template <typename T>
1121llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1122 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1123 ParseTreeDumper dumper{out, asFortran};
1124 Walk(x, dumper);
1125 return out;
1126}
1127
1128} // namespace Fortran::parser
1129#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:1310
Definition parse-tree.h:1317
Definition parse-tree.h:1276
Definition parse-tree.h:1264
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:916
Definition parse-tree.h:1434
Definition parse-tree.h:496
Definition parse-tree.h:3264
Definition parse-tree.h:3254
Definition parse-tree.h:1992
Definition parse-tree.h:1957
Definition parse-tree.h:1936
Definition parse-tree.h:1948
Definition parse-tree.h:2003
Definition parse-tree.h:1965
Definition parse-tree.h:3481
Definition parse-tree.h:1924
Definition parse-tree.h:1365
Definition parse-tree.h:3486
Definition parse-tree.h:3491
Definition parse-tree.h:2029
Definition parse-tree.h:2184
Definition parse-tree.h:2175
Definition parse-tree.h:2168
Definition parse-tree.h:1347
Definition parse-tree.h:1395
Definition parse-tree.h:3431
Definition parse-tree.h:1134
Definition parse-tree.h:1456
Definition parse-tree.h:1463
Definition parse-tree.h:2206
Definition parse-tree.h:3039
Definition parse-tree.h:2039
Definition parse-tree.h:3425
Definition parse-tree.h:5805
Definition parse-tree.h:5799
Definition parse-tree.h:3288
Definition parse-tree.h:3271
Definition parse-tree.h:2448
Definition parse-tree.h:2430
Definition parse-tree.h:2436
Definition parse-tree.h:2416
Definition parse-tree.h:2237
Definition parse-tree.h:2222
Definition parse-tree.h:670
Definition parse-tree.h:875
Definition parse-tree.h:686
Definition parse-tree.h:2706
Definition parse-tree.h:2214
Definition parse-tree.h:991
Definition parse-tree.h:1469
Definition parse-tree.h:1915
Definition parse-tree.h:1636
Definition parse-tree.h:1644
Definition parse-tree.h:3374
Definition parse-tree.h:861
Definition parse-tree.h:853
Definition parse-tree.h:1002
Definition parse-tree.h:1015
Definition parse-tree.h:1046
Definition parse-tree.h:1123
Definition parse-tree.h:1068
Definition parse-tree.h:1227
Definition parse-tree.h:2535
Definition parse-tree.h:2262
Definition parse-tree.h:2271
Definition parse-tree.h:2684
Definition parse-tree.h:2682
Definition parse-tree.h:303
Definition parse-tree.h:2253
Definition parse-tree.h:2244
Definition parse-tree.h:1076
Definition parse-tree.h:1526
Definition parse-tree.h:1538
Definition parse-tree.h:1831
Definition parse-tree.h:1497
Definition parse-tree.h:1546
Definition parse-tree.h:1512
Definition parse-tree.h:1552
Definition parse-tree.h:1518
Definition parse-tree.h:2023
Definition parse-tree.h:437
Definition parse-tree.h:775
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1212
Definition parse-tree.h:757
Definition parse-tree.h:933
Definition parse-tree.h:1870
Definition parse-tree.h:1563
Definition parse-tree.h:2349
Definition parse-tree.h:3172
Definition parse-tree.h:2369
Definition parse-tree.h:2231
Definition parse-tree.h:1410
Definition parse-tree.h:3343
Definition parse-tree.h:1256
Definition parse-tree.h:1242
Definition parse-tree.h:2589
Definition parse-tree.h:2595
Definition parse-tree.h:2603
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:985
Definition parse-tree.h:972
Definition parse-tree.h:1713
Definition parse-tree.h:1062
Definition parse-tree.h:2125
Definition parse-tree.h:2141
Definition parse-tree.h:2119
Definition parse-tree.h:2154
Definition parse-tree.h:2131
Definition parse-tree.h:2615
Definition parse-tree.h:2718
Definition parse-tree.h:3276
Definition parse-tree.h:3161
Definition parse-tree.h:3309
Definition parse-tree.h:3052
Definition parse-tree.h:3067
Definition tools.h:134
Definition tools.h:140
Definition parse-tree.h:2383
Definition parse-tree.h:2399
Definition parse-tree.h:2362
Definition parse-tree.h:1697
Definition parse-tree.h:1707
Definition parse-tree.h:419
Definition parse-tree.h:1620
Definition parse-tree.h:1629
Definition parse-tree.h:625
Definition parse-tree.h:1033
Definition parse-tree.h:2814
Definition parse-tree.h:2758
Definition parse-tree.h:2901
Definition parse-tree.h:2909
Definition parse-tree.h:2914
Definition parse-tree.h:2899
Definition parse-tree.h:2927
Definition parse-tree.h:809
Definition parse-tree.h:311
Definition parse-tree.h:1373
Definition parse-tree.h:1572
Definition parse-tree.h:3228
Definition parse-tree.h:3193
Definition parse-tree.h:3218
Definition parse-tree.h:3073
Definition parse-tree.h:475
Definition parse-tree.h:463
Definition parse-tree.h:707
Definition parse-tree.h:2742
Definition parse-tree.h:2740
Definition parse-tree.h:2654
Definition parse-tree.h:796
Definition parse-tree.h:658
Definition parse-tree.h:2326
Definition parse-tree.h:1326
Definition parse-tree.h:676
Definition parse-tree.h:1614
Definition parse-tree.h:907
Definition parse-tree.h:2294
Definition parse-tree.h:2629
Definition parse-tree.h:889
Definition parse-tree.h:319
Definition parse-tree.h:2314
Definition parse-tree.h:2948
Definition parse-tree.h:3447
Definition parse-tree.h:2086
Definition parse-tree.h:2972
Definition parse-tree.h:2962
Definition parse-tree.h:2983
Definition parse-tree.h:587
Definition parse-tree.h:1332
Definition parse-tree.h:638
Definition parse-tree.h:2332
Definition parse-tree.h:2557
Definition parse-tree.h:1443
Definition parse-tree.h:4312
Definition parse-tree.h:4316
Definition parse-tree.h:4331
Definition parse-tree.h:4338
Definition parse-tree.h:4346
Definition parse-tree.h:4361
Definition parse-tree.h:5303
Definition parse-tree.h:4368
Definition parse-tree.h:4377
Definition parse-tree.h:5097
Definition parse-tree.h:5440
Definition parse-tree.h:5168
Definition parse-tree.h:4400
Definition parse-tree.h:5107
Definition parse-tree.h:5066
Definition parse-tree.h:5050
Definition parse-tree.h:4415
Definition parse-tree.h:3616
Definition parse-tree.h:4423
Definition parse-tree.h:4440
Definition parse-tree.h:4458
Definition parse-tree.h:4517
Definition parse-tree.h:4515
Definition parse-tree.h:4539
Definition parse-tree.h:4547
Definition parse-tree.h:4557
Definition parse-tree.h:4567
Definition parse-tree.h:4575
Definition parse-tree.h:3517
Definition parse-tree.h:5073
Definition parse-tree.h:4530
Definition parse-tree.h:4497
Definition parse-tree.h:4590
Definition parse-tree.h:5102
Definition parse-tree.h:5444
Definition parse-tree.h:5173
Definition parse-tree.h:4601
Definition parse-tree.h:5135
Definition parse-tree.h:4609
Definition parse-tree.h:4622
Definition parse-tree.h:4633
Definition parse-tree.h:4643
Definition parse-tree.h:4651
Definition parse-tree.h:4656
Definition parse-tree.h:4664
Definition parse-tree.h:4680
Definition parse-tree.h:4703
Definition parse-tree.h:4669
Definition parse-tree.h:4693
Definition parse-tree.h:4710
Definition parse-tree.h:3628
Definition parse-tree.h:4470
Definition parse-tree.h:4488
Definition parse-tree.h:4479
Definition parse-tree.h:4719
Definition parse-tree.h:4734
Definition parse-tree.h:4745
Definition parse-tree.h:4770
Definition parse-tree.h:4782
Definition parse-tree.h:4791
Definition parse-tree.h:5120
Definition parse-tree.h:5129
Definition parse-tree.h:4815
Definition parse-tree.h:4827
Definition parse-tree.h:4839
Definition parse-tree.h:3562
Definition parse-tree.h:3553
Definition parse-tree.h:3550
Definition parse-tree.h:4850
Definition parse-tree.h:4863
Definition parse-tree.h:4875
Definition parse-tree.h:4886
Definition parse-tree.h:3606
Definition parse-tree.h:4896
Definition parse-tree.h:4905
Definition parse-tree.h:4917
Definition parse-tree.h:4928
Definition parse-tree.h:4935
Definition parse-tree.h:3566
Definition parse-tree.h:3588
Definition parse-tree.h:3575
Definition parse-tree.h:4944
Definition parse-tree.h:4955
Definition parse-tree.h:4964
Definition parse-tree.h:4979
Definition parse-tree.h:4989
Definition parse-tree.h:3542
Definition parse-tree.h:3535
Definition parse-tree.h:4998
Definition parse-tree.h:5023
Definition parse-tree.h:5045
Definition parse-tree.h:5034
Definition parse-tree.h:3083
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:5329
Definition parse-tree.h:5162
Definition parse-tree.h:5334
Definition parse-tree.h:5371
Definition parse-tree.h:5475
Definition parse-tree.h:5319
Definition parse-tree.h:5150
Definition parse-tree.h:5382
Definition parse-tree.h:5396
Definition parse-tree.h:5412
Definition parse-tree.h:5258
Definition parse-tree.h:5420
Definition parse-tree.h:5493
Definition parse-tree.h:5449
Definition parse-tree.h:5264
Definition parse-tree.h:5182
Definition parse-tree.h:5188
Definition parse-tree.h:5431
Definition parse-tree.h:5270
Definition parse-tree.h:5139
Definition parse-tree.h:376
Definition parse-tree.h:2819
Definition parse-tree.h:2782
Definition parse-tree.h:3008
Definition parse-tree.h:2051
Definition parse-tree.h:1582
Definition parse-tree.h:2012
Definition parse-tree.h:2845
Definition parse-tree.h:3128
Definition parse-tree.h:2803
Definition parse-tree.h:946
Definition parse-tree.h:3106
Definition parse-tree.h:1087
Definition parse-tree.h:1115
Definition parse-tree.h:1910
Definition parse-tree.h:1107
Definition parse-tree.h:1101
Definition parse-tree.h:1094
Definition parse-tree.h:3116
Definition parse-tree.h:3243
Definition parse-tree.h:3211
Definition parse-tree.h:571
Definition parse-tree.h:2766
Definition parse-tree.h:828
Definition parse-tree.h:2283
Definition parse-tree.h:2994
Definition parse-tree.h:1595
Definition parse-tree.h:295
Definition parse-tree.h:1682
Definition parse-tree.h:2406
Definition parse-tree.h:2471
Definition parse-tree.h:2483
Definition parse-tree.h:2462
Definition parse-tree.h:2517
Definition parse-tree.h:2497
Definition parse-tree.h:2162
Definition parse-tree.h:3335
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1981
Definition parse-tree.h:359
Definition parse-tree.h:3353
Definition parse-tree.h:2549
Definition parse-tree.h:1900
Definition parse-tree.h:1233
Definition parse-tree.h:3468
Definition parse-tree.h:3440
Definition parse-tree.h:3463
Definition parse-tree.h:3014
Definition parse-tree.h:3025
Definition parse-tree.h:3180
Definition parse-tree.h:3319
Definition parse-tree.h:1673
Definition parse-tree.h:1862
Definition parse-tree.h:1664
Definition parse-tree.h:1848
Definition parse-tree.h:3147
Definition parse-tree.h:2567
Definition parse-tree.h:2580
Definition parse-tree.h:924
Definition parse-tree.h:1176
Definition parse-tree.h:1189
Definition parse-tree.h:1142
Definition parse-tree.h:1198
Definition parse-tree.h:1152
Definition parse-tree.h:1424
Definition parse-tree.h:2506
Definition parse-tree.h:952
Definition parse-tree.h:960
Definition parse-tree.h:751
Definition parse-tree.h:649
Definition parse-tree.h:764
Definition parse-tree.h:3456
Definition parse-tree.h:354
Definition parse-tree.h:2639
Definition parse-tree.h:815
Definition parse-tree.h:3092
Definition parse-tree.h:1878
Definition parse-tree.h:737
Definition parse-tree.h:742
Definition parse-tree.h:282
Definition parse-tree.h:2829
Definition parse-tree.h:2077
Definition parse-tree.h:2070
Definition parse-tree.h:2101
Definition parse-tree.h:2064
Definition parse-tree.h:2788
Definition parse-tree.h:3690
Definition parse-tree.h:3681
Definition parse-tree.h:3651
Definition parse-tree.h:3640
Definition parse-tree.h:3635
Definition parse-tree.h:3661
Definition parse-tree.h:3674
Definition parse-tree.h:3845
Definition parse-tree.h:3862
Definition parse-tree.h:3854
Definition parse-tree.h:3890
Definition parse-tree.h:3902
Definition parse-tree.h:3912
Definition parse-tree.h:3923
Definition parse-tree.h:3936
Definition parse-tree.h:3948
Definition parse-tree.h:3969
Definition parse-tree.h:3980
Definition parse-tree.h:3990
Definition parse-tree.h:3999
Definition parse-tree.h:4031
Definition parse-tree.h:4042
Definition parse-tree.h:4053
Definition parse-tree.h:4065
Definition parse-tree.h:4075
Definition parse-tree.h:4083
Definition parse-tree.h:4092
Definition parse-tree.h:4101
Definition parse-tree.h:4135
Definition parse-tree.h:4122
Definition parse-tree.h:4109
Definition parse-tree.h:4159
Definition parse-tree.h:4150
Definition parse-tree.h:4193
Definition parse-tree.h:4169
Definition parse-tree.h:4202
Definition parse-tree.h:4215
Definition parse-tree.h:4224
Definition parse-tree.h:4234
Definition parse-tree.h:4244
Definition parse-tree.h:4253
Definition parse-tree.h:4261
Definition parse-tree.h:4271
Definition parse-tree.h:4282
Definition parse-tree.h:4295
Definition parse-tree.h:3728
Definition parse-tree.h:3711
Definition parse-tree.h:3752
Definition parse-tree.h:3718
Definition parse-tree.h:3779
Definition parse-tree.h:3791
Definition parse-tree.h:3804
Definition parse-tree.h:3813