]> granicus.if.org Git - clang/commitdiff
Ensure that top-level QualType objects also have a "kind" field when dumping the...
authorAaron Ballman <aaron@aaronballman.com>
Fri, 21 Jun 2019 17:14:25 +0000 (17:14 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Fri, 21 Jun 2019 17:14:25 +0000 (17:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@364078 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/JSONNodeDumper.cpp
test/AST/ast-dump-types-json.cpp

index 550f6ef94ebaabf294c590999b00e5ffc0734eb3..6092b7b5a35a8cfd4124e5b48b09e8b022f7b767 100644 (file)
@@ -78,6 +78,7 @@ void JSONNodeDumper::Visit(const Type *T) {
 
 void JSONNodeDumper::Visit(QualType T) {
   JOS.attribute("id", createPointerRepresentation(T.getAsOpaquePtr()));
+  JOS.attribute("kind", "QualType");
   JOS.attribute("type", createQualType(T));
   JOS.attribute("qualifiers", T.split().Quals.getAsString());
 }
index 64198c4acaa6aa636950ef7137958c219a280daa..b34a8b28d4f1c8ea46c2951ee82ecdb791c115de 100644 (file)
@@ -18,6 +18,8 @@ typedef void (CDECL *TestMacroQualifiedType)();
 typedef void (T::* TestMemberFunctionPointerType)();
 typedef int T::*TestMemberDataPointerType;
 
+typedef int TestQualTypePrinting(const char* c);
+
 // NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
 
 
@@ -356,3 +358,73 @@ typedef int T::*TestMemberDataPointerType;
 // CHECK-NEXT:   }
 // CHECK-NEXT:  ]
 // CHECK-NEXT: }
+
+
+// CHECK:  "kind": "TypedefDecl",
+// CHECK-NEXT:  "loc": {
+// CHECK-NEXT:   "col": 13,
+// CHECK-NEXT:   "file": "{{.*}}",
+// CHECK-NEXT:   "line": 21
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "range": {
+// CHECK-NEXT:   "begin": {
+// CHECK-NEXT:    "col": 1,
+// CHECK-NEXT:    "file": "{{.*}}",
+// CHECK-NEXT:    "line": 21
+// CHECK-NEXT:   },
+// CHECK-NEXT:   "end": {
+// CHECK-NEXT:    "col": 47,
+// CHECK-NEXT:    "file": "{{.*}}",
+// CHECK-NEXT:    "line": 21
+// CHECK-NEXT:   }
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "name": "TestQualTypePrinting",
+// CHECK-NEXT:  "type": {
+// CHECK-NEXT:   "qualType": "int (const char *)"
+// CHECK-NEXT:  },
+// CHECK-NEXT:  "inner": [
+// CHECK-NEXT:   {
+// CHECK-NEXT:    "id": "0x{{.*}}",
+// CHECK-NEXT:    "kind": "FunctionProtoType",
+// CHECK-NEXT:    "type": {
+// CHECK-NEXT:     "qualType": "int (const char *)"
+// CHECK-NEXT:    },
+// CHECK-NEXT:    "cc": "cdecl",
+// CHECK-NEXT:    "inner": [
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "BuiltinType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "int"
+// CHECK-NEXT:      }
+// CHECK-NEXT:     },
+// CHECK-NEXT:     {
+// CHECK-NEXT:      "id": "0x{{.*}}",
+// CHECK-NEXT:      "kind": "PointerType",
+// CHECK-NEXT:      "type": {
+// CHECK-NEXT:       "qualType": "const char *"
+// CHECK-NEXT:      },
+// CHECK-NEXT:      "inner": [
+// CHECK-NEXT:       {
+// CHECK-NEXT:        "id": "0x{{.*}}",
+// CHECK-NEXT:        "kind": "QualType",
+// CHECK-NEXT:        "type": {
+// CHECK-NEXT:         "qualType": "const char"
+// CHECK-NEXT:        },
+// CHECK-NEXT:        "qualifiers": "const",
+// CHECK-NEXT:        "inner": [
+// CHECK-NEXT:         {
+// CHECK-NEXT:          "id": "0x{{.*}}",
+// CHECK-NEXT:          "kind": "BuiltinType",
+// CHECK-NEXT:          "type": {
+// CHECK-NEXT:           "qualType": "char"
+// CHECK-NEXT:          }
+// CHECK-NEXT:         }
+// CHECK-NEXT:        ]
+// CHECK-NEXT:       }
+// CHECK-NEXT:      ]
+// CHECK-NEXT:     }
+// CHECK-NEXT:    ]
+// CHECK-NEXT:   }
+// CHECK-NEXT:  ]
+// CHECK-NEXT: }