From: Aaron Ballman <aaron@aaronballman.com> Date: Fri, 21 Jun 2019 17:14:25 +0000 (+0000) Subject: Ensure that top-level QualType objects also have a "kind" field when dumping the... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a6b813593c4296abfeb4d3606b0ed38515e9d1b2;p=clang Ensure that top-level QualType objects also have a "kind" field when dumping the AST to JSON. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@364078 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/JSONNodeDumper.cpp b/lib/AST/JSONNodeDumper.cpp index 550f6ef94e..6092b7b5a3 100644 --- a/lib/AST/JSONNodeDumper.cpp +++ b/lib/AST/JSONNodeDumper.cpp @@ -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()); } diff --git a/test/AST/ast-dump-types-json.cpp b/test/AST/ast-dump-types-json.cpp index 64198c4aca..b34a8b28d4 100644 --- a/test/AST/ast-dump-types-json.cpp +++ b/test/AST/ast-dump-types-json.cpp @@ -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: }