3 class Decl<string diagSpelling = "", bit abstract = 0> : AttrSubject {
4 bit Abstract = abstract;
5 string DiagSpelling = diagSpelling;
8 class DDecl<Decl base, string diagSpelling = "", bit abstract = 0>
9 : Decl<diagSpelling, abstract> {
15 def TranslationUnit : Decl, DeclContext;
16 def PragmaComment : Decl;
17 def PragmaDetectMismatch : Decl;
18 def ExternCContext : Decl, DeclContext;
19 def 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">;
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>;
89 def LinkageSpec : Decl, DeclContext;
90 def Export : Decl, DeclContext;
91 def ObjCPropertyImpl : Decl;
92 def FileScopeAsm : Decl;
93 def AccessSpec : Decl;
95 def FriendTemplate : Decl;
96 def StaticAssert : Decl;
97 def Block : Decl<"blocks">, DeclContext;
98 def Captured : Decl, DeclContext;
99 def ClassScopeFunctionSpecialization : Decl;
101 def OMPThreadPrivate : Decl;
102 def OMPAllocate : Decl;
103 def OMPRequires : Decl;