1include "clang/Basic/ASTNode.td"
2
3class StmtNode<StmtNode base, bit abstract = 0> : ASTNode, AttrSubject {
4	StmtNode Base = base;
5  bit Abstract = abstract;
6}
7
8// Statements
9def Stmt : StmtNode<?, 1>;
10def NullStmt : StmtNode<Stmt>;
11def CompoundStmt : StmtNode<Stmt>;
12def IfStmt : StmtNode<Stmt>;
13def SwitchStmt : StmtNode<Stmt>;
14def WhileStmt : StmtNode<Stmt>;
15def DoStmt : StmtNode<Stmt>;
16def ForStmt : StmtNode<Stmt>;
17def GotoStmt : StmtNode<Stmt>;
18def IndirectGotoStmt : StmtNode<Stmt>;
19def ContinueStmt : StmtNode<Stmt>;
20def BreakStmt : StmtNode<Stmt>;
21def ReturnStmt : StmtNode<Stmt>;
22def DeclStmt  : StmtNode<Stmt>;
23def SwitchCase : StmtNode<Stmt, 1>;
24def CaseStmt : StmtNode<SwitchCase>;
25def DefaultStmt : StmtNode<SwitchCase>;
26def CapturedStmt : StmtNode<Stmt>;
27
28// Statements that might produce a value (for example, as the last non-null
29// statement in a GNU statement-expression).
30def ValueStmt : StmtNode<Stmt, 1>;
31def LabelStmt : StmtNode<ValueStmt>;
32def AttributedStmt : StmtNode<ValueStmt>;
33
34// Asm statements
35def AsmStmt : StmtNode<Stmt, 1>;
36def GCCAsmStmt : StmtNode<AsmStmt>;
37def MSAsmStmt : StmtNode<AsmStmt>;
38
39// Obj-C statements
40def ObjCAtTryStmt : StmtNode<Stmt>;
41def ObjCAtCatchStmt : StmtNode<Stmt>;
42def ObjCAtFinallyStmt : StmtNode<Stmt>;
43def ObjCAtThrowStmt : StmtNode<Stmt>;
44def ObjCAtSynchronizedStmt : StmtNode<Stmt>;
45def ObjCForCollectionStmt : StmtNode<Stmt>;
46def ObjCAutoreleasePoolStmt : StmtNode<Stmt>;
47
48// C++ statements
49def CXXCatchStmt : StmtNode<Stmt>;
50def CXXTryStmt : StmtNode<Stmt>;
51def CXXForRangeStmt : StmtNode<Stmt>;
52
53// C++ Coroutines TS statements
54def CoroutineBodyStmt : StmtNode<Stmt>;
55def CoreturnStmt : StmtNode<Stmt>;
56
57// Expressions
58def Expr : StmtNode<ValueStmt, 1>;
59def PredefinedExpr : StmtNode<Expr>;
60def DeclRefExpr : StmtNode<Expr>;
61def IntegerLiteral : StmtNode<Expr>;
62def FixedPointLiteral : StmtNode<Expr>;
63def FloatingLiteral : StmtNode<Expr>;
64def ImaginaryLiteral : StmtNode<Expr>;
65def StringLiteral : StmtNode<Expr>;
66def CharacterLiteral : StmtNode<Expr>;
67def ParenExpr : StmtNode<Expr>;
68def UnaryOperator : StmtNode<Expr>;
69def OffsetOfExpr : StmtNode<Expr>;
70def UnaryExprOrTypeTraitExpr : StmtNode<Expr>;
71def ArraySubscriptExpr : StmtNode<Expr>;
72def OMPArraySectionExpr : StmtNode<Expr>;
73def CallExpr : StmtNode<Expr>;
74def MemberExpr : StmtNode<Expr>;
75def CastExpr : StmtNode<Expr, 1>;
76def BinaryOperator : StmtNode<Expr>;
77def CompoundAssignOperator : StmtNode<BinaryOperator>;
78def AbstractConditionalOperator : StmtNode<Expr, 1>;
79def ConditionalOperator : StmtNode<AbstractConditionalOperator>;
80def BinaryConditionalOperator : StmtNode<AbstractConditionalOperator>;
81def ImplicitCastExpr : StmtNode<CastExpr>;
82def ExplicitCastExpr : StmtNode<CastExpr, 1>;
83def CStyleCastExpr : StmtNode<ExplicitCastExpr>;
84def CompoundLiteralExpr : StmtNode<Expr>;
85def ExtVectorElementExpr : StmtNode<Expr>;
86def InitListExpr : StmtNode<Expr>;
87def DesignatedInitExpr : StmtNode<Expr>;
88def DesignatedInitUpdateExpr : StmtNode<Expr>;
89def ImplicitValueInitExpr : StmtNode<Expr>;
90def NoInitExpr : StmtNode<Expr>;
91def ArrayInitLoopExpr : StmtNode<Expr>;
92def ArrayInitIndexExpr : StmtNode<Expr>;
93def ParenListExpr : StmtNode<Expr>;
94def VAArgExpr : StmtNode<Expr>;
95def GenericSelectionExpr : StmtNode<Expr>;
96def PseudoObjectExpr : StmtNode<Expr>;
97def SourceLocExpr : StmtNode<Expr>;
98
99// Wrapper expressions
100def FullExpr : StmtNode<Expr, 1>;
101def ConstantExpr : StmtNode<FullExpr>;
102
103// Atomic expressions
104def AtomicExpr : StmtNode<Expr>;
105
106// GNU Extensions.
107def AddrLabelExpr : StmtNode<Expr>;
108def StmtExpr : StmtNode<Expr>;
109def ChooseExpr : StmtNode<Expr>;
110def GNUNullExpr : StmtNode<Expr>;
111
112// C++ Expressions.
113def CXXOperatorCallExpr : StmtNode<CallExpr>;
114def CXXMemberCallExpr : StmtNode<CallExpr>;
115def CXXRewrittenBinaryOperator : StmtNode<Expr>;
116def CXXNamedCastExpr : StmtNode<ExplicitCastExpr, 1>;
117def CXXStaticCastExpr : StmtNode<CXXNamedCastExpr>;
118def CXXDynamicCastExpr : StmtNode<CXXNamedCastExpr>;
119def CXXReinterpretCastExpr : StmtNode<CXXNamedCastExpr>;
120def CXXConstCastExpr : StmtNode<CXXNamedCastExpr>;
121def CXXFunctionalCastExpr : StmtNode<ExplicitCastExpr>;
122def CXXTypeidExpr : StmtNode<Expr>;
123def UserDefinedLiteral : StmtNode<CallExpr>;
124def CXXBoolLiteralExpr : StmtNode<Expr>;
125def CXXNullPtrLiteralExpr : StmtNode<Expr>;
126def CXXThisExpr : StmtNode<Expr>;
127def CXXThrowExpr : StmtNode<Expr>;
128def CXXDefaultArgExpr : StmtNode<Expr>;
129def CXXDefaultInitExpr : StmtNode<Expr>;
130def CXXScalarValueInitExpr : StmtNode<Expr>;
131def CXXStdInitializerListExpr : StmtNode<Expr>;
132def CXXNewExpr : StmtNode<Expr>;
133def CXXDeleteExpr : StmtNode<Expr>;
134def CXXPseudoDestructorExpr : StmtNode<Expr>;
135def TypeTraitExpr : StmtNode<Expr>;
136def ArrayTypeTraitExpr : StmtNode<Expr>;
137def ExpressionTraitExpr : StmtNode<Expr>;
138def DependentScopeDeclRefExpr : StmtNode<Expr>;
139def CXXConstructExpr : StmtNode<Expr>;
140def CXXInheritedCtorInitExpr : StmtNode<Expr>;
141def CXXBindTemporaryExpr : StmtNode<Expr>;
142def ExprWithCleanups : StmtNode<FullExpr>;
143def CXXTemporaryObjectExpr : StmtNode<CXXConstructExpr>;
144def CXXUnresolvedConstructExpr : StmtNode<Expr>;
145def CXXDependentScopeMemberExpr : StmtNode<Expr>;
146def OverloadExpr : StmtNode<Expr, 1>;
147def UnresolvedLookupExpr : StmtNode<OverloadExpr>;
148def UnresolvedMemberExpr : StmtNode<OverloadExpr>;
149def CXXNoexceptExpr : StmtNode<Expr>;
150def PackExpansionExpr : StmtNode<Expr>;
151def SizeOfPackExpr : StmtNode<Expr>;
152def SubstNonTypeTemplateParmExpr : StmtNode<Expr>;
153def SubstNonTypeTemplateParmPackExpr : StmtNode<Expr>;
154def FunctionParmPackExpr : StmtNode<Expr>;
155def MaterializeTemporaryExpr : StmtNode<Expr>;
156def LambdaExpr : StmtNode<Expr>;
157def CXXFoldExpr : StmtNode<Expr>;
158
159// C++ Coroutines TS expressions
160def CoroutineSuspendExpr : StmtNode<Expr, 1>;
161def CoawaitExpr : StmtNode<CoroutineSuspendExpr>;
162def DependentCoawaitExpr : StmtNode<Expr>;
163def CoyieldExpr : StmtNode<CoroutineSuspendExpr>;
164
165// C++20 Concepts expressions
166def ConceptSpecializationExpr : StmtNode<Expr>;
167def RequiresExpr : StmtNode<Expr>;
168
169// Obj-C Expressions.
170def ObjCStringLiteral : StmtNode<Expr>;
171def ObjCBoxedExpr : StmtNode<Expr>;
172def ObjCArrayLiteral : StmtNode<Expr>;
173def ObjCDictionaryLiteral : StmtNode<Expr>;
174def ObjCEncodeExpr : StmtNode<Expr>;
175def ObjCMessageExpr : StmtNode<Expr>;
176def ObjCSelectorExpr : StmtNode<Expr>;
177def ObjCProtocolExpr : StmtNode<Expr>;
178def ObjCIvarRefExpr : StmtNode<Expr>;
179def ObjCPropertyRefExpr : StmtNode<Expr>;
180def ObjCIsaExpr : StmtNode<Expr>;
181def ObjCIndirectCopyRestoreExpr : StmtNode<Expr>;
182def ObjCBoolLiteralExpr : StmtNode<Expr>;
183def ObjCSubscriptRefExpr : StmtNode<Expr>;
184def ObjCAvailabilityCheckExpr : StmtNode<Expr>;
185
186// Obj-C ARC Expressions.
187def ObjCBridgedCastExpr : StmtNode<ExplicitCastExpr>;
188
189// CUDA Expressions.
190def CUDAKernelCallExpr : StmtNode<CallExpr>;
191
192// Clang Extensions.
193def ShuffleVectorExpr : StmtNode<Expr>;
194def ConvertVectorExpr : StmtNode<Expr>;
195def BlockExpr : StmtNode<Expr>;
196def OpaqueValueExpr : StmtNode<Expr>;
197def TypoExpr : StmtNode<Expr>;
198def BuiltinBitCastExpr : StmtNode<ExplicitCastExpr>;
199
200// Microsoft Extensions.
201def MSPropertyRefExpr : StmtNode<Expr>;
202def MSPropertySubscriptExpr : StmtNode<Expr>;
203def CXXUuidofExpr : StmtNode<Expr>;
204def SEHTryStmt : StmtNode<Stmt>;
205def SEHExceptStmt : StmtNode<Stmt>;
206def SEHFinallyStmt : StmtNode<Stmt>;
207def SEHLeaveStmt : StmtNode<Stmt>;
208def MSDependentExistsStmt : StmtNode<Stmt>;
209
210// OpenCL Extensions.
211def AsTypeExpr : StmtNode<Expr>;
212
213// OpenMP Directives.
214def OMPExecutableDirective : StmtNode<Stmt, 1>;
215def OMPLoopDirective : StmtNode<OMPExecutableDirective, 1>;
216def OMPParallelDirective : StmtNode<OMPExecutableDirective>;
217def OMPSimdDirective : StmtNode<OMPLoopDirective>;
218def OMPForDirective : StmtNode<OMPLoopDirective>;
219def OMPForSimdDirective : StmtNode<OMPLoopDirective>;
220def OMPSectionsDirective : StmtNode<OMPExecutableDirective>;
221def OMPSectionDirective : StmtNode<OMPExecutableDirective>;
222def OMPSingleDirective : StmtNode<OMPExecutableDirective>;
223def OMPMasterDirective : StmtNode<OMPExecutableDirective>;
224def OMPCriticalDirective : StmtNode<OMPExecutableDirective>;
225def OMPParallelForDirective : StmtNode<OMPLoopDirective>;
226def OMPParallelForSimdDirective : StmtNode<OMPLoopDirective>;
227def OMPParallelMasterDirective : StmtNode<OMPExecutableDirective>;
228def OMPParallelSectionsDirective : StmtNode<OMPExecutableDirective>;
229def OMPTaskDirective : StmtNode<OMPExecutableDirective>;
230def OMPTaskyieldDirective : StmtNode<OMPExecutableDirective>;
231def OMPBarrierDirective : StmtNode<OMPExecutableDirective>;
232def OMPTaskwaitDirective : StmtNode<OMPExecutableDirective>;
233def OMPTaskgroupDirective : StmtNode<OMPExecutableDirective>;
234def OMPFlushDirective : StmtNode<OMPExecutableDirective>;
235def OMPOrderedDirective : StmtNode<OMPExecutableDirective>;
236def OMPAtomicDirective : StmtNode<OMPExecutableDirective>;
237def OMPTargetDirective : StmtNode<OMPExecutableDirective>;
238def OMPTargetDataDirective : StmtNode<OMPExecutableDirective>;
239def OMPTargetEnterDataDirective : StmtNode<OMPExecutableDirective>;
240def OMPTargetExitDataDirective : StmtNode<OMPExecutableDirective>;
241def OMPTargetParallelDirective : StmtNode<OMPExecutableDirective>;
242def OMPTargetParallelForDirective : StmtNode<OMPExecutableDirective>;
243def OMPTargetUpdateDirective : StmtNode<OMPExecutableDirective>;
244def OMPTeamsDirective : StmtNode<OMPExecutableDirective>;
245def OMPCancellationPointDirective : StmtNode<OMPExecutableDirective>;
246def OMPCancelDirective : StmtNode<OMPExecutableDirective>;
247def OMPTaskLoopDirective : StmtNode<OMPLoopDirective>;
248def OMPTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
249def OMPMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
250def OMPMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
251def OMPParallelMasterTaskLoopDirective : StmtNode<OMPLoopDirective>;
252def OMPParallelMasterTaskLoopSimdDirective : StmtNode<OMPLoopDirective>;
253def OMPDistributeDirective : StmtNode<OMPLoopDirective>;
254def OMPDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
255def OMPDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
256def OMPDistributeSimdDirective : StmtNode<OMPLoopDirective>;
257def OMPTargetParallelForSimdDirective : StmtNode<OMPLoopDirective>;
258def OMPTargetSimdDirective : StmtNode<OMPLoopDirective>;
259def OMPTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
260def OMPTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
261def OMPTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
262def OMPTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
263def OMPTargetTeamsDirective : StmtNode<OMPExecutableDirective>;
264def OMPTargetTeamsDistributeDirective : StmtNode<OMPLoopDirective>;
265def OMPTargetTeamsDistributeParallelForDirective : StmtNode<OMPLoopDirective>;
266def OMPTargetTeamsDistributeParallelForSimdDirective : StmtNode<OMPLoopDirective>;
267def OMPTargetTeamsDistributeSimdDirective : StmtNode<OMPLoopDirective>;
268