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