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