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