]> granicus.if.org Git - clang/commitdiff
Dump the value calculated by a constant expression when dumping the AST to JSON.
authorAaron Ballman <aaron@aaronballman.com>
Wed, 19 Jun 2019 19:12:22 +0000 (19:12 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Wed, 19 Jun 2019 19:12:22 +0000 (19:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@363866 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/JSONNodeDumper.h
lib/AST/JSONNodeDumper.cpp
test/AST/ast-dump-if-json.cpp
test/AST/ast-dump-stmt-json.cpp

index 024f1f78ce7852a55cfa11de0a59a2077d1c7e17..4c34d79a27ad077df6e7fc9636f60a1a7f4adf3d 100644 (file)
@@ -250,6 +250,7 @@ public:
   void VisitUnresolvedLookupExpr(const UnresolvedLookupExpr *ULE);
   void VisitAddrLabelExpr(const AddrLabelExpr *ALE);
   void VisitCXXTypeidExpr(const CXXTypeidExpr *CTE);
+  void VisitConstantExpr(const ConstantExpr *CE);
 
   void VisitIntegerLiteral(const IntegerLiteral *IL);
   void VisitCharacterLiteral(const CharacterLiteral *CL);
index b6768aef2701a3cb7c983694393c10aac94e6cc6..59da96cee25d6185bfb902f8ab96fa234f464710 100644 (file)
@@ -975,6 +975,15 @@ void JSONNodeDumper::VisitCXXTypeidExpr(const CXXTypeidExpr *CTE) {
   }
 }
 
+void JSONNodeDumper::VisitConstantExpr(const ConstantExpr *CE) {
+  if (CE->getResultAPValueKind() != APValue::None) {
+    std::string Str;
+    llvm::raw_string_ostream OS(Str);
+    CE->getAPValueResult().printPretty(OS, Ctx, CE->getType());
+    JOS.attribute("value", OS.str());
+  }
+}
+
 void JSONNodeDumper::VisitIntegerLiteral(const IntegerLiteral *IL) {
   JOS.attribute("value",
                 IL->getValue().toString(
index 59a7bcbc5d2de76772e85949a44f30d91789c615..1d103292118a037fa3ac1f309198c235cfb68d84 100644 (file)
@@ -528,6 +528,7 @@ void func(int val) {
 // CHECK-NEXT:     "qualType": "bool"
 // CHECK-NEXT:    },
 // CHECK-NEXT:    "valueCategory": "rvalue",
+// CHECK-NEXT:    "value": "true",
 // CHECK-NEXT:    "inner": [
 // CHECK-NEXT:     {
 // CHECK-NEXT:      "id": "0x{{.*}}",
index 78d29ffc39cc5958c0c13eb5c20a1d0416baa072..ecdb8338f4df9557d95bae963c04b7267afd737a 100644 (file)
@@ -2951,6 +2951,7 @@ void TestIteration() {
 // CHECK-NEXT:         "qualType": "bool"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "rvalue",
+// CHECK-NEXT:        "value": "true",
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",
@@ -3150,6 +3151,7 @@ void TestIteration() {
 // CHECK-NEXT:         "qualType": "bool"
 // CHECK-NEXT:        },
 // CHECK-NEXT:        "valueCategory": "rvalue",
+// CHECK-NEXT:        "value": "true",
 // CHECK-NEXT:        "inner": [
 // CHECK-NEXT:         {
 // CHECK-NEXT:          "id": "0x{{.*}}",