[clang] [SSAF] Add SerializationFormat Interface (PR #177719)
Aviral Goel via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 27 09:51:42 PST 2026
================
@@ -0,0 +1,62 @@
+//===- SerializationFormat.h ------------------------------------*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Abstract SerializationFormat interface for reading and writing
+// TUSummary and LinkUnitResolution data.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H
+#define CLANG_ANALYSIS_SCALABLE_SERIALIZATION_SERIALIZATION_FORMAT_H
+
+#include "clang/Analysis/Scalable/Model/BuildNamespace.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/StringRef.h"
+#include <vector>
+
+namespace clang::ssaf {
+
+class TUSummary;
+class EntityIdTable;
+class EntityName;
+class EntityId;
+class TUSummaryData;
+
+/// Abstract base class for serialization formats.
+class SerializationFormat {
+protected:
+ // Helpers providing access to implementation details of basic data structures
+ // for efficient serialization/deserialization.
+ static EntityIdTable &getIdTableForDeserialization(TUSummary &S);
+ static NestedBuildNamespace &
+ getCommonNamespaceForDeserialization(TUSummary &S);
+ static const EntityIdTable &getIdTable(const TUSummary &S);
+ static const NestedBuildNamespace &getCommonNamespace(const TUSummary &S);
+
+ static BuildNamespaceKind getBuildNamespaceKind(const BuildNamespace &BN);
+ static llvm::StringRef getBuildNamespaceName(const BuildNamespace &BN);
+ static const std::vector<BuildNamespace> &
+ getNestedBuildNamespaces(const NestedBuildNamespace &NBN);
+
+ static llvm::StringRef getEntityNameUSR(const EntityName &EN);
+ static const llvm::SmallString<16> &getEntityNameSuffix(const EntityName &EN);
+ static const NestedBuildNamespace &
+ getEntityNameNamespace(const EntityName &EN);
----------------
aviralg wrote:
Our current design allows framework users to implement serialization and deserialization for the data structures supplied by the framework. These data structures (`TUSummary`, `BuildNamespace`, etc.) don't provide any public get/set API for their fields. So we provide these methods under the protected section to enable subclasses to read and write the fields as they are serializing and deserializing the data structures.
https://github.com/llvm/llvm-project/pull/177719
More information about the cfe-commits
mailing list