================
@@ -480,6 +556,134 @@ Array JSONFormat::entityIdTableToJSON(const EntityIdTable
&IdTable) const {
return EntityIdTableArray;
}
+//----------------------------------------------------------------------------
+// LinkageTableEntry
+//----------------------------------------------------------------------------
+
+llvm::Expected<std::pair<EntityId, EntityLinkage>>
+JSONFormat::linkageTableEntryFromJSON(
+ const Object &LinkageTableEntryObject) const {
+ const Value *EntityIdIntValue = LinkageTableEntryObject.get("id");
+ if (!EntityIdIntValue) {
+ return ErrorBuilder::create(std::errc::invalid_argument,
+ ErrorMessages::FailedToReadObjectAtField,
+ "EntityId", "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", "id",
+ "number (unsigned 64-bit integer)")
+ .build();
+ }
+
+ EntityId EI = entityIdFromJSON(*OptEntityIdInt);
+
+ const Object *OptEntityLinkageObject =
+ LinkageTableEntryObject.getObject("linkage");
+ if (!OptEntityLinkageObject) {
+ return ErrorBuilder::create(std::errc::invalid_argument,
+ ErrorMessages::FailedToReadObjectAtField,
+ "EntityLinkage", "linkage", "object")
+ .build();
+ }
+
+ auto ExpectedEntityLinkage = entityLinkageFromJSON(*OptEntityLinkageObject);
+ if (!ExpectedEntityLinkage) {
+ return ErrorBuilder::wrap(ExpectedEntityLinkage.takeError())
+ .context(ErrorMessages::ReadingFromField, "EntityLinkage", "linkage")
+ .build();
+ }
+
+ return std::make_pair(std::move(EI), std::move(*ExpectedEntityLinkage));
+}
+
+Object JSONFormat::linkageTableEntryToJSON(EntityId EI,
+ const EntityLinkage &EL) const {
+ Object Entry;
+ Entry["id"] = entityIdToJSON(EI);
+ Entry["linkage"] = entityLinkageToJSON(EL);
+ return Entry;
+}
+
+//----------------------------------------------------------------------------
+// LinkageTable
+//----------------------------------------------------------------------------
+
+llvm::Expected<std::map<EntityId, EntityLinkage>>
+JSONFormat::linkageTableFromJSON(const Array &LinkageTableArray,
+ std::set<EntityId> EntityIds) const {
----------------
steakhal wrote:
It was a bit confusing to me why we take this by value. and then why we `erase`
from it and not using `find` or `llvm::is_contained` After carefully reading
the code it made me obvious, but I wonder if a different name than `EntityIds`
would have helped me.
The thing is, the name `EntityIds` reflects the type, but not the purpose. So I
think we have some room for improvement here.
https://github.com/llvm/llvm-project/pull/182961
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits