================
@@ -0,0 +1,406 @@
+//===- TUSummaryEncoding.cpp --------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "JSONFormatImpl.h"
+
+#include "clang/Analysis/Scalable/EntityLinker/EntitySummaryEncoding.h"
+#include "clang/Analysis/Scalable/EntityLinker/TUSummaryEncoding.h"
+
+namespace clang::ssaf {
+
+//----------------------------------------------------------------------------
+// JSONEntitySummaryEncoding
+//----------------------------------------------------------------------------
+
+namespace {
+
+class JSONEntitySummaryEncoding : public EntitySummaryEncoding {
+public:
+  explicit JSONEntitySummaryEncoding(Value Data) : Data(std::move(Data)) {}
+
+  void
+  patch(const std::map<EntityId, EntityId> &EntityResolutionTable) override {
+    llvm_unreachable("not implemented");
+  }
+
+  Value Data;
+};
+
+} // namespace
+
+//----------------------------------------------------------------------------
+// EncodingDataMapEntry
+//----------------------------------------------------------------------------
+
+llvm::Expected<std::pair<EntityId, std::unique_ptr<EntitySummaryEncoding>>>
+JSONFormat::encodingDataMapEntryFromJSON(
+    const Object &EntityDataMapEntryObject) const {
+
+  const Value *EntityIdIntValue = EntityDataMapEntryObject.get("entity_id");
+  if (!EntityIdIntValue) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "EntityId", "entity_id",
+                                "number (unsigned 64-bit integer)")
+        .build();
+  }
+
+  const std::optional<uint64_t> OptEntityIdInt =
+      EntityIdIntValue->getAsUINT64();
+  if (!OptEntityIdInt) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "EntityId", "entity_id",
+                                "number (unsigned 64-bit integer)")
+        .build();
+  }
+
+  EntityId EI = entityIdFromJSON(*OptEntityIdInt);
+
+  const Object *OptEntitySummaryObject =
+      EntityDataMapEntryObject.getObject("entity_summary");
+  if (!OptEntitySummaryObject) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "EntitySummary", "entity_summary", "object")
+        .build();
+  }
+
+  std::unique_ptr<EntitySummaryEncoding> Encoding =
+      std::make_unique<JSONEntitySummaryEncoding>(
+          Value(Object(*OptEntitySummaryObject)));
+
+  return std::make_pair(std::move(EI), std::move(Encoding));
+}
+
+Object JSONFormat::encodingDataMapEntryToJSON(
+    EntityId EI, const std::unique_ptr<EntitySummaryEncoding> &Encoding) const 
{
+  Object Entry;
+  Entry["entity_id"] = entityIdToJSON(EI);
+
+  // All EntitySummaryEncoding objects stored in a TUSummaryEncoding read by
+  // JSONFormat are JSONEntitySummaryEncoding instances, since
+  // encodingDataMapEntryFromJSON is the only place that creates them.
+  auto *JSONEncoding = static_cast<JSONEntitySummaryEncoding 
*>(Encoding.get());
----------------
aviralg wrote:

Indeed! Fixed.

https://github.com/llvm/llvm-project/pull/183401
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to