1class AttrSubject;
2
3class Decl<bit abstract = 0> : AttrSubject {
4  bit Abstract = abstract;
5}
6
7class DDecl<Decl base, bit abstract = 0> : Decl<abstract> {
8  Decl Base = base;
9}
10
11class DeclContext { }
12
13def TranslationUnit : Decl, DeclContext;
14def ExternCContext : Decl, DeclContext;
15def 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>;
75def LinkageSpec : Decl, DeclContext;
76def ObjCPropertyImpl : Decl;
77def FileScopeAsm : Decl;
78def AccessSpec : Decl;
79def Friend : Decl;
80def FriendTemplate : Decl;
81def StaticAssert : Decl;
82def Block : Decl, DeclContext;
83def Captured : Decl, DeclContext;
84def ClassScopeFunctionSpecialization : Decl;
85def Import : Decl;
86def OMPThreadPrivate : Decl;
87def Empty : Decl;
88
89