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// Expressions
52def Expr : Stmt<1>;
53def PredefinedExpr : DStmt<Expr>;
54def DeclRefExpr : DStmt<Expr>;
55def IntegerLiteral : DStmt<Expr>;
56def FloatingLiteral : DStmt<Expr>;
57def ImaginaryLiteral : DStmt<Expr>;
58def StringLiteral : DStmt<Expr>;
59def CharacterLiteral : DStmt<Expr>;
60def ParenExpr : DStmt<Expr>;
61def UnaryOperator : DStmt<Expr>;
62def OffsetOfExpr : DStmt<Expr>;
63def UnaryExprOrTypeTraitExpr : DStmt<Expr>;
64def ArraySubscriptExpr : DStmt<Expr>;
65def CallExpr : DStmt<Expr>;
66def MemberExpr : DStmt<Expr>;
67def CastExpr : DStmt<Expr, 1>;
68def BinaryOperator : DStmt<Expr>;
69def CompoundAssignOperator : DStmt<BinaryOperator>;
70def AbstractConditionalOperator : DStmt<Expr, 1>;
71def ConditionalOperator : DStmt<AbstractConditionalOperator>;
72def BinaryConditionalOperator : DStmt<AbstractConditionalOperator>;
73def ImplicitCastExpr : DStmt<CastExpr>;
74def ExplicitCastExpr : DStmt<CastExpr, 1>;
75def CStyleCastExpr : DStmt<ExplicitCastExpr>;
76def CompoundLiteralExpr : DStmt<Expr>;
77def ExtVectorElementExpr : DStmt<Expr>;
78def InitListExpr : DStmt<Expr>;
79def DesignatedInitExpr : DStmt<Expr>;
80def ImplicitValueInitExpr : DStmt<Expr>;
81def ParenListExpr : DStmt<Expr>;
82def VAArgExpr : DStmt<Expr>;
83def GenericSelectionExpr : DStmt<Expr>;
84def PseudoObjectExpr : DStmt<Expr>;
85
86// Atomic expressions
87def AtomicExpr : DStmt<Expr>;
88
89// GNU Extensions.
90def AddrLabelExpr : DStmt<Expr>;
91def StmtExpr : DStmt<Expr>;
92def ChooseExpr : DStmt<Expr>;
93def GNUNullExpr : DStmt<Expr>;
94
95// C++ Expressions.
96def CXXOperatorCallExpr : DStmt<CallExpr>;
97def CXXMemberCallExpr : DStmt<CallExpr>;
98def CXXNamedCastExpr : DStmt<ExplicitCastExpr, 1>;
99def CXXStaticCastExpr : DStmt<CXXNamedCastExpr>;
100def CXXDynamicCastExpr : DStmt<CXXNamedCastExpr>;
101def CXXReinterpretCastExpr : DStmt<CXXNamedCastExpr>;
102def CXXConstCastExpr : DStmt<CXXNamedCastExpr>;
103def CXXFunctionalCastExpr : DStmt<ExplicitCastExpr>;
104def CXXTypeidExpr : DStmt<Expr>;
105def UserDefinedLiteral : DStmt<CallExpr>;
106def CXXBoolLiteralExpr : DStmt<Expr>;
107def CXXNullPtrLiteralExpr : DStmt<Expr>;
108def CXXThisExpr : DStmt<Expr>;
109def CXXThrowExpr : DStmt<Expr>;
110def CXXDefaultArgExpr : DStmt<Expr>;
111def CXXDefaultInitExpr : DStmt<Expr>;
112def CXXScalarValueInitExpr : DStmt<Expr>;
113def CXXStdInitializerListExpr : DStmt<Expr>;
114def CXXNewExpr : DStmt<Expr>;
115def CXXDeleteExpr : DStmt<Expr>;
116def CXXPseudoDestructorExpr : DStmt<Expr>;
117def TypeTraitExpr : DStmt<Expr>;
118def UnaryTypeTraitExpr : DStmt<Expr>;
119def BinaryTypeTraitExpr : DStmt<Expr>;
120def ArrayTypeTraitExpr : DStmt<Expr>;
121def ExpressionTraitExpr : DStmt<Expr>;
122def DependentScopeDeclRefExpr : DStmt<Expr>;
123def CXXConstructExpr : DStmt<Expr>;
124def CXXBindTemporaryExpr : DStmt<Expr>;
125def ExprWithCleanups : DStmt<Expr>;
126def CXXTemporaryObjectExpr : DStmt<CXXConstructExpr>;
127def CXXUnresolvedConstructExpr : DStmt<Expr>;
128def CXXDependentScopeMemberExpr : DStmt<Expr>;
129def OverloadExpr : DStmt<Expr, 1>;
130def UnresolvedLookupExpr : DStmt<OverloadExpr>;
131def UnresolvedMemberExpr : DStmt<OverloadExpr>;
132def CXXNoexceptExpr : DStmt<Expr>;
133def PackExpansionExpr : DStmt<Expr>;
134def SizeOfPackExpr : DStmt<Expr>;
135def SubstNonTypeTemplateParmExpr : DStmt<Expr>;
136def SubstNonTypeTemplateParmPackExpr : DStmt<Expr>;
137def FunctionParmPackExpr : DStmt<Expr>;
138def MaterializeTemporaryExpr : DStmt<Expr>;
139def LambdaExpr : DStmt<Expr>;
140
141// Obj-C Expressions.
142def ObjCStringLiteral : DStmt<Expr>;
143def ObjCBoxedExpr : DStmt<Expr>;
144def ObjCArrayLiteral : DStmt<Expr>;
145def ObjCDictionaryLiteral : DStmt<Expr>;
146def ObjCEncodeExpr : DStmt<Expr>;
147def ObjCMessageExpr : DStmt<Expr>;
148def ObjCSelectorExpr : DStmt<Expr>;
149def ObjCProtocolExpr : DStmt<Expr>;
150def ObjCIvarRefExpr : DStmt<Expr>;
151def ObjCPropertyRefExpr : DStmt<Expr>;
152def ObjCIsaExpr : DStmt<Expr>;
153def ObjCIndirectCopyRestoreExpr : DStmt<Expr>;
154def ObjCBoolLiteralExpr : DStmt<Expr>;
155def ObjCSubscriptRefExpr : DStmt<Expr>;
156
157// Obj-C ARC Expressions.
158def ObjCBridgedCastExpr : DStmt<ExplicitCastExpr>;
159
160// CUDA Expressions.
161def CUDAKernelCallExpr : DStmt<CallExpr>;
162
163// Clang Extensions.
164def ShuffleVectorExpr : DStmt<Expr>;
165def ConvertVectorExpr : DStmt<Expr>;
166def BlockExpr : DStmt<Expr>;
167def OpaqueValueExpr : DStmt<Expr>;
168
169// Microsoft Extensions.
170def MSPropertyRefExpr : DStmt<Expr>;
171def CXXUuidofExpr : DStmt<Expr>;
172def SEHTryStmt : Stmt;
173def SEHExceptStmt : Stmt;
174def SEHFinallyStmt : Stmt;
175def MSDependentExistsStmt : Stmt;
176
177// OpenCL Extensions.
178def AsTypeExpr : DStmt<Expr>;
179
180// OpenMP Directives.
181def OMPExecutableDirective : Stmt<1>;
182def OMPParallelDirective : DStmt<OMPExecutableDirective>;
183