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