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 ArrayTypeTraitExpr : DStmt<Expr>; 119def ExpressionTraitExpr : DStmt<Expr>; 120def DependentScopeDeclRefExpr : DStmt<Expr>; 121def CXXConstructExpr : DStmt<Expr>; 122def CXXBindTemporaryExpr : DStmt<Expr>; 123def ExprWithCleanups : DStmt<Expr>; 124def CXXTemporaryObjectExpr : DStmt<CXXConstructExpr>; 125def CXXUnresolvedConstructExpr : DStmt<Expr>; 126def CXXDependentScopeMemberExpr : DStmt<Expr>; 127def OverloadExpr : DStmt<Expr, 1>; 128def UnresolvedLookupExpr : DStmt<OverloadExpr>; 129def UnresolvedMemberExpr : DStmt<OverloadExpr>; 130def CXXNoexceptExpr : DStmt<Expr>; 131def PackExpansionExpr : DStmt<Expr>; 132def SizeOfPackExpr : DStmt<Expr>; 133def SubstNonTypeTemplateParmExpr : DStmt<Expr>; 134def SubstNonTypeTemplateParmPackExpr : DStmt<Expr>; 135def FunctionParmPackExpr : DStmt<Expr>; 136def MaterializeTemporaryExpr : DStmt<Expr>; 137def LambdaExpr : DStmt<Expr>; 138def CXXFoldExpr : DStmt<Expr>; 139 140// Obj-C Expressions. 141def ObjCStringLiteral : DStmt<Expr>; 142def ObjCBoxedExpr : DStmt<Expr>; 143def ObjCArrayLiteral : DStmt<Expr>; 144def ObjCDictionaryLiteral : DStmt<Expr>; 145def ObjCEncodeExpr : DStmt<Expr>; 146def ObjCMessageExpr : DStmt<Expr>; 147def ObjCSelectorExpr : DStmt<Expr>; 148def ObjCProtocolExpr : DStmt<Expr>; 149def ObjCIvarRefExpr : DStmt<Expr>; 150def ObjCPropertyRefExpr : DStmt<Expr>; 151def ObjCIsaExpr : DStmt<Expr>; 152def ObjCIndirectCopyRestoreExpr : DStmt<Expr>; 153def ObjCBoolLiteralExpr : DStmt<Expr>; 154def ObjCSubscriptRefExpr : DStmt<Expr>; 155 156// Obj-C ARC Expressions. 157def ObjCBridgedCastExpr : DStmt<ExplicitCastExpr>; 158 159// CUDA Expressions. 160def CUDAKernelCallExpr : DStmt<CallExpr>; 161 162// Clang Extensions. 163def ShuffleVectorExpr : DStmt<Expr>; 164def ConvertVectorExpr : DStmt<Expr>; 165def BlockExpr : DStmt<Expr>; 166def OpaqueValueExpr : DStmt<Expr>; 167def TypoExpr : DStmt<Expr>; 168 169// Microsoft Extensions. 170def MSPropertyRefExpr : DStmt<Expr>; 171def CXXUuidofExpr : DStmt<Expr>; 172def SEHTryStmt : Stmt; 173def SEHExceptStmt : Stmt; 174def SEHFinallyStmt : Stmt; 175def SEHLeaveStmt : Stmt; 176def MSDependentExistsStmt : Stmt; 177 178// OpenCL Extensions. 179def AsTypeExpr : DStmt<Expr>; 180 181// OpenMP Directives. 182def OMPExecutableDirective : Stmt<1>; 183def OMPLoopDirective : DStmt<OMPExecutableDirective, 1>; 184def OMPParallelDirective : DStmt<OMPExecutableDirective>; 185def OMPSimdDirective : DStmt<OMPLoopDirective>; 186def OMPForDirective : DStmt<OMPLoopDirective>; 187def OMPForSimdDirective : DStmt<OMPLoopDirective>; 188def OMPSectionsDirective : DStmt<OMPExecutableDirective>; 189def OMPSectionDirective : DStmt<OMPExecutableDirective>; 190def OMPSingleDirective : DStmt<OMPExecutableDirective>; 191def OMPMasterDirective : DStmt<OMPExecutableDirective>; 192def OMPCriticalDirective : DStmt<OMPExecutableDirective>; 193def OMPParallelForDirective : DStmt<OMPLoopDirective>; 194def OMPParallelForSimdDirective : DStmt<OMPLoopDirective>; 195def OMPParallelSectionsDirective : DStmt<OMPExecutableDirective>; 196def OMPTaskDirective : DStmt<OMPExecutableDirective>; 197def OMPTaskyieldDirective : DStmt<OMPExecutableDirective>; 198def OMPBarrierDirective : DStmt<OMPExecutableDirective>; 199def OMPTaskwaitDirective : DStmt<OMPExecutableDirective>; 200def OMPFlushDirective : DStmt<OMPExecutableDirective>; 201def OMPOrderedDirective : DStmt<OMPExecutableDirective>; 202def OMPAtomicDirective : DStmt<OMPExecutableDirective>; 203def OMPTargetDirective : DStmt<OMPExecutableDirective>; 204def OMPTeamsDirective : DStmt<OMPExecutableDirective>; 205