1//===- ExtractorRegistry.cpp ----------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "clang/ScalableStaticAnalysis/Core/TUSummary/ExtractorRegistry.h"
10#include "clang/ScalableStaticAnalysis/Core/TUSummary/TUSummaryExtractor.h"
11#include <memory>
12
13using namespace clang;
14using namespace ssaf;
15
16LLVM_DEFINE_REGISTRY_EX(CLANG_ABI_EXPORT,
17 clang::ssaf::TUSummaryExtractorRegistry)
18
19bool ssaf::isTUSummaryExtractorRegistered(llvm::StringRef SummaryName) {
20 for (const auto &Entry : TUSummaryExtractorRegistry::entries())
21 if (Entry.getName() == SummaryName)
22 return true;
23 return false;
24}
25
26std::unique_ptr<TUSummaryExtractor>
27ssaf::makeTUSummaryExtractor(llvm::StringRef SummaryName,
28 TUSummaryBuilder &Builder) {
29 for (const auto &Entry : TUSummaryExtractorRegistry::entries())
30 if (Entry.getName() == SummaryName)
31 return Entry.instantiate(Params&: Builder);
32 assert(false && "Unknown SummaryExtractor name");
33 return nullptr;
34}
35
36void ssaf::printAvailableTUSummaryExtractors(llvm::raw_ostream &OS) {
37 OS << "OVERVIEW: Available SSAF summary extractors:\n\n";
38 for (const auto &Entry : TUSummaryExtractorRegistry::entries())
39 OS << " " << Entry.getName() << " - " << Entry.getDesc() << "\n";
40}
41