summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/NameTypes.cpp25
-rw-r--r--src/passes/TypeSSA.cpp2
2 files changed, 25 insertions, 2 deletions
diff --git a/src/passes/NameTypes.cpp b/src/passes/NameTypes.cpp
index fcf6df5ab..0e18f3094 100644
--- a/src/passes/NameTypes.cpp
+++ b/src/passes/NameTypes.cpp
@@ -34,13 +34,36 @@ struct NameTypes : public Pass {
// Find all the types.
std::vector<HeapType> types = ModuleUtils::collectHeapTypes(*module);
+ std::unordered_set<Name> used;
+
// Ensure simple names. If a name already exists, and is short enough, keep
// it.
size_t i = 0;
for (auto& type : types) {
if (module->typeNames.count(type) == 0 ||
module->typeNames[type].name.size() >= NameLenLimit) {
- module->typeNames[type].name = "type$" + std::to_string(i++);
+ module->typeNames[type].name = "type_" + std::to_string(i++);
+ }
+ used.insert(module->typeNames[type].name);
+ }
+
+ // "Lint" the names a little. In particular a name with a "_7" or such
+ // suffix, as TypeSSA creates, can be removed if it does not cause a
+ // collision. This keeps the names unique while removing 'noise.'
+ //
+ // Note we must iterate in a deterministic order here, so do it on |types|.
+ for (auto& type : types) {
+ auto& names = module->typeNames[type];
+ std::string name = names.name.toString();
+ while (name.size() > 1 && isdigit(name.back())) {
+ name.pop_back();
+ }
+ if (name.size() > 1 && name.back() == '_') {
+ name.pop_back();
+ if (!used.count(name)) {
+ names.name = name;
+ used.insert(name);
+ }
}
}
}
diff --git a/src/passes/TypeSSA.cpp b/src/passes/TypeSSA.cpp
index cb8f0f049..6c50cb2a9 100644
--- a/src/passes/TypeSSA.cpp
+++ b/src/passes/TypeSSA.cpp
@@ -285,7 +285,7 @@ struct TypeSSA : public Pass {
// If the old type has a nice name, make a nice name for the new one.
if (typeNames.count(oldType)) {
- auto intendedName = typeNames[oldType].name.toString() + '$' +
+ auto intendedName = typeNames[oldType].name.toString() + '_' +
std::to_string(++nameCounter);
auto newName =
Names::getValidNameGivenExisting(intendedName, existingTypeNames);