14llvm::Error JSONEntitySummaryEncoding::patchEntityIdObject(
15 llvm::json::Object &Obj,
const std::map<EntityId, EntityId> &Table,
16 llvm::json::Value *AtVal) {
18 if (Obj.size() != 1) {
25 std::optional<uint64_t> OptEntityIdIndex = AtVal->getAsUINT64();
26 if (!OptEntityIdIndex) {
34 auto It = Table.find(OldId);
35 if (It == Table.end()) {
42 *AtVal =
static_cast<uint64_t>(JSONFormat::getIndex(It->second));
44 return llvm::Error::success();
47llvm::Error JSONEntitySummaryEncoding::patchRegularObject(
48 llvm::json::Object &Obj,
const std::map<EntityId, EntityId> &Table) {
49 for (
auto &[Key, Val] : Obj) {
50 if (
auto Err = patchValue(Val, Table)) {
54 return llvm::Error::success();
57llvm::Error JSONEntitySummaryEncoding::patchObject(
58 llvm::json::Object &Obj,
const std::map<EntityId, EntityId> &Table) {
61 return AtVal ? patchEntityIdObject(Obj, Table, AtVal)
62 : patchRegularObject(Obj, Table);
65llvm::Error JSONEntitySummaryEncoding::patchValue(
66 llvm::json::Value &
V,
const std::map<EntityId, EntityId> &Table) {
67 if (llvm::json::Object *Obj =
V.getAsObject()) {
68 if (
auto Err = patchObject(*Obj, Table)) {
71 }
else if (llvm::json::Array *Arr =
V.getAsArray()) {
72 for (
auto &Val : *Arr) {
73 if (
auto Err = patchValue(Val, Table)) {
78 return llvm::Error::success();
82 const std::map<EntityId, EntityId> &EntityResolutionTable) {
83 return patchValue(Data, EntityResolutionTable);
static ErrorBuilder create(std::error_code EC, const char *Fmt, Args &&...ArgVals)
Create an ErrorBuilder with an error code and formatted message.
llvm::Error build() const
Build and return the final error.
llvm::Error patch(const std::map< EntityId, EntityId > &EntityResolutionTable) override
Updates EntityId references in the encoded data.
constexpr const char * FailedToPatchEntityIdNotInTable
constexpr const char * FailedToReadEntityIdObject
constexpr const char * JSONEntityIdKey
An entity ID is encoded as the single-key object {"@": <index>}.