1class AttrSubject; 2 3class Decl<string diagSpelling = "", bit abstract = 0> : AttrSubject { 4 bit Abstract = abstract; 5 string DiagSpelling = diagSpelling; 6} 7 8class DDecl<Decl base, string diagSpelling = "", bit abstract = 0> 9 : Decl<diagSpelling, abstract> { 10 Decl Base = base; 11} 12 13class DeclContext {} 14 15def TranslationUnit : Decl, DeclContext; 16def PragmaComment : Decl; 17def PragmaDetectMismatch : Decl; 18def ExternCContext : Decl, DeclContext; 19def Named : Decl<"named declarations", 1>; 20 def Namespace : DDecl<Named, "namespaces">, DeclContext; 21 def UsingDirective : DDecl<Named>; 22 def NamespaceAlias : DDecl<Named>; 23 def Label : DDecl<Named, "labels">; 24 def Type : DDecl<Named, "types", 1>; 25 def TypedefName : DDecl<Type, "typedefs", 1>; 26 def Typedef : DDecl<TypedefName>; 27 def TypeAlias : DDecl<TypedefName>; 28 def ObjCTypeParam : DDecl<TypedefName>; 29 def UnresolvedUsingTypename : DDecl<Type>; 30 def Tag : DDecl<Type, "tag types", 1>, DeclContext; 31 def Enum : DDecl<Tag, "enums">; 32 def Record : DDecl<Tag, "structs, unions, classes">; 33 def CXXRecord : DDecl<Record, "classes">; 34 def ClassTemplateSpecialization : DDecl<CXXRecord>; 35 def ClassTemplatePartialSpecialization 36 : DDecl<ClassTemplateSpecialization>; 37 def TemplateTypeParm : DDecl<Type>; 38 def Value : DDecl<Named, "value declarations", 1>; 39 def EnumConstant : DDecl<Value, "enumerators">; 40 def UnresolvedUsingValue : DDecl<Value>; 41 def IndirectField : DDecl<Value>; 42 def Binding : DDecl<Value>; 43 def OMPDeclareReduction : DDecl<Value>, DeclContext; 44 def OMPDeclareMapper : DDecl<Value>, DeclContext; 45 def Declarator : DDecl<Value, "declarators", 1>; 46 def Field : DDecl<Declarator, "non-static data members">; 47 def ObjCIvar : DDecl<Field>; 48 def ObjCAtDefsField : DDecl<Field>; 49 def MSProperty : DDecl<Declarator>; 50 def Function : DDecl<Declarator, "functions">, DeclContext; 51 def CXXDeductionGuide : DDecl<Function>; 52 def CXXMethod : DDecl<Function>; 53 def CXXConstructor : DDecl<CXXMethod>; 54 def CXXDestructor : DDecl<CXXMethod>; 55 def CXXConversion : DDecl<CXXMethod>; 56 def Var : DDecl<Declarator, "variables">; 57 def VarTemplateSpecialization : DDecl<Var>; 58 def VarTemplatePartialSpecialization 59 : DDecl<VarTemplateSpecialization>; 60 def ImplicitParam : DDecl<Var>; 61 def ParmVar : DDecl<Var, "parameters">; 62 def Decomposition : DDecl<Var>; 63 def OMPCapturedExpr : DDecl<Var>; 64 def NonTypeTemplateParm : DDecl<Declarator>; 65 def Template : DDecl<Named, "templates", 1>; 66 def RedeclarableTemplate : DDecl<Template, "redeclarable templates", 1>; 67 def FunctionTemplate : DDecl<RedeclarableTemplate>; 68 def ClassTemplate : DDecl<RedeclarableTemplate>; 69 def VarTemplate : DDecl<RedeclarableTemplate>; 70 def TypeAliasTemplate : DDecl<RedeclarableTemplate>; 71 def TemplateTemplateParm : DDecl<Template>; 72 def BuiltinTemplate : DDecl<Template>; 73 def Concept : DDecl<Template>; 74 def Using : DDecl<Named>; 75 def UsingPack : DDecl<Named>; 76 def UsingShadow : DDecl<Named>; 77 def ConstructorUsingShadow : DDecl<UsingShadow>; 78 def ObjCMethod : DDecl<Named, "Objective-C methods">, DeclContext; 79 def ObjCContainer : DDecl<Named, "Objective-C containers", 1>, DeclContext; 80 def ObjCCategory : DDecl<ObjCContainer>; 81 def ObjCProtocol : DDecl<ObjCContainer, "Objective-C protocols">; 82 def ObjCInterface : DDecl<ObjCContainer, "Objective-C interfaces">; 83 def ObjCImpl 84 : DDecl<ObjCContainer, "Objective-C implementation declarations", 1>; 85 def ObjCCategoryImpl : DDecl<ObjCImpl>; 86 def ObjCImplementation : DDecl<ObjCImpl>; 87 def ObjCProperty : DDecl<Named, "Objective-C properties">; 88 def ObjCCompatibleAlias : DDecl<Named>; 89def LinkageSpec : Decl, DeclContext; 90def Export : Decl, DeclContext; 91def ObjCPropertyImpl : Decl; 92def FileScopeAsm : Decl; 93def AccessSpec : Decl; 94def Friend : Decl; 95def FriendTemplate : Decl; 96def StaticAssert : Decl; 97def Block : Decl<"blocks">, DeclContext; 98def Captured : Decl, DeclContext; 99def ClassScopeFunctionSpecialization : Decl; 100def Import : Decl; 101def OMPThreadPrivate : Decl; 102def OMPAllocate : Decl; 103def OMPRequires : Decl; 104def Empty : Decl; 105 106