Jlm
Loading...
Searching...
No Matches
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
13namespace jlm::llvm
14{
15
16[[nodiscard]] std::string_view
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
42linkageFromString(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