1 class AttrSubject; 2 3 class Stmt<bit abstract = 0> : AttrSubject { 4 bit Abstract = abstract; 5 } 6 7 class DStmt<Stmt base, bit abstract = 0> : Stmt<abstract> { 8 Stmt Base = base; 9 } 10 11 // Statements 12 def NullStmt : Stmt; 13 def CompoundStmt : Stmt; 14 def LabelStmt : Stmt; 15 def AttributedStmt : Stmt; 16 def IfStmt : Stmt; 17 def SwitchStmt : Stmt; 18 def WhileStmt : Stmt; 19 def DoStmt : Stmt; 20 def ForStmt : Stmt; 21 def GotoStmt : Stmt; 22 def IndirectGotoStmt : Stmt; 23 def ContinueStmt : Stmt; 24 def BreakStmt : Stmt; 25 def ReturnStmt : Stmt; 26 def DeclStmt : Stmt; 27 def SwitchCase : Stmt<1>; 28 def CaseStmt : DStmt<SwitchCase>; 29 def DefaultStmt : DStmt<SwitchCase>; 30 def CapturedStmt : Stmt; 31 32 // Asm statements 33 def AsmStmt : Stmt<1>; 34 def GCCAsmStmt : DStmt<AsmStmt>; 35 def MSAsmStmt : DStmt<AsmStmt>; 36 37 // Obj-C statements 38 def ObjCAtTryStmt : Stmt; 39 def ObjCAtCatchStmt : Stmt; 40 def ObjCAtFinallyStmt : Stmt; 41 def ObjCAtThrowStmt : Stmt; 42 def ObjCAtSynchronizedStmt : Stmt; 43 def ObjCForCollectionStmt : Stmt; 44 def ObjCAutoreleasePoolStmt : Stmt; 45 46 // C++ statments 47 def CXXCatchStmt : Stmt; 48 def CXXTryStmt : Stmt; 49 def CXXForRangeStmt : Stmt; 50 51 // C++ Coroutines TS statements 52 def CoroutineBodyStmt : Stmt; 53 def CoreturnStmt : Stmt; 54 55 // Expressions 56 def Expr : Stmt<1>; 57 def PredefinedExpr : DStmt<Expr>; 58 def DeclRefExpr : DStmt<Expr>; 59 def IntegerLiteral : DStmt<Expr>; 60 def FloatingLiteral : DStmt<Expr>; 61 def ImaginaryLiteral : DStmt<Expr>; 62 def StringLiteral : DStmt<Expr>; 63 def CharacterLiteral : DStmt<Expr>; 64 def ParenExpr : DStmt<Expr>; 65 def UnaryOperator : DStmt<Expr>; 66 def OffsetOfExpr : DStmt<Expr>; 67 def UnaryExprOrTypeTraitExpr : DStmt<Expr>; 68 def ArraySubscriptExpr : DStmt<Expr>; 69 def OMPArraySectionExpr : DStmt<Expr>; 70 def CallExpr : DStmt<Expr>; 71 def MemberExpr : DStmt<Expr>; 72 def CastExpr : DStmt<Expr, 1>; 73 def BinaryOperator : DStmt<Expr>; 74 def CompoundAssignOperator : DStmt<BinaryOperator>; 75 def AbstractConditionalOperator : DStmt<Expr, 1>; 76 def ConditionalOperator : DStmt<AbstractConditionalOperator>; 77 def BinaryConditionalOperator : DStmt<AbstractConditionalOperator>; 78 def ImplicitCastExpr : DStmt<CastExpr>; 79 def ExplicitCastExpr : DStmt<CastExpr, 1>; 80 def CStyleCastExpr : DStmt<ExplicitCastExpr>; 81 def CompoundLiteralExpr : DStmt<Expr>; 82 def ExtVectorElementExpr : DStmt<Expr>; 83 def InitListExpr : DStmt<Expr>; 84 def DesignatedInitExpr : DStmt<Expr>; 85 def DesignatedInitUpdateExpr : DStmt<Expr>; 86 def ImplicitValueInitExpr : DStmt<Expr>; 87 def NoInitExpr : DStmt<Expr>; 88 def ParenListExpr : DStmt<Expr>; 89 def VAArgExpr : DStmt<Expr>; 90 def GenericSelectionExpr : DStmt<Expr>; 91 def PseudoObjectExpr : DStmt<Expr>; 92 93 // Atomic expressions 94 def AtomicExpr : DStmt<Expr>; 95 96 // GNU Extensions. 97 def AddrLabelExpr : DStmt<Expr>; 98 def StmtExpr : DStmt<Expr>; 99 def ChooseExpr : DStmt<Expr>; 100 def GNUNullExpr : DStmt<Expr>; 101 102 // C++ Expressions. 103 def CXXOperatorCallExpr : DStmt<CallExpr>; 104 def CXXMemberCallExpr : DStmt<CallExpr>; 105 def CXXNamedCastExpr : DStmt<ExplicitCastExpr, 1>; 106 def CXXStaticCastExpr : DStmt<CXXNamedCastExpr>; 107 def CXXDynamicCastExpr : DStmt<CXXNamedCastExpr>; 108 def CXXReinterpretCastExpr : DStmt<CXXNamedCastExpr>; 109 def CXXConstCastExpr : DStmt<CXXNamedCastExpr>; 110 def CXXFunctionalCastExpr : DStmt<ExplicitCastExpr>; 111 def CXXTypeidExpr : DStmt<Expr>; 112 def UserDefinedLiteral : DStmt<CallExpr>; 113 def CXXBoolLiteralExpr : DStmt<Expr>; 114 def CXXNullPtrLiteralExpr : DStmt<Expr>; 115 def CXXThisExpr : DStmt<Expr>; 116 def CXXThrowExpr : DStmt<Expr>; 117 def CXXDefaultArgExpr : DStmt<Expr>; 118 def CXXDefaultInitExpr : DStmt<Expr>; 119 def CXXScalarValueInitExpr : DStmt<Expr>; 120 def CXXStdInitializerListExpr : DStmt<Expr>; 121 def CXXNewExpr : DStmt<Expr>; 122 def CXXDeleteExpr : DStmt<Expr>; 123 def CXXPseudoDestructorExpr : DStmt<Expr>; 124 def TypeTraitExpr : DStmt<Expr>; 125 def ArrayTypeTraitExpr : DStmt<Expr>; 126 def ExpressionTraitExpr : DStmt<Expr>; 127 def DependentScopeDeclRefExpr : DStmt<Expr>; 128 def CXXConstructExpr : DStmt<Expr>; 129 def CXXInheritedCtorInitExpr : DStmt<Expr>; 130 def CXXBindTemporaryExpr : DStmt<Expr>; 131 def ExprWithCleanups : DStmt<Expr>; 132 def CXXTemporaryObjectExpr : DStmt<CXXConstructExpr>; 133 def CXXUnresolvedConstructExpr : DStmt<Expr>; 134 def CXXDependentScopeMemberExpr : DStmt<Expr>; 135 def OverloadExpr : DStmt<Expr, 1>; 136 def UnresolvedLookupExpr : DStmt<OverloadExpr>; 137 def UnresolvedMemberExpr : DStmt<OverloadExpr>; 138 def CXXNoexceptExpr : DStmt<Expr>; 139 def PackExpansionExpr : DStmt<Expr>; 140 def SizeOfPackExpr : DStmt<Expr>; 141 def SubstNonTypeTemplateParmExpr : DStmt<Expr>; 142 def SubstNonTypeTemplateParmPackExpr : DStmt<Expr>; 143 def FunctionParmPackExpr : DStmt<Expr>; 144 def MaterializeTemporaryExpr : DStmt<Expr>; 145 def LambdaExpr : DStmt<Expr>; 146 def CXXFoldExpr : DStmt<Expr>; 147 148 // C++ Coroutines TS expressions 149 def CoroutineSuspendExpr : DStmt<Expr, 1>; 150 def CoawaitExpr : DStmt<CoroutineSuspendExpr>; 151 def CoyieldExpr : DStmt<CoroutineSuspendExpr>; 152 153 // Obj-C Expressions. 154 def ObjCStringLiteral : DStmt<Expr>; 155 def ObjCBoxedExpr : DStmt<Expr>; 156 def ObjCArrayLiteral : DStmt<Expr>; 157 def ObjCDictionaryLiteral : DStmt<Expr>; 158 def ObjCEncodeExpr : DStmt<Expr>; 159 def ObjCMessageExpr : DStmt<Expr>; 160 def ObjCSelectorExpr : DStmt<Expr>; 161 def ObjCProtocolExpr : DStmt<Expr>; 162 def ObjCIvarRefExpr : DStmt<Expr>; 163 def ObjCPropertyRefExpr : DStmt<Expr>; 164 def ObjCIsaExpr : DStmt<Expr>; 165 def ObjCIndirectCopyRestoreExpr : DStmt<Expr>; 166 def ObjCBoolLiteralExpr : DStmt<Expr>; 167 def ObjCSubscriptRefExpr : DStmt<Expr>; 168 169 // Obj-C ARC Expressions. 170 def ObjCBridgedCastExpr : DStmt<ExplicitCastExpr>; 171 172 // CUDA Expressions. 173 def CUDAKernelCallExpr : DStmt<CallExpr>; 174 175 // Clang Extensions. 176 def ShuffleVectorExpr : DStmt<Expr>; 177 def ConvertVectorExpr : DStmt<Expr>; 178 def BlockExpr : DStmt<Expr>; 179 def OpaqueValueExpr : DStmt<Expr>; 180 def TypoExpr : DStmt<Expr>; 181 182 // Microsoft Extensions. 183 def MSPropertyRefExpr : DStmt<Expr>; 184 def MSPropertySubscriptExpr : DStmt<Expr>; 185 def CXXUuidofExpr : DStmt<Expr>; 186 def SEHTryStmt : Stmt; 187 def SEHExceptStmt : Stmt; 188 def SEHFinallyStmt : Stmt; 189 def SEHLeaveStmt : Stmt; 190 def MSDependentExistsStmt : Stmt; 191 192 // OpenCL Extensions. 193 def AsTypeExpr : DStmt<Expr>; 194 195 // OpenMP Directives. 196 def OMPExecutableDirective : Stmt<1>; 197 def OMPLoopDirective : DStmt<OMPExecutableDirective, 1>; 198 def OMPParallelDirective : DStmt<OMPExecutableDirective>; 199 def OMPSimdDirective : DStmt<OMPLoopDirective>; 200 def OMPForDirective : DStmt<OMPLoopDirective>; 201 def OMPForSimdDirective : DStmt<OMPLoopDirective>; 202 def OMPSectionsDirective : DStmt<OMPExecutableDirective>; 203 def OMPSectionDirective : DStmt<OMPExecutableDirective>; 204 def OMPSingleDirective : DStmt<OMPExecutableDirective>; 205 def OMPMasterDirective : DStmt<OMPExecutableDirective>; 206 def OMPCriticalDirective : DStmt<OMPExecutableDirective>; 207 def OMPParallelForDirective : DStmt<OMPLoopDirective>; 208 def OMPParallelForSimdDirective : DStmt<OMPLoopDirective>; 209 def OMPParallelSectionsDirective : DStmt<OMPExecutableDirective>; 210 def OMPTaskDirective : DStmt<OMPExecutableDirective>; 211 def OMPTaskyieldDirective : DStmt<OMPExecutableDirective>; 212 def OMPBarrierDirective : DStmt<OMPExecutableDirective>; 213 def OMPTaskwaitDirective : DStmt<OMPExecutableDirective>; 214 def OMPTaskgroupDirective : DStmt<OMPExecutableDirective>; 215 def OMPFlushDirective : DStmt<OMPExecutableDirective>; 216 def OMPOrderedDirective : DStmt<OMPExecutableDirective>; 217 def OMPAtomicDirective : DStmt<OMPExecutableDirective>; 218 def OMPTargetDirective : DStmt<OMPExecutableDirective>; 219 def OMPTargetDataDirective : DStmt<OMPExecutableDirective>; 220 def OMPTargetEnterDataDirective : DStmt<OMPExecutableDirective>; 221 def OMPTargetExitDataDirective : DStmt<OMPExecutableDirective>; 222 def OMPTargetParallelDirective : DStmt<OMPExecutableDirective>; 223 def OMPTargetParallelForDirective : DStmt<OMPExecutableDirective>; 224 def OMPTargetUpdateDirective : DStmt<OMPExecutableDirective>; 225 def OMPTeamsDirective : DStmt<OMPExecutableDirective>; 226 def OMPCancellationPointDirective : DStmt<OMPExecutableDirective>; 227 def OMPCancelDirective : DStmt<OMPExecutableDirective>; 228 def OMPTaskLoopDirective : DStmt<OMPLoopDirective>; 229 def OMPTaskLoopSimdDirective : DStmt<OMPLoopDirective>; 230 def OMPDistributeDirective : DStmt<OMPLoopDirective>; 231 def OMPDistributeParallelForDirective : DStmt<OMPLoopDirective>; 232 def OMPDistributeParallelForSimdDirective : DStmt<OMPLoopDirective>; 233 def OMPDistributeSimdDirective : DStmt<OMPLoopDirective>; 234 def OMPTargetParallelForSimdDirective : DStmt<OMPLoopDirective>; 235