Author: Balázs Benics Date: 2026-02-11T11:22:11Z New Revision: 7e34aaeb91cfd537f8510c94c51df31ecd310ba5
URL: https://github.com/llvm/llvm-project/commit/7e34aaeb91cfd537f8510c94c51df31ecd310ba5 DIFF: https://github.com/llvm/llvm-project/commit/7e34aaeb91cfd537f8510c94c51df31ecd310ba5.diff LOG: [clang][ssaf][NFC] Refactor SerializationFormat to use macro-based field accessors (#180842) This reduces code duplication and makes it easier to add new field accessors. Assisted-By: claude Added: clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def Modified: clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def b/clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def new file mode 100644 index 0000000000000..59064659996b4 --- /dev/null +++ b/clang/include/clang/Analysis/Scalable/Model/PrivateFieldNames.def @@ -0,0 +1,30 @@ +//===-- PrivateFieldNames.def -----------------------------------*- 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 +// +//===----------------------------------------------------------------------===// +// +// This file defines a list of non-static data members of the SSAF objects. +// These are used for granting access for: +// - SerializationFormat +// - TextFixture +// +//===----------------------------------------------------------------------===// + +#ifndef FIELD +#define FIELD(CLASS, FIELD_NAME) +#endif + +FIELD(BuildNamespace, Kind) +FIELD(BuildNamespace, Name) +FIELD(EntityName, Namespace) +FIELD(EntityName, Suffix) +FIELD(EntityName, USR) +FIELD(NestedBuildNamespace, Namespaces) +FIELD(TUSummary, Data) +FIELD(TUSummary, IdTable) +FIELD(TUSummary, TUNamespace) + +#undef FIELD diff --git a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h index c7438e2859da0..866fe8bfdcee0 100644 --- a/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h +++ b/clang/include/clang/Analysis/Scalable/Serialization/SerializationFormat.h @@ -17,11 +17,9 @@ #include "clang/Analysis/Scalable/Model/BuildNamespace.h" #include "clang/Analysis/Scalable/Model/SummaryName.h" #include "clang/Analysis/Scalable/TUSummary/TUSummary.h" -#include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/ExtensibleRTTI.h" #include "llvm/Support/VirtualFileSystem.h" -#include <vector> namespace clang::ssaf { @@ -33,26 +31,6 @@ class EntitySummary; /// Abstract base class for serialization formats. class SerializationFormat : public llvm::RTTIExtends<SerializationFormat, llvm::RTTIRoot> { -protected: - // Helpers providing access to implementation details of basic data structures - // for efficient serialization/deserialization. - static EntityIdTable &getIdTableForDeserialization(TUSummary &S); - static BuildNamespace &getTUNamespaceForDeserialization(TUSummary &S); - static const EntityIdTable &getIdTable(const TUSummary &S); - static const BuildNamespace &getTUNamespace(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); - static decltype(TUSummary::Data) &getData(TUSummary &S); - static const decltype(TUSummary::Data) &getData(const TUSummary &S); - public: explicit SerializationFormat( llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS); @@ -66,6 +44,13 @@ class SerializationFormat static char ID; // For RTTIExtends. protected: + // Helpers providing access to implementation details of basic data structures + // for efficient serialization/deserialization. +#define FIELD(CLASS, FIELD_NAME) \ + static const auto &get##FIELD_NAME(const CLASS &X) { return X.FIELD_NAME; } \ + static auto &get##FIELD_NAME(CLASS &X) { return X.FIELD_NAME; } +#include "clang/Analysis/Scalable/Model/PrivateFieldNames.def" + llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS; }; diff --git a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp index 1d62ea837616f..75ec263a1051f 100644 --- a/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp +++ b/clang/lib/Analysis/Scalable/Serialization/SerializationFormat.cpp @@ -7,70 +7,10 @@ //===----------------------------------------------------------------------===// #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; +char SerializationFormat::ID = 0; 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; -} - -const decltype(TUSummary::Data) & -SerializationFormat::getData(const TUSummary &S) { - return S.Data; -} - -decltype(TUSummary::Data) &SerializationFormat::getData(TUSummary &S) { - return S.Data; -} - -char SerializationFormat::ID = 0; diff --git a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp index 03328e8bd9742..127e61b26c0cb 100644 --- a/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp +++ b/clang/unittests/Analysis/Scalable/Registries/MockSerializationFormat.cpp @@ -67,7 +67,7 @@ TUSummary MockSerializationFormat::readTUSummary(llvm::StringRef Path) { assert(InfoEntry.ForSummary == Name); SpecialFileRepresentation Repr{(*InputFile)->getBuffer().str()}; - auto &Table = getIdTableForDeserialization(Summary); + auto &Table = getIdTable(Summary); std::unique_ptr<EntitySummary> Result = InfoEntry.Deserialize(Repr, Table); if (!Result) // TODO: Handle error. _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
