class AttrSubject; class DeclNode : AttrSubject { DeclNode Base = base; bit Abstract = abstract; string DiagSpelling = diagSpelling; } class DeclContext {} def Decl : DeclNode; def TranslationUnit : DeclNode, DeclContext; def PragmaComment : DeclNode; def PragmaDetectMismatch : DeclNode; def ExternCContext : DeclNode, DeclContext; def Named : DeclNode; def Namespace : DeclNode, DeclContext; def UsingDirective : DeclNode; def NamespaceAlias : DeclNode; def Label : DeclNode; def Type : DeclNode; def TypedefName : DeclNode; def Typedef : DeclNode; def TypeAlias : DeclNode; def ObjCTypeParam : DeclNode; def UnresolvedUsingTypename : DeclNode; def Tag : DeclNode, DeclContext; def Enum : DeclNode; def Record : DeclNode; def CXXRecord : DeclNode; def ClassTemplateSpecialization : DeclNode; def ClassTemplatePartialSpecialization : DeclNode; def TemplateTypeParm : DeclNode; def Value : DeclNode; def EnumConstant : DeclNode; def UnresolvedUsingValue : DeclNode; def IndirectField : DeclNode; def Binding : DeclNode; def OMPDeclareReduction : DeclNode, DeclContext; def OMPDeclareMapper : DeclNode, DeclContext; def Declarator : DeclNode; def Field : DeclNode; def ObjCIvar : DeclNode; def ObjCAtDefsField : DeclNode; def MSProperty : DeclNode; def Function : DeclNode, DeclContext; def CXXDeductionGuide : DeclNode; def CXXMethod : DeclNode; def CXXConstructor : DeclNode; def CXXDestructor : DeclNode; def CXXConversion : DeclNode; def Var : DeclNode; def VarTemplateSpecialization : DeclNode; def VarTemplatePartialSpecialization : DeclNode; def ImplicitParam : DeclNode; def ParmVar : DeclNode; def Decomposition : DeclNode; def OMPCapturedExpr : DeclNode; def NonTypeTemplateParm : DeclNode; def Template : DeclNode; def RedeclarableTemplate : DeclNode; def FunctionTemplate : DeclNode; def ClassTemplate : DeclNode; def VarTemplate : DeclNode; def TypeAliasTemplate : DeclNode; def TemplateTemplateParm : DeclNode