Balázs Benics 77740f5577
[clang][ssaf] Add SerializationFormatRegistry [1/2] (#179516)
Add a registry infrastructure for SerializationFormat implementations,
enabling registration and instantiation of different serialization
formats.

For example:
```c++
  static SerializationFormatRegistry::Add<MyFormat>
    RegisterFormat("MyFormat", "Description");
```

Formats can then be instantiated by name using `makeFormat()`.

The patch also updates the SerializationFormat base class to accept
FileSystem for virtualising reading inputs eg. by using file overlays in
the future.

Assisted-by: claude
rdar://169192127
2026-02-05 16:34:54 +00:00

66 lines
1.9 KiB
C++

//===- SerializationFormat.cpp ----------------------------------*- C++ -*-===//
//
// 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 "clang/Analysis/Scalable/Serialization/SerializationFormat.h"
#include "clang/Analysis/Scalable/Model/BuildNamespace.h"
#include "clang/Analysis/Scalable/Model/EntityId.h"
#include "clang/Analysis/Scalable/Model/EntityName.h"
#include "clang/Analysis/Scalable/TUSummary/TUSummary.h"
using namespace clang::ssaf;
SerializationFormat::SerializationFormat(
llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS)
: FS(FS) {}
EntityIdTable &SerializationFormat::getIdTableForDeserialization(TUSummary &S) {
return S.IdTable;
}
BuildNamespace &
SerializationFormat::getTUNamespaceForDeserialization(TUSummary &S) {
return S.TUNamespace;
}
const EntityIdTable &SerializationFormat::getIdTable(const TUSummary &S) {
return S.IdTable;
}
const BuildNamespace &SerializationFormat::getTUNamespace(const TUSummary &S) {
return S.TUNamespace;
}
BuildNamespaceKind
SerializationFormat::getBuildNamespaceKind(const BuildNamespace &BN) {
return BN.Kind;
}
llvm::StringRef
SerializationFormat::getBuildNamespaceName(const BuildNamespace &BN) {
return BN.Name;
}
const std::vector<BuildNamespace> &
SerializationFormat::getNestedBuildNamespaces(const NestedBuildNamespace &NBN) {
return NBN.Namespaces;
}
llvm::StringRef SerializationFormat::getEntityNameUSR(const EntityName &EN) {
return EN.USR;
}
const llvm::SmallString<16> &
SerializationFormat::getEntityNameSuffix(const EntityName &EN) {
return EN.Suffix;
}
const NestedBuildNamespace &
SerializationFormat::getEntityNameNamespace(const EntityName &EN) {
return EN.Namespace;
}