Skip to content

Commit 1465919

Browse files
committed
Swift: clean up SwiftMangler
1 parent f6a6958 commit 1465919

File tree

4 files changed

+98
-103
lines changed

4 files changed

+98
-103
lines changed

swift/extractor/infra/SwiftMangledName.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,30 @@ std::string SwiftMangledName::str() const {
2727
return out;
2828
}
2929

30+
SwiftMangledName& SwiftMangledName::operator<<(UntypedTrapLabel label) & {
31+
assert(label && "using undefined label in mangled name");
32+
parts.emplace_back(label);
33+
return *this;
34+
}
35+
36+
SwiftMangledName& SwiftMangledName::operator<<(unsigned int i) & {
37+
parts.emplace_back(i);
38+
return *this;
39+
}
40+
41+
SwiftMangledName& SwiftMangledName::operator<<(SwiftMangledName&& other) & {
42+
parts.reserve(parts.size() + other.parts.size());
43+
for (auto& p : other.parts) {
44+
parts.emplace_back(std::move(p));
45+
}
46+
other.parts.clear();
47+
return *this;
48+
}
49+
50+
SwiftMangledName& SwiftMangledName::operator<<(const SwiftMangledName& other) & {
51+
parts.reserve(parts.size() + other.parts.size());
52+
parts.insert(parts.end(), other.parts.begin(), other.parts.end());
53+
return *this;
54+
}
55+
3056
} // namespace codeql

swift/extractor/infra/SwiftMangledName.h

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,43 +18,34 @@ struct SwiftMangledName {
1818

1919
std::string str() const;
2020

21-
// streaming labels or ints into a SwiftMangledName just appends them
22-
template <typename Tag>
23-
SwiftMangledName& operator<<(TrapLabel<Tag> label) {
24-
assert(label && "using undefined label in mangled name");
25-
parts.emplace_back(label);
26-
return *this;
27-
}
21+
// let's avoid copying as long as we don't need it
22+
SwiftMangledName() = default;
23+
SwiftMangledName(const SwiftMangledName&) = delete;
24+
SwiftMangledName& operator=(const SwiftMangledName&) = delete;
25+
SwiftMangledName(SwiftMangledName&&) = default;
26+
SwiftMangledName& operator=(SwiftMangledName&&) = default;
2827

29-
SwiftMangledName& operator<<(unsigned i) {
30-
parts.emplace_back(i);
31-
return *this;
32-
}
28+
// streaming labels or ints into a SwiftMangledName just appends them
29+
SwiftMangledName& operator<<(UntypedTrapLabel label) &;
30+
SwiftMangledName& operator<<(unsigned i) &;
3331

3432
// streaming string-like stuff will add a new part it only if strictly required, otherwise it will
3533
// append to the last part if it is a string
3634
template <typename T>
37-
SwiftMangledName& operator<<(T&& arg) {
35+
SwiftMangledName& operator<<(T&& arg) & {
3836
if (parts.empty() || !std::holds_alternative<std::string>(parts.back())) {
3937
parts.emplace_back("");
4038
}
4139
std::get<std::string>(parts.back()) += std::forward<T>(arg);
4240
return *this;
4341
}
4442

45-
SwiftMangledName& operator<<(SwiftMangledName&& other) {
46-
parts.reserve(parts.size() + other.parts.size());
47-
for (auto& p : other.parts) {
48-
parts.emplace_back(std::move(p));
49-
}
50-
other.parts.clear();
51-
return *this;
52-
}
43+
SwiftMangledName& operator<<(SwiftMangledName&& other) &;
44+
SwiftMangledName& operator<<(const SwiftMangledName& other) &;
5345

54-
SwiftMangledName& operator<<(const SwiftMangledName& other) {
55-
parts.reserve(parts.size() + other.parts.size());
56-
parts.insert(parts.end(), other.parts.begin(), other.parts.end());
57-
return *this;
46+
template <typename T>
47+
SwiftMangledName&& operator<<(T&& arg) && {
48+
return std::move(operator<<(std::forward<T>(arg)));
5849
}
5950
};
6051

0 commit comments

Comments
 (0)