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, OmpMemoryOrderType)
70 NODE_ENUM(common, OpenACCDeviceType)
71 NODE(format, ControlEditDesc)
72 NODE(format::ControlEditDesc, Kind)
73 NODE(format, DerivedTypeDataEditDesc)
74 NODE(format, FormatItem)
75 NODE(format, FormatSpecification)
76 NODE(format, IntrinsicTypeDataEditDesc)
78 NODE(parser, Abstract)
80 NODE(AccAtomicCapture, Stmt1)
81 NODE(AccAtomicCapture, Stmt2)
89 NODE(parser, AccClause)
90#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
91#include "llvm/Frontend/OpenACC/ACC.inc"
94 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
95 return llvm::Twine(
96 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
97 .str();
98 }
102 NODE_ENUM(parser::AccDataModifier, Modifier)
104 NODE(parser, AccEndAtomic)
108 NODE(parser, AccGangArg)
109 NODE(AccGangArg, Num)
110 NODE(AccGangArg, Dim)
111 NODE(AccGangArg, Static)
113 NODE(parser, AccObject)
114 NODE(parser, AccObjectList)
117 NODE(parser, AccSizeExpr)
119 NODE(parser, AccSelfClause)
122
124 NODE(parser, AccTileExpr)
127 NODE(parser, AccEndLoop)
129 static std::string GetNodeName(const llvm::acc::Directive &x) {
130 return llvm::Twine(
131 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
132 .str();
133 }
134 NODE(parser, AcImpliedDo)
136 NODE(parser, AcValue)
137 NODE(parser, AccessStmt)
138 NODE(parser, AccessId)
139 NODE(parser, AccessSpec)
140 NODE_ENUM(AccessSpec, Kind)
141 NODE(parser, AcSpec)
142 NODE(parser, ActionStmt)
143 NODE(parser, ActualArg)
144 NODE(ActualArg, PercentRef)
145 NODE(ActualArg, PercentVal)
146 NODE(parser, ActualArgSpec)
147 NODE(AcValue, Triplet)
148 NODE(parser, AllocOpt)
149 NODE(AllocOpt, Mold)
150 NODE(AllocOpt, Source)
151 NODE(AllocOpt, Stream)
152 NODE(AllocOpt, Pinned)
153 NODE(parser, Allocatable)
154 NODE(parser, AllocatableStmt)
158 NODE(parser, AllocateStmt)
159 NODE(parser, Allocation)
160 NODE(parser, AltReturnSpec)
162 NODE(parser, ArrayConstructor)
163 NODE(parser, ArrayElement)
164 NODE(parser, ArraySpec)
165 NODE(parser, AssignStmt)
169 NODE(parser, AssociateStmt)
170 NODE(parser, Association)
171 NODE(parser, AssumedImpliedSpec)
172 NODE(parser, AssumedRankSpec)
173 NODE(parser, AssumedShapeSpec)
175 NODE(parser, Asynchronous)
176 NODE(parser, AsynchronousStmt)
177 NODE(parser, AttrSpec)
178 NODE(parser, BOZLiteralConstant)
179 NODE(parser, BackspaceStmt)
180 NODE(parser, BasedPointer)
181 NODE(parser, BasedPointerStmt)
182 NODE(parser, BindAttr)
183 NODE(BindAttr, Deferred)
184 NODE(BindAttr, Non_Overridable)
185 NODE(parser, BindEntity)
186 NODE_ENUM(BindEntity, Kind)
187 NODE(parser, BindStmt)
188 NODE(parser, Block)
190 NODE(parser, BlockData)
191 NODE(parser, BlockDataStmt)
192 NODE(parser, BlockSpecificationPart)
193 NODE(parser, BlockStmt)
195 NODE(parser, BoundsSpec)
196 NODE(parser, Call)
197 NODE(parser, CallStmt)
198 NODE(CallStmt, Chevrons)
199 NODE(CallStmt, StarOrExpr)
200 NODE(parser, CaseConstruct)
201 NODE(CaseConstruct, Case)
202 NODE(parser, CaseSelector)
203 NODE(parser, CaseStmt)
205 NODE(CaseValueRange, Range)
208 NODE(parser, CharLength)
211 NODE(parser, CharSelector)
212 NODE(CharSelector, LengthAndKind)
213 NODE(parser, CloseStmt)
214 NODE(CloseStmt, CloseSpec)
216 NODE(parser, CoarraySpec)
218 NODE(parser, CodimensionStmt)
221 NODE(parser, CommonStmt)
222 NODE(CommonStmt, Block)
224 NODE(CompilerDirective, AssumeAligned)
225 NODE(CompilerDirective, IgnoreTKR)
226 NODE(CompilerDirective, Inline)
227 NODE(CompilerDirective, IVDep)
228 NODE(CompilerDirective, ForceInline)
229 NODE(CompilerDirective, LoopCount)
230 NODE(CompilerDirective, NameValue)
231 NODE(CompilerDirective, NoInline)
232 NODE(CompilerDirective, Unrecognized)
233 NODE(CompilerDirective, VectorAlways)
234 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
235 NODE(CompilerDirective, VectorLength)
236 NODE(CompilerDirective, Unroll)
237 NODE(CompilerDirective, UnrollAndJam)
238 NODE(CompilerDirective, NoVector)
239 NODE(CompilerDirective, NoUnroll)
240 NODE(CompilerDirective, NoUnrollAndJam)
241 NODE(CompilerDirective, Prefetch)
243 NODE(parser, ComplexPart)
246 NODE(parser, ComponentDataSource)
247 NODE(parser, ComponentDecl)
248 NODE(parser, FillDecl)
251 NODE(parser, ComponentSpec)
256 NODE(parser, ConnectSpec)
257 NODE(ConnectSpec, CharExpr)
258 NODE_ENUM(ConnectSpec::CharExpr, Kind)
259 NODE(ConnectSpec, Newunit)
260 NODE(ConnectSpec, Recl)
261 NODE(parser, ContainsStmt)
262 NODE(parser, Contiguous)
263 NODE(parser, ContiguousStmt)
264 NODE(parser, ContinueStmt)
266 NODE(parser, CriticalStmt)
269 NODE(CUFKernelDoConstruct, StarOrExpr)
270 NODE(CUFKernelDoConstruct, Directive)
271 NODE(CUFKernelDoConstruct, LaunchConfiguration)
272 NODE(parser, CUFReduction)
273 NODE(parser, CycleStmt)
275 NODE(parser, DataIDoObject)
276 NODE(parser, DataImpliedDo)
277 NODE(parser, DataRef)
278 NODE(parser, DataStmt)
282 NODE(parser, DataStmtSet)
283 NODE(parser, DataStmtValue)
287 NODE(DeclarationTypeSpec, Class)
288 NODE(DeclarationTypeSpec, ClassStar)
289 NODE(DeclarationTypeSpec, Record)
290 NODE(DeclarationTypeSpec, Type)
291 NODE(DeclarationTypeSpec, TypeStar)
292 NODE(parser, Default)
293 NODE(parser, DeferredCoshapeSpecList)
294 NODE(parser, DeferredShapeSpecList)
295 NODE(parser, DefinedOpName)
297 NODE_ENUM(DefinedOperator, IntrinsicOperator)
301 NODE(parser, Designator)
302 NODE(parser, DimensionStmt)
303 NODE(DimensionStmt, Declaration)
304 NODE(parser, DoConstruct)
305 NODE(parser, DummyArg)
306 NODE(parser, ElseIfStmt)
307 NODE(parser, ElseStmt)
308 NODE(parser, ElsewhereStmt)
309 NODE(parser, EndAssociateStmt)
310 NODE(parser, EndBlockDataStmt)
311 NODE(parser, EndBlockStmt)
313 NODE(parser, EndCriticalStmt)
314 NODE(parser, EndDoStmt)
315 NODE(parser, EndEnumStmt)
316 NODE(parser, EndForallStmt)
317 NODE(parser, EndFunctionStmt)
318 NODE(parser, EndIfStmt)
319 NODE(parser, EndInterfaceStmt)
320 NODE(parser, EndLabel)
321 NODE(parser, EndModuleStmt)
322 NODE(parser, EndMpSubprogramStmt)
323 NODE(parser, EndProgramStmt)
324 NODE(parser, EndSelectStmt)
325 NODE(parser, EndSubmoduleStmt)
326 NODE(parser, EndSubroutineStmt)
327 NODE(parser, EndTypeStmt)
328 NODE(parser, EndWhereStmt)
329 NODE(parser, EndfileStmt)
330 NODE(parser, EntityDecl)
331 NODE(parser, EntryStmt)
332 NODE(parser, EnumDef)
333 NODE(parser, EnumDefStmt)
334 NODE(parser, Enumerator)
335 NODE(parser, EnumeratorDefStmt)
336 NODE(parser, EorLabel)
337 NODE(parser, EquivalenceObject)
338 NODE(parser, EquivalenceStmt)
339 NODE(parser, ErrLabel)
340 NODE(parser, ErrorRecovery)
341 NODE(parser, EventPostStmt)
342 NODE(parser, EventWaitSpec)
343 NODE(parser, EventWaitStmt)
345 NODE(parser, ExecutionPart)
347 NODE(parser, ExitStmt)
350 NODE(parser, Expr)
351 NODE(Expr, Parentheses)
352 NODE(Expr, UnaryPlus)
353 NODE(Expr, Negate)
354 NODE(Expr, NOT)
355 NODE(Expr, PercentLoc)
356 NODE(Expr, DefinedUnary)
357 NODE(Expr, Power)
358 NODE(Expr, Multiply)
359 NODE(Expr, Divide)
360 NODE(Expr, Add)
361 NODE(Expr, Subtract)
362 NODE(Expr, Concat)
363 NODE(Expr, LT)
364 NODE(Expr, LE)
365 NODE(Expr, EQ)
366 NODE(Expr, NE)
367 NODE(Expr, GE)
368 NODE(Expr, GT)
369 NODE(Expr, AND)
370 NODE(Expr, OR)
371 NODE(Expr, EQV)
372 NODE(Expr, NEQV)
373 NODE(Expr, DefinedBinary)
374 NODE(Expr, ComplexConstructor)
375 NODE(parser, External)
376 NODE(parser, ExternalStmt)
377 NODE(parser, FailImageStmt)
378 NODE(parser, FileUnitNumber)
379 NODE(parser, FinalProcedureStmt)
380 NODE(parser, FlushStmt)
385 NODE(parser, ForallStmt)
386 NODE(parser, FormTeamStmt)
387 NODE(FormTeamStmt, FormTeamSpec)
388 NODE(parser, Format)
389 NODE(parser, FormatStmt)
391 NODE(parser, FunctionStmt)
393 NODE(parser, GenericSpec)
394 NODE(GenericSpec, Assignment)
395 NODE(GenericSpec, ReadFormatted)
396 NODE(GenericSpec, ReadUnformatted)
397 NODE(GenericSpec, WriteFormatted)
398 NODE(GenericSpec, WriteUnformatted)
399 NODE(parser, GenericStmt)
400 NODE(parser, GotoStmt)
402 NODE(parser, IdExpr)
403 NODE(parser, IdVariable)
404 NODE(parser, IfConstruct)
405 NODE(IfConstruct, ElseBlock)
406 NODE(IfConstruct, ElseIfBlock)
407 NODE(parser, IfStmt)
408 NODE(parser, IfThenStmt)
409 NODE(parser, TeamValue)
410 NODE(parser, ImageSelector)
412 NODE(ImageSelectorSpec, Notify)
413 NODE(ImageSelectorSpec, Stat)
414 NODE(ImageSelectorSpec, Team_Number)
415 NODE(parser, ImplicitPart)
417 NODE(parser, ImplicitSpec)
418 NODE(parser, ImplicitStmt)
419 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
420 NODE(parser, ImpliedShapeSpec)
421 NODE(parser, ImportStmt)
424 NODE(parser, InputItem)
425 NODE(parser, InquireSpec)
426 NODE(InquireSpec, CharVar)
427 NODE_ENUM(InquireSpec::CharVar, Kind)
428 NODE(InquireSpec, IntVar)
429 NODE_ENUM(InquireSpec::IntVar, Kind)
430 NODE(InquireSpec, LogVar)
431 NODE_ENUM(InquireSpec::LogVar, Kind)
432 NODE(parser, InquireStmt)
433 NODE(InquireStmt, Iolength)
434 NODE(parser, IntegerTypeSpec)
435 NODE(parser, IntentSpec)
436 NODE_ENUM(IntentSpec, Intent)
437 NODE(parser, IntentStmt)
439 NODE(parser, InterfaceBody)
440 NODE(InterfaceBody, Function)
441 NODE(InterfaceBody, Subroutine)
443 NODE(parser, InterfaceStmt)
446 NODE(parser, Intrinsic)
447 NODE(parser, IntrinsicStmt)
449 NODE(IntrinsicTypeSpec, Character)
450 NODE(IntrinsicTypeSpec, Complex)
451 NODE(IntrinsicTypeSpec, DoubleComplex)
452 NODE(IntrinsicTypeSpec, DoublePrecision)
454 NODE(IntrinsicTypeSpec, Real)
455 NODE(parser, IoControlSpec)
456 NODE(IoControlSpec, Asynchronous)
457 NODE(IoControlSpec, CharExpr)
458 NODE_ENUM(IoControlSpec::CharExpr, Kind)
459 NODE(IoControlSpec, Pos)
460 NODE(IoControlSpec, Rec)
461 NODE(IoControlSpec, Size)
462 NODE(parser, IoUnit)
463 NODE(parser, Keyword)
464 NODE(parser, KindParam)
465 NODE(parser, KindSelector)
466 NODE(KindSelector, StarSize)
467 NODE(parser, LabelDoStmt)
470 NODE(parser, LetterSpec)
474 NODE_ENUM(parser::ReductionOperator, Operator)
475 NODE(parser, LocalitySpec)
476 NODE(LocalitySpec, DefaultNone)
477 NODE(LocalitySpec, Local)
478 NODE(LocalitySpec, LocalInit)
479 NODE(LocalitySpec, Reduce)
480 NODE(LocalitySpec, Shared)
481 NODE(parser, LockStmt)
482 NODE(LockStmt, LockStat)
484 NODE_NAME(LoopControl::Bounds, "LoopBounds")
485 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
486 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
487 NODE(parser, LoopControl)
488 NODE(LoopControl, Concurrent)
489 NODE(parser, MainProgram)
490 NODE(parser, Map)
491 NODE(Map, EndMapStmt)
492 NODE(Map, MapStmt)
494 NODE(parser, Module)
495 NODE(parser, ModuleStmt)
498 NODE(parser, MpSubprogramStmt)
499 NODE(parser, MsgVariable)
500 NODE(parser, Name)
501 NODE(parser, NamedConstant)
503 NODE(parser, NamelistStmt)
504 NODE(NamelistStmt, Group)
506 NODE(parser, NoPass)
508 NODE(parser, NullifyStmt)
509 NODE(parser, NullInit)
510 NODE(parser, ObjectDecl)
511 NODE(parser, OldParameterStmt)
512
513 static std::string GetNodeName(const llvm::omp::Directive &x) {
514 return llvm::Twine("llvm::omp::Directive = ",
515 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
516 .str();
517 }
518 static std::string GetNodeName(const llvm::omp::Clause &x) {
519 return llvm::Twine(
520 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
521 .str();
522 }
525 NODE_ENUM(OmpAccessGroup, Value)
527 NODE(OmpAdjustArgsClause, OmpAdjustOp)
528 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
530 NODE(OmpAffinityClause, Modifier)
533 NODE(OmpAlignedClause, Modifier)
534 NODE(parser, OmpAlignment)
537 NODE(OmpAllocateClause, Modifier)
542 NODE_ENUM(OmpAlwaysModifier, Value)
544 NODE(OmpAppendArgsClause, OmpAppendOp)
545 NODE(parser, OmpArgument)
547 NODE(parser, OmpAtClause)
548 NODE_ENUM(OmpAtClause, ActionTime)
551 NODE_ENUM(OmpAttachModifier, Value)
553 NODE_ENUM(OmpAutomapModifier, Value)
558 NODE(parser, OmpBindClause)
559 NODE_ENUM(OmpBindClause, Binding)
563 NODE_ENUM(OmpChunkModifier, Value)
564 NODE(parser, OmpClause)
565 NODE(parser, OmpClauseList)
567 NODE_ENUM(OmpCloseModifier, Value)
574 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
576 NODE(OmpDefaultmapClause, Modifier)
577 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
579 NODE_ENUM(OmpDeleteModifier, Value)
581 NODE(OmpDependClause, TaskDep)
582 NODE(OmpDependClause::TaskDep, Modifier)
584 NODE_ENUM(OmpDependenceType, Value)
589 NODE(OmpDeviceClause, Modifier)
591 NODE_ENUM(OmpDeviceModifier, Value)
594 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
598 NODE_ENUM(OmpDirectiveSpecification, Flag)
599 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
600 NODE(parser, OmpDoacross)
601 NODE(OmpDoacross, Sink)
602 NODE(OmpDoacross, Source)
606 NODE(OmpDynGroupprivateClause, Modifier)
611 NODE(OmpEnterClause, Modifier)
614 NODE_ENUM(OmpExpectation, Value)
615 NODE(parser, OmpFailClause)
617 NODE_ENUM(OmpFallbackModifier, Value)
618 NODE(parser, OmpFromClause)
619 NODE(OmpFromClause, Modifier)
621 NODE(OmpGrainsizeClause, Modifier)
624 NODE(parser, OmpHintClause)
626 NODE(parser, OmpIfClause)
627 NODE(OmpIfClause, Modifier)
629 NODE(parser, OmpInitClause)
630 NODE(OmpInitClause, Modifier)
634 NODE(OmpInReductionClause, Modifier)
636 NODE_ENUM(OmpInteropType, Value)
637 NODE(parser, OmpIteration)
640 NODE(parser, OmpIterator)
643 NODE(OmpLastprivateClause, Modifier)
645 NODE_ENUM(OmpLastprivateModifier, Value)
647 NODE(OmpLinearClause, Modifier)
649 NODE_ENUM(OmpLinearModifier, Value)
650 NODE(parser, OmpLocator)
653 NODE(parser, OmpLowerBound)
654 NODE(parser, OmpMapClause)
655 NODE(OmpMapClause, Modifier)
656 NODE(parser, OmpMapper)
658 NODE(parser, OmpMapType)
659 NODE_ENUM(OmpMapType, Value)
661 NODE_ENUM(OmpMapTypeModifier, Value)
665 NODE(parser, OmpNoOpenMPClause)
666 NODE(parser, OmpNoOpenMPRoutinesClause)
667 NODE(parser, OmpNoParallelismClause)
671 NODE(OmpNumTeamsClause, Modifier)
673 NODE(OmpNumThreadsClause, Modifier)
674 NODE(OmpNumTasksClause, Modifier)
675 NODE(parser, OmpObject)
676 NODE(OmpObject, Invalid)
677 NODE_ENUM(OmpObject::Invalid, Kind)
678 NODE(parser, OmpObjectList)
680 NODE(OmpOrderClause, Modifier)
681 NODE_ENUM(OmpOrderClause, Ordering)
683 NODE_ENUM(OmpOrderingModifier, Value)
685 NODE_ENUM(OmpOrderModifier, Value)
689 NODE(parser, OmpPreferType)
691 NODE_ENUM(OmpPrescriptiveness, Value)
693 NODE_ENUM(OmpPresentModifier, Value)
695 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
697 NODE(OmpReductionClause, Modifier)
700 NODE_ENUM(OmpReductionModifier, Value)
703 NODE_ENUM(OmpRefModifier, Value)
707 NODE(OmpScheduleClause, Modifier)
708 NODE_ENUM(OmpScheduleClause, Kind)
711 NODE_ENUM(OmpSelfModifier, Value)
713 NODE_ENUM(OmpSeverityClause, SevLevel)
719 NODE(OmpStylizedInstance, Instance)
722 NODE(OmpTaskReductionClause, Modifier)
724 NODE(OmpThreadLimitClause, Modifier)
726 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
727 NODE(parser, OmpToClause)
728 NODE(OmpToClause, Modifier)
731 NODE(OmpTraitPropertyExtension, Complex)
733 NODE(parser, OmpTraitScore)
735 NODE(OmpTraitSelector, Properties)
737 NODE_ENUM(OmpTraitSelectorName, Value)
740 NODE_ENUM(OmpTraitSetSelectorName, Value)
742 NODE(parser, OmpTypeName)
747 NODE(parser, OmpUseClause)
749 NODE_ENUM(OmpVariableCategory, Value)
750 NODE(parser, OmpWhenClause)
751 NODE(OmpWhenClause, Modifier)
753 NODE_ENUM(OmpxHoldModifier, Value)
754#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
755#include "llvm/Frontend/OpenMP/OMP.inc"
756
757 NODE(parser, Only)
771
799
800 NODE(parser, OpenStmt)
801 NODE(parser, Optional)
802 NODE(parser, OptionalStmt)
805 NODE(parser, OutputItem)
806 NODE(parser, Parameter)
807 NODE(parser, ParameterStmt)
809 NODE(parser, Pass)
810 NODE(parser, PauseStmt)
811 NODE(parser, Pointer)
813 NODE(PointerAssignmentStmt, Bounds)
814 NODE(parser, PointerDecl)
815 NODE(parser, PointerObject)
816 NODE(parser, PointerStmt)
818 NODE(parser, PrefixSpec)
819 NODE(PrefixSpec, Elemental)
820 NODE(PrefixSpec, Impure)
821 NODE(PrefixSpec, Module)
822 NODE(PrefixSpec, Non_Recursive)
823 NODE(PrefixSpec, Pure)
824 NODE(PrefixSpec, Recursive)
825 NODE(PrefixSpec, Attributes)
826 NODE(PrefixSpec, Launch_Bounds)
827 NODE(PrefixSpec, Cluster_Dims)
828 NODE(parser, PrintStmt)
829 NODE(parser, PrivateStmt)
831 NODE(parser, ProcAttrSpec)
835 NODE(parser, ProcDecl)
836 NODE(parser, ProcInterface)
840 NODE(parser, ProcedureStmt)
841 NODE_ENUM(ProcedureStmt, Kind)
842 NODE(parser, Program)
843 NODE(parser, ProgramStmt)
844 NODE(parser, ProgramUnit)
845 NODE(parser, Protected)
846 NODE(parser, ProtectedStmt)
847 NODE(parser, RankClause)
848 NODE(parser, ReadStmt)
850 NODE(RealLiteralConstant, Real)
851 NODE(parser, Rename)
852 NODE(Rename, Names)
853 NODE(Rename, Operators)
854 NODE(parser, ReturnStmt)
855 NODE(parser, RewindStmt)
856 NODE(parser, Save)
857 NODE(parser, SaveStmt)
858 NODE(parser, SavedEntity)
859 NODE_ENUM(SavedEntity, Kind)
863 NODE(SelectRankCaseStmt, Rank)
865 NODE(SelectRankConstruct, RankCase)
868 NODE(SelectTypeConstruct, TypeCase)
870 NODE(parser, Selector)
872 NODE(parser, SequenceStmt)
873 NODE(parser, Sign)
878 NODE(parser, SpecificationExpr)
880 NODE(parser, Star)
881 NODE(parser, StatOrErrmsg)
882 NODE(parser, StatVariable)
883 NODE(parser, StatusExpr)
885 NODE(parser, StopCode)
886 NODE(parser, StopStmt)
887 NODE_ENUM(StopStmt, Kind)
890 NODE(parser, StructureDef)
891 NODE(StructureDef, EndStructureStmt)
893 NODE(parser, StructureStmt)
894 NODE(parser, Submodule)
895 NODE(parser, SubmoduleStmt)
899 NODE(parser, Substring)
902 NODE(parser, Suffix)
903 NODE(parser, SyncAllStmt)
905 NODE(SyncImagesStmt, ImageSet)
906 NODE(parser, SyncMemoryStmt)
907 NODE(parser, SyncTeamStmt)
908 NODE(parser, Target)
909 NODE(parser, TargetStmt)
910 NODE(parser, TypeAttrSpec)
911 NODE(TypeAttrSpec, BindC)
912 NODE(TypeAttrSpec, Extends)
918 NODE(TypeBoundProcedureStmt, WithInterface)
919 NODE(TypeBoundProcedureStmt, WithoutInterface)
921 NODE(parser, TypeGuardStmt)
922 NODE(TypeGuardStmt, Guard)
923 NODE(parser, TypeParamDecl)
925 NODE(common, TypeParamAttr)
926 NODE(parser, TypeParamSpec)
928 NODE(TypeParamValue, Deferred)
929 NODE(parser, TypeSpec)
930 NODE(parser, Union)
931 NODE(Union, EndUnionStmt)
932 NODE(Union, UnionStmt)
933 NODE(parser, UnlockStmt)
935 NODE(parser, UnsignedTypeSpec)
936 NODE(parser, UseStmt)
937 NODE_ENUM(UseStmt, ModuleNature)
938 NODE(parser, Value)
939 NODE(parser, ValueStmt)
940 NODE(parser, Variable)
942 NODE(VectorTypeSpec, PairVectorTypeSpec)
943 NODE(VectorTypeSpec, QuadVectorTypeSpec)
944 NODE(parser, IntrinsicVectorTypeSpec)
946 NODE(parser, Verbatim)
947 NODE(parser, Volatile)
948 NODE(parser, VolatileStmt)
949 NODE(parser, WaitSpec)
950 NODE(parser, WaitStmt)
953 NODE(WhereConstruct, Elsewhere)
954 NODE(WhereConstruct, MaskedElsewhere)
956 NODE(parser, WhereStmt)
957 NODE(parser, WriteStmt)
958#undef NODE
959#undef NODE_NAME
960
961 template <typename T> bool Pre(const T &x) {
962 std::string fortran{AsFortran<T>(x)};
963 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
964 Prefix(GetNodeName(x));
965 } else {
966 IndentEmptyLine();
967 out_ << GetNodeName(x);
968 if (!fortran.empty()) {
969 out_ << " = '" << fortran << '\'';
970 }
971 EndLine();
972 ++indent_;
973 }
974 return true;
975 }
976
977 template <typename T> void Post(const T &x) {
978 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
979 EndLineIfNonempty();
980 } else {
981 --indent_;
982 }
983 }
984
985 // A few types we want to ignore
986
987 bool Pre(const CharBlock &) { return true; }
988 void Post(const CharBlock &) {}
989
990 template <typename T> bool Pre(const Statement<T> &) { return true; }
991 template <typename T> void Post(const Statement<T> &) {}
992 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
993 template <typename T> void Post(const UnlabeledStatement<T> &) {}
994
995 template <typename T> bool Pre(const common::Indirection<T> &) {
996 return true;
997 }
998 template <typename T> void Post(const common::Indirection<T> &) {}
999
1000 template <typename A> bool Pre(const Scalar<A> &) {
1001 Prefix("Scalar");
1002 return true;
1003 }
1004 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1005
1006 template <typename A> bool Pre(const Constant<A> &) {
1007 Prefix("Constant");
1008 return true;
1009 }
1010 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1011
1012 template <typename A> bool Pre(const Integer<A> &) {
1013 Prefix("Integer");
1014 return true;
1015 }
1016 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1017
1018 template <typename A> bool Pre(const Logical<A> &) {
1019 Prefix("Logical");
1020 return true;
1021 }
1022 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1023
1024 template <typename A> bool Pre(const DefaultChar<A> &) {
1025 Prefix("DefaultChar");
1026 return true;
1027 }
1028 template <typename A> void Post(const DefaultChar<A> &) {
1029 EndLineIfNonempty();
1030 }
1031
1032 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1033 template <typename... A> void Post(const std::tuple<A...> &) {}
1034
1035 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1036 template <typename... A> void Post(const std::variant<A...> &) {}
1037
1038protected:
1039 // Return a Fortran representation of this node to include in the dump
1040 template <typename T> std::string AsFortran(const T &x) {
1041 std::string buf;
1042 llvm::raw_string_ostream ss{buf};
1043 if constexpr (HasTypedExpr<T>::value) {
1044 if (asFortran_ && x.typedExpr) {
1045 asFortran_->expr(ss, *x.typedExpr);
1046 }
1047 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1048 std::is_same_v<T, PointerAssignmentStmt>) {
1049 if (asFortran_ && x.typedAssignment) {
1050 asFortran_->assignment(ss, *x.typedAssignment);
1051 }
1052 } else if constexpr (std::is_same_v<T, CallStmt>) {
1053 if (asFortran_ && x.typedCall) {
1054 asFortran_->call(ss, *x.typedCall);
1055 }
1056 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1057 std::is_same_v<T, SignedIntLiteralConstant> ||
1058 std::is_same_v<T, UnsignedLiteralConstant>) {
1059 ss << std::get<CharBlock>(x.t);
1060 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1061 ss << x.source;
1062 } else if constexpr (std::is_same_v<T, std::string> ||
1063 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1064 ss << x;
1065 }
1066 if (ss.tell()) {
1067 return buf;
1068 }
1069 if constexpr (std::is_same_v<T, Name>) {
1070 return x.source.ToString();
1071#ifdef SHOW_ALL_SOURCE_MEMBERS
1072 } else if constexpr (HasSource<T>::value) {
1073 return x.source.ToString();
1074#endif
1075 } else if constexpr (std::is_same_v<T, int>) {
1076 return std::to_string(x);
1077 } else if constexpr (std::is_same_v<T, bool>) {
1078 return x ? "true" : "false";
1079 } else {
1080 return "";
1081 }
1082 }
1083
1084 void IndentEmptyLine() {
1085 if (emptyline_ && indent_ > 0) {
1086 for (int i{0}; i < indent_; ++i) {
1087 out_ << "| ";
1088 }
1089 emptyline_ = false;
1090 }
1091 }
1092
1093 void Prefix(const char *str) {
1094 IndentEmptyLine();
1095 out_ << str << " -> ";
1096 emptyline_ = false;
1097 }
1098
1099 void Prefix(const std::string &str) {
1100 IndentEmptyLine();
1101 out_ << str << " -> ";
1102 emptyline_ = false;
1103 }
1104
1105 void EndLine() {
1106 out_ << '\n';
1107 emptyline_ = true;
1108 }
1109
1110 void EndLineIfNonempty() {
1111 if (!emptyline_) {
1112 EndLine();
1113 }
1114 }
1115
1116private:
1117 int indent_{0};
1118 llvm::raw_ostream &out_;
1119 const AnalyzedObjectsAsFortran *const asFortran_;
1120 bool emptyline_{false};
1121};
1122
1123template <typename T>
1124llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1125 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1126 ParseTreeDumper dumper{out, asFortran};
1127 Walk(x, dumper);
1128 return out;
1129}
1130
1131} // namespace Fortran::parser
1132#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:1275
Definition parse-tree.h:1282
Definition parse-tree.h:1246
Definition parse-tree.h:1234
Definition parse-tree.h:5679
Definition parse-tree.h:5655
Definition parse-tree.h:5671
Definition parse-tree.h:5663
Definition parse-tree.h:5640
Definition parse-tree.h:5704
Definition parse-tree.h:5634
Definition parse-tree.h:5510
Definition parse-tree.h:5483
Definition parse-tree.h:5611
Definition parse-tree.h:5596
Definition parse-tree.h:5591
Definition parse-tree.h:5499
Definition parse-tree.h:5521
Definition parse-tree.h:5504
Definition parse-tree.h:5516
Definition parse-tree.h:5548
Definition parse-tree.h:5542
Definition parse-tree.h:5646
Definition parse-tree.h:5710
Definition parse-tree.h:5587
Definition parse-tree.h:5578
Definition parse-tree.h:5488
Definition parse-tree.h:5527
Definition parse-tree.h:5475
Definition parse-tree.h:5571
Definition parse-tree.h:5567
Definition parse-tree.h:5563
Definition parse-tree.h:5493
Definition parse-tree.h:5559
Definition parse-tree.h:5553
Definition parse-tree.h:5537
Definition parse-tree.h:895
Definition parse-tree.h:1404
Definition parse-tree.h:496
Definition parse-tree.h:3240
Definition parse-tree.h:3230
Definition parse-tree.h:1966
Definition parse-tree.h:1931
Definition parse-tree.h:1910
Definition parse-tree.h:1922
Definition parse-tree.h:1977
Definition parse-tree.h:1939
Definition parse-tree.h:3456
Definition parse-tree.h:1896
Definition parse-tree.h:1330
Definition parse-tree.h:3461
Definition parse-tree.h:3466
Definition parse-tree.h:2003
Definition parse-tree.h:2158
Definition parse-tree.h:2149
Definition parse-tree.h:2142
Definition parse-tree.h:1312
Definition parse-tree.h:1365
Definition parse-tree.h:3406
Definition parse-tree.h:1113
Definition parse-tree.h:1426
Definition parse-tree.h:1433
Definition parse-tree.h:2180
Definition parse-tree.h:3018
Definition parse-tree.h:2013
Definition parse-tree.h:3400
Definition parse-tree.h:5780
Definition parse-tree.h:5774
Definition parse-tree.h:3264
Definition parse-tree.h:3247
Definition parse-tree.h:2421
Definition parse-tree.h:2403
Definition parse-tree.h:2409
Definition parse-tree.h:2390
Definition parse-tree.h:2211
Definition parse-tree.h:2196
Definition parse-tree.h:670
Definition parse-tree.h:854
Definition parse-tree.h:686
Definition parse-tree.h:2680
Definition parse-tree.h:2188
Definition parse-tree.h:970
Definition parse-tree.h:1439
Definition parse-tree.h:1890
Definition parse-tree.h:1606
Definition parse-tree.h:1614
Definition parse-tree.h:3349
Definition parse-tree.h:840
Definition parse-tree.h:832
Definition parse-tree.h:981
Definition parse-tree.h:994
Definition parse-tree.h:1025
Definition parse-tree.h:1102
Definition parse-tree.h:1047
Definition parse-tree.h:1197
Definition parse-tree.h:2508
Definition parse-tree.h:2236
Definition parse-tree.h:2245
Definition parse-tree.h:1685
Definition parse-tree.h:2658
Definition parse-tree.h:2656
Definition parse-tree.h:303
Definition parse-tree.h:2227
Definition parse-tree.h:2218
Definition parse-tree.h:1055
Definition parse-tree.h:1496
Definition parse-tree.h:1508
Definition parse-tree.h:1806
Definition parse-tree.h:1467
Definition parse-tree.h:1516
Definition parse-tree.h:1482
Definition parse-tree.h:1522
Definition parse-tree.h:1488
Definition parse-tree.h:1997
Definition parse-tree.h:437
Definition parse-tree.h:764
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1182
Definition parse-tree.h:746
Definition parse-tree.h:912
Definition parse-tree.h:1845
Definition parse-tree.h:1533
Definition parse-tree.h:2323
Definition parse-tree.h:3148
Definition parse-tree.h:2343
Definition parse-tree.h:2205
Definition parse-tree.h:1380
Definition parse-tree.h:3318
Definition parse-tree.h:1226
Definition parse-tree.h:1212
Definition parse-tree.h:2562
Definition parse-tree.h:2568
Definition parse-tree.h:2576
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:964
Definition parse-tree.h:951
Definition parse-tree.h:1693
Definition parse-tree.h:1041
Definition parse-tree.h:2099
Definition parse-tree.h:2115
Definition parse-tree.h:2093
Definition parse-tree.h:2128
Definition parse-tree.h:2105
Definition parse-tree.h:2588
Definition parse-tree.h:2692
Definition parse-tree.h:3252
Definition parse-tree.h:3137
Definition parse-tree.h:3284
Definition parse-tree.h:3031
Definition parse-tree.h:3046
Definition tools.h:134
Definition tools.h:140
Definition parse-tree.h:2357
Definition parse-tree.h:2373
Definition parse-tree.h:2336
Definition parse-tree.h:1666
Definition parse-tree.h:1676
Definition parse-tree.h:419
Definition parse-tree.h:1590
Definition parse-tree.h:1599
Definition parse-tree.h:625
Definition parse-tree.h:1012
Definition parse-tree.h:2791
Definition parse-tree.h:2735
Definition parse-tree.h:2879
Definition parse-tree.h:2888
Definition parse-tree.h:2893
Definition parse-tree.h:2877
Definition parse-tree.h:2906
Definition parse-tree.h:790
Definition parse-tree.h:311
Definition parse-tree.h:1338
Definition parse-tree.h:1542
Definition parse-tree.h:3204
Definition parse-tree.h:3169
Definition parse-tree.h:3194
Definition parse-tree.h:3052
Definition parse-tree.h:475
Definition parse-tree.h:463
Definition parse-tree.h:704
Definition parse-tree.h:2718
Definition parse-tree.h:2716
Definition parse-tree.h:2627
Definition parse-tree.h:777
Definition parse-tree.h:658
Definition parse-tree.h:2300
Definition parse-tree.h:1291
Definition parse-tree.h:676
Definition parse-tree.h:1584
Definition parse-tree.h:886
Definition parse-tree.h:2268
Definition parse-tree.h:2602
Definition parse-tree.h:868
Definition parse-tree.h:319
Definition parse-tree.h:2288
Definition parse-tree.h:2927
Definition parse-tree.h:3422
Definition parse-tree.h:2060
Definition parse-tree.h:2951
Definition parse-tree.h:2941
Definition parse-tree.h:2962
Definition parse-tree.h:587
Definition parse-tree.h:1297
Definition parse-tree.h:638
Definition parse-tree.h:2306
Definition parse-tree.h:2530
Definition parse-tree.h:1413
Definition parse-tree.h:4287
Definition parse-tree.h:4291
Definition parse-tree.h:4306
Definition parse-tree.h:4313
Definition parse-tree.h:4321
Definition parse-tree.h:4336
Definition parse-tree.h:5278
Definition parse-tree.h:4343
Definition parse-tree.h:4352
Definition parse-tree.h:5072
Definition parse-tree.h:5415
Definition parse-tree.h:5143
Definition parse-tree.h:4375
Definition parse-tree.h:5082
Definition parse-tree.h:5041
Definition parse-tree.h:5025
Definition parse-tree.h:4390
Definition parse-tree.h:3591
Definition parse-tree.h:4398
Definition parse-tree.h:4415
Definition parse-tree.h:4433
Definition parse-tree.h:4492
Definition parse-tree.h:4490
Definition parse-tree.h:4514
Definition parse-tree.h:4522
Definition parse-tree.h:4532
Definition parse-tree.h:4542
Definition parse-tree.h:4550
Definition parse-tree.h:3492
Definition parse-tree.h:5048
Definition parse-tree.h:4505
Definition parse-tree.h:4472
Definition parse-tree.h:4565
Definition parse-tree.h:5077
Definition parse-tree.h:5419
Definition parse-tree.h:5148
Definition parse-tree.h:4576
Definition parse-tree.h:5110
Definition parse-tree.h:4584
Definition parse-tree.h:4597
Definition parse-tree.h:4608
Definition parse-tree.h:4618
Definition parse-tree.h:4626
Definition parse-tree.h:4631
Definition parse-tree.h:4639
Definition parse-tree.h:4655
Definition parse-tree.h:4678
Definition parse-tree.h:4644
Definition parse-tree.h:4668
Definition parse-tree.h:4685
Definition parse-tree.h:3603
Definition parse-tree.h:4445
Definition parse-tree.h:4463
Definition parse-tree.h:4454
Definition parse-tree.h:4694
Definition parse-tree.h:4709
Definition parse-tree.h:4720
Definition parse-tree.h:4745
Definition parse-tree.h:4757
Definition parse-tree.h:4766
Definition parse-tree.h:5095
Definition parse-tree.h:5104
Definition parse-tree.h:4790
Definition parse-tree.h:4802
Definition parse-tree.h:4814
Definition parse-tree.h:3537
Definition parse-tree.h:3528
Definition parse-tree.h:3525
Definition parse-tree.h:4825
Definition parse-tree.h:4838
Definition parse-tree.h:4850
Definition parse-tree.h:4861
Definition parse-tree.h:3581
Definition parse-tree.h:4871
Definition parse-tree.h:4880
Definition parse-tree.h:4892
Definition parse-tree.h:4903
Definition parse-tree.h:4910
Definition parse-tree.h:3541
Definition parse-tree.h:3563
Definition parse-tree.h:3550
Definition parse-tree.h:4919
Definition parse-tree.h:4930
Definition parse-tree.h:4939
Definition parse-tree.h:4954
Definition parse-tree.h:4964
Definition parse-tree.h:3517
Definition parse-tree.h:3510
Definition parse-tree.h:4973
Definition parse-tree.h:4998
Definition parse-tree.h:5020
Definition parse-tree.h:5009
Definition parse-tree.h:3062
Definition parse-tree.h:5686
Definition parse-tree.h:5693
Definition parse-tree.h:5622
Definition parse-tree.h:5715
Definition parse-tree.h:5754
Definition parse-tree.h:5743
Definition parse-tree.h:5734
Definition parse-tree.h:5616
Definition parse-tree.h:5628
Definition parse-tree.h:5304
Definition parse-tree.h:5137
Definition parse-tree.h:5309
Definition parse-tree.h:5346
Definition parse-tree.h:5450
Definition parse-tree.h:5294
Definition parse-tree.h:5125
Definition parse-tree.h:5357
Definition parse-tree.h:5371
Definition parse-tree.h:5387
Definition parse-tree.h:5233
Definition parse-tree.h:5395
Definition parse-tree.h:5468
Definition parse-tree.h:5424
Definition parse-tree.h:5239
Definition parse-tree.h:5157
Definition parse-tree.h:5163
Definition parse-tree.h:5406
Definition parse-tree.h:5245
Definition parse-tree.h:5114
Definition parse-tree.h:376
Definition parse-tree.h:2796
Definition parse-tree.h:2759
Definition parse-tree.h:2987
Definition parse-tree.h:2025
Definition parse-tree.h:1552
Definition parse-tree.h:1986
Definition parse-tree.h:2822
Definition parse-tree.h:3107
Definition parse-tree.h:2780
Definition parse-tree.h:925
Definition parse-tree.h:3085
Definition parse-tree.h:1066
Definition parse-tree.h:1094
Definition parse-tree.h:1885
Definition parse-tree.h:1086
Definition parse-tree.h:1080
Definition parse-tree.h:1073
Definition parse-tree.h:3095
Definition parse-tree.h:3219
Definition parse-tree.h:3187
Definition parse-tree.h:571
Definition parse-tree.h:2743
Definition parse-tree.h:809
Definition parse-tree.h:2257
Definition parse-tree.h:2973
Definition parse-tree.h:1565
Definition parse-tree.h:295
Definition parse-tree.h:1651
Definition parse-tree.h:2380
Definition parse-tree.h:2444
Definition parse-tree.h:2456
Definition parse-tree.h:2435
Definition parse-tree.h:2490
Definition parse-tree.h:2470
Definition parse-tree.h:2136
Definition parse-tree.h:3310
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1955
Definition parse-tree.h:359
Definition parse-tree.h:3328
Definition parse-tree.h:2522
Definition parse-tree.h:1875
Definition parse-tree.h:1203
Definition parse-tree.h:3443
Definition parse-tree.h:3415
Definition parse-tree.h:3438
Definition parse-tree.h:2993
Definition parse-tree.h:3004
Definition parse-tree.h:3156
Definition parse-tree.h:3294
Definition parse-tree.h:1642
Definition parse-tree.h:1837
Definition parse-tree.h:1633
Definition parse-tree.h:1823
Definition parse-tree.h:3126
Definition parse-tree.h:2540
Definition parse-tree.h:2553
Definition parse-tree.h:903
Definition parse-tree.h:1146
Definition parse-tree.h:1159
Definition parse-tree.h:1121
Definition parse-tree.h:1168
Definition parse-tree.h:1131
Definition parse-tree.h:1394
Definition parse-tree.h:2479
Definition parse-tree.h:931
Definition parse-tree.h:939
Definition parse-tree.h:740
Definition parse-tree.h:649
Definition parse-tree.h:753
Definition parse-tree.h:3431
Definition parse-tree.h:354
Definition parse-tree.h:2612
Definition parse-tree.h:796
Definition parse-tree.h:3071
Definition parse-tree.h:1853
Definition parse-tree.h:726
Definition parse-tree.h:731
Definition parse-tree.h:282
Definition parse-tree.h:2806
Definition parse-tree.h:2051
Definition parse-tree.h:2044
Definition parse-tree.h:2075
Definition parse-tree.h:2038
Definition parse-tree.h:2765
Definition parse-tree.h:3665
Definition parse-tree.h:3656
Definition parse-tree.h:3626
Definition parse-tree.h:3615
Definition parse-tree.h:3610
Definition parse-tree.h:3636
Definition parse-tree.h:3649
Definition parse-tree.h:3820
Definition parse-tree.h:3837
Definition parse-tree.h:3829
Definition parse-tree.h:3865
Definition parse-tree.h:3877
Definition parse-tree.h:3887
Definition parse-tree.h:3898
Definition parse-tree.h:3911
Definition parse-tree.h:3923
Definition parse-tree.h:3944
Definition parse-tree.h:3955
Definition parse-tree.h:3965
Definition parse-tree.h:3974
Definition parse-tree.h:4006
Definition parse-tree.h:4017
Definition parse-tree.h:4028
Definition parse-tree.h:4040
Definition parse-tree.h:4050
Definition parse-tree.h:4058
Definition parse-tree.h:4067
Definition parse-tree.h:4076
Definition parse-tree.h:4110
Definition parse-tree.h:4097
Definition parse-tree.h:4084
Definition parse-tree.h:4134
Definition parse-tree.h:4125
Definition parse-tree.h:4168
Definition parse-tree.h:4144
Definition parse-tree.h:4177
Definition parse-tree.h:4190
Definition parse-tree.h:4199
Definition parse-tree.h:4209
Definition parse-tree.h:4219
Definition parse-tree.h:4228
Definition parse-tree.h:4236
Definition parse-tree.h:4246
Definition parse-tree.h:4257
Definition parse-tree.h:4270
Definition parse-tree.h:3703
Definition parse-tree.h:3686
Definition parse-tree.h:3727
Definition parse-tree.h:3693
Definition parse-tree.h:3754
Definition parse-tree.h:3766
Definition parse-tree.h:3779
Definition parse-tree.h:3788