1 class AttrSubject; 2 3 class Decl<bit abstract = 0> : AttrSubject { 4 bit Abstract = abstract; 5 } 6 7 class DDecl<Decl base, bit abstract = 0> : Decl<abstract> { 8 Decl Base = base; 9 } 10 11 class DeclContext { } 12 13 def TranslationUnit : Decl, DeclContext; 14 def Named : Decl<1>; 15 def Namespace : DDecl<Named>, DeclContext; 16 def UsingDirective : DDecl<Named>; 17 def NamespaceAlias : DDecl<Named>; 18 def Label : DDecl<Named>; 19 def Type : DDecl<Named, 1>; 20 def TypedefName : DDecl<Type, 1>; 21 def Typedef : DDecl<TypedefName>; 22 def TypeAlias : DDecl<TypedefName>; 23 def UnresolvedUsingTypename : DDecl<Type>; 24 def Tag : DDecl<Type, 1>, DeclContext; 25 def Enum : DDecl<Tag>; 26 def Record : DDecl<Tag>; 27 def CXXRecord : DDecl<Record>; 28 def ClassTemplateSpecialization : DDecl<CXXRecord>; 29 def ClassTemplatePartialSpecialization 30 : DDecl<ClassTemplateSpecialization>; 31 def TemplateTypeParm : DDecl<Type>; 32 def Value : DDecl<Named, 1>; 33 def EnumConstant : DDecl<Value>; 34 def UnresolvedUsingValue : DDecl<Value>; 35 def IndirectField : DDecl<Value>; 36 def Declarator : DDecl<Value, 1>; 37 def Field : DDecl<Declarator>; 38 def ObjCIvar : DDecl<Field>; 39 def ObjCAtDefsField : DDecl<Field>; 40 def MSProperty : DDecl<Declarator>; 41 def Function : DDecl<Declarator>, DeclContext; 42 def CXXMethod : DDecl<Function>; 43 def CXXConstructor : DDecl<CXXMethod>; 44 def CXXDestructor : DDecl<CXXMethod>; 45 def CXXConversion : DDecl<CXXMethod>; 46 def Var : DDecl<Declarator>; 47 def VarTemplateSpecialization : DDecl<Var>; 48 def VarTemplatePartialSpecialization 49 : DDecl<VarTemplateSpecialization>; 50 def ImplicitParam : DDecl<Var>; 51 def ParmVar : DDecl<Var>; 52 def NonTypeTemplateParm : DDecl<Declarator>; 53 def Template : DDecl<Named, 1>; 54 def RedeclarableTemplate : DDecl<Template, 1>; 55 def FunctionTemplate : DDecl<RedeclarableTemplate>; 56 def ClassTemplate : DDecl<RedeclarableTemplate>; 57 def VarTemplate : DDecl<RedeclarableTemplate>; 58 def TypeAliasTemplate : DDecl<RedeclarableTemplate>; 59 def TemplateTemplateParm : DDecl<Template>; 60 def Using : DDecl<Named>; 61 def UsingShadow : DDecl<Named>; 62 def ObjCMethod : DDecl<Named>, DeclContext; 63 def ObjCContainer : DDecl<Named, 1>, DeclContext; 64 def ObjCCategory : DDecl<ObjCContainer>; 65 def ObjCProtocol : DDecl<ObjCContainer>; 66 def ObjCInterface : DDecl<ObjCContainer>; 67 def ObjCImpl : DDecl<ObjCContainer, 1>; 68 def ObjCCategoryImpl : DDecl<ObjCImpl>; 69 def ObjCImplementation : DDecl<ObjCImpl>; 70 def ObjCProperty : DDecl<Named>; 71 def ObjCCompatibleAlias : DDecl<Named>; 72 def LinkageSpec : Decl, DeclContext; 73 def ObjCPropertyImpl : Decl; 74 def FileScopeAsm : Decl; 75 def AccessSpec : Decl; 76 def Friend : Decl; 77 def FriendTemplate : Decl; 78 def StaticAssert : Decl; 79 def Block : Decl, DeclContext; 80 def Captured : Decl, DeclContext; 81 def ClassScopeFunctionSpecialization : Decl; 82 def Import : Decl; 83 def OMPThreadPrivate : Decl; 84 def Empty : Decl; 85 86