Jlm
Linkage.cpp
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Nico Reißmann <nico.reissmann@gmail.com>
3  * Copyright 2025 Håvard Krogstie <krogstie.havard@gmail.com>
4  * See COPYING for terms of redistribution.
5  */
6 
8 
9 #include <stdexcept>
10 #include <string>
11 #include <unordered_map>
12 
13 namespace jlm::llvm
14 {
15 
16 [[nodiscard]] std::string_view
17 linkageToString(const Linkage linkage)
18 {
19  static std::unordered_map<Linkage, std::string_view> strings = {
20  { Linkage::externalLinkage, "external_linkage" },
21  { Linkage::availableExternallyLinkage, "available_externally_linkage" },
22  { Linkage::linkOnceAnyLinkage, "link_once_any_linkage" },
23  { Linkage::linkOnceOdrLinkage, "link_once_odr_linkage" },
24  { Linkage::weakAnyLinkage, "weak_any_linkage" },
25  { Linkage::weakOdrLinkage, "weak_odr_linkage" },
26  { Linkage::appendingLinkage, "appending_linkage" },
27  { Linkage::internalLinkage, "internal_linkage" },
28  { Linkage::privateLinkage, "private_linkage" },
29  { Linkage::externalWeakLinkage, "external_weak_linkage" },
30  { Linkage::commonLinkage, "common_linkage" }
31  };
32 
33  if (const auto it = strings.find(linkage); it != strings.end())
34  return it->second;
35 
36  throw std::logic_error(
37  "Unknown linkage type: "
38  + std::to_string(static_cast<std::underlying_type_t<Linkage>>(linkage)));
39 }
40 
41 Linkage
42 linkageFromString(const std::string_view stringValue)
43 {
44  static std::unordered_map<std::string_view, Linkage> linkages = {
45  { "external_linkage", Linkage::externalLinkage },
46  { "available_externally_linkage", Linkage::availableExternallyLinkage },
47  { "link_once_any_linkage", Linkage::linkOnceAnyLinkage },
48  { "link_once_odr_linkage", Linkage::linkOnceOdrLinkage },
49  { "weak_any_linkage", Linkage::weakAnyLinkage },
50  { "weak_odr_linkage", Linkage::weakOdrLinkage },
51  { "appending_linkage", Linkage::appendingLinkage },
52  { "internal_linkage", Linkage::internalLinkage },
53  { "private_linkage", Linkage::privateLinkage },
54  { "external_weak_linkage", Linkage::externalWeakLinkage },
55  { "common_linkage", Linkage::commonLinkage }
56  };
57 
58  if (const auto it = linkages.find(stringValue); it != linkages.end())
59  return it->second;
60 
61  throw std::logic_error("Unknown linkage type: " + std::string(stringValue));
62 }
63 
64 }
Global memory state passed between functions.
std::string_view linkageToString(const Linkage linkage)
Definition: Linkage.cpp:17
Linkage linkageFromString(const std::string_view stringValue)
Definition: Linkage.cpp:42