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)
559 NODE(parser, OmpArgument)
563 NODE(parser, OmpAtClause)
564 NODE_ENUM(OmpAtClause, ActionTime)
567 NODE_ENUM(OmpAttachModifier, Value)
569 NODE_ENUM(OmpAutomapModifier, Value)
573 NODE(parser, OmpBindClause)
574 NODE_ENUM(OmpBindClause, Binding)
578 NODE_ENUM(OmpChunkModifier, Value)
579 NODE(parser, OmpClause)
580 NODE(parser, OmpClauseList)
582 NODE_ENUM(OmpCloseModifier, Value)
593 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
595 NODE(OmpDefaultmapClause, Modifier)
596 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
598 NODE_ENUM(OmpDeleteModifier, Value)
601 NODE(OmpDependClause, TaskDep)
602 NODE(OmpDependClause::TaskDep, Modifier)
604 NODE_ENUM(OmpDependenceType, Value)
609 NODE(OmpDeviceClause, Modifier)
611 NODE_ENUM(OmpDeviceModifier, Value)
617 NODE_ENUM(OmpDirectiveSpecification, Flag)
618 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
619 NODE(parser, OmpDoacross)
620 NODE(OmpDoacross, Sink)
621 NODE(OmpDoacross, Source)
625 NODE(OmpDynGroupprivateClause, Modifier)
629 NODE(OmpEnterClause, Modifier)
632 NODE_ENUM(OmpExpectation, Value)
633 NODE(parser, OmpFailClause)
635 NODE_ENUM(OmpFallbackModifier, Value)
636 NODE(parser, OmpFromClause)
637 NODE(OmpFromClause, Modifier)
639 NODE(OmpGrainsizeClause, Modifier)
643 NODE(parser, OmpHintClause)
645 NODE(parser, OmpIfClause)
646 NODE(OmpIfClause, Modifier)
648 NODE(parser, OmpInitClause)
649 NODE(OmpInitClause, Modifier)
653 NODE(OmpInReductionClause, Modifier)
655 NODE_ENUM(OmpInteropType, Value)
656 NODE(parser, OmpIteration)
659 NODE(parser, OmpIterator)
662 NODE(OmpLastprivateClause, Modifier)
664 NODE_ENUM(OmpLastprivateModifier, Value)
666 NODE(OmpLinearClause, Modifier)
668 NODE_ENUM(OmpLinearModifier, Value)
669 NODE(parser, OmpLocator)
672 NODE(parser, OmpLowerBound)
673 NODE(parser, OmpMapClause)
674 NODE(OmpMapClause, Modifier)
675 NODE(parser, OmpMapper)
677 NODE(parser, OmpMapType)
678 NODE_ENUM(OmpMapType, Value)
680 NODE_ENUM(OmpMapTypeModifier, Value)
684 NODE(parser, OmpNoOpenMPClause)
685 NODE(parser, OmpNoOpenMPRoutinesClause)
686 NODE(parser, OmpNoParallelismClause)
690 NODE(OmpNumTeamsClause, Modifier)
692 NODE(OmpNumThreadsClause, Modifier)
693 NODE(OmpNumTasksClause, Modifier)
694 NODE(parser, OmpObject)
695 NODE(OmpObject, Invalid)
696 NODE_ENUM(OmpObject::Invalid, Kind)
697 NODE(parser, OmpObjectList)
699 NODE(OmpOrderClause, Modifier)
700 NODE_ENUM(OmpOrderClause, Ordering)
702 NODE_ENUM(OmpOrderingModifier, Value)
704 NODE_ENUM(OmpOrderModifier, Value)
708 NODE(parser, OmpPreferType)
710 NODE_ENUM(OmpPrescriptiveness, Value)
712 NODE_ENUM(OmpPresentModifier, Value)
714 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
716 NODE(OmpReductionClause, Modifier)
719 NODE_ENUM(OmpReductionModifier, Value)
722 NODE_ENUM(OmpRefModifier, Value)
727 NODE(OmpScheduleClause, Modifier)
728 NODE_ENUM(OmpScheduleClause, Kind)
732 NODE_ENUM(OmpSelfModifier, Value)
734 NODE_ENUM(OmpSeverityClause, SevLevel)
740 NODE(OmpStylizedInstance, Instance)
743 NODE(OmpTaskReductionClause, Modifier)
745 NODE(OmpThreadLimitClause, Modifier)
748 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
749 NODE(parser, OmpToClause)
750 NODE(OmpToClause, Modifier)
753 NODE(OmpTraitPropertyExtension, Complex)
755 NODE(parser, OmpTraitScore)
757 NODE(OmpTraitSelector, Properties)
759 NODE_ENUM(OmpTraitSelectorName, Value)
762 NODE_ENUM(OmpTraitSetSelectorName, Value)
764 NODE(parser, OmpTypeName)
769 NODE(parser, OmpUseClause)
772 NODE_ENUM(OmpVariableCategory, Value)
773 NODE(parser, OmpWhenClause)
774 NODE(OmpWhenClause, Modifier)
776 NODE_ENUM(OmpxHoldModifier, Value)
777#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
778#include "llvm/Frontend/OpenMP/OMP.inc"
779
780 NODE(parser, Only)
794
811
812 NODE(parser, OpenStmt)
813 NODE(parser, Optional)
814 NODE(parser, OptionalStmt)
817 NODE(parser, OutputItem)
818 NODE(parser, Parameter)
819 NODE(parser, ParameterStmt)
821 NODE(parser, Pass)
822 NODE(parser, PauseStmt)
823 NODE(parser, Pointer)
825 NODE(PointerAssignmentStmt, Bounds)
826 NODE(parser, PointerDecl)
827 NODE(parser, PointerObject)
828 NODE(parser, PointerStmt)
830 NODE(parser, PrefixSpec)
831 NODE(PrefixSpec, Elemental)
832 NODE(PrefixSpec, Impure)
833 NODE(PrefixSpec, Module)
834 NODE(PrefixSpec, Non_Recursive)
835 NODE(PrefixSpec, Pure)
836 NODE(PrefixSpec, Recursive)
837 NODE(PrefixSpec, Simple)
838 NODE(PrefixSpec, Attributes)
839 NODE(PrefixSpec, Launch_Bounds)
840 NODE(PrefixSpec, Cluster_Dims)
841 NODE(parser, PrintStmt)
842 NODE(parser, PrivateStmt)
844 NODE(parser, ProcAttrSpec)
848 NODE(parser, ProcDecl)
849 NODE(parser, ProcInterface)
853 NODE(parser, ProcedureStmt)
854 NODE_ENUM(ProcedureStmt, Kind)
855 NODE(parser, Program)
856 NODE(parser, ProgramStmt)
857 NODE(parser, ProgramUnit)
858 NODE(parser, Protected)
859 NODE(parser, ProtectedStmt)
860 NODE(parser, RankClause)
861 NODE(parser, ReadStmt)
863 NODE(RealLiteralConstant, Real)
864 NODE(parser, Rename)
865 NODE(Rename, Names)
866 NODE(Rename, Operators)
867 NODE(parser, ReturnStmt)
868 NODE(parser, RewindStmt)
869 NODE(parser, Save)
870 NODE(parser, SaveStmt)
871 NODE(parser, SavedEntity)
872 NODE_ENUM(SavedEntity, Kind)
876 NODE(SelectRankCaseStmt, Rank)
878 NODE(SelectRankConstruct, RankCase)
881 NODE(SelectTypeConstruct, TypeCase)
883 NODE(parser, Selector)
885 NODE(parser, SequenceStmt)
886 NODE(parser, Sign)
891 NODE(parser, SpecificationExpr)
893 NODE(parser, Star)
894 NODE(parser, StatOrErrmsg)
895 NODE(parser, StatVariable)
896 NODE(parser, StatusExpr)
898 NODE(parser, StopCode)
899 NODE(parser, StopStmt)
900 NODE_ENUM(StopStmt, Kind)
903 NODE(parser, StructureDef)
904 NODE(StructureDef, EndStructureStmt)
906 NODE(parser, StructureStmt)
907 NODE(parser, Submodule)
908 NODE(parser, SubmoduleStmt)
912 NODE(parser, Substring)
915 NODE(parser, Suffix)
916 NODE(parser, SyncAllStmt)
918 NODE(SyncImagesStmt, ImageSet)
919 NODE(parser, SyncMemoryStmt)
920 NODE(parser, SyncTeamStmt)
921 NODE(parser, Target)
922 NODE(parser, TargetStmt)
923 NODE(parser, TypeAttrSpec)
924 NODE(TypeAttrSpec, BindC)
925 NODE(TypeAttrSpec, Extends)
931 NODE(TypeBoundProcedureStmt, WithInterface)
932 NODE(TypeBoundProcedureStmt, WithoutInterface)
934 NODE(parser, TypeGuardStmt)
935 NODE(TypeGuardStmt, Guard)
936 NODE(parser, TypeParamDecl)
938 NODE(common, TypeParamAttr)
939 NODE(parser, TypeParamSpec)
941 NODE(TypeParamValue, Deferred)
942 NODE(parser, TypeSpec)
943 NODE(parser, Union)
944 NODE(Union, EndUnionStmt)
945 NODE(Union, UnionStmt)
946 NODE(parser, UnlockStmt)
948 NODE(parser, UnsignedTypeSpec)
949 NODE(parser, UseStmt)
950 NODE_ENUM(UseStmt, ModuleNature)
951 NODE(parser, Value)
952 NODE(parser, ValueStmt)
953 NODE(parser, Variable)
955 NODE(VectorTypeSpec, PairVectorTypeSpec)
956 NODE(VectorTypeSpec, QuadVectorTypeSpec)
957 NODE(parser, IntrinsicVectorTypeSpec)
959 NODE(parser, Verbatim)
960 NODE(parser, Volatile)
961 NODE(parser, VolatileStmt)
962 NODE(parser, WaitSpec)
963 NODE(parser, WaitStmt)
966 NODE(WhereConstruct, Elsewhere)
967 NODE(WhereConstruct, MaskedElsewhere)
969 NODE(parser, WhereStmt)
970 NODE(parser, WriteStmt)
971#undef NODE
972#undef NODE_NAME
973
974 template <typename T> bool Pre(const T &x) {
975 std::string fortran{AsFortran<T>(x)};
976 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
977 Prefix(GetNodeName(x));
978 } else {
979 IndentEmptyLine();
980 out_ << GetNodeName(x);
981 if (!fortran.empty()) {
982 out_ << " = '" << fortran << '\'';
983 }
984 EndLine();
985 ++indent_;
986 }
987 return true;
988 }
989
990 template <typename T> void Post(const T &x) {
991 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
992 EndLineIfNonempty();
993 } else {
994 --indent_;
995 }
996 }
997
998 // A few types we want to ignore
999
1000 bool Pre(const CharBlock &) { return true; }
1001 void Post(const CharBlock &) {}
1002
1003 template <typename T> bool Pre(const Statement<T> &) { return true; }
1004 template <typename T> void Post(const Statement<T> &) {}
1005 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
1006 template <typename T> void Post(const UnlabeledStatement<T> &) {}
1007
1008 template <typename T> bool Pre(const common::Indirection<T> &) {
1009 return true;
1010 }
1011 template <typename T> void Post(const common::Indirection<T> &) {}
1012
1013 template <typename A> bool Pre(const Scalar<A> &) {
1014 Prefix("Scalar");
1015 return true;
1016 }
1017 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1018
1019 template <typename A> bool Pre(const Constant<A> &) {
1020 Prefix("Constant");
1021 return true;
1022 }
1023 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1024
1025 template <typename A> bool Pre(const Integer<A> &) {
1026 Prefix("Integer");
1027 return true;
1028 }
1029 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1030
1031 template <typename A> bool Pre(const Logical<A> &) {
1032 Prefix("Logical");
1033 return true;
1034 }
1035 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1036
1037 template <typename A> bool Pre(const DefaultChar<A> &) {
1038 Prefix("DefaultChar");
1039 return true;
1040 }
1041 template <typename A> void Post(const DefaultChar<A> &) {
1042 EndLineIfNonempty();
1043 }
1044
1045 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1046 template <typename... A> void Post(const std::tuple<A...> &) {}
1047
1048 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1049 template <typename... A> void Post(const std::variant<A...> &) {}
1050
1051protected:
1052 // Return a Fortran representation of this node to include in the dump
1053 template <typename T> std::string AsFortran(const T &x) {
1054 std::string buf;
1055 llvm::raw_string_ostream ss{buf};
1056 if constexpr (HasTypedExpr<T>::value) {
1057 if (asFortran_ && x.typedExpr) {
1058 asFortran_->expr(ss, *x.typedExpr);
1059 }
1060 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1061 std::is_same_v<T, PointerAssignmentStmt>) {
1062 if (asFortran_ && x.typedAssignment) {
1063 asFortran_->assignment(ss, *x.typedAssignment);
1064 }
1065 } else if constexpr (std::is_same_v<T, CallStmt>) {
1066 if (asFortran_ && x.typedCall) {
1067 asFortran_->call(ss, *x.typedCall);
1068 }
1069 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1070 std::is_same_v<T, SignedIntLiteralConstant> ||
1071 std::is_same_v<T, UnsignedLiteralConstant>) {
1072 ss << std::get<CharBlock>(x.t);
1073 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1074 ss << x.source;
1075 } else if constexpr (std::is_same_v<T, std::string> ||
1076 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1077 ss << x;
1078 }
1079 if (ss.tell()) {
1080 return buf;
1081 }
1082 if constexpr (std::is_same_v<T, Name>) {
1083 return x.source.ToString();
1084#ifdef SHOW_ALL_SOURCE_MEMBERS
1085 } else if constexpr (HasSource<T>::value) {
1086 return x.source.ToString();
1087#endif
1088 } else if constexpr (std::is_same_v<T, int>) {
1089 return std::to_string(x);
1090 } else if constexpr (std::is_same_v<T, bool>) {
1091 return x ? "true" : "false";
1092 } else {
1093 return "";
1094 }
1095 }
1096
1097 void IndentEmptyLine() {
1098 if (emptyline_ && indent_ > 0) {
1099 for (int i{0}; i < indent_; ++i) {
1100 out_ << "| ";
1101 }
1102 emptyline_ = false;
1103 }
1104 }
1105
1106 void Prefix(const char *str) {
1107 IndentEmptyLine();
1108 out_ << str << " -> ";
1109 emptyline_ = false;
1110 }
1111
1112 void Prefix(const std::string &str) {
1113 IndentEmptyLine();
1114 out_ << str << " -> ";
1115 emptyline_ = false;
1116 }
1117
1118 void EndLine() {
1119 out_ << '\n';
1120 emptyline_ = true;
1121 }
1122
1123 void EndLineIfNonempty() {
1124 if (!emptyline_) {
1125 EndLine();
1126 }
1127 }
1128
1129private:
1130 int indent_{0};
1131 llvm::raw_ostream &out_;
1132 const AnalyzedObjectsAsFortran *const asFortran_;
1133 bool emptyline_{false};
1134};
1135
1136template <typename T>
1137llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1138 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1139 ParseTreeDumper dumper{out, asFortran};
1140 Walk(x, dumper);
1141 return out;
1142}
1143
1144} // namespace Fortran::parser
1145#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:1281
Definition parse-tree.h:1269
Definition parse-tree.h:5745
Definition parse-tree.h:5721
Definition parse-tree.h:5737
Definition parse-tree.h:5729
Definition parse-tree.h:5706
Definition parse-tree.h:5770
Definition parse-tree.h:5700
Definition parse-tree.h:5576
Definition parse-tree.h:5549
Definition parse-tree.h:5677
Definition parse-tree.h:5662
Definition parse-tree.h:5657
Definition parse-tree.h:5565
Definition parse-tree.h:5587
Definition parse-tree.h:5570
Definition parse-tree.h:5582
Definition parse-tree.h:5614
Definition parse-tree.h:5608
Definition parse-tree.h:5712
Definition parse-tree.h:5776
Definition parse-tree.h:5653
Definition parse-tree.h:5644
Definition parse-tree.h:5554
Definition parse-tree.h:5593
Definition parse-tree.h:5541
Definition parse-tree.h:5637
Definition parse-tree.h:5633
Definition parse-tree.h:5629
Definition parse-tree.h:5559
Definition parse-tree.h:5625
Definition parse-tree.h:5619
Definition parse-tree.h:5603
Definition parse-tree.h:903
Definition parse-tree.h:1447
Definition parse-tree.h:501
Definition parse-tree.h:3315
Definition parse-tree.h:3304
Definition parse-tree.h:2009
Definition parse-tree.h:1974
Definition parse-tree.h:1953
Definition parse-tree.h:1965
Definition parse-tree.h:2020
Definition parse-tree.h:1982
Definition parse-tree.h:3537
Definition parse-tree.h:1939
Definition parse-tree.h:1372
Definition parse-tree.h:3542
Definition parse-tree.h:3547
Definition parse-tree.h:2046
Definition parse-tree.h:2201
Definition parse-tree.h:2192
Definition parse-tree.h:2185
Definition parse-tree.h:1347
Definition parse-tree.h:1408
Definition parse-tree.h:3487
Definition parse-tree.h:1121
Definition parse-tree.h:1469
Definition parse-tree.h:1476
Definition parse-tree.h:2223
Definition parse-tree.h:3061
Definition parse-tree.h:2056
Definition parse-tree.h:3481
Definition parse-tree.h:5846
Definition parse-tree.h:5840
Definition parse-tree.h:3339
Definition parse-tree.h:3322
Definition parse-tree.h:2464
Definition parse-tree.h:2446
Definition parse-tree.h:2452
Definition parse-tree.h:2433
Definition parse-tree.h:2254
Definition parse-tree.h:2239
Definition parse-tree.h:675
Definition parse-tree.h:862
Definition parse-tree.h:691
Definition parse-tree.h:2723
Definition parse-tree.h:2231
Definition parse-tree.h:978
Definition parse-tree.h:1482
Definition parse-tree.h:1933
Definition parse-tree.h:1649
Definition parse-tree.h:1657
Definition parse-tree.h:3426
Definition parse-tree.h:848
Definition parse-tree.h:840
Definition parse-tree.h:989
Definition parse-tree.h:1002
Definition parse-tree.h:1033
Definition parse-tree.h:1110
Definition parse-tree.h:1055
Definition parse-tree.h:1205
Definition parse-tree.h:2551
Definition parse-tree.h:2279
Definition parse-tree.h:2288
Definition parse-tree.h:3296
Definition parse-tree.h:3283
Definition parse-tree.h:1728
Definition parse-tree.h:2701
Definition parse-tree.h:2699
Definition parse-tree.h:306
Definition parse-tree.h:2270
Definition parse-tree.h:2261
Definition parse-tree.h:1063
Definition parse-tree.h:1539
Definition parse-tree.h:1551
Definition parse-tree.h:1849
Definition parse-tree.h:1510
Definition parse-tree.h:1559
Definition parse-tree.h:1525
Definition parse-tree.h:1565
Definition parse-tree.h:1531
Definition parse-tree.h:2040
Definition parse-tree.h:442
Definition parse-tree.h:770
Definition parse-tree.h:330
Definition parse-tree.h:617
Definition parse-tree.h:1190
Definition parse-tree.h:751
Definition parse-tree.h:920
Definition parse-tree.h:1888
Definition parse-tree.h:1576
Definition parse-tree.h:2366
Definition parse-tree.h:3192
Definition parse-tree.h:2386
Definition parse-tree.h:2248
Definition parse-tree.h:1423
Definition parse-tree.h:3393
Definition parse-tree.h:1234
Definition parse-tree.h:1260
Definition parse-tree.h:1243
Definition parse-tree.h:1220
Definition parse-tree.h:2605
Definition parse-tree.h:2611
Definition parse-tree.h:2619
Definition parse-tree.h:534
Definition parse-tree.h:559
Definition parse-tree.h:972
Definition parse-tree.h:1367
Definition parse-tree.h:959
Definition parse-tree.h:1736
Definition parse-tree.h:1049
Definition parse-tree.h:2142
Definition parse-tree.h:2158
Definition parse-tree.h:2136
Definition parse-tree.h:2171
Definition parse-tree.h:2148
Definition parse-tree.h:2631
Definition parse-tree.h:2735
Definition parse-tree.h:3327
Definition parse-tree.h:3181
Definition parse-tree.h:3359
Definition parse-tree.h:3074
Definition parse-tree.h:3089
Definition tools.h:135
Definition tools.h:141
Definition parse-tree.h:2400
Definition parse-tree.h:2416
Definition parse-tree.h:2379
Definition parse-tree.h:1709
Definition parse-tree.h:1719
Definition parse-tree.h:424
Definition parse-tree.h:1633
Definition parse-tree.h:1642
Definition parse-tree.h:630
Definition parse-tree.h:1020
Definition parse-tree.h:2834
Definition parse-tree.h:2778
Definition parse-tree.h:2922
Definition parse-tree.h:2931
Definition parse-tree.h:2936
Definition parse-tree.h:2920
Definition parse-tree.h:2949
Definition parse-tree.h:798
Definition parse-tree.h:314
Definition parse-tree.h:1381
Definition parse-tree.h:1585
Definition parse-tree.h:3251
Definition parse-tree.h:3213
Definition parse-tree.h:3239
Definition parse-tree.h:3095
Definition parse-tree.h:480
Definition parse-tree.h:468
Definition parse-tree.h:709
Definition parse-tree.h:2761
Definition parse-tree.h:2759
Definition parse-tree.h:2670
Definition parse-tree.h:785
Definition parse-tree.h:663
Definition parse-tree.h:2343
Definition parse-tree.h:1326
Definition parse-tree.h:681
Definition parse-tree.h:1627
Definition parse-tree.h:894
Definition parse-tree.h:2311
Definition parse-tree.h:2645
Definition parse-tree.h:876
Definition parse-tree.h:322
Definition parse-tree.h:2331
Definition parse-tree.h:2970
Definition parse-tree.h:3503
Definition parse-tree.h:2103
Definition parse-tree.h:2994
Definition parse-tree.h:2984
Definition parse-tree.h:3005
Definition parse-tree.h:592
Definition parse-tree.h:1332
Definition parse-tree.h:643
Definition parse-tree.h:2349
Definition parse-tree.h:2573
Definition parse-tree.h:1456
Definition parse-tree.h:4368
Definition parse-tree.h:4372
Definition parse-tree.h:4387
Definition parse-tree.h:4394
Definition parse-tree.h:4402
Definition parse-tree.h:4417
Definition parse-tree.h:5364
Definition parse-tree.h:4424
Definition parse-tree.h:5222
Definition parse-tree.h:5211
Definition parse-tree.h:4433
Definition parse-tree.h:5153
Definition parse-tree.h:5228
Definition parse-tree.h:4456
Definition parse-tree.h:5163
Definition parse-tree.h:5122
Definition parse-tree.h:5106
Definition parse-tree.h:4471
Definition parse-tree.h:3672
Definition parse-tree.h:4479
Definition parse-tree.h:5291
Definition parse-tree.h:5308
Definition parse-tree.h:5283
Definition parse-tree.h:4496
Definition parse-tree.h:4514
Definition parse-tree.h:4573
Definition parse-tree.h:4571
Definition parse-tree.h:4595
Definition parse-tree.h:4603
Definition parse-tree.h:4613
Definition parse-tree.h:4623
Definition parse-tree.h:4631
Definition parse-tree.h:3573
Definition parse-tree.h:5129
Definition parse-tree.h:4586
Definition parse-tree.h:4553
Definition parse-tree.h:4646
Definition parse-tree.h:5158
Definition parse-tree.h:5233
Definition parse-tree.h:4657
Definition parse-tree.h:5196
Definition parse-tree.h:4665
Definition parse-tree.h:4678
Definition parse-tree.h:4689
Definition parse-tree.h:4699
Definition parse-tree.h:4707
Definition parse-tree.h:5317
Definition parse-tree.h:4712
Definition parse-tree.h:4720
Definition parse-tree.h:4736
Definition parse-tree.h:4759
Definition parse-tree.h:4725
Definition parse-tree.h:4749
Definition parse-tree.h:4766
Definition parse-tree.h:3684
Definition parse-tree.h:4526
Definition parse-tree.h:4544
Definition parse-tree.h:4535
Definition parse-tree.h:4775
Definition parse-tree.h:4790
Definition parse-tree.h:4801
Definition parse-tree.h:4826
Definition parse-tree.h:4838
Definition parse-tree.h:4847
Definition parse-tree.h:5176
Definition parse-tree.h:5190
Definition parse-tree.h:4871
Definition parse-tree.h:4883
Definition parse-tree.h:4895
Definition parse-tree.h:3618
Definition parse-tree.h:3609
Definition parse-tree.h:3606
Definition parse-tree.h:4906
Definition parse-tree.h:4919
Definition parse-tree.h:4931
Definition parse-tree.h:4942
Definition parse-tree.h:3662
Definition parse-tree.h:4952
Definition parse-tree.h:5324
Definition parse-tree.h:4961
Definition parse-tree.h:4973
Definition parse-tree.h:5242
Definition parse-tree.h:4984
Definition parse-tree.h:4991
Definition parse-tree.h:3622
Definition parse-tree.h:3644
Definition parse-tree.h:3631
Definition parse-tree.h:5000
Definition parse-tree.h:5011
Definition parse-tree.h:5330
Definition parse-tree.h:5020
Definition parse-tree.h:5035
Definition parse-tree.h:5045
Definition parse-tree.h:3598
Definition parse-tree.h:3591
Definition parse-tree.h:5054
Definition parse-tree.h:5079
Definition parse-tree.h:5101
Definition parse-tree.h:5200
Definition parse-tree.h:5090
Definition parse-tree.h:3105
Definition parse-tree.h:5752
Definition parse-tree.h:5759
Definition parse-tree.h:5688
Definition parse-tree.h:5781
Definition parse-tree.h:5820
Definition parse-tree.h:5809
Definition parse-tree.h:5800
Definition parse-tree.h:5682
Definition parse-tree.h:5694
Definition parse-tree.h:5390
Definition parse-tree.h:5395
Definition parse-tree.h:5432
Definition parse-tree.h:5516
Definition parse-tree.h:5380
Definition parse-tree.h:5443
Definition parse-tree.h:5457
Definition parse-tree.h:5473
Definition parse-tree.h:5481
Definition parse-tree.h:5534
Definition parse-tree.h:5502
Definition parse-tree.h:5248
Definition parse-tree.h:5492
Definition parse-tree.h:379
Definition parse-tree.h:2839
Definition parse-tree.h:2802
Definition parse-tree.h:3030
Definition parse-tree.h:2068
Definition parse-tree.h:1595
Definition parse-tree.h:2029
Definition parse-tree.h:2865
Definition parse-tree.h:3150
Definition parse-tree.h:2823
Definition parse-tree.h:933
Definition parse-tree.h:3128
Definition parse-tree.h:1074
Definition parse-tree.h:1102
Definition parse-tree.h:1928
Definition parse-tree.h:1094
Definition parse-tree.h:1088
Definition parse-tree.h:1081
Definition parse-tree.h:3138
Definition parse-tree.h:3266
Definition parse-tree.h:3231
Definition parse-tree.h:576
Definition parse-tree.h:2786
Definition parse-tree.h:817
Definition parse-tree.h:2300
Definition parse-tree.h:3016
Definition parse-tree.h:1608
Definition parse-tree.h:298
Definition parse-tree.h:1694
Definition parse-tree.h:2423
Definition parse-tree.h:2487
Definition parse-tree.h:2499
Definition parse-tree.h:2478
Definition parse-tree.h:2533
Definition parse-tree.h:2513
Definition parse-tree.h:2179
Definition parse-tree.h:3385
Definition parse-tree.h:402
Definition parse-tree.h:456
Definition parse-tree.h:1998
Definition parse-tree.h:362
Definition parse-tree.h:3403
Definition parse-tree.h:2565
Definition parse-tree.h:1918
Definition parse-tree.h:1211
Definition parse-tree.h:3524
Definition parse-tree.h:3496
Definition parse-tree.h:3519
Definition parse-tree.h:3036
Definition parse-tree.h:3047
Definition parse-tree.h:3200
Definition parse-tree.h:3369
Definition parse-tree.h:1685
Definition parse-tree.h:1880
Definition parse-tree.h:1676
Definition parse-tree.h:1866
Definition parse-tree.h:3170
Definition parse-tree.h:2583
Definition parse-tree.h:2596
Definition parse-tree.h:911
Definition parse-tree.h:1154
Definition parse-tree.h:1167
Definition parse-tree.h:1129
Definition parse-tree.h:1176
Definition parse-tree.h:1139
Definition parse-tree.h:1437
Definition parse-tree.h:2522
Definition parse-tree.h:939
Definition parse-tree.h:947
Definition parse-tree.h:745
Definition parse-tree.h:654
Definition parse-tree.h:758
Definition parse-tree.h:3512
Definition parse-tree.h:357
Definition parse-tree.h:2655
Definition parse-tree.h:804
Definition parse-tree.h:3114
Definition parse-tree.h:1896
Definition parse-tree.h:731
Definition parse-tree.h:736
Definition parse-tree.h:285
Definition parse-tree.h:2849
Definition parse-tree.h:2094
Definition parse-tree.h:2087
Definition parse-tree.h:2118
Definition parse-tree.h:2081
Definition parse-tree.h:2808
Definition parse-tree.h:3746
Definition parse-tree.h:3737
Definition parse-tree.h:3707
Definition parse-tree.h:3696
Definition parse-tree.h:3691
Definition parse-tree.h:3717
Definition parse-tree.h:3730
Definition parse-tree.h:3901
Definition parse-tree.h:3918
Definition parse-tree.h:3910
Definition parse-tree.h:3946
Definition parse-tree.h:3958
Definition parse-tree.h:3968
Definition parse-tree.h:3979
Definition parse-tree.h:3992
Definition parse-tree.h:4004
Definition parse-tree.h:4025
Definition parse-tree.h:4036
Definition parse-tree.h:4046
Definition parse-tree.h:4055
Definition parse-tree.h:4087
Definition parse-tree.h:4098
Definition parse-tree.h:4109
Definition parse-tree.h:4121
Definition parse-tree.h:4131
Definition parse-tree.h:4139
Definition parse-tree.h:4148
Definition parse-tree.h:4157
Definition parse-tree.h:4191
Definition parse-tree.h:4178
Definition parse-tree.h:4165
Definition parse-tree.h:4215
Definition parse-tree.h:4206
Definition parse-tree.h:4249
Definition parse-tree.h:4225
Definition parse-tree.h:4258
Definition parse-tree.h:4271
Definition parse-tree.h:4280
Definition parse-tree.h:4290
Definition parse-tree.h:4300
Definition parse-tree.h:4309
Definition parse-tree.h:4317
Definition parse-tree.h:4327
Definition parse-tree.h:4338
Definition parse-tree.h:4351
Definition parse-tree.h:3784
Definition parse-tree.h:3767
Definition parse-tree.h:3808
Definition parse-tree.h:3774
Definition parse-tree.h:3835
Definition parse-tree.h:3847
Definition parse-tree.h:3860
Definition parse-tree.h:3869