================
@@ -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 {
----------------
aviralg wrote:
Instead of writing a separate validation, we validate as we parse because it
allows us to report the JSON Array index for the extra entity id that does not
exist in the id table.
https://github.com/llvm/llvm-project/pull/182961
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits