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