forked from pytorch/pytorch
-
Notifications
You must be signed in to change notification settings - Fork 0
/
name_mangler.cpp
36 lines (31 loc) · 1.33 KB
/
name_mangler.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <torch/csrc/jit/frontend/name_mangler.h>
namespace torch::jit {
c10::QualifiedName NameMangler::mangle(const c10::QualifiedName& name) {
static const std::string manglePrefix = "___torch_mangle_";
std::vector<std::string> atoms = name.atoms();
// Search for an already-existing mangle namespace.
// If the name is already mangled, just bump the integer.
for (auto& atom : atoms) {
auto pos = atom.find(manglePrefix);
if (pos != std::string::npos) {
auto num = atom.substr(pos + manglePrefix.size());
// current mangle index in the name
size_t num_i = c10::stoi(num);
// bump the mangleIndex_ to num_i + 1
mangleIndex_ = std::max(mangleIndex_, num_i + 1);
std::string newAtomPrefix;
newAtomPrefix.reserve(atom.size());
// Append the part of the name up to the end of the prefix
newAtomPrefix.append(atom, 0, pos);
newAtomPrefix.append(manglePrefix);
atom = newAtomPrefix + c10::to_string(mangleIndex_++);
// increment mangleIndex_ until the type is not defined
return c10::QualifiedName(atoms);
}
}
// Otherwise add a mangle namespace right before the basename
TORCH_INTERNAL_ASSERT(!atoms.empty());
atoms.insert(atoms.end() - 1, manglePrefix + c10::to_string(mangleIndex_++));
return c10::QualifiedName(atoms);
}
} // namespace torch::jit