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, OmpMemoryOrderType)
68 NODE_ENUM(common, OpenACCDeviceType)
69 NODE(format, ControlEditDesc)
70 NODE(format::ControlEditDesc, Kind)
71 NODE(format, DerivedTypeDataEditDesc)
72 NODE(format, FormatItem)
73 NODE(format, FormatSpecification)
74 NODE(format, IntrinsicTypeDataEditDesc)
76 NODE(parser, Abstract)
78 NODE(AccAtomicCapture, Stmt1)
79 NODE(AccAtomicCapture, Stmt2)
87 NODE(parser, AccClause)
88#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
89#include "llvm/Frontend/OpenACC/ACC.inc"
92 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
93 return llvm::Twine(
94 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
95 .str();
96 }
100 NODE_ENUM(parser::AccDataModifier, Modifier)
102 NODE(parser, AccEndAtomic)
106 NODE(parser, AccGangArg)
107 NODE(AccGangArg, Num)
108 NODE(AccGangArg, Dim)
109 NODE(AccGangArg, Static)
111 NODE(parser, AccObject)
112 NODE(parser, AccObjectList)
115 NODE(parser, AccSizeExpr)
117 NODE(parser, AccSelfClause)
120
122 NODE(parser, AccTileExpr)
125 NODE(parser, AccEndLoop)
127 static std::string GetNodeName(const llvm::acc::Directive &x) {
128 return llvm::Twine(
129 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
130 .str();
131 }
132 NODE(parser, AcImpliedDo)
134 NODE(parser, AcValue)
135 NODE(parser, AccessStmt)
136 NODE(parser, AccessId)
137 NODE(parser, AccessSpec)
138 NODE_ENUM(AccessSpec, Kind)
139 NODE(parser, AcSpec)
140 NODE(parser, ActionStmt)
141 NODE(parser, ActualArg)
142 NODE(ActualArg, PercentRef)
143 NODE(ActualArg, PercentVal)
144 NODE(parser, ActualArgSpec)
145 NODE(AcValue, Triplet)
146 NODE(parser, AllocOpt)
147 NODE(AllocOpt, Mold)
148 NODE(AllocOpt, Source)
149 NODE(AllocOpt, Stream)
150 NODE(AllocOpt, Pinned)
151 NODE(parser, Allocatable)
152 NODE(parser, AllocatableStmt)
156 NODE(parser, AllocateStmt)
157 NODE(parser, Allocation)
158 NODE(parser, AltReturnSpec)
160 NODE(parser, ArrayConstructor)
161 NODE(parser, ArrayElement)
162 NODE(parser, ArraySpec)
163 NODE(parser, AssignStmt)
167 NODE(parser, AssociateStmt)
168 NODE(parser, Association)
169 NODE(parser, AssumedImpliedSpec)
170 NODE(parser, AssumedRankSpec)
171 NODE(parser, AssumedShapeSpec)
173 NODE(parser, Asynchronous)
174 NODE(parser, AsynchronousStmt)
175 NODE(parser, AttrSpec)
176 NODE(parser, BOZLiteralConstant)
177 NODE(parser, BackspaceStmt)
178 NODE(parser, BasedPointer)
179 NODE(parser, BasedPointerStmt)
180 NODE(parser, BindAttr)
181 NODE(BindAttr, Deferred)
182 NODE(BindAttr, Non_Overridable)
183 NODE(parser, BindEntity)
184 NODE_ENUM(BindEntity, Kind)
185 NODE(parser, BindStmt)
186 NODE(parser, Block)
188 NODE(parser, BlockData)
189 NODE(parser, BlockDataStmt)
190 NODE(parser, BlockSpecificationPart)
191 NODE(parser, BlockStmt)
193 NODE(parser, BoundsSpec)
194 NODE(parser, Call)
195 NODE(parser, CallStmt)
196 NODE(CallStmt, Chevrons)
197 NODE(CallStmt, StarOrExpr)
198 NODE(parser, CaseConstruct)
199 NODE(CaseConstruct, Case)
200 NODE(parser, CaseSelector)
201 NODE(parser, CaseStmt)
203 NODE(CaseValueRange, Range)
206 NODE(parser, CharLength)
209 NODE(parser, CharSelector)
210 NODE(CharSelector, LengthAndKind)
211 NODE(parser, CloseStmt)
212 NODE(CloseStmt, CloseSpec)
214 NODE(parser, CoarraySpec)
216 NODE(parser, CodimensionStmt)
219 NODE(parser, CommonStmt)
220 NODE(CommonStmt, Block)
222 NODE(CompilerDirective, AssumeAligned)
223 NODE(CompilerDirective, IgnoreTKR)
224 NODE(CompilerDirective, Inline)
225 NODE(CompilerDirective, IVDep)
226 NODE(CompilerDirective, ForceInline)
227 NODE(CompilerDirective, LoopCount)
228 NODE(CompilerDirective, NameValue)
229 NODE(CompilerDirective, NoInline)
230 NODE(CompilerDirective, Unrecognized)
231 NODE(CompilerDirective, VectorAlways)
232 NODE_ENUM(CompilerDirective::VectorLength, VectorLength::Kind)
233 NODE(CompilerDirective, VectorLength)
234 NODE(CompilerDirective, Unroll)
235 NODE(CompilerDirective, UnrollAndJam)
236 NODE(CompilerDirective, NoVector)
237 NODE(CompilerDirective, NoUnroll)
238 NODE(CompilerDirective, NoUnrollAndJam)
239 NODE(CompilerDirective, Prefetch)
241 NODE(parser, ComplexPart)
244 NODE(parser, ComponentDataSource)
245 NODE(parser, ComponentDecl)
246 NODE(parser, FillDecl)
249 NODE(parser, ComponentSpec)
253 NODE(parser, ConnectSpec)
254 NODE(ConnectSpec, CharExpr)
255 NODE_ENUM(ConnectSpec::CharExpr, Kind)
256 NODE(ConnectSpec, Newunit)
257 NODE(ConnectSpec, Recl)
258 NODE(parser, ContainsStmt)
259 NODE(parser, Contiguous)
260 NODE(parser, ContiguousStmt)
261 NODE(parser, ContinueStmt)
263 NODE(parser, CriticalStmt)
266 NODE(CUFKernelDoConstruct, StarOrExpr)
267 NODE(CUFKernelDoConstruct, Directive)
268 NODE(CUFKernelDoConstruct, LaunchConfiguration)
269 NODE(parser, CUFReduction)
270 NODE(parser, CycleStmt)
272 NODE(parser, DataIDoObject)
273 NODE(parser, DataImpliedDo)
274 NODE(parser, DataRef)
275 NODE(parser, DataStmt)
279 NODE(parser, DataStmtSet)
280 NODE(parser, DataStmtValue)
284 NODE(DeclarationTypeSpec, Class)
285 NODE(DeclarationTypeSpec, ClassStar)
286 NODE(DeclarationTypeSpec, Record)
287 NODE(DeclarationTypeSpec, Type)
288 NODE(DeclarationTypeSpec, TypeStar)
289 NODE(parser, Default)
290 NODE(parser, DeferredCoshapeSpecList)
291 NODE(parser, DeferredShapeSpecList)
292 NODE(parser, DefinedOpName)
294 NODE_ENUM(DefinedOperator, IntrinsicOperator)
298 NODE(parser, Designator)
299 NODE(parser, DimensionStmt)
300 NODE(DimensionStmt, Declaration)
301 NODE(parser, DoConstruct)
302 NODE(parser, DummyArg)
303 NODE(parser, ElseIfStmt)
304 NODE(parser, ElseStmt)
305 NODE(parser, ElsewhereStmt)
306 NODE(parser, EndAssociateStmt)
307 NODE(parser, EndBlockDataStmt)
308 NODE(parser, EndBlockStmt)
310 NODE(parser, EndCriticalStmt)
311 NODE(parser, EndDoStmt)
312 NODE(parser, EndEnumStmt)
313 NODE(parser, EndForallStmt)
314 NODE(parser, EndFunctionStmt)
315 NODE(parser, EndIfStmt)
316 NODE(parser, EndInterfaceStmt)
317 NODE(parser, EndLabel)
318 NODE(parser, EndModuleStmt)
319 NODE(parser, EndMpSubprogramStmt)
320 NODE(parser, EndProgramStmt)
321 NODE(parser, EndSelectStmt)
322 NODE(parser, EndSubmoduleStmt)
323 NODE(parser, EndSubroutineStmt)
324 NODE(parser, EndTypeStmt)
325 NODE(parser, EndWhereStmt)
326 NODE(parser, EndfileStmt)
327 NODE(parser, EntityDecl)
328 NODE(parser, EntryStmt)
329 NODE(parser, EnumDef)
330 NODE(parser, EnumDefStmt)
331 NODE(parser, Enumerator)
332 NODE(parser, EnumeratorDefStmt)
333 NODE(parser, EorLabel)
334 NODE(parser, EquivalenceObject)
335 NODE(parser, EquivalenceStmt)
336 NODE(parser, ErrLabel)
337 NODE(parser, ErrorRecovery)
338 NODE(parser, EventPostStmt)
339 NODE(parser, EventWaitSpec)
340 NODE(parser, EventWaitStmt)
342 NODE(parser, ExecutionPart)
344 NODE(parser, ExitStmt)
347 NODE(parser, Expr)
348 NODE(Expr, Parentheses)
349 NODE(Expr, UnaryPlus)
350 NODE(Expr, Negate)
351 NODE(Expr, NOT)
352 NODE(Expr, PercentLoc)
353 NODE(Expr, DefinedUnary)
354 NODE(Expr, Power)
355 NODE(Expr, Multiply)
356 NODE(Expr, Divide)
357 NODE(Expr, Add)
358 NODE(Expr, Subtract)
359 NODE(Expr, Concat)
360 NODE(Expr, LT)
361 NODE(Expr, LE)
362 NODE(Expr, EQ)
363 NODE(Expr, NE)
364 NODE(Expr, GE)
365 NODE(Expr, GT)
366 NODE(Expr, AND)
367 NODE(Expr, OR)
368 NODE(Expr, EQV)
369 NODE(Expr, NEQV)
370 NODE(Expr, DefinedBinary)
371 NODE(Expr, ComplexConstructor)
372 NODE(parser, External)
373 NODE(parser, ExternalStmt)
374 NODE(parser, FailImageStmt)
375 NODE(parser, FileUnitNumber)
376 NODE(parser, FinalProcedureStmt)
377 NODE(parser, FlushStmt)
382 NODE(parser, ForallStmt)
383 NODE(parser, FormTeamStmt)
384 NODE(FormTeamStmt, FormTeamSpec)
385 NODE(parser, Format)
386 NODE(parser, FormatStmt)
388 NODE(parser, FunctionStmt)
390 NODE(parser, GenericSpec)
391 NODE(GenericSpec, Assignment)
392 NODE(GenericSpec, ReadFormatted)
393 NODE(GenericSpec, ReadUnformatted)
394 NODE(GenericSpec, WriteFormatted)
395 NODE(GenericSpec, WriteUnformatted)
396 NODE(parser, GenericStmt)
397 NODE(parser, GotoStmt)
399 NODE(parser, IdExpr)
400 NODE(parser, IdVariable)
401 NODE(parser, IfConstruct)
402 NODE(IfConstruct, ElseBlock)
403 NODE(IfConstruct, ElseIfBlock)
404 NODE(parser, IfStmt)
405 NODE(parser, IfThenStmt)
406 NODE(parser, TeamValue)
407 NODE(parser, ImageSelector)
409 NODE(ImageSelectorSpec, Notify)
410 NODE(ImageSelectorSpec, Stat)
411 NODE(ImageSelectorSpec, Team_Number)
412 NODE(parser, ImplicitPart)
414 NODE(parser, ImplicitSpec)
415 NODE(parser, ImplicitStmt)
416 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
417 NODE(parser, ImpliedShapeSpec)
418 NODE(parser, ImportStmt)
421 NODE(parser, InputItem)
422 NODE(parser, InquireSpec)
423 NODE(InquireSpec, CharVar)
424 NODE_ENUM(InquireSpec::CharVar, Kind)
425 NODE(InquireSpec, IntVar)
426 NODE_ENUM(InquireSpec::IntVar, Kind)
427 NODE(InquireSpec, LogVar)
428 NODE_ENUM(InquireSpec::LogVar, Kind)
429 NODE(parser, InquireStmt)
430 NODE(InquireStmt, Iolength)
431 NODE(parser, IntegerTypeSpec)
432 NODE(parser, IntentSpec)
433 NODE_ENUM(IntentSpec, Intent)
434 NODE(parser, IntentStmt)
436 NODE(parser, InterfaceBody)
437 NODE(InterfaceBody, Function)
438 NODE(InterfaceBody, Subroutine)
440 NODE(parser, InterfaceStmt)
443 NODE(parser, Intrinsic)
444 NODE(parser, IntrinsicStmt)
446 NODE(IntrinsicTypeSpec, Character)
447 NODE(IntrinsicTypeSpec, Complex)
448 NODE(IntrinsicTypeSpec, DoubleComplex)
449 NODE(IntrinsicTypeSpec, DoublePrecision)
451 NODE(IntrinsicTypeSpec, Real)
452 NODE(parser, IoControlSpec)
453 NODE(IoControlSpec, Asynchronous)
454 NODE(IoControlSpec, CharExpr)
455 NODE_ENUM(IoControlSpec::CharExpr, Kind)
456 NODE(IoControlSpec, Pos)
457 NODE(IoControlSpec, Rec)
458 NODE(IoControlSpec, Size)
459 NODE(parser, IoUnit)
460 NODE(parser, Keyword)
461 NODE(parser, KindParam)
462 NODE(parser, KindSelector)
463 NODE(KindSelector, StarSize)
464 NODE(parser, LabelDoStmt)
467 NODE(parser, LetterSpec)
471 NODE_ENUM(parser::ReductionOperator, Operator)
472 NODE(parser, LocalitySpec)
473 NODE(LocalitySpec, DefaultNone)
474 NODE(LocalitySpec, Local)
475 NODE(LocalitySpec, LocalInit)
476 NODE(LocalitySpec, Reduce)
477 NODE(LocalitySpec, Shared)
478 NODE(parser, LockStmt)
479 NODE(LockStmt, LockStat)
481 NODE_NAME(LoopControl::Bounds, "LoopBounds")
482 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
483 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
484 NODE(parser, LoopControl)
485 NODE(LoopControl, Concurrent)
486 NODE(parser, MainProgram)
487 NODE(parser, Map)
488 NODE(Map, EndMapStmt)
489 NODE(Map, MapStmt)
491 NODE(parser, Module)
492 NODE(parser, ModuleStmt)
495 NODE(parser, MpSubprogramStmt)
496 NODE(parser, MsgVariable)
497 NODE(parser, Name)
498 NODE(parser, NamedConstant)
500 NODE(parser, NamelistStmt)
501 NODE(NamelistStmt, Group)
503 NODE(parser, NoPass)
505 NODE(parser, NullifyStmt)
506 NODE(parser, NullInit)
507 NODE(parser, ObjectDecl)
508 NODE(parser, OldParameterStmt)
509
510 static std::string GetNodeName(const llvm::omp::Directive &x) {
511 return llvm::Twine("llvm::omp::Directive = ",
512 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
513 .str();
514 }
515 static std::string GetNodeName(const llvm::omp::Clause &x) {
516 return llvm::Twine(
517 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
518 .str();
519 }
522 NODE_ENUM(OmpAccessGroup, Value)
524 NODE(OmpAdjustArgsClause, OmpAdjustOp)
525 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
527 NODE(OmpAffinityClause, Modifier)
530 NODE(OmpAlignedClause, Modifier)
531 NODE(parser, OmpAlignment)
534 NODE(OmpAllocateClause, Modifier)
539 NODE_ENUM(OmpAlwaysModifier, Value)
541 NODE(OmpAppendArgsClause, OmpAppendOp)
542 NODE(parser, OmpArgument)
544 NODE(parser, OmpAtClause)
545 NODE_ENUM(OmpAtClause, ActionTime)
548 NODE_ENUM(OmpAttachModifier, Value)
550 NODE_ENUM(OmpAutomapModifier, Value)
555 NODE(parser, OmpBindClause)
556 NODE_ENUM(OmpBindClause, Binding)
560 NODE_ENUM(OmpChunkModifier, Value)
561 NODE(parser, OmpClause)
562 NODE(parser, OmpClauseList)
564 NODE_ENUM(OmpCloseModifier, Value)
570 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
572 NODE(OmpDefaultmapClause, Modifier)
573 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
575 NODE_ENUM(OmpDeleteModifier, Value)
577 NODE(OmpDependClause, TaskDep)
578 NODE(OmpDependClause::TaskDep, Modifier)
580 NODE_ENUM(OmpDependenceType, Value)
584 NODE(OmpDeviceClause, Modifier)
586 NODE_ENUM(OmpDeviceModifier, Value)
589 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
593 NODE_ENUM(OmpDirectiveSpecification, Flag)
594 NODE_ENUMSET(OmpDirectiveSpecification, Flags)
595 NODE(parser, OmpDoacross)
596 NODE(OmpDoacross, Sink)
597 NODE(OmpDoacross, Source)
601 NODE(OmpDynGroupprivateClause, Modifier)
606 NODE(OmpEnterClause, Modifier)
609 NODE_ENUM(OmpExpectation, Value)
610 NODE(parser, OmpFailClause)
612 NODE_ENUM(OmpFallbackModifier, Value)
613 NODE(parser, OmpFromClause)
614 NODE(OmpFromClause, Modifier)
616 NODE(OmpGrainsizeClause, Modifier)
619 NODE(parser, OmpHintClause)
621 NODE(parser, OmpIfClause)
622 NODE(OmpIfClause, Modifier)
624 NODE(parser, OmpInitClause)
625 NODE(OmpInitClause, Modifier)
629 NODE(OmpInReductionClause, Modifier)
631 NODE_ENUM(OmpInteropType, Value)
632 NODE(parser, OmpIteration)
635 NODE(parser, OmpIterator)
638 NODE(OmpLastprivateClause, Modifier)
640 NODE_ENUM(OmpLastprivateModifier, Value)
642 NODE(OmpLinearClause, Modifier)
644 NODE_ENUM(OmpLinearModifier, Value)
645 NODE(parser, OmpLocator)
648 NODE(parser, OmpLowerBound)
649 NODE(parser, OmpMapClause)
650 NODE(OmpMapClause, Modifier)
651 NODE(parser, OmpMapper)
653 NODE(parser, OmpMapType)
654 NODE_ENUM(OmpMapType, Value)
656 NODE_ENUM(OmpMapTypeModifier, Value)
660 NODE(parser, OmpNoOpenMPClause)
661 NODE(parser, OmpNoOpenMPRoutinesClause)
662 NODE(parser, OmpNoParallelismClause)
666 NODE(OmpNumTeamsClause, Modifier)
668 NODE(OmpNumThreadsClause, Modifier)
669 NODE(OmpNumTasksClause, Modifier)
670 NODE(parser, OmpObject)
671 NODE(OmpObject, Invalid)
672 NODE_ENUM(OmpObject::Invalid, Kind)
673 NODE(parser, OmpObjectList)
675 NODE(OmpOrderClause, Modifier)
676 NODE_ENUM(OmpOrderClause, Ordering)
678 NODE_ENUM(OmpOrderingModifier, Value)
680 NODE_ENUM(OmpOrderModifier, Value)
684 NODE(parser, OmpPreferType)
686 NODE_ENUM(OmpPrescriptiveness, Value)
688 NODE_ENUM(OmpPresentModifier, Value)
690 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
692 NODE(OmpReductionClause, Modifier)
695 NODE_ENUM(OmpReductionModifier, Value)
698 NODE_ENUM(OmpRefModifier, Value)
702 NODE(OmpScheduleClause, Modifier)
703 NODE_ENUM(OmpScheduleClause, Kind)
706 NODE_ENUM(OmpSelfModifier, Value)
708 NODE_ENUM(OmpSeverityClause, SevLevel)
714 NODE(OmpStylizedInstance, Instance)
716 NODE_ENUM(OmpTaskDependenceType, Value)
718 NODE(OmpTaskReductionClause, Modifier)
720 NODE(OmpThreadLimitClause, Modifier)
722 NODE_ENUM(OmpThreadsetClause, ThreadsetPolicy)
723 NODE(parser, OmpToClause)
724 NODE(OmpToClause, Modifier)
727 NODE(OmpTraitPropertyExtension, Complex)
729 NODE(parser, OmpTraitScore)
731 NODE(OmpTraitSelector, Properties)
733 NODE_ENUM(OmpTraitSelectorName, Value)
736 NODE_ENUM(OmpTraitSetSelectorName, Value)
738 NODE(parser, OmpTypeName)
743 NODE(parser, OmpUseClause)
745 NODE_ENUM(OmpVariableCategory, Value)
746 NODE(parser, OmpWhenClause)
747 NODE(OmpWhenClause, Modifier)
749 NODE_ENUM(OmpxHoldModifier, Value)
750#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
751#include "llvm/Frontend/OpenMP/OMP.inc"
752
753 NODE(parser, Only)
767
795
796 NODE(parser, OpenStmt)
797 NODE(parser, Optional)
798 NODE(parser, OptionalStmt)
801 NODE(parser, OutputItem)
802 NODE(parser, Parameter)
803 NODE(parser, ParameterStmt)
805 NODE(parser, Pass)
806 NODE(parser, PauseStmt)
807 NODE(parser, Pointer)
809 NODE(PointerAssignmentStmt, Bounds)
810 NODE(parser, PointerDecl)
811 NODE(parser, PointerObject)
812 NODE(parser, PointerStmt)
814 NODE(parser, PrefixSpec)
815 NODE(PrefixSpec, Elemental)
816 NODE(PrefixSpec, Impure)
817 NODE(PrefixSpec, Module)
818 NODE(PrefixSpec, Non_Recursive)
819 NODE(PrefixSpec, Pure)
820 NODE(PrefixSpec, Recursive)
821 NODE(PrefixSpec, Attributes)
822 NODE(PrefixSpec, Launch_Bounds)
823 NODE(PrefixSpec, Cluster_Dims)
824 NODE(parser, PrintStmt)
825 NODE(parser, PrivateStmt)
827 NODE(parser, ProcAttrSpec)
831 NODE(parser, ProcDecl)
832 NODE(parser, ProcInterface)
836 NODE(parser, ProcedureStmt)
837 NODE_ENUM(ProcedureStmt, Kind)
838 NODE(parser, Program)
839 NODE(parser, ProgramStmt)
840 NODE(parser, ProgramUnit)
841 NODE(parser, Protected)
842 NODE(parser, ProtectedStmt)
843 NODE(parser, ReadStmt)
845 NODE(RealLiteralConstant, Real)
846 NODE(parser, Rename)
847 NODE(Rename, Names)
848 NODE(Rename, Operators)
849 NODE(parser, ReturnStmt)
850 NODE(parser, RewindStmt)
851 NODE(parser, Save)
852 NODE(parser, SaveStmt)
853 NODE(parser, SavedEntity)
854 NODE_ENUM(SavedEntity, Kind)
858 NODE(SelectRankCaseStmt, Rank)
860 NODE(SelectRankConstruct, RankCase)
863 NODE(SelectTypeConstruct, TypeCase)
865 NODE(parser, Selector)
867 NODE(parser, SequenceStmt)
868 NODE(parser, Sign)
873 NODE(parser, SpecificationExpr)
875 NODE(parser, Star)
876 NODE(parser, StatOrErrmsg)
877 NODE(parser, StatVariable)
878 NODE(parser, StatusExpr)
880 NODE(parser, StopCode)
881 NODE(parser, StopStmt)
882 NODE_ENUM(StopStmt, Kind)
885 NODE(parser, StructureDef)
886 NODE(StructureDef, EndStructureStmt)
888 NODE(parser, StructureStmt)
889 NODE(parser, Submodule)
890 NODE(parser, SubmoduleStmt)
894 NODE(parser, Substring)
897 NODE(parser, Suffix)
898 NODE(parser, SyncAllStmt)
900 NODE(SyncImagesStmt, ImageSet)
901 NODE(parser, SyncMemoryStmt)
902 NODE(parser, SyncTeamStmt)
903 NODE(parser, Target)
904 NODE(parser, TargetStmt)
905 NODE(parser, TypeAttrSpec)
906 NODE(TypeAttrSpec, BindC)
907 NODE(TypeAttrSpec, Extends)
913 NODE(TypeBoundProcedureStmt, WithInterface)
914 NODE(TypeBoundProcedureStmt, WithoutInterface)
916 NODE(parser, TypeGuardStmt)
917 NODE(TypeGuardStmt, Guard)
918 NODE(parser, TypeParamDecl)
920 NODE(common, TypeParamAttr)
921 NODE(parser, TypeParamSpec)
923 NODE(TypeParamValue, Deferred)
924 NODE(parser, TypeSpec)
925 NODE(parser, Union)
926 NODE(Union, EndUnionStmt)
927 NODE(Union, UnionStmt)
928 NODE(parser, UnlockStmt)
930 NODE(parser, UnsignedTypeSpec)
931 NODE(parser, UseStmt)
932 NODE_ENUM(UseStmt, ModuleNature)
933 NODE(parser, Value)
934 NODE(parser, ValueStmt)
935 NODE(parser, Variable)
937 NODE(VectorTypeSpec, PairVectorTypeSpec)
938 NODE(VectorTypeSpec, QuadVectorTypeSpec)
939 NODE(parser, IntrinsicVectorTypeSpec)
941 NODE(parser, Verbatim)
942 NODE(parser, Volatile)
943 NODE(parser, VolatileStmt)
944 NODE(parser, WaitSpec)
945 NODE(parser, WaitStmt)
948 NODE(WhereConstruct, Elsewhere)
949 NODE(WhereConstruct, MaskedElsewhere)
951 NODE(parser, WhereStmt)
952 NODE(parser, WriteStmt)
953#undef NODE
954#undef NODE_NAME
955
956 template <typename T> bool Pre(const T &x) {
957 std::string fortran{AsFortran<T>(x)};
958 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
959 Prefix(GetNodeName(x));
960 } else {
961 IndentEmptyLine();
962 out_ << GetNodeName(x);
963 if (!fortran.empty()) {
964 out_ << " = '" << fortran << '\'';
965 }
966 EndLine();
967 ++indent_;
968 }
969 return true;
970 }
971
972 template <typename T> void Post(const T &x) {
973 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
974 EndLineIfNonempty();
975 } else {
976 --indent_;
977 }
978 }
979
980 // A few types we want to ignore
981
982 bool Pre(const CharBlock &) { return true; }
983 void Post(const CharBlock &) {}
984
985 template <typename T> bool Pre(const Statement<T> &) { return true; }
986 template <typename T> void Post(const Statement<T> &) {}
987 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
988 template <typename T> void Post(const UnlabeledStatement<T> &) {}
989
990 template <typename T> bool Pre(const common::Indirection<T> &) {
991 return true;
992 }
993 template <typename T> void Post(const common::Indirection<T> &) {}
994
995 template <typename A> bool Pre(const Scalar<A> &) {
996 Prefix("Scalar");
997 return true;
998 }
999 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
1000
1001 template <typename A> bool Pre(const Constant<A> &) {
1002 Prefix("Constant");
1003 return true;
1004 }
1005 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
1006
1007 template <typename A> bool Pre(const Integer<A> &) {
1008 Prefix("Integer");
1009 return true;
1010 }
1011 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
1012
1013 template <typename A> bool Pre(const Logical<A> &) {
1014 Prefix("Logical");
1015 return true;
1016 }
1017 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
1018
1019 template <typename A> bool Pre(const DefaultChar<A> &) {
1020 Prefix("DefaultChar");
1021 return true;
1022 }
1023 template <typename A> void Post(const DefaultChar<A> &) {
1024 EndLineIfNonempty();
1025 }
1026
1027 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
1028 template <typename... A> void Post(const std::tuple<A...> &) {}
1029
1030 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
1031 template <typename... A> void Post(const std::variant<A...> &) {}
1032
1033protected:
1034 // Return a Fortran representation of this node to include in the dump
1035 template <typename T> std::string AsFortran(const T &x) {
1036 std::string buf;
1037 llvm::raw_string_ostream ss{buf};
1038 if constexpr (HasTypedExpr<T>::value) {
1039 if (asFortran_ && x.typedExpr) {
1040 asFortran_->expr(ss, *x.typedExpr);
1041 }
1042 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
1043 std::is_same_v<T, PointerAssignmentStmt>) {
1044 if (asFortran_ && x.typedAssignment) {
1045 asFortran_->assignment(ss, *x.typedAssignment);
1046 }
1047 } else if constexpr (std::is_same_v<T, CallStmt>) {
1048 if (asFortran_ && x.typedCall) {
1049 asFortran_->call(ss, *x.typedCall);
1050 }
1051 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
1052 std::is_same_v<T, SignedIntLiteralConstant> ||
1053 std::is_same_v<T, UnsignedLiteralConstant>) {
1054 ss << std::get<CharBlock>(x.t);
1055 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1056 ss << x.source;
1057 } else if constexpr (std::is_same_v<T, std::string> ||
1058 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1059 ss << x;
1060 }
1061 if (ss.tell()) {
1062 return buf;
1063 }
1064 if constexpr (std::is_same_v<T, Name>) {
1065 return x.source.ToString();
1066#ifdef SHOW_ALL_SOURCE_MEMBERS
1067 } else if constexpr (HasSource<T>::value) {
1068 return x.source.ToString();
1069#endif
1070 } else if constexpr (std::is_same_v<T, int>) {
1071 return std::to_string(x);
1072 } else if constexpr (std::is_same_v<T, bool>) {
1073 return x ? "true" : "false";
1074 } else {
1075 return "";
1076 }
1077 }
1078
1079 void IndentEmptyLine() {
1080 if (emptyline_ && indent_ > 0) {
1081 for (int i{0}; i < indent_; ++i) {
1082 out_ << "| ";
1083 }
1084 emptyline_ = false;
1085 }
1086 }
1087
1088 void Prefix(const char *str) {
1089 IndentEmptyLine();
1090 out_ << str << " -> ";
1091 emptyline_ = false;
1092 }
1093
1094 void Prefix(const std::string &str) {
1095 IndentEmptyLine();
1096 out_ << str << " -> ";
1097 emptyline_ = false;
1098 }
1099
1100 void EndLine() {
1101 out_ << '\n';
1102 emptyline_ = true;
1103 }
1104
1105 void EndLineIfNonempty() {
1106 if (!emptyline_) {
1107 EndLine();
1108 }
1109 }
1110
1111private:
1112 int indent_{0};
1113 llvm::raw_ostream &out_;
1114 const AnalyzedObjectsAsFortran *const asFortran_;
1115 bool emptyline_{false};
1116};
1117
1118template <typename T>
1119llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1120 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1121 ParseTreeDumper dumper{out, asFortran};
1122 Walk(x, dumper);
1123 return out;
1124}
1125
1126} // namespace Fortran::parser
1127#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition enum-set.h:28
Definition indirection.h:31
Definition char-block.h:28
Definition dump-parse-tree.h:33
Definition bit-population-count.h:20
Definition check-expression.h:19
Definition format-specification.h:76
Definition format-specification.h:38
Definition parse-tree.h:1310
Definition parse-tree.h:1317
Definition parse-tree.h:1276
Definition parse-tree.h:1264
Definition parse-tree.h:5684
Definition parse-tree.h:5660
Definition parse-tree.h:5676
Definition parse-tree.h:5668
Definition parse-tree.h:5645
Definition parse-tree.h:5709
Definition parse-tree.h:5639
Definition parse-tree.h:5515
Definition parse-tree.h:5488
Definition parse-tree.h:5616
Definition parse-tree.h:5601
Definition parse-tree.h:5596
Definition parse-tree.h:5504
Definition parse-tree.h:5526
Definition parse-tree.h:5509
Definition parse-tree.h:5521
Definition parse-tree.h:5553
Definition parse-tree.h:5547
Definition parse-tree.h:5651
Definition parse-tree.h:5715
Definition parse-tree.h:5592
Definition parse-tree.h:5583
Definition parse-tree.h:5493
Definition parse-tree.h:5532
Definition parse-tree.h:5480
Definition parse-tree.h:5576
Definition parse-tree.h:5572
Definition parse-tree.h:5568
Definition parse-tree.h:5498
Definition parse-tree.h:5564
Definition parse-tree.h:5558
Definition parse-tree.h:5542
Definition parse-tree.h:916
Definition parse-tree.h:1434
Definition parse-tree.h:496
Definition parse-tree.h:3262
Definition parse-tree.h:3252
Definition parse-tree.h:1989
Definition parse-tree.h:1954
Definition parse-tree.h:1933
Definition parse-tree.h:1945
Definition parse-tree.h:2000
Definition parse-tree.h:1962
Definition parse-tree.h:3480
Definition parse-tree.h:1921
Definition parse-tree.h:1365
Definition parse-tree.h:3485
Definition parse-tree.h:3490
Definition parse-tree.h:2026
Definition parse-tree.h:2183
Definition parse-tree.h:2174
Definition parse-tree.h:2167
Definition parse-tree.h:1347
Definition parse-tree.h:1395
Definition parse-tree.h:3430
Definition parse-tree.h:1134
Definition parse-tree.h:1456
Definition parse-tree.h:1463
Definition parse-tree.h:2205
Definition parse-tree.h:3037
Definition parse-tree.h:2038
Definition parse-tree.h:3424
Definition parse-tree.h:5785
Definition parse-tree.h:5779
Definition parse-tree.h:3286
Definition parse-tree.h:3269
Definition parse-tree.h:2447
Definition parse-tree.h:2429
Definition parse-tree.h:2435
Definition parse-tree.h:2415
Definition parse-tree.h:2236
Definition parse-tree.h:2221
Definition parse-tree.h:670
Definition parse-tree.h:875
Definition parse-tree.h:686
Definition parse-tree.h:2705
Definition parse-tree.h:2213
Definition parse-tree.h:991
Definition parse-tree.h:1469
Definition parse-tree.h:1912
Definition parse-tree.h:1633
Definition parse-tree.h:1641
Definition parse-tree.h:3373
Definition parse-tree.h:861
Definition parse-tree.h:853
Definition parse-tree.h:1002
Definition parse-tree.h:1015
Definition parse-tree.h:1046
Definition parse-tree.h:1123
Definition parse-tree.h:1068
Definition parse-tree.h:1227
Definition parse-tree.h:2534
Definition parse-tree.h:2261
Definition parse-tree.h:2270
Definition parse-tree.h:2683
Definition parse-tree.h:2681
Definition parse-tree.h:303
Definition parse-tree.h:2252
Definition parse-tree.h:2243
Definition parse-tree.h:1076
Definition parse-tree.h:1523
Definition parse-tree.h:1535
Definition parse-tree.h:1828
Definition parse-tree.h:1494
Definition parse-tree.h:1543
Definition parse-tree.h:1509
Definition parse-tree.h:1549
Definition parse-tree.h:1515
Definition parse-tree.h:2020
Definition parse-tree.h:437
Definition parse-tree.h:775
Definition parse-tree.h:327
Definition parse-tree.h:612
Definition parse-tree.h:1212
Definition parse-tree.h:757
Definition parse-tree.h:933
Definition parse-tree.h:1867
Definition parse-tree.h:1560
Definition parse-tree.h:2348
Definition parse-tree.h:3170
Definition parse-tree.h:2368
Definition parse-tree.h:2230
Definition parse-tree.h:1410
Definition parse-tree.h:3342
Definition parse-tree.h:1256
Definition parse-tree.h:1242
Definition parse-tree.h:2588
Definition parse-tree.h:2594
Definition parse-tree.h:2602
Definition parse-tree.h:529
Definition parse-tree.h:554
Definition parse-tree.h:985
Definition parse-tree.h:972
Definition parse-tree.h:1710
Definition parse-tree.h:1062
Definition parse-tree.h:2124
Definition parse-tree.h:2140
Definition parse-tree.h:2118
Definition parse-tree.h:2153
Definition parse-tree.h:2130
Definition parse-tree.h:2614
Definition parse-tree.h:2717
Definition parse-tree.h:3274
Definition parse-tree.h:3159
Definition parse-tree.h:3308
Definition parse-tree.h:3050
Definition parse-tree.h:3065
Definition tools.h:134
Definition tools.h:140
Definition parse-tree.h:2382
Definition parse-tree.h:2398
Definition parse-tree.h:2361
Definition parse-tree.h:1694
Definition parse-tree.h:1704
Definition parse-tree.h:419
Definition parse-tree.h:1617
Definition parse-tree.h:1626
Definition parse-tree.h:625
Definition parse-tree.h:1033
Definition parse-tree.h:2812
Definition parse-tree.h:2756
Definition parse-tree.h:2899
Definition parse-tree.h:2907
Definition parse-tree.h:2912
Definition parse-tree.h:2897
Definition parse-tree.h:2925
Definition parse-tree.h:809
Definition parse-tree.h:311
Definition parse-tree.h:1373
Definition parse-tree.h:1569
Definition parse-tree.h:3226
Definition parse-tree.h:3191
Definition parse-tree.h:3216
Definition parse-tree.h:3071
Definition parse-tree.h:475
Definition parse-tree.h:463
Definition parse-tree.h:707
Definition parse-tree.h:2741
Definition parse-tree.h:2739
Definition parse-tree.h:2653
Definition parse-tree.h:796
Definition parse-tree.h:658
Definition parse-tree.h:2325
Definition parse-tree.h:1326
Definition parse-tree.h:676
Definition parse-tree.h:1611
Definition parse-tree.h:907
Definition parse-tree.h:2293
Definition parse-tree.h:2628
Definition parse-tree.h:889
Definition parse-tree.h:319
Definition parse-tree.h:2313
Definition parse-tree.h:2946
Definition parse-tree.h:3446
Definition parse-tree.h:2085
Definition parse-tree.h:2970
Definition parse-tree.h:2960
Definition parse-tree.h:2981
Definition parse-tree.h:587
Definition parse-tree.h:1332
Definition parse-tree.h:638
Definition parse-tree.h:2331
Definition parse-tree.h:2556
Definition parse-tree.h:1443
Definition parse-tree.h:4299
Definition parse-tree.h:4303
Definition parse-tree.h:4318
Definition parse-tree.h:4325
Definition parse-tree.h:4333
Definition parse-tree.h:4348
Definition parse-tree.h:5283
Definition parse-tree.h:4355
Definition parse-tree.h:4364
Definition parse-tree.h:5077
Definition parse-tree.h:5420
Definition parse-tree.h:5148
Definition parse-tree.h:4387
Definition parse-tree.h:5087
Definition parse-tree.h:5046
Definition parse-tree.h:5030
Definition parse-tree.h:3615
Definition parse-tree.h:4402
Definition parse-tree.h:4419
Definition parse-tree.h:4437
Definition parse-tree.h:4496
Definition parse-tree.h:4494
Definition parse-tree.h:4518
Definition parse-tree.h:4526
Definition parse-tree.h:4536
Definition parse-tree.h:4546
Definition parse-tree.h:4554
Definition parse-tree.h:3516
Definition parse-tree.h:5053
Definition parse-tree.h:4509
Definition parse-tree.h:4476
Definition parse-tree.h:4569
Definition parse-tree.h:5082
Definition parse-tree.h:5424
Definition parse-tree.h:5153
Definition parse-tree.h:4580
Definition parse-tree.h:5115
Definition parse-tree.h:4588
Definition parse-tree.h:4601
Definition parse-tree.h:4612
Definition parse-tree.h:4622
Definition parse-tree.h:4630
Definition parse-tree.h:4635
Definition parse-tree.h:4643
Definition parse-tree.h:4659
Definition parse-tree.h:4669
Definition parse-tree.h:4648
Definition parse-tree.h:5016
Definition parse-tree.h:4676
Definition parse-tree.h:3627
Definition parse-tree.h:4449
Definition parse-tree.h:4467
Definition parse-tree.h:4458
Definition parse-tree.h:4685
Definition parse-tree.h:4700
Definition parse-tree.h:4711
Definition parse-tree.h:4736
Definition parse-tree.h:4748
Definition parse-tree.h:4757
Definition parse-tree.h:5100
Definition parse-tree.h:5109
Definition parse-tree.h:4781
Definition parse-tree.h:4793
Definition parse-tree.h:4805
Definition parse-tree.h:3561
Definition parse-tree.h:3552
Definition parse-tree.h:3549
Definition parse-tree.h:4816
Definition parse-tree.h:4829
Definition parse-tree.h:4841
Definition parse-tree.h:4852
Definition parse-tree.h:3605
Definition parse-tree.h:4862
Definition parse-tree.h:4871
Definition parse-tree.h:4883
Definition parse-tree.h:4894
Definition parse-tree.h:4901
Definition parse-tree.h:3565
Definition parse-tree.h:3587
Definition parse-tree.h:3574
Definition parse-tree.h:4910
Definition parse-tree.h:4921
Definition parse-tree.h:4930
Definition parse-tree.h:4945
Definition parse-tree.h:4955
Definition parse-tree.h:3541
Definition parse-tree.h:3534
Definition parse-tree.h:4964
Definition parse-tree.h:4989
Definition parse-tree.h:5025
Definition parse-tree.h:5000
Definition parse-tree.h:3081
Definition parse-tree.h:5691
Definition parse-tree.h:5698
Definition parse-tree.h:5627
Definition parse-tree.h:5720
Definition parse-tree.h:5759
Definition parse-tree.h:5748
Definition parse-tree.h:5739
Definition parse-tree.h:5621
Definition parse-tree.h:5633
Definition parse-tree.h:5309
Definition parse-tree.h:5142
Definition parse-tree.h:5314
Definition parse-tree.h:5351
Definition parse-tree.h:5455
Definition parse-tree.h:5299
Definition parse-tree.h:5130
Definition parse-tree.h:5362
Definition parse-tree.h:5376
Definition parse-tree.h:5392
Definition parse-tree.h:5238
Definition parse-tree.h:5400
Definition parse-tree.h:5473
Definition parse-tree.h:5429
Definition parse-tree.h:5244
Definition parse-tree.h:5162
Definition parse-tree.h:5168
Definition parse-tree.h:5411
Definition parse-tree.h:5250
Definition parse-tree.h:5119
Definition parse-tree.h:376
Definition parse-tree.h:2817
Definition parse-tree.h:2780
Definition parse-tree.h:3006
Definition parse-tree.h:2050
Definition parse-tree.h:1579
Definition parse-tree.h:2009
Definition parse-tree.h:2843
Definition parse-tree.h:3126
Definition parse-tree.h:2801
Definition parse-tree.h:946
Definition parse-tree.h:3104
Definition parse-tree.h:1087
Definition parse-tree.h:1115
Definition parse-tree.h:1907
Definition parse-tree.h:1107
Definition parse-tree.h:1101
Definition parse-tree.h:1094
Definition parse-tree.h:3114
Definition parse-tree.h:3241
Definition parse-tree.h:3209
Definition parse-tree.h:571
Definition parse-tree.h:2764
Definition parse-tree.h:828
Definition parse-tree.h:2282
Definition parse-tree.h:2992
Definition parse-tree.h:1592
Definition parse-tree.h:295
Definition parse-tree.h:1679
Definition parse-tree.h:2405
Definition parse-tree.h:2470
Definition parse-tree.h:2482
Definition parse-tree.h:2461
Definition parse-tree.h:2516
Definition parse-tree.h:2496
Definition parse-tree.h:2161
Definition parse-tree.h:3334
Definition parse-tree.h:398
Definition parse-tree.h:451
Definition parse-tree.h:1978
Definition parse-tree.h:359
Definition parse-tree.h:3352
Definition parse-tree.h:2548
Definition parse-tree.h:1897
Definition parse-tree.h:1233
Definition parse-tree.h:3467
Definition parse-tree.h:3439
Definition parse-tree.h:3462
Definition parse-tree.h:3012
Definition parse-tree.h:3023
Definition parse-tree.h:3178
Definition parse-tree.h:3318
Definition parse-tree.h:1670
Definition parse-tree.h:1859
Definition parse-tree.h:1661
Definition parse-tree.h:1845
Definition parse-tree.h:3145
Definition parse-tree.h:2566
Definition parse-tree.h:2579
Definition parse-tree.h:924
Definition parse-tree.h:1176
Definition parse-tree.h:1189
Definition parse-tree.h:1142
Definition parse-tree.h:1198
Definition parse-tree.h:1152
Definition parse-tree.h:1424
Definition parse-tree.h:2505
Definition parse-tree.h:952
Definition parse-tree.h:960
Definition parse-tree.h:751
Definition parse-tree.h:649
Definition parse-tree.h:764
Definition parse-tree.h:3455
Definition parse-tree.h:354
Definition parse-tree.h:2638
Definition parse-tree.h:815
Definition parse-tree.h:3090
Definition parse-tree.h:1875
Definition parse-tree.h:737
Definition parse-tree.h:742
Definition parse-tree.h:282
Definition parse-tree.h:2827
Definition parse-tree.h:2076
Definition parse-tree.h:2069
Definition parse-tree.h:2100
Definition parse-tree.h:2063
Definition parse-tree.h:2786
Definition parse-tree.h:3689
Definition parse-tree.h:3680
Definition parse-tree.h:3650
Definition parse-tree.h:3639
Definition parse-tree.h:3634
Definition parse-tree.h:3660
Definition parse-tree.h:3673
Definition parse-tree.h:3844
Definition parse-tree.h:3861
Definition parse-tree.h:3853
Definition parse-tree.h:3889
Definition parse-tree.h:3901
Definition parse-tree.h:3911
Definition parse-tree.h:3922
Definition parse-tree.h:3935
Definition parse-tree.h:3947
Definition parse-tree.h:3968
Definition parse-tree.h:3977
Definition parse-tree.h:3986
Definition parse-tree.h:4018
Definition parse-tree.h:4029
Definition parse-tree.h:4074
Definition parse-tree.h:4086
Definition parse-tree.h:4096
Definition parse-tree.h:4104
Definition parse-tree.h:4113
Definition parse-tree.h:4122
Definition parse-tree.h:4156
Definition parse-tree.h:4143
Definition parse-tree.h:4130
Definition parse-tree.h:4180
Definition parse-tree.h:4171
Definition parse-tree.h:4063
Definition parse-tree.h:4039
Definition parse-tree.h:4189
Definition parse-tree.h:4202
Definition parse-tree.h:4211
Definition parse-tree.h:4221
Definition parse-tree.h:4231
Definition parse-tree.h:4240
Definition parse-tree.h:4248
Definition parse-tree.h:4258
Definition parse-tree.h:4269
Definition parse-tree.h:4282
Definition parse-tree.h:3727
Definition parse-tree.h:3710
Definition parse-tree.h:3751
Definition parse-tree.h:3717
Definition parse-tree.h:3778
Definition parse-tree.h:3790
Definition parse-tree.h:3803
Definition parse-tree.h:3812