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++ statements 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 FixedPointLiteral : DStmt<Expr>; 61def FloatingLiteral : DStmt<Expr>; 62def ImaginaryLiteral : DStmt<Expr>; 63def StringLiteral : DStmt<Expr>; 64def CharacterLiteral : DStmt<Expr>; 65def ParenExpr : DStmt<Expr>; 66def UnaryOperator : DStmt<Expr>; 67def OffsetOfExpr : DStmt<Expr>; 68def UnaryExprOrTypeTraitExpr : DStmt<Expr>; 69def ArraySubscriptExpr : DStmt<Expr>; 70def OMPArraySectionExpr : DStmt<Expr>; 71def CallExpr : DStmt<Expr>; 72def MemberExpr : DStmt<Expr>; 73def CastExpr : DStmt<Expr, 1>; 74def BinaryOperator : DStmt<Expr>; 75def CompoundAssignOperator : DStmt<BinaryOperator>; 76def AbstractConditionalOperator : DStmt<Expr, 1>; 77def ConditionalOperator : DStmt<AbstractConditionalOperator>; 78def BinaryConditionalOperator : DStmt<AbstractConditionalOperator>; 79def ImplicitCastExpr : DStmt<CastExpr>; 80def ExplicitCastExpr : DStmt<CastExpr, 1>; 81def CStyleCastExpr : DStmt<ExplicitCastExpr>; 82def CompoundLiteralExpr : DStmt<Expr>; 83def ExtVectorElementExpr : DStmt<Expr>; 84def InitListExpr : DStmt<Expr>; 85def DesignatedInitExpr : DStmt<Expr>; 86def DesignatedInitUpdateExpr : DStmt<Expr>; 87def ImplicitValueInitExpr : DStmt<Expr>; 88def NoInitExpr : DStmt<Expr>; 89def ArrayInitLoopExpr : DStmt<Expr>; 90def ArrayInitIndexExpr : DStmt<Expr>; 91def ParenListExpr : DStmt<Expr>; 92def VAArgExpr : DStmt<Expr>; 93def GenericSelectionExpr : DStmt<Expr>; 94def PseudoObjectExpr : DStmt<Expr>; 95 96// Wrapper expressions 97def FullExpr : DStmt<Expr, 1>; 98def ConstantExpr : DStmt<FullExpr>; 99 100// Atomic expressions 101def AtomicExpr : DStmt<Expr>; 102 103// GNU Extensions. 104def AddrLabelExpr : DStmt<Expr>; 105def StmtExpr : DStmt<Expr>; 106def ChooseExpr : DStmt<Expr>; 107def GNUNullExpr : DStmt<Expr>; 108 109// C++ Expressions. 110def CXXOperatorCallExpr : DStmt<CallExpr>; 111def CXXMemberCallExpr : DStmt<CallExpr>; 112def CXXNamedCastExpr : DStmt<ExplicitCastExpr, 1>; 113def CXXStaticCastExpr : DStmt<CXXNamedCastExpr>; 114def CXXDynamicCastExpr : DStmt<CXXNamedCastExpr>; 115def CXXReinterpretCastExpr : DStmt<CXXNamedCastExpr>; 116def CXXConstCastExpr : DStmt<CXXNamedCastExpr>; 117def CXXFunctionalCastExpr : DStmt<ExplicitCastExpr>; 118def CXXTypeidExpr : DStmt<Expr>; 119def UserDefinedLiteral : DStmt<CallExpr>; 120def CXXBoolLiteralExpr : DStmt<Expr>; 121def CXXNullPtrLiteralExpr : DStmt<Expr>; 122def CXXThisExpr : DStmt<Expr>; 123def CXXThrowExpr : DStmt<Expr>; 124def CXXDefaultArgExpr : DStmt<Expr>; 125def CXXDefaultInitExpr : DStmt<Expr>; 126def CXXScalarValueInitExpr : DStmt<Expr>; 127def CXXStdInitializerListExpr : DStmt<Expr>; 128def CXXNewExpr : DStmt<Expr>; 129def CXXDeleteExpr : DStmt<Expr>; 130def CXXPseudoDestructorExpr : DStmt<Expr>; 131def TypeTraitExpr : DStmt<Expr>; 132def ArrayTypeTraitExpr : DStmt<Expr>; 133def ExpressionTraitExpr : DStmt<Expr>; 134def DependentScopeDeclRefExpr : DStmt<Expr>; 135def CXXConstructExpr : DStmt<Expr>; 136def CXXInheritedCtorInitExpr : DStmt<Expr>; 137def CXXBindTemporaryExpr : DStmt<Expr>; 138def ExprWithCleanups : DStmt<FullExpr>; 139def CXXTemporaryObjectExpr : DStmt<CXXConstructExpr>; 140def CXXUnresolvedConstructExpr : DStmt<Expr>; 141def CXXDependentScopeMemberExpr : DStmt<Expr>; 142def OverloadExpr : DStmt<Expr, 1>; 143def UnresolvedLookupExpr : DStmt<OverloadExpr>; 144def UnresolvedMemberExpr : DStmt<OverloadExpr>; 145def CXXNoexceptExpr : DStmt<Expr>; 146def PackExpansionExpr : DStmt<Expr>; 147def SizeOfPackExpr : DStmt<Expr>; 148def SubstNonTypeTemplateParmExpr : DStmt<Expr>; 149def SubstNonTypeTemplateParmPackExpr : DStmt<Expr>; 150def FunctionParmPackExpr : DStmt<Expr>; 151def MaterializeTemporaryExpr : DStmt<Expr>; 152def LambdaExpr : DStmt<Expr>; 153def CXXFoldExpr : DStmt<Expr>; 154 155// C++ Coroutines TS expressions 156def CoroutineSuspendExpr : DStmt<Expr, 1>; 157def CoawaitExpr : DStmt<CoroutineSuspendExpr>; 158def DependentCoawaitExpr : DStmt<Expr>; 159def CoyieldExpr : DStmt<CoroutineSuspendExpr>; 160 161// Obj-C Expressions. 162def ObjCStringLiteral : DStmt<Expr>; 163def ObjCBoxedExpr : DStmt<Expr>; 164def ObjCArrayLiteral : DStmt<Expr>; 165def ObjCDictionaryLiteral : DStmt<Expr>; 166def ObjCEncodeExpr : DStmt<Expr>; 167def ObjCMessageExpr : DStmt<Expr>; 168def ObjCSelectorExpr : DStmt<Expr>; 169def ObjCProtocolExpr : DStmt<Expr>; 170def ObjCIvarRefExpr : DStmt<Expr>; 171def ObjCPropertyRefExpr : DStmt<Expr>; 172def ObjCIsaExpr : DStmt<Expr>; 173def ObjCIndirectCopyRestoreExpr : DStmt<Expr>; 174def ObjCBoolLiteralExpr : DStmt<Expr>; 175def ObjCSubscriptRefExpr : DStmt<Expr>; 176def ObjCAvailabilityCheckExpr : DStmt<Expr>; 177 178// Obj-C ARC Expressions. 179def ObjCBridgedCastExpr : DStmt<ExplicitCastExpr>; 180 181// CUDA Expressions. 182def CUDAKernelCallExpr : DStmt<CallExpr>; 183 184// Clang Extensions. 185def ShuffleVectorExpr : DStmt<Expr>; 186def ConvertVectorExpr : DStmt<Expr>; 187def BlockExpr : DStmt<Expr>; 188def OpaqueValueExpr : DStmt<Expr>; 189def TypoExpr : DStmt<Expr>; 190 191// Microsoft Extensions. 192def MSPropertyRefExpr : DStmt<Expr>; 193def MSPropertySubscriptExpr : DStmt<Expr>; 194def CXXUuidofExpr : DStmt<Expr>; 195def SEHTryStmt : Stmt; 196def SEHExceptStmt : Stmt; 197def SEHFinallyStmt : Stmt; 198def SEHLeaveStmt : Stmt; 199def MSDependentExistsStmt : Stmt; 200 201// OpenCL Extensions. 202def AsTypeExpr : DStmt<Expr>; 203 204// OpenMP Directives. 205def OMPExecutableDirective : Stmt<1>; 206def OMPLoopDirective : DStmt<OMPExecutableDirective, 1>; 207def OMPParallelDirective : DStmt<OMPExecutableDirective>; 208def OMPSimdDirective : DStmt<OMPLoopDirective>; 209def OMPForDirective : DStmt<OMPLoopDirective>; 210def OMPForSimdDirective : DStmt<OMPLoopDirective>; 211def OMPSectionsDirective : DStmt<OMPExecutableDirective>; 212def OMPSectionDirective : DStmt<OMPExecutableDirective>; 213def OMPSingleDirective : DStmt<OMPExecutableDirective>; 214def OMPMasterDirective : DStmt<OMPExecutableDirective>; 215def OMPCriticalDirective : DStmt<OMPExecutableDirective>; 216def OMPParallelForDirective : DStmt<OMPLoopDirective>; 217def OMPParallelForSimdDirective : DStmt<OMPLoopDirective>; 218def OMPParallelSectionsDirective : DStmt<OMPExecutableDirective>; 219def OMPTaskDirective : DStmt<OMPExecutableDirective>; 220def OMPTaskyieldDirective : DStmt<OMPExecutableDirective>; 221def OMPBarrierDirective : DStmt<OMPExecutableDirective>; 222def OMPTaskwaitDirective : DStmt<OMPExecutableDirective>; 223def OMPTaskgroupDirective : DStmt<OMPExecutableDirective>; 224def OMPFlushDirective : DStmt<OMPExecutableDirective>; 225def OMPOrderedDirective : DStmt<OMPExecutableDirective>; 226def OMPAtomicDirective : DStmt<OMPExecutableDirective>; 227def OMPTargetDirective : DStmt<OMPExecutableDirective>; 228def OMPTargetDataDirective : DStmt<OMPExecutableDirective>; 229def OMPTargetEnterDataDirective : DStmt<OMPExecutableDirective>; 230def OMPTargetExitDataDirective : DStmt<OMPExecutableDirective>; 231def OMPTargetParallelDirective : DStmt<OMPExecutableDirective>; 232def OMPTargetParallelForDirective : DStmt<OMPExecutableDirective>; 233def OMPTargetUpdateDirective : DStmt<OMPExecutableDirective>; 234def OMPTeamsDirective : DStmt<OMPExecutableDirective>; 235def OMPCancellationPointDirective : DStmt<OMPExecutableDirective>; 236def OMPCancelDirective : DStmt<OMPExecutableDirective>; 237def OMPTaskLoopDirective : DStmt<OMPLoopDirective>; 238def OMPTaskLoopSimdDirective : DStmt<OMPLoopDirective>; 239def OMPDistributeDirective : DStmt<OMPLoopDirective>; 240def OMPDistributeParallelForDirective : DStmt<OMPLoopDirective>; 241def OMPDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>; 242def OMPDistributeSimdDirective : DStmt<OMPLoopDirective>; 243def OMPTargetParallelForSimdDirective : DStmt<OMPLoopDirective>; 244def OMPTargetSimdDirective : DStmt<OMPLoopDirective>; 245def OMPTeamsDistributeDirective : DStmt<OMPLoopDirective>; 246def OMPTeamsDistributeSimdDirective : DStmt<OMPLoopDirective>; 247def OMPTeamsDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>; 248def OMPTeamsDistributeParallelForDirective : DStmt<OMPLoopDirective>; 249def OMPTargetTeamsDirective : DStmt<OMPExecutableDirective>; 250def OMPTargetTeamsDistributeDirective : DStmt<OMPLoopDirective>; 251def OMPTargetTeamsDistributeParallelForDirective : DStmt<OMPLoopDirective>; 252def OMPTargetTeamsDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>; 253def OMPTargetTeamsDistributeSimdDirective : DStmt<OMPLoopDirective>; 254