FLANG
dump-parse-tree.h
1//===-- include/flang/Parser/dump-parse-tree.h ------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef FORTRAN_PARSER_DUMP_PARSE_TREE_H_
10#define FORTRAN_PARSER_DUMP_PARSE_TREE_H_
11
12#include "format-specification.h"
13#include "parse-tree-visitor.h"
14#include "parse-tree.h"
15#include "tools.h"
16#include "unparse.h"
17#include "flang/Common/enum-set.h"
18#include "flang/Common/idioms.h"
19#include "flang/Common/indirection.h"
20#include "flang/Support/Fortran.h"
21#include "llvm/ADT/StringExtras.h"
22#include "llvm/Frontend/OpenMP/OMP.h"
23#include "llvm/Support/raw_ostream.h"
24#include <string>
25#include <type_traits>
26
27namespace Fortran::parser {
28
29//
30// Dump the Parse Tree hierarchy of any node 'x' of the parse tree.
31//
32
33class ParseTreeDumper {
34public:
35 explicit ParseTreeDumper(llvm::raw_ostream &out,
36 const AnalyzedObjectsAsFortran *asFortran = nullptr)
37 : out_(out), asFortran_{asFortran} {}
38
39 static constexpr const char *GetNodeName(const char *) { return "char *"; }
40
41 template <typename T, typename E, size_t B>
42 static std::string GetMemberNames(const common::EnumSet<E, B> &x) {
43 llvm::ListSeparator sep;
44 std::string s;
45 llvm::raw_string_ostream stream(s);
46 x.IterateOverMembers([&](E e) { stream << sep << T::EnumToString(e); });
47 return stream.str();
48 }
49#define NODE_ENUMSET(T, S) \
50 static std::string GetNodeName(const T::S &x) { \
51 return #S " = {"s + GetMemberNames<T>(x) + "}"s; \
52 }
53#define NODE_NAME(T, N) \
54 static constexpr const char *GetNodeName(const T &) { return N; }
55#define NODE_ENUM(T, E) \
56 static std::string GetNodeName(const T::E &x) { \
57 return #E " = "s + std::string{T::EnumToString(x)}; \
58 }
59#define NODE(T1, T2) NODE_NAME(T1::T2, #T2)
60 NODE_NAME(bool, "bool")
61 NODE_NAME(int, "int")
62 NODE(std, string)
63 NODE(std, int64_t)
64 NODE(std, uint64_t)
65 NODE_ENUM(common, CUDADataAttr)
66 NODE_ENUM(common, CUDASubprogramAttrs)
67 NODE_ENUM(common, ImportKind)
68 NODE_ENUM(common, OmpDependenceKind)
69 NODE_ENUM(common, OmpDeviceType)
70 NODE_ENUM(common, OmpMemoryOrderType)
71 NODE_ENUM(common, OpenACCDeviceType)
72 NODE(format, ControlEditDesc)
73 NODE(format::ControlEditDesc, Kind)
74 NODE(format, DerivedTypeDataEditDesc)
75 NODE(format, FormatItem)
76 NODE(format, FormatSpecification)
77 NODE(format, IntrinsicTypeDataEditDesc)
79 NODE(parser, Abstract)
81 NODE(AccAtomicCapture, Stmt1)
82 NODE(AccAtomicCapture, Stmt2)
90 NODE(parser, AccClause)
91#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
92#include "llvm/Frontend/OpenACC/ACC.inc"
95 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
96 return llvm::Twine(
97 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
98 .str();
99 }
100 NODE(parser, AccClauseList)
103 NODE_ENUM(parser::AccDataModifier, Modifier)
105 NODE(parser, AccEndAtomic)
109 NODE(parser, AccGangArg)
110 NODE(AccGangArg, Num)
111 NODE(AccGangArg, Dim)
112 NODE(AccGangArg, Static)
114 NODE(parser, AccObject)
115 NODE(parser, AccObjectList)
118 NODE(parser, AccSizeExpr)
120 NODE(parser, AccSelfClause)
123
125 NODE(parser, AccTileExpr)
128 NODE(parser, AccEndLoop)
130 static std::string GetNodeName(const llvm::acc::Directive &x) {
131 return llvm::Twine(
132 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
133 .str();
134 }
135 NODE(parser, AcImpliedDo)
137 NODE(parser, AcValue)
138 NODE(parser, AccessStmt)
139 NODE(parser, AccessId)
140 NODE(parser, AccessSpec)
141 NODE_ENUM(AccessSpec, Kind)
142 NODE(parser, AcSpec)
143 NODE(parser, ActionStmt)
144 NODE(parser, ActualArg)
145 NODE(ActualArg, PercentRef)
146 NODE(ActualArg, PercentVal)
147 NODE(parser, ActualArgSpec)
148 NODE(AcValue, Triplet)
149 NODE(parser, AllocOpt)
150 NODE(AllocOpt, Mold)
151 NODE(AllocOpt, Source)
152 NODE(AllocOpt, Stream)
153 NODE(AllocOpt, Pinned)
154 NODE(parser, Allocatable)
155 NODE(parser, AllocatableStmt)
159 NODE(parser, AllocateStmt)
160 NODE(parser, Allocation)
161 NODE(parser, AltReturnSpec)
163 NODE(parser, ArrayConstructor)
164 NODE(parser, ArrayElement)
165 NODE(parser, ArraySpec)
166 NODE(parser, AssignStmt)
170 NODE(parser, AssociateStmt)
171 NODE(parser, Association)
172 NODE(parser, AssumedImpliedSpec)
173 NODE(parser, AssumedRankSpec)
174 NODE(parser, AssumedShapeSpec)
176 NODE(parser, Asynchronous)
177 NODE(parser, AsynchronousStmt)
178 NODE(parser, AttrSpec)
179 NODE(parser, BOZLiteralConstant)
180 NODE(parser, BackspaceStmt)
181 NODE(parser, BasedPointer)
182 NODE(parser, BasedPointerStmt)
183 NODE(parser, BindAttr)
184 NODE(BindAttr, Deferred)
185 NODE(BindAttr, Non_Overridable)
186 NODE(parser, BindEntity)
187 NODE_ENUM(BindEntity, Kind)
188 NODE(parser, BindStmt)
189 NODE(parser, Block)
191 NODE(parser, BlockData)
192 NODE(parser, BlockDataStmt)
193 NODE(parser, BlockSpecificationPart)
194 NODE(parser, BlockStmt)
196 NODE(parser, BoundsSpec)
197 NODE(parser, Call)
198 NODE(parser, CallStmt)
199 NODE(CallStmt, Chevrons)
200 NODE(CallStmt, StarOrExpr)
201 NODE(parser, CaseConstruct)
202 NODE(CaseConstruct, Case)
203 NODE(parser, CaseSelector)
204 NODE(parser, CaseStmt)
206 NODE(CaseValueRange, Range)
209 NODE(parser, CharLength)
212 NODE(parser, CharSelector)
213 NODE(CharSelector, LengthAndKind)
214 NODE(parser, CloseStmt)
215 NODE(CloseStmt, CloseSpec)
217 NODE(parser, CoarraySpec)
219 NODE(parser, CodimensionStmt)
222 NODE(parser, CommonStmt)
223 NODE(CommonStmt, Block)
225 NODE(CompilerDirective, AssumeAligned)
226 NODE(CompilerDirective, IgnoreTKR)
227 NODE(CompilerDirective, Inline)
228 NODE(CompilerDirective, IVDep)
229 NODE(CompilerDirective, ForceInline)
230 NODE(CompilerDirective, LoopCount)
231 NODE(CompilerDirective, NameValue)
232 NODE(CompilerDirective, NoInline)
233 NODE(CompilerDirective, Unrecognized)
234 NODE(CompilerDirective, VectorAlways)
235 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
236 NODE(CompilerDirective, VectorLength)
237 NODE(CompilerDirective, Unroll)
238 NODE(CompilerDirective, UnrollAndJam)
239 NODE(CompilerDirective, NoVector)
240 NODE(CompilerDirective, NoUnroll)
241 NODE(CompilerDirective, NoUnrollAndJam)
242 NODE(CompilerDirective, Prefetch)
243 NODE(CompilerDirective, InlineAlways)
244 NODE(CompilerDirective, Simd)
246 NODE(parser, ComplexPart)
249 NODE(parser, ComponentDataSource)
250 NODE(parser, ComponentDecl)
251 NODE(parser, FillDecl)
254 NODE(parser, ComponentSpec)
260 NODE(ConditionalArg, Consequent)
262 NODE(parser, ConditionalArgNil)
263 NODE(parser, ConnectSpec)
264 NODE(ConnectSpec, CharExpr)
265 NODE_ENUM(ConnectSpec::CharExpr, Kind)
266 NODE(ConnectSpec, Newunit)
267 NODE(ConnectSpec, Recl)
268 NODE(parser, ContainsStmt)
269 NODE(parser, Contiguous)
270 NODE(parser, ContiguousStmt)
271 NODE(parser, ContinueStmt)
273 NODE(parser, CriticalStmt)
276 NODE(CUFKernelDoConstruct, StarOrExpr)
277 NODE(CUFKernelDoConstruct, Directive)
278 NODE(CUFKernelDoConstruct, LaunchConfiguration)
279 NODE(parser, CUFReduction)
280 NODE(parser, CycleStmt)
282 NODE(parser, DataIDoObject)
283 NODE(parser, DataImpliedDo)
284 NODE(parser, DataRef)
285 NODE(parser, DataStmt)
289 NODE(parser, DataStmtSet)
290 NODE(parser, DataStmtValue)
294 NODE(DeclarationTypeSpec, Class)
295 NODE(DeclarationTypeSpec, ClassOf)
296 NODE(DeclarationTypeSpec, ClassStar)
297 NODE(DeclarationTypeSpec, Record)
298 NODE(DeclarationTypeSpec, Type)
299 NODE(DeclarationTypeSpec, TypeOf)
300 NODE(DeclarationTypeSpec, TypeStar)
301 NODE(parser, Default)
302 NODE(parser, DeferredCoshapeSpecList)
303 NODE(parser, DeferredShapeSpecList)
304 NODE(parser, DefinedOpName)
306 NODE_ENUM(DefinedOperator, IntrinsicOperator)
310 NODE(parser, Designator)
311 NODE(parser, DimensionStmt)
312 NODE(DimensionStmt, Declaration)
313 NODE(parser, DoConstruct)
314 NODE(parser, DummyArg)
315 NODE(parser, ElseIfStmt)
316 NODE(parser, ElseStmt)
317 NODE(parser, ElsewhereStmt)
318 NODE(parser, EndAssociateStmt)
319 NODE(parser, EndBlockDataStmt)
320 NODE(parser, EndBlockStmt)
322 NODE(parser, EndCriticalStmt)
323 NODE(parser, EndDoStmt)
324 NODE(parser, EndEnumerationTypeStmt)
325 NODE(parser, EndEnumStmt)
326 NODE(parser, EndForallStmt)
327 NODE(parser, EndFunctionStmt)
328 NODE(parser, EndIfStmt)
329 NODE(parser, EndInterfaceStmt)
330 NODE(parser, EndLabel)
331 NODE(parser, EndModuleStmt)
332 NODE(parser, EndMpSubprogramStmt)
333 NODE(parser, EndProgramStmt)
334 NODE(parser, EndSelectStmt)
335 NODE(parser, EndSubmoduleStmt)
336 NODE(parser, EndSubroutineStmt)
337 NODE(parser, EndTypeStmt)
338 NODE(parser, EndWhereStmt)
339 NODE(parser, EndfileStmt)
340 NODE(parser, EntityDecl)
341 NODE(parser, EntryStmt)
342 NODE(parser, EnumDef)
343 NODE(parser, EnumDefStmt)
344 NODE(parser, Enumerator)
345 NODE(parser, EnumeratorDefStmt)
346 NODE(parser, EnumerationEnumeratorStmt)
349 NODE(parser, EorLabel)
350 NODE(parser, EquivalenceObject)
351 NODE(parser, EquivalenceStmt)
352 NODE(parser, ErrLabel)
353 NODE(parser, ErrorRecovery)
354 NODE(parser, EventPostStmt)
355 NODE(parser, EventWaitSpec)
356 NODE(parser, EventWaitStmt)
358 NODE(parser, ExecutionPart)
360 NODE(parser, ExitStmt)
364 NODE(parser, Expr)
365 NODE(Expr, Parentheses)
366 NODE(Expr, UnaryPlus)
367 NODE(Expr, Negate)
368 NODE(Expr, NOT)
369 NODE(Expr, PercentLoc)
370 NODE(Expr, DefinedUnary)
371 NODE(Expr, Power)
372 NODE(Expr, Multiply)
373 NODE(Expr, Divide)
374 NODE(Expr, Add)
375 NODE(Expr, Subtract)
376 NODE(Expr, Concat)
377 NODE(Expr, LT)
378 NODE(Expr, LE)
379 NODE(Expr, EQ)
380 NODE(Expr, NE)
381 NODE(Expr, GE)
382 NODE(Expr, GT)
383 NODE(Expr, AND)
384 NODE(Expr, OR)
385 NODE(Expr, EQV)
386 NODE(Expr, NEQV)
387 NODE(Expr, DefinedBinary)
388 NODE(Expr, ComplexConstructor)
389 NODE(parser, External)
390 NODE(parser, ExternalStmt)
391 NODE(parser, FailImageStmt)
392 NODE(parser, FileUnitNumber)
393 NODE(parser, FinalProcedureStmt)
394 NODE(parser, FlushStmt)
399 NODE(parser, ForallStmt)
400 NODE(parser, FormTeamStmt)
401 NODE(FormTeamStmt, FormTeamSpec)
402 NODE(parser, Format)
403 NODE(parser, FormatStmt)
405 NODE(parser, FunctionStmt)
407 NODE(parser, GenericSpec)
408 NODE(GenericSpec, Assignment)
409 NODE(GenericSpec, ReadFormatted)
410 NODE(GenericSpec, ReadUnformatted)
411 NODE(GenericSpec, WriteFormatted)
412 NODE(GenericSpec, WriteUnformatted)
413 NODE(parser, GenericStmt)
414 NODE(parser, GotoStmt)
416 NODE(parser, IdExpr)
417 NODE(parser, IdVariable)
418 NODE(parser, IfConstruct)
419 NODE(IfConstruct, ElseBlock)
420 NODE(IfConstruct, ElseIfBlock)
421 NODE(parser, IfStmt)
422 NODE(parser, IfThenStmt)
423 NODE(parser, TeamValue)
424 NODE(parser, ImageSelector)
426 NODE(ImageSelectorSpec, Notify)
427 NODE(ImageSelectorSpec, Stat)
428 NODE(ImageSelectorSpec, Team_Number)
429 NODE(parser, ImplicitPart)
431 NODE(parser, ImplicitSpec)
432 NODE(parser, ImplicitStmt)
433 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
434 NODE(parser, ImpliedShapeSpec)
435 NODE(parser, ImportStmt)
438 NODE(parser, InputItem)
439 NODE(parser, InquireSpec)
440 NODE(InquireSpec, CharVar)
441 NODE_ENUM(InquireSpec::CharVar, Kind)
442 NODE(InquireSpec, IntVar)
443 NODE_ENUM(InquireSpec::IntVar, Kind)
444 NODE(InquireSpec, LogVar)
445 NODE_ENUM(InquireSpec::LogVar, Kind)
446 NODE(parser, InquireStmt)
447 NODE(InquireStmt, Iolength)
448 NODE(parser, IntegerTypeSpec)
449 NODE(parser, IntentSpec)
450 NODE_ENUM(IntentSpec, Intent)
451 NODE(parser, IntentStmt)
453 NODE(parser, InterfaceBody)
454 NODE(InterfaceBody, Function)
455 NODE(InterfaceBody, Subroutine)
457 NODE(parser, InterfaceStmt)
460 NODE(parser, Intrinsic)
461 NODE(parser, IntrinsicStmt)
463 NODE(IntrinsicTypeSpec, Character)
464 NODE(IntrinsicTypeSpec, Complex)
465 NODE(IntrinsicTypeSpec, DoubleComplex)
466 NODE(IntrinsicTypeSpec, DoublePrecision)
468 NODE(IntrinsicTypeSpec, Real)
469 NODE(parser, IoControlSpec)
470 NODE(IoControlSpec, Asynchronous)
471 NODE(IoControlSpec, CharExpr)
472 NODE_ENUM(IoControlSpec::CharExpr, Kind)
473 NODE(IoControlSpec, Pos)
474 NODE(IoControlSpec, Rec)
475 NODE(IoControlSpec, Size)
476 NODE(parser, IoUnit)
477 NODE(parser, Keyword)
478 NODE(parser, KindParam)
479 NODE(parser, KindSelector)
480 NODE(KindSelector, StarSize)
481 NODE(parser, LabelDoStmt)
484 NODE(parser, LetterSpec)
488 NODE_ENUM(parser::ReductionOperator, Operator)
489 NODE(parser, LocalitySpec)
490 NODE(LocalitySpec, DefaultNone)
491 NODE(LocalitySpec, Local)
492 NODE(LocalitySpec, LocalInit)
493 NODE(LocalitySpec, Reduce)
494 NODE(LocalitySpec, Shared)
495 NODE(parser, LockStmt)
496 NODE(LockStmt, LockStat)
498 NODE_NAME(LoopControl::Bounds, "LoopBounds")
499 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
500 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
501 NODE(parser, LoopControl)
502 NODE(LoopControl, Concurrent)
503 NODE(parser, MainProgram)
504 NODE(parser, Map)
505 NODE(Map, EndMapStmt)
506 NODE(Map, MapStmt)
508 NODE(parser, Module)
509 NODE(parser, ModuleStmt)
512 NODE(parser, MpSubprogramStmt)
513 NODE(parser, MsgVariable)
514 NODE(parser, Name)
515 NODE(parser, NamedConstant)
517 NODE(parser, NamelistStmt)
518 NODE(NamelistStmt, Group)
520 NODE(parser, NoPass)
522 NODE(parser, NullifyStmt)
523 NODE(parser, NullInit)
524 NODE(parser, ObjectDecl)
525 NODE(parser, OldParameterStmt)
526
527 static std::string GetNodeName(const llvm::omp::Directive &x) {
528 return llvm::Twine("llvm::omp::Directive = ",
529 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
530 .str();
531 }
532 static std::string GetNodeName(const llvm::omp::Clause &x) {
533 return llvm::Twine(
534 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
535 .str();
536 }
539 NODE_ENUM(OmpAccessGroup, Value)
541 NODE(OmpAdjustArgsClause, OmpAdjustOp)
542 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
544 NODE(OmpAffinityClause, Modifier)
547 NODE(OmpAlignedClause, Modifier)
548 NODE(parser, OmpAlignment)
551 NODE(OmpAllocateClause, Modifier)
556 NODE_ENUM(OmpAlwaysModifier, Value)
558 NODE(OmpAppendArgsClause, OmpAppendOp)
560
561 static std::string GetNodeName(const llvm::omp::LoopModifier &x) {
562 return llvm::Twine(
563 "llvm::omp::LoopModifier = ", llvm::omp::getLoopModifierName(x))
564 .str();
565 }
567 NODE(OmpApplyClause, Modifier)
568 NODE(parser, OmpArgument)
572 NODE(parser, OmpAtClause)
573 NODE_ENUM(OmpAtClause, ActionTime)
576 NODE_ENUM(OmpAttachModifier, Value)
578 NODE_ENUM(OmpAutomapModifier, Value)
582 NODE(parser, OmpBindClause)
583 NODE_ENUM(OmpBindClause, Binding)
587 NODE_ENUM(OmpChunkModifier, Value)
588 NODE(parser, OmpClause)
589 NODE(parser, OmpClauseList)
591 NODE_ENUM(OmpCloseModifier, Value)
602 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
604 NODE(OmpDefaultmapClause, Modifier)
605 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
607 NODE_ENUM(OmpDeleteModifier, Value)
610 NODE(OmpDependClause, TaskDep)
611 NODE(OmpDependClause::TaskDep, Modifier)
613 NODE_ENUM(OmpDependenceType, Value)
618 NODE(OmpDeviceClause, Modifier)
620 NODE_ENUM(OmpDeviceModifier, Value)
626 NODE_ENUM(OmpDirectiveSpecification, Flag)
627 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
628 NODE(parser, OmpDoacross)
629 NODE(OmpDoacross, Sink)
630 NODE(OmpDoacross, Source)
634 NODE(OmpDynGroupprivateClause, Modifier)
638 NODE(OmpEnterClause, Modifier)
641 NODE_ENUM(OmpExpectation, Value)
642 NODE(parser, OmpFailClause)
644 NODE_ENUM(OmpFallbackModifier, Value)
645 NODE(parser, OmpFromClause)
646 NODE(OmpFromClause, Modifier)
648 NODE(OmpGrainsizeClause, Modifier)
652 NODE(parser, OmpHintClause)
654 NODE(parser, OmpIfClause)
655 NODE(OmpIfClause, Modifier)
657 NODE(parser, OmpInitClause)
658 NODE(OmpInitClause, Modifier)
662 NODE(OmpInReductionClause, Modifier)
664 NODE_ENUM(OmpInteropType, Value)
665 NODE(parser, OmpIteration)
668 NODE(parser, OmpIterator)
671 NODE(OmpLastprivateClause, Modifier)
673 NODE_ENUM(OmpLastprivateModifier, Value)
675 NODE(OmpLinearClause, Modifier)
677 NODE_ENUM(OmpLinearModifier, Value)
678 NODE(parser, OmpLocator)
680 NODE(parser, OmpLowerBound)
681 NODE(parser, OmpMapClause)
682 NODE(OmpMapClause, Modifier)
683 NODE(parser, OmpMapper)
685 NODE(parser, OmpMapType)
686 NODE_ENUM(OmpMapType, Value)
688 NODE_ENUM(OmpMapTypeModifier, Value)
692 NODE(parser, OmpNoOpenMPClause)
693 NODE(parser, OmpNoOpenMPRoutinesClause)
694 NODE(parser, OmpNoParallelismClause)
698 NODE(OmpNumTeamsClause, Modifier)
700 NODE(OmpNumThreadsClause, Modifier)
701 NODE(OmpNumTasksClause, Modifier)
702 NODE(parser, OmpObject)
703 NODE(OmpObject, Invalid)
704 NODE_ENUM(OmpObject::Invalid, Kind)
705 NODE(parser, OmpObjectList)
707 NODE(OmpOrderClause, Modifier)
708 NODE_ENUM(OmpOrderClause, Ordering)
710 NODE_ENUM(OmpOrderingModifier, Value)
712 NODE_ENUM(OmpOrderModifier, Value)
716 NODE(parser, OmpPreferType)
718 NODE_ENUM(OmpPrescriptiveness, Value)
720 NODE_ENUM(OmpPresentModifier, Value)
722 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
724 NODE(OmpReductionClause, Modifier)
727 NODE_ENUM(OmpReductionModifier, Value)
730 NODE_ENUM(OmpRefModifier, Value)
736 NODE(OmpScheduleClause, Modifier)
737 NODE_ENUM(OmpScheduleClause, Kind)
741 NODE_ENUM(OmpSelfModifier, Value)
743 NODE_ENUM(OmpSeverityClause, SevLevel)
749 NODE(OmpStylizedInstance, Instance)
752 NODE(OmpTaskReductionClause, Modifier)
754 NODE(OmpThreadLimitClause, Modifier)
757 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
758 NODE(parser, OmpToClause)
759 NODE(OmpToClause, Modifier)
762 NODE(OmpTraitPropertyExtension, Complex)
764 NODE(parser, OmpTraitScore)
766 NODE(OmpTraitSelector, Properties)
768 NODE_ENUM(OmpTraitSelectorName, Value)
771 NODE_ENUM(OmpTraitSetSelectorName, Value)
773 NODE(parser, OmpTypeName)
778 NODE(parser, OmpUseClause)
781 NODE_ENUM(OmpVariableCategory, Value)
782 NODE(parser, OmpWhenClause)
783 NODE(OmpWhenClause, Modifier)
785 NODE_ENUM(OmpxHoldModifier, Value)
786#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
787#include "llvm/Frontend/OpenMP/OMP.inc"
788
789 NODE(parser, Only)
803
820
821 NODE(parser, OpenStmt)
822 NODE(parser, Optional)
823 NODE(parser, OptionalStmt)
826 NODE(parser, OutputItem)
827 NODE(parser, Parameter)
828 NODE(parser, ParameterStmt)
830 NODE(parser, Pass)
831 NODE(parser, PauseStmt)
832 NODE(parser, Pointer)
834 NODE(PointerAssignmentStmt, Bounds)
835 NODE(parser, PointerDecl)
836 NODE(parser, PointerObject)
837 NODE(parser, PointerStmt)
839 NODE(parser, PrefixSpec)
840 NODE(PrefixSpec, Elemental)
841 NODE(PrefixSpec, Impure)
842 NODE(PrefixSpec, Module)
843 NODE(PrefixSpec, Non_Recursive)
844 NODE(PrefixSpec, Pure)
845 NODE(PrefixSpec, Recursive)
846 NODE(PrefixSpec, Simple)
847 NODE(PrefixSpec, Attributes)
848 NODE(PrefixSpec, Launch_Bounds)
849 NODE(PrefixSpec, Cluster_Dims)
850 NODE(parser, PrintStmt)
851 NODE(parser, PrivateStmt)
853 NODE(parser, ProcAttrSpec)
857 NODE(parser, ProcDecl)
858 NODE(parser, ProcInterface)
862 NODE(parser, ProcedureStmt)
863 NODE_ENUM(ProcedureStmt, Kind)
864 NODE(parser, Program)
865 NODE(parser, ProgramStmt)
866 NODE(parser, ProgramUnit)
867 NODE(parser, Protected)
868 NODE(parser, ProtectedStmt)
869 NODE(parser, RankClause)
870 NODE(parser, ReadStmt)
872 NODE(RealLiteralConstant, Real)
873 NODE(parser, Rename)
874 NODE(Rename, Names)
875 NODE(Rename, Operators)
876 NODE(parser, ReturnStmt)
877 NODE(parser, RewindStmt)
878 NODE(parser, Save)
879 NODE(parser, SaveStmt)
880 NODE(parser, SavedEntity)
881 NODE_ENUM(SavedEntity, Kind)
885 NODE(SelectRankCaseStmt, Rank)
887 NODE(SelectRankConstruct, RankCase)
890 NODE(SelectTypeConstruct, TypeCase)
892 NODE(parser, Selector)
894 NODE(parser, SequenceStmt)
895 NODE(parser, Sign)
900 NODE(parser, SpecificationExpr)
902 NODE(parser, Star)
903 NODE(parser, StatOrErrmsg)
904 NODE(parser, StatVariable)
905 NODE(parser, StatusExpr)
907 NODE(parser, StopCode)
908 NODE(parser, StopStmt)
909 NODE_ENUM(StopStmt, Kind)
912 NODE(parser, StructureDef)
913 NODE(StructureDef, EndStructureStmt)
915 NODE(parser, StructureStmt)
916 NODE(parser, Submodule)
917 NODE(parser, SubmoduleStmt)
921 NODE(parser, Substring)
924 NODE(parser, Suffix)
925 NODE(parser, SyncAllStmt)
927 NODE(SyncImagesStmt, ImageSet)
928 NODE(parser, SyncMemoryStmt)
929 NODE(parser, SyncTeamStmt)
930 NODE(parser, Target)
931 NODE(parser, TargetStmt)
932 NODE(parser, TypeAttrSpec)
933 NODE(TypeAttrSpec, BindC)
934 NODE(TypeAttrSpec, Extends)
940 NODE(TypeBoundProcedureStmt, WithInterface)
941 NODE(TypeBoundProcedureStmt, WithoutInterface)
943 NODE(parser, TypeGuardStmt)
944 NODE(TypeGuardStmt, Guard)
945 NODE(parser, TypeParamDecl)
947 NODE(common, TypeParamAttr)
948 NODE(parser, TypeParamSpec)
950 NODE(TypeParamValue, Deferred)
951 NODE(parser, TypeSpec)
952 NODE(parser, Union)
953 NODE(Union, EndUnionStmt)
954 NODE(Union, UnionStmt)
955 NODE(parser, UnlockStmt)
957 NODE(parser, UnsignedTypeSpec)
958 NODE(parser, UseStmt)
959 NODE_ENUM(UseStmt, ModuleNature)
960 NODE(parser, Value)
961 NODE(parser, ValueStmt)
962 NODE(parser, Variable)
964 NODE(VectorTypeSpec, PairVectorTypeSpec)
965 NODE(VectorTypeSpec, QuadVectorTypeSpec)
966 NODE(parser, IntrinsicVectorTypeSpec)
968 NODE(parser, Verbatim)
969 NODE(parser, Volatile)
970 NODE(parser, VolatileStmt)
971 NODE(parser, WaitSpec)
972 NODE(parser, WaitStmt)
975 NODE(WhereConstruct, Elsewhere)
976 NODE(WhereConstruct, MaskedElsewhere)
978 NODE(parser, WhereStmt)
979 NODE(parser, WriteStmt)
980#undef NODE
981#undef NODE_NAME
982
983 template <typename T> bool Pre(const T &x) {
984 std::string fortran{AsFortran<T>(x)};
985 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
986 Prefix(GetNodeName(x));
987 } else {
988 IndentEmptyLine();
989 out_ << GetNodeName(x);
990 if (!fortran.empty()) {
991 out_ << " = '" << fortran << '\'';
992 }
993 EndLine();
994 ++indent_;
995 }
996 return true;
997 }
998
999 template <typename T> void Post(const T &x) {
1000 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
1001 EndLineIfNonempty();
1002 } else {
1003 --indent_;
1004 }
1005 }
1006
1007 // A few types we want to ignore
1008
1009 bool Pre(const CharBlock &) { return true; }
1010 void Post(const CharBlock &) {}
1011
1012 template <typename T> bool Pre(const Statement<T> &) { return true; }
1013 template <typename T> void Post(const Statement<T> &) {}
1014 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
1015 template <typename T> void Post(const UnlabeledStatement<T> &) {}
1016
1017 template <typename T> bool Pre(const common::Indirection<T> &) {
1018 return true;
1019 }
1020 template <typename T> void Post(const common::Indirection<T> &) {}
1021
1022 template <typename A> bool Pre(const Scalar<A> &) {
1023 Prefix("Scalar");
1024 return true;
1025 }
1026 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1027
1028 template <typename A> bool Pre(const Constant<A> &) {
1029 Prefix("Constant");
1030 return true;
1031 }
1032 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1033
1034 template <typename A> bool Pre(const Integer<A> &) {
1035 Prefix("Integer");
1036 return true;
1037 }
1038 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1039
1040 template <typename A> bool Pre(const Logical<A> &) {
1041 Prefix("Logical");
1042 return true;
1043 }
1044 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1045
1046 template <typename A> bool Pre(const DefaultChar<A> &) {
1047 Prefix("DefaultChar");
1048 return true;
1049 }
1050 template <typename A> void Post(const DefaultChar<A> &) {
1051 EndLineIfNonempty();
1052 }
1053
1054 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1055 template <typename... A> void Post(const std::tuple<A...> &) {}
1056
1057 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1058 template <typename... A> void Post(const std::variant<A...> &) {}
1059
1060protected:
1061 // Return a Fortran representation of this node to include in the dump
1062 template <typename T> std::string AsFortran(const T &x) {
1063 std::string buf;
1064 llvm::raw_string_ostream ss{buf};
1065 if constexpr (HasTypedExpr<T>::value) {
1066 if (asFortran_ && x.typedExpr) {
1067 asFortran_->expr(ss, *x.typedExpr);
1068 }
1069 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1070 std::is_same_v<T, PointerAssignmentStmt>) {
1071 if (asFortran_ && x.typedAssignment) {
1072 asFortran_->assignment(ss, *x.typedAssignment);
1073 }
1074 } else if constexpr (std::is_same_v<T, CallStmt>) {
1075 if (asFortran_ && x.typedCall) {
1076 asFortran_->call(ss, *x.typedCall);
1077 }
1078 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1079 std::is_same_v<T, SignedIntLiteralConstant> ||
1080 std::is_same_v<T, UnsignedLiteralConstant>) {
1081 ss << std::get<CharBlock>(x.t);
1082 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1083 ss << x.source;
1084 } else if constexpr (std::is_same_v<T, std::string> ||
1085 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1086 ss << x;
1087 }
1088 if (ss.tell()) {
1089 return buf;
1090 }
1091 if constexpr (std::is_same_v<T, Name>) {
1092 return x.source.ToString();
1093#ifdef SHOW_ALL_SOURCE_MEMBERS
1094 } else if constexpr (HasSource<T>::value) {
1095 return x.source.ToString();
1096#endif
1097 } else if constexpr (std::is_same_v<T, int>) {
1098 return std::to_string(x);
1099 } else if constexpr (std::is_same_v<T, bool>) {
1100 return x ? "true" : "false";
1101 } else {
1102 return "";
1103 }
1104 }
1105
1106 void IndentEmptyLine() {
1107 if (emptyline_ && indent_ > 0) {
1108 for (int i{0}; i < indent_; ++i) {
1109 out_ << "| ";
1110 }
1111 emptyline_ = false;
1112 }
1113 }
1114
1115 void Prefix(const char *str) {
1116 IndentEmptyLine();
1117 out_ << str << " -> ";
1118 emptyline_ = false;
1119 }
1120
1121 void Prefix(const std::string &str) {
1122 IndentEmptyLine();
1123 out_ << str << " -> ";
1124 emptyline_ = false;
1125 }
1126
1127 void EndLine() {
1128 out_ << '\n';
1129 emptyline_ = true;
1130 }
1131
1132 void EndLineIfNonempty() {
1133 if (!emptyline_) {
1134 EndLine();
1135 }
1136 }
1137
1138private:
1139 int indent_{0};
1140 llvm::raw_ostream &out_;
1141 const AnalyzedObjectsAsFortran *const asFortran_;
1142 bool emptyline_{false};
1143};
1144
1145template <typename T>
1146llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1147 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1148 ParseTreeDumper dumper{out, asFortran};
1149 Walk(x, dumper);
1150 return out;
1151}
1152
1153} // namespace Fortran::parser
1154#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition enum-set.h:28
Definition indirection.h:31
Definition char-block.h:26
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:1309
Definition parse-tree.h:1316
Definition parse-tree.h:1280
Definition parse-tree.h:1268
Definition parse-tree.h:5778
Definition parse-tree.h:5754
Definition parse-tree.h:5770
Definition parse-tree.h:5762
Definition parse-tree.h:5739
Definition parse-tree.h:5803
Definition parse-tree.h:5733
Definition parse-tree.h:5609
Definition parse-tree.h:5582
Definition parse-tree.h:5710
Definition parse-tree.h:5695
Definition parse-tree.h:5690
Definition parse-tree.h:5598
Definition parse-tree.h:5620
Definition parse-tree.h:5603
Definition parse-tree.h:5615
Definition parse-tree.h:5647
Definition parse-tree.h:5641
Definition parse-tree.h:5745
Definition parse-tree.h:5809
Definition parse-tree.h:5686
Definition parse-tree.h:5677
Definition parse-tree.h:5587
Definition parse-tree.h:5626
Definition parse-tree.h:5574
Definition parse-tree.h:5670
Definition parse-tree.h:5666
Definition parse-tree.h:5662
Definition parse-tree.h:5592
Definition parse-tree.h:5658
Definition parse-tree.h:5652
Definition parse-tree.h:5636
Definition parse-tree.h:902
Definition parse-tree.h:1446
Definition parse-tree.h:500
Definition parse-tree.h:3319
Definition parse-tree.h:3308
Definition parse-tree.h:2008
Definition parse-tree.h:1973
Definition parse-tree.h:1952
Definition parse-tree.h:1964
Definition parse-tree.h:2019
Definition parse-tree.h:1981
Definition parse-tree.h:3541
Definition parse-tree.h:1938
Definition parse-tree.h:1371
Definition parse-tree.h:3546
Definition parse-tree.h:3551
Definition parse-tree.h:2045
Definition parse-tree.h:2200
Definition parse-tree.h:2191
Definition parse-tree.h:2184
Definition parse-tree.h:1346
Definition parse-tree.h:1407
Definition parse-tree.h:3491
Definition parse-tree.h:1120
Definition parse-tree.h:1468
Definition parse-tree.h:1475
Definition parse-tree.h:2222
Definition parse-tree.h:3061
Definition parse-tree.h:2055
Definition parse-tree.h:3485
Definition parse-tree.h:5879
Definition parse-tree.h:5873
Definition parse-tree.h:3343
Definition parse-tree.h:3326
Definition parse-tree.h:2463
Definition parse-tree.h:2445
Definition parse-tree.h:2451
Definition parse-tree.h:2432
Definition parse-tree.h:2253
Definition parse-tree.h:2238
Definition parse-tree.h:674
Definition parse-tree.h:861
Definition parse-tree.h:690
Definition parse-tree.h:2722
Definition parse-tree.h:2230
Definition parse-tree.h:977
Definition parse-tree.h:1481
Definition parse-tree.h:1932
Definition parse-tree.h:1648
Definition parse-tree.h:1656
Definition parse-tree.h:3430
Definition parse-tree.h:847
Definition parse-tree.h:839
Definition parse-tree.h:988
Definition parse-tree.h:1001
Definition parse-tree.h:1032
Definition parse-tree.h:1109
Definition parse-tree.h:1054
Definition parse-tree.h:1204
Definition parse-tree.h:2550
Definition parse-tree.h:2278
Definition parse-tree.h:2287
Definition parse-tree.h:3300
Definition parse-tree.h:3287
Definition parse-tree.h:1727
Definition parse-tree.h:2700
Definition parse-tree.h:2698
Definition parse-tree.h:305
Definition parse-tree.h:2269
Definition parse-tree.h:2260
Definition parse-tree.h:1062
Definition parse-tree.h:1538
Definition parse-tree.h:1550
Definition parse-tree.h:1848
Definition parse-tree.h:1509
Definition parse-tree.h:1558
Definition parse-tree.h:1524
Definition parse-tree.h:1564
Definition parse-tree.h:1530
Definition parse-tree.h:2039
Definition parse-tree.h:441
Definition parse-tree.h:769
Definition parse-tree.h:329
Definition parse-tree.h:616
Definition parse-tree.h:1189
Definition parse-tree.h:750
Definition parse-tree.h:919
Definition parse-tree.h:1887
Definition parse-tree.h:1575
Definition parse-tree.h:2365
Definition parse-tree.h:3192
Definition parse-tree.h:2385
Definition parse-tree.h:2247
Definition parse-tree.h:1422
Definition parse-tree.h:3397
Definition parse-tree.h:1233
Definition parse-tree.h:1259
Definition parse-tree.h:1242
Definition parse-tree.h:1219
Definition parse-tree.h:2604
Definition parse-tree.h:2610
Definition parse-tree.h:2618
Definition parse-tree.h:533
Definition parse-tree.h:558
Definition parse-tree.h:971
Definition parse-tree.h:1366
Definition parse-tree.h:958
Definition parse-tree.h:1735
Definition parse-tree.h:1048
Definition parse-tree.h:2141
Definition parse-tree.h:2157
Definition parse-tree.h:2135
Definition parse-tree.h:2170
Definition parse-tree.h:2147
Definition parse-tree.h:2630
Definition parse-tree.h:2734
Definition parse-tree.h:3331
Definition parse-tree.h:3181
Definition parse-tree.h:3363
Definition parse-tree.h:3074
Definition parse-tree.h:3089
Definition tools.h:135
Definition tools.h:141
Definition parse-tree.h:2399
Definition parse-tree.h:2415
Definition parse-tree.h:2378
Definition parse-tree.h:1708
Definition parse-tree.h:1718
Definition parse-tree.h:423
Definition parse-tree.h:1632
Definition parse-tree.h:1641
Definition parse-tree.h:629
Definition parse-tree.h:1019
Definition parse-tree.h:2833
Definition parse-tree.h:2777
Definition parse-tree.h:2921
Definition parse-tree.h:2930
Definition parse-tree.h:2935
Definition parse-tree.h:2919
Definition parse-tree.h:2948
Definition parse-tree.h:797
Definition parse-tree.h:313
Definition parse-tree.h:1380
Definition parse-tree.h:1584
Definition parse-tree.h:3255
Definition parse-tree.h:3213
Definition parse-tree.h:3242
Definition parse-tree.h:3095
Definition parse-tree.h:479
Definition parse-tree.h:467
Definition parse-tree.h:708
Definition parse-tree.h:2760
Definition parse-tree.h:2758
Definition parse-tree.h:2669
Definition parse-tree.h:784
Definition parse-tree.h:662
Definition parse-tree.h:2342
Definition parse-tree.h:1325
Definition parse-tree.h:680
Definition parse-tree.h:1626
Definition parse-tree.h:893
Definition parse-tree.h:2310
Definition parse-tree.h:2644
Definition parse-tree.h:875
Definition parse-tree.h:321
Definition parse-tree.h:2330
Definition parse-tree.h:2969
Definition parse-tree.h:3507
Definition parse-tree.h:2102
Definition parse-tree.h:2994
Definition parse-tree.h:2983
Definition parse-tree.h:3005
Definition parse-tree.h:591
Definition parse-tree.h:1331
Definition parse-tree.h:642
Definition parse-tree.h:2348
Definition parse-tree.h:2572
Definition parse-tree.h:1455
Definition parse-tree.h:4391
Definition parse-tree.h:4395
Definition parse-tree.h:4410
Definition parse-tree.h:4417
Definition parse-tree.h:4425
Definition parse-tree.h:4440
Definition parse-tree.h:5397
Definition parse-tree.h:4447
Definition parse-tree.h:4510
Definition parse-tree.h:5255
Definition parse-tree.h:5244
Definition parse-tree.h:4456
Definition parse-tree.h:5186
Definition parse-tree.h:5261
Definition parse-tree.h:4479
Definition parse-tree.h:5196
Definition parse-tree.h:5155
Definition parse-tree.h:5139
Definition parse-tree.h:4494
Definition parse-tree.h:3686
Definition parse-tree.h:4502
Definition parse-tree.h:5324
Definition parse-tree.h:5341
Definition parse-tree.h:5316
Definition parse-tree.h:4529
Definition parse-tree.h:4547
Definition parse-tree.h:4606
Definition parse-tree.h:4604
Definition parse-tree.h:4628
Definition parse-tree.h:4636
Definition parse-tree.h:4646
Definition parse-tree.h:4656
Definition parse-tree.h:4664
Definition parse-tree.h:3577
Definition parse-tree.h:5162
Definition parse-tree.h:4619
Definition parse-tree.h:4586
Definition parse-tree.h:4679
Definition parse-tree.h:5191
Definition parse-tree.h:5266
Definition parse-tree.h:4690
Definition parse-tree.h:5229
Definition parse-tree.h:4698
Definition parse-tree.h:4711
Definition parse-tree.h:4722
Definition parse-tree.h:4732
Definition parse-tree.h:4740
Definition parse-tree.h:5350
Definition parse-tree.h:4745
Definition parse-tree.h:4753
Definition parse-tree.h:4769
Definition parse-tree.h:4792
Definition parse-tree.h:4758
Definition parse-tree.h:4782
Definition parse-tree.h:4799
Definition parse-tree.h:3698
Definition parse-tree.h:4559
Definition parse-tree.h:4577
Definition parse-tree.h:4568
Definition parse-tree.h:4808
Definition parse-tree.h:4823
Definition parse-tree.h:3611
Definition parse-tree.h:4834
Definition parse-tree.h:4859
Definition parse-tree.h:4871
Definition parse-tree.h:4880
Definition parse-tree.h:5209
Definition parse-tree.h:5223
Definition parse-tree.h:4904
Definition parse-tree.h:4916
Definition parse-tree.h:4928
Definition parse-tree.h:3632
Definition parse-tree.h:3623
Definition parse-tree.h:3620
Definition parse-tree.h:4939
Definition parse-tree.h:4952
Definition parse-tree.h:4964
Definition parse-tree.h:4975
Definition parse-tree.h:3676
Definition parse-tree.h:4985
Definition parse-tree.h:5357
Definition parse-tree.h:3606
Definition parse-tree.h:4994
Definition parse-tree.h:5006
Definition parse-tree.h:5275
Definition parse-tree.h:5017
Definition parse-tree.h:5024
Definition parse-tree.h:3636
Definition parse-tree.h:3658
Definition parse-tree.h:3645
Definition parse-tree.h:5033
Definition parse-tree.h:5044
Definition parse-tree.h:5363
Definition parse-tree.h:5053
Definition parse-tree.h:5068
Definition parse-tree.h:5078
Definition parse-tree.h:3602
Definition parse-tree.h:3595
Definition parse-tree.h:5087
Definition parse-tree.h:5112
Definition parse-tree.h:5134
Definition parse-tree.h:5233
Definition parse-tree.h:5123
Definition parse-tree.h:3105
Definition parse-tree.h:5785
Definition parse-tree.h:5792
Definition parse-tree.h:5721
Definition parse-tree.h:5814
Definition parse-tree.h:5853
Definition parse-tree.h:5842
Definition parse-tree.h:5833
Definition parse-tree.h:5715
Definition parse-tree.h:5727
Definition parse-tree.h:5423
Definition parse-tree.h:5428
Definition parse-tree.h:5465
Definition parse-tree.h:5549
Definition parse-tree.h:5413
Definition parse-tree.h:5476
Definition parse-tree.h:5490
Definition parse-tree.h:5506
Definition parse-tree.h:5514
Definition parse-tree.h:5567
Definition parse-tree.h:5535
Definition parse-tree.h:5281
Definition parse-tree.h:5525
Definition parse-tree.h:378
Definition parse-tree.h:2838
Definition parse-tree.h:2801
Definition parse-tree.h:3030
Definition parse-tree.h:2067
Definition parse-tree.h:1594
Definition parse-tree.h:2028
Definition parse-tree.h:2864
Definition parse-tree.h:3150
Definition parse-tree.h:2822
Definition parse-tree.h:932
Definition parse-tree.h:3128
Definition parse-tree.h:1073
Definition parse-tree.h:1101
Definition parse-tree.h:1927
Definition parse-tree.h:1093
Definition parse-tree.h:1087
Definition parse-tree.h:1080
Definition parse-tree.h:3138
Definition parse-tree.h:3270
Definition parse-tree.h:3231
Definition parse-tree.h:575
Definition parse-tree.h:2785
Definition parse-tree.h:816
Definition parse-tree.h:2299
Definition parse-tree.h:3016
Definition parse-tree.h:1607
Definition parse-tree.h:297
Definition parse-tree.h:1693
Definition parse-tree.h:2422
Definition parse-tree.h:2486
Definition parse-tree.h:2498
Definition parse-tree.h:2477
Definition parse-tree.h:2532
Definition parse-tree.h:2512
Definition parse-tree.h:2178
Definition parse-tree.h:3389
Definition parse-tree.h:401
Definition parse-tree.h:455
Definition parse-tree.h:1997
Definition parse-tree.h:361
Definition parse-tree.h:3407
Definition parse-tree.h:2564
Definition parse-tree.h:1917
Definition parse-tree.h:1210
Definition parse-tree.h:3528
Definition parse-tree.h:3500
Definition parse-tree.h:3523
Definition parse-tree.h:3036
Definition parse-tree.h:3047
Definition parse-tree.h:3200
Definition parse-tree.h:3373
Definition parse-tree.h:1684
Definition parse-tree.h:1879
Definition parse-tree.h:1675
Definition parse-tree.h:1865
Definition parse-tree.h:3170
Definition parse-tree.h:2582
Definition parse-tree.h:2595
Definition parse-tree.h:910
Definition parse-tree.h:1153
Definition parse-tree.h:1166
Definition parse-tree.h:1128
Definition parse-tree.h:1175
Definition parse-tree.h:1138
Definition parse-tree.h:1436
Definition parse-tree.h:2521
Definition parse-tree.h:938
Definition parse-tree.h:946
Definition parse-tree.h:744
Definition parse-tree.h:653
Definition parse-tree.h:757
Definition parse-tree.h:3516
Definition parse-tree.h:356
Definition parse-tree.h:2654
Definition parse-tree.h:803
Definition parse-tree.h:3114
Definition parse-tree.h:1895
Definition parse-tree.h:730
Definition parse-tree.h:735
Definition parse-tree.h:284
Definition parse-tree.h:2848
Definition parse-tree.h:2093
Definition parse-tree.h:2086
Definition parse-tree.h:2117
Definition parse-tree.h:2080
Definition parse-tree.h:2807
Definition parse-tree.h:3751
Definition parse-tree.h:3742
Definition parse-tree.h:3712
Definition parse-tree.h:3722
Definition parse-tree.h:3735
Definition parse-tree.h:3906
Definition parse-tree.h:3923
Definition parse-tree.h:3915
Definition parse-tree.h:3951
Definition parse-tree.h:3963
Definition parse-tree.h:3973
Definition parse-tree.h:3984
Definition parse-tree.h:3997
Definition parse-tree.h:4009
Definition parse-tree.h:4030
Definition parse-tree.h:4041
Definition parse-tree.h:4051
Definition parse-tree.h:4060
Definition parse-tree.h:4092
Definition parse-tree.h:4103
Definition parse-tree.h:4114
Definition parse-tree.h:4126
Definition parse-tree.h:4136
Definition parse-tree.h:4144
Definition parse-tree.h:4153
Definition parse-tree.h:4168
Definition parse-tree.h:4180
Definition parse-tree.h:4214
Definition parse-tree.h:4201
Definition parse-tree.h:4188
Definition parse-tree.h:4238
Definition parse-tree.h:4229
Definition parse-tree.h:4272
Definition parse-tree.h:4248
Definition parse-tree.h:4281
Definition parse-tree.h:4294
Definition parse-tree.h:4303
Definition parse-tree.h:4313
Definition parse-tree.h:4323
Definition parse-tree.h:4332
Definition parse-tree.h:4340
Definition parse-tree.h:4350
Definition parse-tree.h:4361
Definition parse-tree.h:4374
Definition parse-tree.h:3789
Definition parse-tree.h:3772
Definition parse-tree.h:3813
Definition parse-tree.h:3779
Definition parse-tree.h:3840
Definition parse-tree.h:3852
Definition parse-tree.h:3865
Definition parse-tree.h:3874