class AttrSubject; class Stmt : AttrSubject { bit Abstract = abstract; } class DStmt : Stmt { Stmt Base = base; } // Statements def NullStmt : Stmt; def CompoundStmt : Stmt; def LabelStmt : Stmt; def AttributedStmt : Stmt; def IfStmt : Stmt; def SwitchStmt : Stmt; def WhileStmt : Stmt; def DoStmt : Stmt; def ForStmt : Stmt; def GotoStmt : Stmt; def IndirectGotoStmt : Stmt; def ContinueStmt : Stmt; def BreakStmt : Stmt; def ReturnStmt : Stmt; def DeclStmt : Stmt; def SwitchCase : Stmt<1>; def CaseStmt : DStmt; def DefaultStmt : DStmt; def CapturedStmt : Stmt; // Asm statements def AsmStmt : Stmt<1>; def GCCAsmStmt : DStmt; def MSAsmStmt : DStmt; // Obj-C statements def ObjCAtTryStmt : Stmt; def ObjCAtCatchStmt : Stmt; def ObjCAtFinallyStmt : Stmt; def ObjCAtThrowStmt : Stmt; def ObjCAtSynchronizedStmt : Stmt; def ObjCForCollectionStmt : Stmt; def ObjCAutoreleasePoolStmt : Stmt; // C++ statments def CXXCatchStmt : Stmt; def CXXTryStmt : Stmt; def CXXForRangeStmt : Stmt; // Expressions def Expr : Stmt<1>; def PredefinedExpr : DStmt; def DeclRefExpr : DStmt; def IntegerLiteral : DStmt; def FloatingLiteral : DStmt; def ImaginaryLiteral : DStmt; def StringLiteral : DStmt; def CharacterLiteral : DStmt; def ParenExpr : DStmt; def UnaryOperator : DStmt; def OffsetOfExpr : DStmt; def UnaryExprOrTypeTraitExpr : DStmt; def ArraySubscriptExpr : DStmt; def CallExpr : DStmt; def MemberExpr : DStmt; def CastExpr : DStmt; def BinaryOperator : DStmt; def CompoundAssignOperator : DStmt; def AbstractConditionalOperator : DStmt; def ConditionalOperator : DStmt; def BinaryConditionalOperator : DStmt; def ImplicitCastExpr : DStmt; def ExplicitCastExpr : DStmt; def CStyleCastExpr : DStmt; def CompoundLiteralExpr : DStmt; def ExtVectorElementExpr : DStmt; def InitListExpr : DStmt; def DesignatedInitExpr : DStmt; def ImplicitValueInitExpr : DStmt; def ParenListExpr : DStmt; def VAArgExpr : DStmt; def GenericSelectionExpr : DStmt; def PseudoObjectExpr : DStmt; // Atomic expressions def AtomicExpr : DStmt; // GNU Extensions. def AddrLabelExpr : DStmt; def StmtExpr : DStmt; def ChooseExpr : DStmt; def GNUNullExpr : DStmt; // C++ Expressions. def CXXOperatorCallExpr : DStmt; def CXXMemberCallExpr : DStmt; def CXXNamedCastExpr : DStmt; def CXXStaticCastExpr : DStmt; def CXXDynamicCastExpr : DStmt; def CXXReinterpretCastExpr : DStmt; def CXXConstCastExpr : DStmt; def CXXFunctionalCastExpr : DStmt; def CXXTypeidExpr : DStmt; def UserDefinedLiteral : DStmt; def CXXBoolLiteralExpr : DStmt; def CXXNullPtrLiteralExpr : DStmt; def CXXThisExpr : DStmt; def CXXThrowExpr : DStmt; def CXXDefaultArgExpr : DStmt; def CXXDefaultInitExpr : DStmt; def CXXScalarValueInitExpr : DStmt; def CXXNewExpr : DStmt; def CXXDeleteExpr : DStmt; def CXXPseudoDestructorExpr : DStmt; def TypeTraitExpr : DStmt; def UnaryTypeTraitExpr : DStmt; def BinaryTypeTraitExpr : DStmt; def ArrayTypeTraitExpr : DStmt; def ExpressionTraitExpr : DStmt; def DependentScopeDeclRefExpr : DStmt; def CXXConstructExpr : DStmt; def CXXBindTemporaryExpr : DStmt; def ExprWithCleanups : DStmt; def CXXTemporaryObjectExpr : DStmt; def CXXUnresolvedConstructExpr : DStmt; def CXXDependentScopeMemberExpr : DStmt; def OverloadExpr : DStmt; def UnresolvedLookupExpr : DStmt; def UnresolvedMemberExpr : DStmt; def CXXNoexceptExpr : DStmt; def PackExpansionExpr : DStmt; def SizeOfPackExpr : DStmt; def SubstNonTypeTemplateParmExpr : DStmt; def SubstNonTypeTemplateParmPackExpr : DStmt; def FunctionParmPackExpr : DStmt; def MaterializeTemporaryExpr : DStmt; def LambdaExpr : DStmt; // Obj-C Expressions. def ObjCStringLiteral : DStmt; def ObjCBoxedExpr : DStmt; def ObjCArrayLiteral : DStmt; def ObjCDictionaryLiteral : DStmt; def ObjCEncodeExpr : DStmt; def ObjCMessageExpr : DStmt; def ObjCSelectorExpr : DStmt; def ObjCProtocolExpr : DStmt; def ObjCIvarRefExpr : DStmt; def ObjCPropertyRefExpr : DStmt; def ObjCIsaExpr : DStmt; def ObjCIndirectCopyRestoreExpr : DStmt; def ObjCBoolLiteralExpr : DStmt; def ObjCSubscriptRefExpr : DStmt; // Obj-C ARC Expressions. def ObjCBridgedCastExpr : DStmt; // CUDA Expressions. def CUDAKernelCallExpr : DStmt; // Clang Extensions. def ShuffleVectorExpr : DStmt; def BlockExpr : DStmt; def OpaqueValueExpr : DStmt; // Microsoft Extensions. def MSPropertyRefExpr : DStmt; def CXXUuidofExpr : DStmt; def SEHTryStmt : Stmt; def SEHExceptStmt : Stmt; def SEHFinallyStmt : Stmt; def MSDependentExistsStmt : Stmt; // OpenCL Extensions. def AsTypeExpr : DStmt;