aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-08-10 15:29:53 +0100
committergingerBill <gingerBill@users.noreply.github.com>2025-08-10 15:29:53 +0100
commitecb6b35da561bfdaf89c0d39865a93abc26c3ad0 (patch)
treebf21a8c0b1e97bea16712c614519db2bf1c3f02d /src
parent983f3ec423a6a424c0e64ed2a5de41edffc459ec (diff)
Fix name canonicalization for named specialized forms
Diffstat (limited to 'src')
-rw-r--r--src/name_canonicalization.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp
index e3090368a..6a4538e26 100644
--- a/src/name_canonicalization.cpp
+++ b/src/name_canonicalization.cpp
@@ -505,7 +505,13 @@ write_base_name:
Type *params = nullptr;
Entity *parent = type_get_polymorphic_parent(e->type, &params);
- if (parent && (parent->token.string == e->token.string)) {
+ if (parent && (e->token.string == parent->token.string)) {
+ // Check for `distinct` forms
+ type_writer_append(w, parent->token.string.text, parent->token.string.len);
+ write_canonical_params(w, params);
+ } else if (parent && string_starts_with(e->token.string, parent->token.string) &&
+ string_contains_char(e->token.string, '(')) {
+ // Check for named specialization forms
type_writer_append(w, parent->token.string.text, parent->token.string.len);
write_canonical_params(w, params);
} else {
@@ -767,7 +773,6 @@ gb_internal void write_type_to_canonical_string(TypeWriter *w, Type *type) {
case Type_Named:
if (type->Named.type_name != nullptr) {
write_canonical_entity_name(w, type->Named.type_name);
- return;
} else {
type_writer_append(w, type->Named.name.text, type->Named.name.len);
}