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