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/idioms.h"
18#include "flang/Common/indirection.h"
19#include "flang/Support/Fortran.h"
20#include "llvm/Frontend/OpenMP/OMP.h"
21#include "llvm/Support/raw_ostream.h"
22#include <string>
23#include <type_traits>
24
25namespace Fortran::parser {
26
27//
28// Dump the Parse Tree hierarchy of any node 'x' of the parse tree.
29//
30
32public:
33 explicit ParseTreeDumper(llvm::raw_ostream &out,
34 const AnalyzedObjectsAsFortran *asFortran = nullptr)
35 : out_(out), asFortran_{asFortran} {}
36
37 static constexpr const char *GetNodeName(const char *) { return "char *"; }
38#define NODE_NAME(T, N) \
39 static constexpr const char *GetNodeName(const T &) { return N; }
40#define NODE_ENUM(T, E) \
41 static std::string GetNodeName(const T::E &x) { \
42 return #E " = "s + std::string{T::EnumToString(x)}; \
43 }
44#define NODE(T1, T2) NODE_NAME(T1::T2, #T2)
45 NODE_NAME(bool, "bool")
46 NODE_NAME(int, "int")
47 NODE(std, string)
48 NODE(std, int64_t)
49 NODE(std, uint64_t)
50 NODE_ENUM(common, CUDADataAttr)
51 NODE_ENUM(common, CUDASubprogramAttrs)
52 NODE_ENUM(common, OmpMemoryOrderType)
53 NODE_ENUM(common, OpenACCDeviceType)
54 NODE(format, ControlEditDesc)
55 NODE(format::ControlEditDesc, Kind)
56 NODE(format, DerivedTypeDataEditDesc)
57 NODE(format, FormatItem)
58 NODE(format, FormatSpecification)
59 NODE(format, IntrinsicTypeDataEditDesc)
61 NODE(parser, Abstract)
62 NODE(parser, AccAtomicCapture)
63 NODE(AccAtomicCapture, Stmt1)
64 NODE(AccAtomicCapture, Stmt2)
65 NODE(parser, AccAtomicRead)
66 NODE(parser, AccAtomicUpdate)
67 NODE(parser, AccAtomicWrite)
68 NODE(parser, AccBeginBlockDirective)
69 NODE(parser, AccBeginCombinedDirective)
70 NODE(parser, AccBeginLoopDirective)
71 NODE(parser, AccBlockDirective)
72 NODE(parser, AccClause)
73#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
74#include "llvm/Frontend/OpenACC/ACC.inc"
75 NODE(parser, AccBindClause)
76 NODE(parser, AccDefaultClause)
77 static std::string GetNodeName(const llvm::acc::DefaultValue &x) {
78 return llvm::Twine(
79 "llvm::acc::DefaultValue = ", llvm::acc::getOpenACCDefaultValueName(x))
80 .str();
81 }
82 NODE(parser, AccClauseList)
83 NODE(parser, AccCombinedDirective)
84 NODE(parser, AccDataModifier)
85 NODE_ENUM(parser::AccDataModifier, Modifier)
86 NODE(parser, AccDeclarativeDirective)
87 NODE(parser, AccEndAtomic)
88 NODE(parser, AccEndBlockDirective)
89 NODE(parser, AccEndCombinedDirective)
90 NODE(parser, AccCollapseArg)
91 NODE(parser, AccGangArg)
92 NODE(AccGangArg, Num)
93 NODE(AccGangArg, Dim)
94 NODE(AccGangArg, Static)
95 NODE(parser, AccGangArgList)
96 NODE(parser, AccObject)
97 NODE(parser, AccObjectList)
98 NODE(parser, AccObjectListWithModifier)
99 NODE(parser, AccObjectListWithReduction)
100 NODE(parser, AccSizeExpr)
101 NODE(parser, AccSizeExprList)
102 NODE(parser, AccSelfClause)
103 NODE(parser, AccStandaloneDirective)
104 NODE(parser, AccDeviceTypeExpr)
105
106 NODE(parser, AccDeviceTypeExprList)
107 NODE(parser, AccTileExpr)
108 NODE(parser, AccTileExprList)
109 NODE(parser, AccLoopDirective)
110 NODE(parser, AccEndLoop)
111 NODE(parser, AccWaitArgument)
112 static std::string GetNodeName(const llvm::acc::Directive &x) {
113 return llvm::Twine(
114 "llvm::acc::Directive = ", llvm::acc::getOpenACCDirectiveName(x))
115 .str();
116 }
117 NODE(parser, AcImpliedDo)
118 NODE(parser, AcImpliedDoControl)
119 NODE(parser, AcValue)
120 NODE(parser, AccessStmt)
121 NODE(parser, AccessId)
122 NODE(parser, AccessSpec)
123 NODE_ENUM(AccessSpec, Kind)
124 NODE(parser, AcSpec)
125 NODE(parser, ActionStmt)
126 NODE(parser, ActualArg)
127 NODE(ActualArg, PercentRef)
128 NODE(ActualArg, PercentVal)
129 NODE(parser, ActualArgSpec)
130 NODE(AcValue, Triplet)
131 NODE(parser, AllocOpt)
132 NODE(AllocOpt, Mold)
133 NODE(AllocOpt, Source)
134 NODE(AllocOpt, Stream)
135 NODE(AllocOpt, Pinned)
136 NODE(parser, Allocatable)
137 NODE(parser, AllocatableStmt)
138 NODE(parser, AllocateCoarraySpec)
139 NODE(parser, AllocateObject)
140 NODE(parser, AllocateShapeSpec)
141 NODE(parser, AllocateStmt)
142 NODE(parser, Allocation)
143 NODE(parser, AltReturnSpec)
144 NODE(parser, ArithmeticIfStmt)
145 NODE(parser, ArrayConstructor)
146 NODE(parser, ArrayElement)
147 NODE(parser, ArraySpec)
148 NODE(parser, AssignStmt)
149 NODE(parser, AssignedGotoStmt)
150 NODE(parser, AssignmentStmt)
151 NODE(parser, AssociateConstruct)
152 NODE(parser, AssociateStmt)
153 NODE(parser, Association)
154 NODE(parser, AssumedImpliedSpec)
155 NODE(parser, AssumedRankSpec)
156 NODE(parser, AssumedShapeSpec)
157 NODE(parser, AssumedSizeSpec)
158 NODE(parser, Asynchronous)
159 NODE(parser, AsynchronousStmt)
160 NODE(parser, AttrSpec)
161 NODE(parser, BOZLiteralConstant)
162 NODE(parser, BackspaceStmt)
163 NODE(parser, BasedPointer)
164 NODE(parser, BasedPointerStmt)
165 NODE(parser, BindAttr)
166 NODE(BindAttr, Deferred)
167 NODE(BindAttr, Non_Overridable)
168 NODE(parser, BindEntity)
169 NODE_ENUM(BindEntity, Kind)
170 NODE(parser, BindStmt)
171 NODE(parser, Block)
172 NODE(parser, BlockConstruct)
173 NODE(parser, BlockData)
174 NODE(parser, BlockDataStmt)
175 NODE(parser, BlockSpecificationPart)
176 NODE(parser, BlockStmt)
177 NODE(parser, BoundsRemapping)
178 NODE(parser, BoundsSpec)
179 NODE(parser, Call)
180 NODE(parser, CallStmt)
181 NODE(CallStmt, Chevrons)
182 NODE(CallStmt, StarOrExpr)
183 NODE(parser, CaseConstruct)
184 NODE(CaseConstruct, Case)
185 NODE(parser, CaseSelector)
186 NODE(parser, CaseStmt)
187 NODE(parser, CaseValueRange)
188 NODE(CaseValueRange, Range)
189 NODE(parser, ChangeTeamConstruct)
190 NODE(parser, ChangeTeamStmt)
191 NODE(parser, CharLength)
192 NODE(parser, CharLiteralConstant)
193 NODE(parser, CharLiteralConstantSubstring)
194 NODE(parser, CharSelector)
195 NODE(CharSelector, LengthAndKind)
196 NODE(parser, CloseStmt)
197 NODE(CloseStmt, CloseSpec)
198 NODE(parser, CoarrayAssociation)
199 NODE(parser, CoarraySpec)
200 NODE(parser, CodimensionDecl)
201 NODE(parser, CodimensionStmt)
202 NODE(parser, CoindexedNamedObject)
203 NODE(parser, CommonBlockObject)
204 NODE(parser, CommonStmt)
205 NODE(CommonStmt, Block)
206 NODE(parser, CompilerDirective)
207 NODE(CompilerDirective, AssumeAligned)
208 NODE(CompilerDirective, IgnoreTKR)
209 NODE(CompilerDirective, LoopCount)
210 NODE(CompilerDirective, NameValue)
211 NODE(CompilerDirective, Unrecognized)
212 NODE(CompilerDirective, VectorAlways)
213 NODE(CompilerDirective, Unroll)
214 NODE(CompilerDirective, UnrollAndJam)
215 NODE(CompilerDirective, NoVector)
216 NODE(CompilerDirective, NoUnroll)
217 NODE(CompilerDirective, NoUnrollAndJam)
218 NODE(parser, ComplexLiteralConstant)
219 NODE(parser, ComplexPart)
220 NODE(parser, ComponentArraySpec)
221 NODE(parser, ComponentAttrSpec)
222 NODE(parser, ComponentDataSource)
223 NODE(parser, ComponentDecl)
224 NODE(parser, FillDecl)
225 NODE(parser, ComponentOrFill)
226 NODE(parser, ComponentDefStmt)
227 NODE(parser, ComponentSpec)
228 NODE(parser, ComputedGotoStmt)
229 NODE(parser, ConcurrentControl)
230 NODE(parser, ConcurrentHeader)
231 NODE(parser, ConnectSpec)
232 NODE(ConnectSpec, CharExpr)
233 NODE_ENUM(ConnectSpec::CharExpr, Kind)
234 NODE(ConnectSpec, Newunit)
235 NODE(ConnectSpec, Recl)
236 NODE(parser, ContainsStmt)
237 NODE(parser, Contiguous)
238 NODE(parser, ContiguousStmt)
239 NODE(parser, ContinueStmt)
240 NODE(parser, CriticalConstruct)
241 NODE(parser, CriticalStmt)
242 NODE(parser, CUDAAttributesStmt)
243 NODE(parser, CUFKernelDoConstruct)
244 NODE(CUFKernelDoConstruct, StarOrExpr)
245 NODE(CUFKernelDoConstruct, Directive)
246 NODE(CUFKernelDoConstruct, LaunchConfiguration)
247 NODE(parser, CUFReduction)
248 NODE(parser, CycleStmt)
249 NODE(parser, DataComponentDefStmt)
250 NODE(parser, DataIDoObject)
251 NODE(parser, DataImpliedDo)
252 NODE(parser, DataRef)
253 NODE(parser, DataStmt)
254 NODE(parser, DataStmtConstant)
255 NODE(parser, DataStmtObject)
256 NODE(parser, DataStmtRepeat)
257 NODE(parser, DataStmtSet)
258 NODE(parser, DataStmtValue)
259 NODE(parser, DeallocateStmt)
260 NODE(parser, DeclarationConstruct)
261 NODE(parser, DeclarationTypeSpec)
262 NODE(DeclarationTypeSpec, Class)
263 NODE(DeclarationTypeSpec, ClassStar)
264 NODE(DeclarationTypeSpec, Record)
265 NODE(DeclarationTypeSpec, Type)
266 NODE(DeclarationTypeSpec, TypeStar)
267 NODE(parser, Default)
268 NODE(parser, DeferredCoshapeSpecList)
269 NODE(parser, DeferredShapeSpecList)
270 NODE(parser, DefinedOpName)
271 NODE(parser, DefinedOperator)
272 NODE_ENUM(DefinedOperator, IntrinsicOperator)
273 NODE(parser, DerivedTypeDef)
274 NODE(parser, DerivedTypeSpec)
275 NODE(parser, DerivedTypeStmt)
276 NODE(parser, Designator)
277 NODE(parser, DimensionStmt)
278 NODE(DimensionStmt, Declaration)
279 NODE(parser, DoConstruct)
280 NODE(parser, DummyArg)
281 NODE(parser, ElseIfStmt)
282 NODE(parser, ElseStmt)
283 NODE(parser, ElsewhereStmt)
284 NODE(parser, EndAssociateStmt)
285 NODE(parser, EndBlockDataStmt)
286 NODE(parser, EndBlockStmt)
287 NODE(parser, EndChangeTeamStmt)
288 NODE(parser, EndCriticalStmt)
289 NODE(parser, EndDoStmt)
290 NODE(parser, EndEnumStmt)
291 NODE(parser, EndForallStmt)
292 NODE(parser, EndFunctionStmt)
293 NODE(parser, EndIfStmt)
294 NODE(parser, EndInterfaceStmt)
295 NODE(parser, EndLabel)
296 NODE(parser, EndModuleStmt)
297 NODE(parser, EndMpSubprogramStmt)
298 NODE(parser, EndProgramStmt)
299 NODE(parser, EndSelectStmt)
300 NODE(parser, EndSubmoduleStmt)
301 NODE(parser, EndSubroutineStmt)
302 NODE(parser, EndTypeStmt)
303 NODE(parser, EndWhereStmt)
304 NODE(parser, EndfileStmt)
305 NODE(parser, EntityDecl)
306 NODE(parser, EntryStmt)
307 NODE(parser, EnumDef)
308 NODE(parser, EnumDefStmt)
309 NODE(parser, Enumerator)
310 NODE(parser, EnumeratorDefStmt)
311 NODE(parser, EorLabel)
312 NODE(parser, EquivalenceObject)
313 NODE(parser, EquivalenceStmt)
314 NODE(parser, ErrLabel)
315 NODE(parser, ErrorRecovery)
316 NODE(parser, EventPostStmt)
317 NODE(parser, EventWaitSpec)
318 NODE(parser, EventWaitStmt)
319 NODE(parser, ExecutableConstruct)
320 NODE(parser, ExecutionPart)
321 NODE(parser, ExecutionPartConstruct)
322 NODE(parser, ExitStmt)
323 NODE(parser, ExplicitCoshapeSpec)
324 NODE(parser, ExplicitShapeSpec)
325 NODE(parser, Expr)
326 NODE(Expr, Parentheses)
327 NODE(Expr, UnaryPlus)
328 NODE(Expr, Negate)
329 NODE(Expr, NOT)
330 NODE(Expr, PercentLoc)
331 NODE(Expr, DefinedUnary)
332 NODE(Expr, Power)
333 NODE(Expr, Multiply)
334 NODE(Expr, Divide)
335 NODE(Expr, Add)
336 NODE(Expr, Subtract)
337 NODE(Expr, Concat)
338 NODE(Expr, LT)
339 NODE(Expr, LE)
340 NODE(Expr, EQ)
341 NODE(Expr, NE)
342 NODE(Expr, GE)
343 NODE(Expr, GT)
344 NODE(Expr, AND)
345 NODE(Expr, OR)
346 NODE(Expr, EQV)
347 NODE(Expr, NEQV)
348 NODE(Expr, DefinedBinary)
349 NODE(Expr, ComplexConstructor)
350 NODE(parser, External)
351 NODE(parser, ExternalStmt)
352 NODE(parser, FailImageStmt)
353 NODE(parser, FileUnitNumber)
354 NODE(parser, FinalProcedureStmt)
355 NODE(parser, FlushStmt)
356 NODE(parser, ForallAssignmentStmt)
357 NODE(parser, ForallBodyConstruct)
358 NODE(parser, ForallConstruct)
359 NODE(parser, ForallConstructStmt)
360 NODE(parser, ForallStmt)
361 NODE(parser, FormTeamStmt)
362 NODE(FormTeamStmt, FormTeamSpec)
363 NODE(parser, Format)
364 NODE(parser, FormatStmt)
365 NODE(parser, FunctionReference)
366 NODE(parser, FunctionStmt)
367 NODE(parser, FunctionSubprogram)
368 NODE(parser, GenericSpec)
369 NODE(GenericSpec, Assignment)
370 NODE(GenericSpec, ReadFormatted)
371 NODE(GenericSpec, ReadUnformatted)
372 NODE(GenericSpec, WriteFormatted)
373 NODE(GenericSpec, WriteUnformatted)
374 NODE(parser, GenericStmt)
375 NODE(parser, GotoStmt)
376 NODE(parser, HollerithLiteralConstant)
377 NODE(parser, IdExpr)
378 NODE(parser, IdVariable)
379 NODE(parser, IfConstruct)
380 NODE(IfConstruct, ElseBlock)
381 NODE(IfConstruct, ElseIfBlock)
382 NODE(parser, IfStmt)
383 NODE(parser, IfThenStmt)
384 NODE(parser, TeamValue)
385 NODE(parser, ImageSelector)
386 NODE(parser, ImageSelectorSpec)
387 NODE(ImageSelectorSpec, Stat)
388 NODE(ImageSelectorSpec, Team_Number)
389 NODE(parser, ImplicitPart)
390 NODE(parser, ImplicitPartStmt)
391 NODE(parser, ImplicitSpec)
392 NODE(parser, ImplicitStmt)
393 NODE_ENUM(ImplicitStmt, ImplicitNoneNameSpec)
394 NODE(parser, ImpliedShapeSpec)
395 NODE(parser, ImportStmt)
396 NODE(parser, Initialization)
397 NODE(parser, InputImpliedDo)
398 NODE(parser, InputItem)
399 NODE(parser, InquireSpec)
400 NODE(InquireSpec, CharVar)
401 NODE_ENUM(InquireSpec::CharVar, Kind)
402 NODE(InquireSpec, IntVar)
403 NODE_ENUM(InquireSpec::IntVar, Kind)
404 NODE(InquireSpec, LogVar)
405 NODE_ENUM(InquireSpec::LogVar, Kind)
406 NODE(parser, InquireStmt)
407 NODE(InquireStmt, Iolength)
408 NODE(parser, IntegerTypeSpec)
409 NODE(parser, IntentSpec)
410 NODE_ENUM(IntentSpec, Intent)
411 NODE(parser, IntentStmt)
412 NODE(parser, InterfaceBlock)
413 NODE(parser, InterfaceBody)
414 NODE(InterfaceBody, Function)
415 NODE(InterfaceBody, Subroutine)
416 NODE(parser, InterfaceSpecification)
417 NODE(parser, InterfaceStmt)
418 NODE(parser, InternalSubprogram)
419 NODE(parser, InternalSubprogramPart)
420 NODE(parser, Intrinsic)
421 NODE(parser, IntrinsicStmt)
422 NODE(parser, IntrinsicTypeSpec)
423 NODE(IntrinsicTypeSpec, Character)
424 NODE(IntrinsicTypeSpec, Complex)
425 NODE(IntrinsicTypeSpec, DoubleComplex)
426 NODE(IntrinsicTypeSpec, DoublePrecision)
428 NODE(IntrinsicTypeSpec, Real)
429 NODE(parser, IoControlSpec)
430 NODE(IoControlSpec, Asynchronous)
431 NODE(IoControlSpec, CharExpr)
432 NODE_ENUM(IoControlSpec::CharExpr, Kind)
433 NODE(IoControlSpec, Pos)
434 NODE(IoControlSpec, Rec)
435 NODE(IoControlSpec, Size)
436 NODE(parser, IoUnit)
437 NODE(parser, Keyword)
438 NODE(parser, KindParam)
439 NODE(parser, KindSelector)
440 NODE(KindSelector, StarSize)
441 NODE(parser, LabelDoStmt)
442 NODE(parser, LanguageBindingSpec)
443 NODE(parser, LengthSelector)
444 NODE(parser, LetterSpec)
445 NODE(parser, LiteralConstant)
446 NODE(parser, IntLiteralConstant)
447 NODE(parser, ReductionOperator)
448 NODE_ENUM(parser::ReductionOperator, Operator)
449 NODE(parser, LocalitySpec)
450 NODE(LocalitySpec, DefaultNone)
451 NODE(LocalitySpec, Local)
452 NODE(LocalitySpec, LocalInit)
453 NODE(LocalitySpec, Reduce)
454 NODE(LocalitySpec, Shared)
455 NODE(parser, LockStmt)
456 NODE(LockStmt, LockStat)
457 NODE(parser, LogicalLiteralConstant)
458 NODE_NAME(LoopControl::Bounds, "LoopBounds")
459 NODE_NAME(AcImpliedDoControl::Bounds, "LoopBounds")
460 NODE_NAME(DataImpliedDo::Bounds, "LoopBounds")
461 NODE(parser, LoopControl)
462 NODE(LoopControl, Concurrent)
463 NODE(parser, MainProgram)
464 NODE(parser, Map)
465 NODE(Map, EndMapStmt)
466 NODE(Map, MapStmt)
467 NODE(parser, MaskedElsewhereStmt)
468 NODE(parser, Module)
469 NODE(parser, ModuleStmt)
470 NODE(parser, ModuleSubprogram)
471 NODE(parser, ModuleSubprogramPart)
472 NODE(parser, MpSubprogramStmt)
473 NODE(parser, MsgVariable)
474 NODE(parser, Name)
475 NODE(parser, NamedConstant)
476 NODE(parser, NamedConstantDef)
477 NODE(parser, NamelistStmt)
478 NODE(NamelistStmt, Group)
479 NODE(parser, NonLabelDoStmt)
480 NODE(parser, NoPass)
481 NODE(parser, NotifyWaitStmt)
482 NODE(parser, NullifyStmt)
483 NODE(parser, NullInit)
484 NODE(parser, ObjectDecl)
485 NODE(parser, OldParameterStmt)
486
487 static std::string GetNodeName(const llvm::omp::Directive &x) {
488 return llvm::Twine("llvm::omp::Directive = ",
489 llvm::omp::getOpenMPDirectiveName(x, llvm::omp::FallbackVersion))
490 .str();
491 }
492 static std::string GetNodeName(const llvm::omp::Clause &x) {
493 return llvm::Twine(
494 "llvm::omp::Clause = ", llvm::omp::getOpenMPClauseName(x))
495 .str();
496 }
497 NODE(parser, OmpAbsentClause)
498 NODE(parser, OmpAccessGroup)
499 NODE_ENUM(OmpAccessGroup, Value)
500 NODE(parser, OmpAdjustArgsClause)
501 NODE(OmpAdjustArgsClause, OmpAdjustOp)
502 NODE_ENUM(OmpAdjustArgsClause::OmpAdjustOp, Value)
503 NODE(parser, OmpAffinityClause)
504 NODE(OmpAffinityClause, Modifier)
505 NODE(parser, OmpAlignClause)
506 NODE(parser, OmpAlignedClause)
507 NODE(OmpAlignedClause, Modifier)
508 NODE(parser, OmpAlignment)
509 NODE(parser, OmpAlignModifier)
510 NODE(parser, OmpAllocateClause)
511 NODE(OmpAllocateClause, Modifier)
512 NODE(parser, OmpAllocatorComplexModifier)
513 NODE(parser, OmpAllocatorSimpleModifier)
514 NODE(parser, OmpAlwaysModifier)
515 NODE_ENUM(OmpAlwaysModifier, Value)
516 NODE(parser, OmpAppendArgsClause)
517 NODE(OmpAppendArgsClause, OmpAppendOp)
518 NODE(parser, OmpArgument)
519 NODE(parser, OmpArgumentList)
520 NODE(parser, OmpAtClause)
521 NODE_ENUM(OmpAtClause, ActionTime)
523 NODE(parser, OmpAutomapModifier)
524 NODE_ENUM(OmpAutomapModifier, Value)
525 NODE(parser, OmpBeginDirective)
526 NODE(parser, OmpBeginLoopDirective)
527 NODE(parser, OmpBeginSectionsDirective)
528 NODE(parser, OmpBindClause)
529 NODE_ENUM(OmpBindClause, Binding)
530 NODE(parser, OmpBlockConstruct)
532 NODE(parser, OmpChunkModifier)
533 NODE_ENUM(OmpChunkModifier, Value)
534 NODE(parser, OmpClause)
535 NODE(parser, OmpClauseList)
536 NODE(parser, OmpCloseModifier)
537 NODE_ENUM(OmpCloseModifier, Value)
538 NODE(parser, OmpContainsClause)
540 NODE(parser, OmpDeclareTargetSpecifier)
541 NODE(parser, OmpDeclareTargetWithClause)
542 NODE(parser, OmpDeclareTargetWithList)
543 NODE(parser, OmpDeclareVariantDirective)
544 NODE(parser, OmpDefaultClause)
545 NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
546 NODE(parser, OmpDefaultmapClause)
547 NODE(OmpDefaultmapClause, Modifier)
548 NODE_ENUM(OmpDefaultmapClause, ImplicitBehavior)
549 NODE(parser, OmpDeleteModifier)
550 NODE_ENUM(OmpDeleteModifier, Value)
551 NODE(parser, OmpDependClause)
552 NODE(OmpDependClause, TaskDep)
553 NODE(OmpDependClause::TaskDep, Modifier)
554 NODE(parser, OmpDependenceType)
555 NODE_ENUM(OmpDependenceType, Value)
556 NODE(parser, OmpDestroyClause)
557 NODE(parser, OmpDetachClause)
558 NODE(parser, OmpDeviceClause)
559 NODE(OmpDeviceClause, Modifier)
560 NODE(parser, OmpDeviceModifier)
561 NODE_ENUM(OmpDeviceModifier, Value)
562 NODE(parser, OmpDeviceTypeClause)
563 NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
564 NODE(parser, OmpDirectiveName)
565 NODE(parser, OmpDirectiveSpecification)
566 NODE_ENUM(OmpDirectiveSpecification, Flags)
567 NODE(parser, OmpDoacross)
568 NODE(OmpDoacross, Sink)
569 NODE(OmpDoacross, Source)
570 NODE(parser, OmpDoacrossClause)
571 NODE(parser, OmpDynGroupprivateClause)
572 NODE(OmpDynGroupprivateClause, Modifier)
573 NODE(parser, OmpEndDirective)
574 NODE(parser, OmpEndLoopDirective)
575 NODE(parser, OmpEndSectionsDirective)
576 NODE(parser, OmpEnterClause)
577 NODE(OmpEnterClause, Modifier)
578 NODE(parser, OmpErrorDirective)
579 NODE(parser, OmpExpectation)
580 NODE_ENUM(OmpExpectation, Value)
581 NODE(parser, OmpFailClause)
582 NODE(parser, OmpFromClause)
583 NODE(OmpFromClause, Modifier)
584 NODE(parser, OmpGrainsizeClause)
585 NODE(OmpGrainsizeClause, Modifier)
586 NODE(parser, OmpHintClause)
587 NODE(parser, OmpHoldsClause)
588 NODE(parser, OmpIfClause)
589 NODE(OmpIfClause, Modifier)
590 NODE(parser, OmpIndirectClause)
591 NODE(parser, OmpInitClause)
592 NODE(OmpInitClause, Modifier)
593 NODE(parser, OmpInitializerClause)
594 NODE(parser, OmpInitializerProc)
595 NODE(parser, OmpInReductionClause)
596 NODE(OmpInReductionClause, Modifier)
597 NODE(parser, OmpInteropPreference)
598 NODE(parser, OmpInteropRuntimeIdentifier)
599 NODE(parser, OmpInteropType)
600 NODE_ENUM(OmpInteropType, Value)
601 NODE(parser, OmpIteration)
602 NODE(parser, OmpIterationOffset)
603 NODE(parser, OmpIterationVector)
604 NODE(parser, OmpIterator)
605 NODE(parser, OmpIteratorSpecifier)
606 NODE(parser, OmpLastprivateClause)
607 NODE(OmpLastprivateClause, Modifier)
608 NODE(parser, OmpLastprivateModifier)
609 NODE_ENUM(OmpLastprivateModifier, Value)
610 NODE(parser, OmpLinearClause)
611 NODE(OmpLinearClause, Modifier)
612 NODE(parser, OmpLinearModifier)
613 NODE_ENUM(OmpLinearModifier, Value)
614 NODE(parser, OmpLocator)
615 NODE(parser, OmpLocatorList)
616 NODE(parser, OmpLoopDirective)
617 NODE(parser, OmpMapClause)
618 NODE(OmpMapClause, Modifier)
619 NODE(parser, OmpMapper)
620 NODE(parser, OmpMapperSpecifier)
621 NODE(parser, OmpMapType)
622 NODE_ENUM(OmpMapType, Value)
623 NODE(parser, OmpMapTypeModifier)
624 NODE_ENUM(OmpMapTypeModifier, Value)
625 NODE(parser, OmpMatchClause)
626 NODE(parser, OmpMessageClause)
627 NODE(parser, OmpMetadirectiveDirective)
628 NODE(parser, OmpNoOpenMPClause)
629 NODE(parser, OmpNoOpenMPRoutinesClause)
630 NODE(parser, OmpNoParallelismClause)
631 NODE(parser, OmpNothingDirective)
632 NODE(parser, OmpNumTasksClause)
633 NODE(OmpNumTasksClause, Modifier)
634 NODE(parser, OmpObject)
635 NODE(parser, OmpObjectList)
636 NODE(parser, OmpOrderClause)
637 NODE(OmpOrderClause, Modifier)
638 NODE_ENUM(OmpOrderClause, Ordering)
639 NODE(parser, OmpOrderingModifier)
640 NODE_ENUM(OmpOrderingModifier, Value)
641 NODE(parser, OmpOrderModifier)
642 NODE_ENUM(OmpOrderModifier, Value)
643 NODE(parser, OmpOtherwiseClause)
644 NODE(parser, OmpPrescriptiveness)
645 NODE_ENUM(OmpPrescriptiveness, Value)
646 NODE(parser, OmpPresentModifier)
647 NODE_ENUM(OmpPresentModifier, Value)
648 NODE(parser, OmpProcBindClause)
649 NODE_ENUM(OmpProcBindClause, AffinityPolicy)
650 NODE(parser, OmpReductionClause)
651 NODE(OmpReductionClause, Modifier)
652 NODE(parser, OmpReductionCombiner)
653 NODE(parser, OmpReductionIdentifier)
654 NODE(parser, OmpReductionModifier)
655 NODE_ENUM(OmpReductionModifier, Value)
656 NODE(parser, OmpReductionSpecifier)
657 NODE(parser, OmpRefModifier)
658 NODE_ENUM(OmpRefModifier, Value)
659 NODE(parser, OmpScheduleClause)
660 NODE(OmpScheduleClause, Modifier)
661 NODE_ENUM(OmpScheduleClause, Kind)
662 NODE(parser, OmpSectionsDirective)
663 NODE(parser, OmpSelfModifier)
664 NODE_ENUM(OmpSelfModifier, Value)
665 NODE(parser, OmpSeverityClause)
666 NODE_ENUM(OmpSeverityClause, Severity)
667 NODE(parser, OmpStepComplexModifier)
668 NODE(parser, OmpStepSimpleModifier)
669 NODE(parser, OmpTaskDependenceType)
670 NODE_ENUM(OmpTaskDependenceType, Value)
671 NODE(parser, OmpTaskReductionClause)
672 NODE(OmpTaskReductionClause, Modifier)
673 NODE(parser, OmpToClause)
674 NODE(OmpToClause, Modifier)
675 NODE(parser, OmpTraitProperty)
676 NODE(parser, OmpTraitPropertyExtension)
677 NODE(OmpTraitPropertyExtension, Complex)
678 NODE(parser, OmpTraitPropertyName)
679 NODE(parser, OmpTraitScore)
680 NODE(parser, OmpTraitSelector)
681 NODE(OmpTraitSelector, Properties)
682 NODE(parser, OmpTraitSelectorName)
683 NODE_ENUM(OmpTraitSelectorName, Value)
684 NODE(parser, OmpTraitSetSelector)
685 NODE(parser, OmpTraitSetSelectorName)
686 NODE_ENUM(OmpTraitSetSelectorName, Value)
687 NODE(parser, OmpTypeNameList)
688 NODE(parser, OmpTypeSpecifier)
689 NODE(parser, OmpUpdateClause)
690 NODE(parser, OmpUseClause)
691 NODE(parser, OmpVariableCategory)
692 NODE_ENUM(OmpVariableCategory, Value)
693 NODE(parser, OmpWhenClause)
694 NODE(OmpWhenClause, Modifier)
695 NODE(parser, OmpxHoldModifier)
696 NODE_ENUM(OmpxHoldModifier, Value)
697#define GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
698#include "llvm/Frontend/OpenMP/OMP.inc"
699
700 NODE(parser, Only)
701 NODE(parser, OpenACCAtomicConstruct)
702 NODE(parser, OpenACCBlockConstruct)
703 NODE(parser, OpenACCCacheConstruct)
704 NODE(parser, OpenACCCombinedConstruct)
705 NODE(parser, OpenACCConstruct)
706 NODE(parser, OpenACCDeclarativeConstruct)
707 NODE(parser, OpenACCEndConstruct)
708 NODE(parser, OpenACCLoopConstruct)
709 NODE(parser, OpenMPInteropConstruct)
710 NODE(parser, OpenACCRoutineConstruct)
712 NODE(parser, OpenACCStandaloneConstruct)
713 NODE(parser, OpenACCWaitConstruct)
714
715 NODE(parser, OpenMPAllocatorsConstruct)
716 NODE(parser, OpenMPAssumeConstruct)
717 NODE(parser, OpenMPAtomicConstruct)
718 NODE(parser, OpenMPCancelConstruct)
720 NODE(parser, OpenMPConstruct)
721 NODE(parser, OpenMPCriticalConstruct)
722 NODE(parser, OpenMPDeclarativeAllocate)
723 NODE(parser, OpenMPDeclarativeAssumes)
724 NODE(parser, OpenMPDeclarativeConstruct)
725 NODE(parser, OpenMPDeclareMapperConstruct)
727 NODE(parser, OpenMPDeclareSimdConstruct)
728 NODE(parser, OpenMPDeclareTargetConstruct)
729 NODE(parser, OpenMPDepobjConstruct)
730 NODE(parser, OpenMPDispatchConstruct)
731 NODE(parser, OpenMPExecutableAllocate)
732 NODE(parser, OpenMPFlushConstruct)
733 NODE(parser, OpenMPGroupprivate)
734 NODE(parser, OpenMPLoopConstruct)
735 NODE(parser, OpenMPRequiresConstruct)
736 NODE(parser, OpenMPSectionConstruct)
737 NODE(parser, OpenMPSectionsConstruct)
739 NODE(parser, OpenMPStandaloneConstruct)
740 NODE(parser, OpenMPThreadprivate)
741 NODE(parser, OpenMPUtilityConstruct)
742
743 NODE(parser, OpenStmt)
744 NODE(parser, Optional)
745 NODE(parser, OptionalStmt)
746 NODE(parser, OtherSpecificationStmt)
747 NODE(parser, OutputImpliedDo)
748 NODE(parser, OutputItem)
749 NODE(parser, Parameter)
750 NODE(parser, ParameterStmt)
751 NODE(parser, ParentIdentifier)
752 NODE(parser, Pass)
753 NODE(parser, PauseStmt)
754 NODE(parser, Pointer)
755 NODE(parser, PointerAssignmentStmt)
756 NODE(PointerAssignmentStmt, Bounds)
757 NODE(parser, PointerDecl)
758 NODE(parser, PointerObject)
759 NODE(parser, PointerStmt)
760 NODE(parser, PositionOrFlushSpec)
761 NODE(parser, PrefixSpec)
762 NODE(PrefixSpec, Elemental)
763 NODE(PrefixSpec, Impure)
764 NODE(PrefixSpec, Module)
765 NODE(PrefixSpec, Non_Recursive)
766 NODE(PrefixSpec, Pure)
767 NODE(PrefixSpec, Recursive)
768 NODE(PrefixSpec, Attributes)
769 NODE(PrefixSpec, Launch_Bounds)
770 NODE(PrefixSpec, Cluster_Dims)
771 NODE(parser, PrintStmt)
772 NODE(parser, PrivateStmt)
773 NODE(parser, PrivateOrSequence)
774 NODE(parser, ProcAttrSpec)
775 NODE(parser, ProcComponentAttrSpec)
776 NODE(parser, ProcComponentDefStmt)
777 NODE(parser, ProcComponentRef)
778 NODE(parser, ProcDecl)
779 NODE(parser, ProcInterface)
780 NODE(parser, ProcPointerInit)
781 NODE(parser, ProcedureDeclarationStmt)
782 NODE(parser, ProcedureDesignator)
783 NODE(parser, ProcedureStmt)
784 NODE_ENUM(ProcedureStmt, Kind)
785 NODE(parser, Program)
786 NODE(parser, ProgramStmt)
787 NODE(parser, ProgramUnit)
788 NODE(parser, Protected)
789 NODE(parser, ProtectedStmt)
790 NODE(parser, ReadStmt)
791 NODE(parser, RealLiteralConstant)
792 NODE(RealLiteralConstant, Real)
793 NODE(parser, Rename)
794 NODE(Rename, Names)
795 NODE(Rename, Operators)
796 NODE(parser, ReturnStmt)
797 NODE(parser, RewindStmt)
798 NODE(parser, Save)
799 NODE(parser, SaveStmt)
800 NODE(parser, SavedEntity)
801 NODE_ENUM(SavedEntity, Kind)
802 NODE(parser, SectionSubscript)
803 NODE(parser, SelectCaseStmt)
804 NODE(parser, SelectRankCaseStmt)
805 NODE(SelectRankCaseStmt, Rank)
806 NODE(parser, SelectRankConstruct)
807 NODE(SelectRankConstruct, RankCase)
808 NODE(parser, SelectRankStmt)
809 NODE(parser, SelectTypeConstruct)
810 NODE(SelectTypeConstruct, TypeCase)
811 NODE(parser, SelectTypeStmt)
812 NODE(parser, Selector)
813 NODE(parser, SeparateModuleSubprogram)
814 NODE(parser, SequenceStmt)
815 NODE(parser, Sign)
816 NODE(parser, SignedComplexLiteralConstant)
817 NODE(parser, SignedIntLiteralConstant)
818 NODE(parser, SignedRealLiteralConstant)
819 NODE(parser, SpecificationConstruct)
820 NODE(parser, SpecificationExpr)
821 NODE(parser, SpecificationPart)
822 NODE(parser, Star)
823 NODE(parser, StatOrErrmsg)
824 NODE(parser, StatVariable)
825 NODE(parser, StatusExpr)
826 NODE(parser, StmtFunctionStmt)
827 NODE(parser, StopCode)
828 NODE(parser, StopStmt)
829 NODE_ENUM(StopStmt, Kind)
830 NODE(parser, StructureComponent)
831 NODE(parser, StructureConstructor)
832 NODE(parser, StructureDef)
833 NODE(StructureDef, EndStructureStmt)
834 NODE(parser, StructureField)
835 NODE(parser, StructureStmt)
836 NODE(parser, Submodule)
837 NODE(parser, SubmoduleStmt)
838 NODE(parser, SubroutineStmt)
839 NODE(parser, SubroutineSubprogram)
840 NODE(parser, SubscriptTriplet)
841 NODE(parser, Substring)
842 NODE(parser, SubstringInquiry)
843 NODE(parser, SubstringRange)
844 NODE(parser, Suffix)
845 NODE(parser, SyncAllStmt)
846 NODE(parser, SyncImagesStmt)
847 NODE(SyncImagesStmt, ImageSet)
848 NODE(parser, SyncMemoryStmt)
849 NODE(parser, SyncTeamStmt)
850 NODE(parser, Target)
851 NODE(parser, TargetStmt)
852 NODE(parser, TypeAttrSpec)
853 NODE(TypeAttrSpec, BindC)
854 NODE(TypeAttrSpec, Extends)
855 NODE(parser, TypeBoundGenericStmt)
856 NODE(parser, TypeBoundProcBinding)
857 NODE(parser, TypeBoundProcDecl)
858 NODE(parser, TypeBoundProcedurePart)
859 NODE(parser, TypeBoundProcedureStmt)
860 NODE(TypeBoundProcedureStmt, WithInterface)
861 NODE(TypeBoundProcedureStmt, WithoutInterface)
862 NODE(parser, TypeDeclarationStmt)
863 NODE(parser, TypeGuardStmt)
864 NODE(TypeGuardStmt, Guard)
865 NODE(parser, TypeParamDecl)
866 NODE(parser, TypeParamDefStmt)
867 NODE(common, TypeParamAttr)
868 NODE(parser, TypeParamSpec)
869 NODE(parser, TypeParamValue)
870 NODE(TypeParamValue, Deferred)
871 NODE(parser, TypeSpec)
872 NODE(parser, Union)
873 NODE(Union, EndUnionStmt)
874 NODE(Union, UnionStmt)
875 NODE(parser, UnlockStmt)
876 NODE(parser, UnsignedLiteralConstant)
877 NODE(parser, UnsignedTypeSpec)
878 NODE(parser, UseStmt)
879 NODE_ENUM(UseStmt, ModuleNature)
880 NODE(parser, Value)
881 NODE(parser, ValueStmt)
882 NODE(parser, Variable)
883 NODE(parser, VectorTypeSpec)
884 NODE(VectorTypeSpec, PairVectorTypeSpec)
885 NODE(VectorTypeSpec, QuadVectorTypeSpec)
886 NODE(parser, IntrinsicVectorTypeSpec)
887 NODE(parser, VectorElementType)
888 NODE(parser, Verbatim)
889 NODE(parser, Volatile)
890 NODE(parser, VolatileStmt)
891 NODE(parser, WaitSpec)
892 NODE(parser, WaitStmt)
893 NODE(parser, WhereBodyConstruct)
894 NODE(parser, WhereConstruct)
895 NODE(WhereConstruct, Elsewhere)
896 NODE(WhereConstruct, MaskedElsewhere)
897 NODE(parser, WhereConstructStmt)
898 NODE(parser, WhereStmt)
899 NODE(parser, WriteStmt)
900#undef NODE
901#undef NODE_NAME
902
903 template <typename T> bool Pre(const T &x) {
904 std::string fortran{AsFortran<T>(x)};
905 if (fortran.empty() && (UnionTrait<T> || WrapperTrait<T>)) {
906 Prefix(GetNodeName(x));
907 } else {
908 IndentEmptyLine();
909 out_ << GetNodeName(x);
910 if (!fortran.empty()) {
911 out_ << " = '" << fortran << '\'';
912 }
913 EndLine();
914 ++indent_;
915 }
916 return true;
917 }
918
919 template <typename T> void Post(const T &x) {
920 if (AsFortran<T>(x).empty() && (UnionTrait<T> || WrapperTrait<T>)) {
921 EndLineIfNonempty();
922 } else {
923 --indent_;
924 }
925 }
926
927 // A few types we want to ignore
928
929 bool Pre(const CharBlock &) { return true; }
930 void Post(const CharBlock &) {}
931
932 template <typename T> bool Pre(const Statement<T> &) { return true; }
933 template <typename T> void Post(const Statement<T> &) {}
934 template <typename T> bool Pre(const UnlabeledStatement<T> &) { return true; }
935 template <typename T> void Post(const UnlabeledStatement<T> &) {}
936
937 template <typename T> bool Pre(const common::Indirection<T> &) {
938 return true;
939 }
940 template <typename T> void Post(const common::Indirection<T> &) {}
941
942 template <typename A> bool Pre(const Scalar<A> &) {
943 Prefix("Scalar");
944 return true;
945 }
946 template <typename A> void Post(const Scalar<A> &) { EndLineIfNonempty(); }
947
948 template <typename A> bool Pre(const Constant<A> &) {
949 Prefix("Constant");
950 return true;
951 }
952 template <typename A> void Post(const Constant<A> &) { EndLineIfNonempty(); }
953
954 template <typename A> bool Pre(const Integer<A> &) {
955 Prefix("Integer");
956 return true;
957 }
958 template <typename A> void Post(const Integer<A> &) { EndLineIfNonempty(); }
959
960 template <typename A> bool Pre(const Logical<A> &) {
961 Prefix("Logical");
962 return true;
963 }
964 template <typename A> void Post(const Logical<A> &) { EndLineIfNonempty(); }
965
966 template <typename A> bool Pre(const DefaultChar<A> &) {
967 Prefix("DefaultChar");
968 return true;
969 }
970 template <typename A> void Post(const DefaultChar<A> &) {
971 EndLineIfNonempty();
972 }
973
974 template <typename... A> bool Pre(const std::tuple<A...> &) { return true; }
975 template <typename... A> void Post(const std::tuple<A...> &) {}
976
977 template <typename... A> bool Pre(const std::variant<A...> &) { return true; }
978 template <typename... A> void Post(const std::variant<A...> &) {}
979
980protected:
981 // Return a Fortran representation of this node to include in the dump
982 template <typename T> std::string AsFortran(const T &x) {
983 std::string buf;
984 llvm::raw_string_ostream ss{buf};
985 if constexpr (HasTypedExpr<T>::value) {
986 if (asFortran_ && x.typedExpr) {
987 asFortran_->expr(ss, *x.typedExpr);
988 }
989 } else if constexpr (std::is_same_v<T, AssignmentStmt> ||
990 std::is_same_v<T, PointerAssignmentStmt>) {
991 if (asFortran_ && x.typedAssignment) {
992 asFortran_->assignment(ss, *x.typedAssignment);
993 }
994 } else if constexpr (std::is_same_v<T, CallStmt>) {
995 if (asFortran_ && x.typedCall) {
996 asFortran_->call(ss, *x.typedCall);
997 }
998 } else if constexpr (std::is_same_v<T, IntLiteralConstant> ||
999 std::is_same_v<T, SignedIntLiteralConstant> ||
1000 std::is_same_v<T, UnsignedLiteralConstant>) {
1001 ss << std::get<CharBlock>(x.t);
1002 } else if constexpr (std::is_same_v<T, RealLiteralConstant::Real>) {
1003 ss << x.source;
1004 } else if constexpr (std::is_same_v<T, std::string> ||
1005 std::is_same_v<T, std::int64_t> || std::is_same_v<T, std::uint64_t>) {
1006 ss << x;
1007 }
1008 if (ss.tell()) {
1009 return buf;
1010 }
1011 if constexpr (std::is_same_v<T, Name>) {
1012 return x.source.ToString();
1013#ifdef SHOW_ALL_SOURCE_MEMBERS
1014 } else if constexpr (HasSource<T>::value) {
1015 return x.source.ToString();
1016#endif
1017 } else if constexpr (std::is_same_v<T, int>) {
1018 return std::to_string(x);
1019 } else if constexpr (std::is_same_v<T, bool>) {
1020 return x ? "true" : "false";
1021 } else {
1022 return "";
1023 }
1024 }
1025
1026 void IndentEmptyLine() {
1027 if (emptyline_ && indent_ > 0) {
1028 for (int i{0}; i < indent_; ++i) {
1029 out_ << "| ";
1030 }
1031 emptyline_ = false;
1032 }
1033 }
1034
1035 void Prefix(const char *str) {
1036 IndentEmptyLine();
1037 out_ << str << " -> ";
1038 emptyline_ = false;
1039 }
1040
1041 void Prefix(const std::string &str) {
1042 IndentEmptyLine();
1043 out_ << str << " -> ";
1044 emptyline_ = false;
1045 }
1046
1047 void EndLine() {
1048 out_ << '\n';
1049 emptyline_ = true;
1050 }
1051
1052 void EndLineIfNonempty() {
1053 if (!emptyline_) {
1054 EndLine();
1055 }
1056 }
1057
1058private:
1059 int indent_{0};
1060 llvm::raw_ostream &out_;
1061 const AnalyzedObjectsAsFortran *const asFortran_;
1062 bool emptyline_{false};
1063};
1064
1065template <typename T>
1066llvm::raw_ostream &DumpTree(llvm::raw_ostream &out, const T &x,
1067 const AnalyzedObjectsAsFortran *asFortran = nullptr) {
1068 ParseTreeDumper dumper{out, asFortran};
1069 Walk(x, dumper);
1070 return out;
1071}
1072
1073} // namespace Fortran::parser
1074#endif // FORTRAN_PARSER_DUMP_PARSE_TREE_H_
Definition: indirection.h:31
Definition: char-block.h:28
Definition: dump-parse-tree.h:31
Definition: check-expression.h:19
Definition: format-specification.h:76
Definition: format-specification.h:38
Definition: parse-tree.h:1303
Definition: parse-tree.h:1310
Definition: parse-tree.h:1269
Definition: parse-tree.h:1257
Definition: parse-tree.h:5376
Definition: parse-tree.h:5352
Definition: parse-tree.h:5368
Definition: parse-tree.h:5360
Definition: parse-tree.h:5337
Definition: parse-tree.h:5401
Definition: parse-tree.h:5331
Definition: parse-tree.h:5207
Definition: parse-tree.h:5180
Definition: parse-tree.h:5308
Definition: parse-tree.h:5293
Definition: parse-tree.h:5288
Definition: parse-tree.h:5196
Definition: parse-tree.h:5218
Definition: parse-tree.h:5201
Definition: parse-tree.h:5213
Definition: parse-tree.h:5245
Definition: parse-tree.h:5239
Definition: parse-tree.h:5343
Definition: parse-tree.h:5407
Definition: parse-tree.h:5284
Definition: parse-tree.h:5275
Definition: parse-tree.h:5185
Definition: parse-tree.h:5224
Definition: parse-tree.h:5229
Definition: parse-tree.h:5172
Definition: parse-tree.h:5268
Definition: parse-tree.h:5264
Definition: parse-tree.h:5260
Definition: parse-tree.h:5190
Definition: parse-tree.h:5256
Definition: parse-tree.h:5250
Definition: parse-tree.h:5234
Definition: parse-tree.h:909
Definition: parse-tree.h:1427
Definition: parse-tree.h:490
Definition: parse-tree.h:3252
Definition: parse-tree.h:3242
Definition: parse-tree.h:1979
Definition: parse-tree.h:1944
Definition: parse-tree.h:1923
Definition: parse-tree.h:1935
Definition: parse-tree.h:1990
Definition: parse-tree.h:1952
Definition: parse-tree.h:3450
Definition: parse-tree.h:1911
Definition: parse-tree.h:1358
Definition: parse-tree.h:3455
Definition: parse-tree.h:3460
Definition: parse-tree.h:2016
Definition: parse-tree.h:2173
Definition: parse-tree.h:2164
Definition: parse-tree.h:2157
Definition: parse-tree.h:1340
Definition: parse-tree.h:1388
Definition: parse-tree.h:3400
Definition: parse-tree.h:1127
Definition: parse-tree.h:1449
Definition: parse-tree.h:1456
Definition: parse-tree.h:2195
Definition: parse-tree.h:3027
Definition: parse-tree.h:2028
Definition: parse-tree.h:3394
Definition: parse-tree.h:5477
Definition: parse-tree.h:5471
Definition: parse-tree.h:3276
Definition: parse-tree.h:3259
Definition: parse-tree.h:2437
Definition: parse-tree.h:2419
Definition: parse-tree.h:2425
Definition: parse-tree.h:2405
Definition: parse-tree.h:2226
Definition: parse-tree.h:2211
Definition: parse-tree.h:663
Definition: parse-tree.h:868
Definition: parse-tree.h:679
Definition: parse-tree.h:2695
Definition: parse-tree.h:2203
Definition: parse-tree.h:984
Definition: parse-tree.h:1462
Definition: parse-tree.h:1902
Definition: parse-tree.h:1626
Definition: parse-tree.h:1634
Definition: parse-tree.h:3358
Definition: parse-tree.h:854
Definition: parse-tree.h:846
Definition: parse-tree.h:995
Definition: parse-tree.h:1008
Definition: parse-tree.h:1039
Definition: parse-tree.h:1116
Definition: parse-tree.h:1061
Definition: parse-tree.h:1220
Definition: parse-tree.h:2524
Definition: parse-tree.h:2251
Definition: parse-tree.h:2260
Definition: parse-tree.h:2673
Definition: parse-tree.h:2671
Definition: parse-tree.h:300
Definition: parse-tree.h:2242
Definition: parse-tree.h:2233
Definition: parse-tree.h:1069
Definition: parse-tree.h:1516
Definition: parse-tree.h:1528
Definition: parse-tree.h:1818
Definition: parse-tree.h:1487
Definition: parse-tree.h:1536
Definition: parse-tree.h:1502
Definition: parse-tree.h:1542
Definition: parse-tree.h:1508
Definition: parse-tree.h:2010
Definition: parse-tree.h:431
Definition: parse-tree.h:768
Definition: parse-tree.h:324
Definition: parse-tree.h:605
Definition: parse-tree.h:1205
Definition: parse-tree.h:750
Definition: parse-tree.h:926
Definition: parse-tree.h:1857
Definition: parse-tree.h:1553
Definition: parse-tree.h:2338
Definition: parse-tree.h:3160
Definition: parse-tree.h:2358
Definition: parse-tree.h:2220
Definition: parse-tree.h:1403
Definition: parse-tree.h:3332
Definition: parse-tree.h:1249
Definition: parse-tree.h:1235
Definition: parse-tree.h:2578
Definition: parse-tree.h:2584
Definition: parse-tree.h:2592
Definition: parse-tree.h:523
Definition: parse-tree.h:547
Definition: parse-tree.h:978
Definition: parse-tree.h:965
Definition: parse-tree.h:1700
Definition: parse-tree.h:1055
Definition: parse-tree.h:2114
Definition: parse-tree.h:2130
Definition: parse-tree.h:2108
Definition: parse-tree.h:2143
Definition: parse-tree.h:2120
Definition: parse-tree.h:2604
Definition: parse-tree.h:2707
Definition: parse-tree.h:3264
Definition: parse-tree.h:3149
Definition: parse-tree.h:3298
Definition: parse-tree.h:3040
Definition: parse-tree.h:3055
Definition: tools.h:128
Definition: tools.h:134
Definition: parse-tree.h:875
Definition: parse-tree.h:2372
Definition: parse-tree.h:2388
Definition: parse-tree.h:2351
Definition: parse-tree.h:1685
Definition: parse-tree.h:1694
Definition: parse-tree.h:413
Definition: parse-tree.h:1610
Definition: parse-tree.h:1619
Definition: parse-tree.h:618
Definition: parse-tree.h:1026
Definition: parse-tree.h:2802
Definition: parse-tree.h:2746
Definition: parse-tree.h:2889
Definition: parse-tree.h:2897
Definition: parse-tree.h:2902
Definition: parse-tree.h:2887
Definition: parse-tree.h:2915
Definition: parse-tree.h:802
Definition: parse-tree.h:308
Definition: parse-tree.h:1366
Definition: parse-tree.h:1562
Definition: parse-tree.h:3216
Definition: parse-tree.h:3181
Definition: parse-tree.h:3206
Definition: parse-tree.h:3061
Definition: parse-tree.h:469
Definition: parse-tree.h:457
Definition: parse-tree.h:700
Definition: parse-tree.h:2731
Definition: parse-tree.h:2729
Definition: parse-tree.h:2643
Definition: parse-tree.h:789
Definition: parse-tree.h:651
Definition: parse-tree.h:2315
Definition: parse-tree.h:1319
Definition: parse-tree.h:669
Definition: parse-tree.h:1604
Definition: parse-tree.h:900
Definition: parse-tree.h:2283
Definition: parse-tree.h:2618
Definition: parse-tree.h:882
Definition: parse-tree.h:316
Definition: parse-tree.h:1284
Definition: parse-tree.h:2303
Definition: parse-tree.h:2936
Definition: parse-tree.h:3416
Definition: parse-tree.h:2075
Definition: parse-tree.h:2960
Definition: parse-tree.h:2950
Definition: parse-tree.h:2971
Definition: parse-tree.h:580
Definition: parse-tree.h:1325
Definition: parse-tree.h:631
Definition: parse-tree.h:2321
Definition: parse-tree.h:2546
Definition: parse-tree.h:1436
Definition: parse-tree.h:4138
Definition: parse-tree.h:4142
Definition: parse-tree.h:4157
Definition: parse-tree.h:4164
Definition: parse-tree.h:4172
Definition: parse-tree.h:4187
Definition: parse-tree.h:4194
Definition: parse-tree.h:4203
Definition: parse-tree.h:4774
Definition: parse-tree.h:5129
Definition: parse-tree.h:4855
Definition: parse-tree.h:4226
Definition: parse-tree.h:4784
Definition: parse-tree.h:4745
Definition: parse-tree.h:4729
Definition: parse-tree.h:4241
Definition: parse-tree.h:4909
Definition: parse-tree.h:4904
Definition: parse-tree.h:4899
Definition: parse-tree.h:4890
Definition: parse-tree.h:4258
Definition: parse-tree.h:4276
Definition: parse-tree.h:4333
Definition: parse-tree.h:4331
Definition: parse-tree.h:4359
Definition: parse-tree.h:4369
Definition: parse-tree.h:4379
Definition: parse-tree.h:3486
Definition: parse-tree.h:4752
Definition: parse-tree.h:4313
Definition: parse-tree.h:4384
Definition: parse-tree.h:4779
Definition: parse-tree.h:5135
Definition: parse-tree.h:4860
Definition: parse-tree.h:4395
Definition: parse-tree.h:4815
Definition: parse-tree.h:4403
Definition: parse-tree.h:4416
Definition: parse-tree.h:4427
Definition: parse-tree.h:4434
Definition: parse-tree.h:4442
Definition: parse-tree.h:4458
Definition: parse-tree.h:4468
Definition: parse-tree.h:4447
Definition: parse-tree.h:4717
Definition: parse-tree.h:4481
Definition: parse-tree.h:4476
Definition: parse-tree.h:4288
Definition: parse-tree.h:4297
Definition: parse-tree.h:4491
Definition: parse-tree.h:4506
Definition: parse-tree.h:5047
Definition: parse-tree.h:4532
Definition: parse-tree.h:4544
Definition: parse-tree.h:4553
Definition: parse-tree.h:4797
Definition: parse-tree.h:4807
Definition: parse-tree.h:4577
Definition: parse-tree.h:3507
Definition: parse-tree.h:4588
Definition: parse-tree.h:4601
Definition: parse-tree.h:4613
Definition: parse-tree.h:4624
Definition: parse-tree.h:3531
Definition: parse-tree.h:3521
Definition: parse-tree.h:4638
Definition: parse-tree.h:4850
Definition: parse-tree.h:4648
Definition: parse-tree.h:4657
Definition: parse-tree.h:4673
Definition: parse-tree.h:4690
Definition: parse-tree.h:4701
Definition: parse-tree.h:3071
Definition: parse-tree.h:5383
Definition: parse-tree.h:5390
Definition: parse-tree.h:5319
Definition: parse-tree.h:5412
Definition: parse-tree.h:5451
Definition: parse-tree.h:5440
Definition: parse-tree.h:5431
Definition: parse-tree.h:5313
Definition: parse-tree.h:5445
Definition: parse-tree.h:5325
Definition: parse-tree.h:5012
Definition: parse-tree.h:4844
Definition: parse-tree.h:5017
Definition: parse-tree.h:5060
Definition: parse-tree.h:5160
Definition: parse-tree.h:4989
Definition: parse-tree.h:4971
Definition: parse-tree.h:4832
Definition: parse-tree.h:4977
Definition: parse-tree.h:4941
Definition: parse-tree.h:5071
Definition: parse-tree.h:5085
Definition: parse-tree.h:4997
Definition: parse-tree.h:5101
Definition: parse-tree.h:4951
Definition: parse-tree.h:5109
Definition: parse-tree.h:5144
Definition: parse-tree.h:4957
Definition: parse-tree.h:4871
Definition: parse-tree.h:4877
Definition: parse-tree.h:5120
Definition: parse-tree.h:4964
Definition: parse-tree.h:4821
Definition: parse-tree.h:372
Definition: parse-tree.h:2807
Definition: parse-tree.h:2770
Definition: parse-tree.h:2996
Definition: parse-tree.h:2040
Definition: parse-tree.h:1572
Definition: parse-tree.h:1999
Definition: parse-tree.h:2833
Definition: parse-tree.h:3116
Definition: parse-tree.h:2791
Definition: parse-tree.h:939
Definition: parse-tree.h:3094
Definition: parse-tree.h:1080
Definition: parse-tree.h:1108
Definition: parse-tree.h:1897
Definition: parse-tree.h:1100
Definition: parse-tree.h:1094
Definition: parse-tree.h:1087
Definition: parse-tree.h:3104
Definition: parse-tree.h:3231
Definition: parse-tree.h:3199
Definition: parse-tree.h:564
Definition: parse-tree.h:2754
Definition: parse-tree.h:821
Definition: parse-tree.h:2272
Definition: parse-tree.h:2982
Definition: parse-tree.h:1585
Definition: parse-tree.h:292
Definition: parse-tree.h:1671
Definition: parse-tree.h:2395
Definition: parse-tree.h:2460
Definition: parse-tree.h:2472
Definition: parse-tree.h:2451
Definition: parse-tree.h:2506
Definition: parse-tree.h:2486
Definition: parse-tree.h:2151
Definition: parse-tree.h:3324
Definition: parse-tree.h:795
Definition: parse-tree.h:835
Definition: parse-tree.h:394
Definition: parse-tree.h:445
Definition: parse-tree.h:1968
Definition: parse-tree.h:355
Definition: parse-tree.h:3342
Definition: parse-tree.h:2538
Definition: parse-tree.h:1887
Definition: parse-tree.h:1226
Definition: parse-tree.h:3437
Definition: parse-tree.h:3409
Definition: parse-tree.h:3432
Definition: parse-tree.h:3002
Definition: parse-tree.h:3013
Definition: parse-tree.h:3168
Definition: parse-tree.h:3308
Definition: parse-tree.h:1662
Definition: parse-tree.h:1849
Definition: parse-tree.h:1653
Definition: parse-tree.h:1835
Definition: parse-tree.h:3135
Definition: parse-tree.h:2556
Definition: parse-tree.h:2569
Definition: parse-tree.h:917
Definition: parse-tree.h:1169
Definition: parse-tree.h:1182
Definition: parse-tree.h:1135
Definition: parse-tree.h:1191
Definition: parse-tree.h:1145
Definition: parse-tree.h:1417
Definition: parse-tree.h:2495
Definition: parse-tree.h:945
Definition: parse-tree.h:953
Definition: parse-tree.h:744
Definition: parse-tree.h:642
Definition: parse-tree.h:757
Definition: parse-tree.h:3425
Definition: parse-tree.h:350
Definition: parse-tree.h:2628
Definition: parse-tree.h:808
Definition: parse-tree.h:3080
Definition: parse-tree.h:1865
Definition: parse-tree.h:730
Definition: parse-tree.h:735
Definition: parse-tree.h:279
Definition: parse-tree.h:2817
Definition: parse-tree.h:2066
Definition: parse-tree.h:2059
Definition: parse-tree.h:2090
Definition: parse-tree.h:2053
Definition: parse-tree.h:2776
Definition: parse-tree.h:3584
Definition: parse-tree.h:3576
Definition: parse-tree.h:3544
Definition: parse-tree.h:3556
Definition: parse-tree.h:3569
Definition: parse-tree.h:3537
Definition: parse-tree.h:3739
Definition: parse-tree.h:3756
Definition: parse-tree.h:3748
Definition: parse-tree.h:3764
Definition: parse-tree.h:3784
Definition: parse-tree.h:3794
Definition: parse-tree.h:3805
Definition: parse-tree.h:3818
Definition: parse-tree.h:3830
Definition: parse-tree.h:3851
Definition: parse-tree.h:3860
Definition: parse-tree.h:3893
Definition: parse-tree.h:3911
Definition: parse-tree.h:3920
Definition: parse-tree.h:3932
Definition: parse-tree.h:3942
Definition: parse-tree.h:3950
Definition: parse-tree.h:3959
Definition: parse-tree.h:3994
Definition: parse-tree.h:3981
Definition: parse-tree.h:3968
Definition: parse-tree.h:4018
Definition: parse-tree.h:4009
Definition: parse-tree.h:4028
Definition: parse-tree.h:4041
Definition: parse-tree.h:4050
Definition: parse-tree.h:4060
Definition: parse-tree.h:4070
Definition: parse-tree.h:4079
Definition: parse-tree.h:4087
Definition: parse-tree.h:4097
Definition: parse-tree.h:4108
Definition: parse-tree.h:4121
Definition: parse-tree.h:3622
Definition: parse-tree.h:3605
Definition: parse-tree.h:3646
Definition: parse-tree.h:3612
Definition: parse-tree.h:3673
Definition: parse-tree.h:3685
Definition: parse-tree.h:3698
Definition: parse-tree.h:3707