mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Fix name canonicalization for doc writer
This commit is contained in:
@@ -16,6 +16,8 @@ gb_global char const* OdinDocWriterState_strings[] {
|
|||||||
"writing ",
|
"writing ",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gb_global std::atomic<bool> g_in_doc_writer;
|
||||||
|
|
||||||
struct OdinDocWriter {
|
struct OdinDocWriter {
|
||||||
CheckerInfo *info;
|
CheckerInfo *info;
|
||||||
OdinDocWriterState state;
|
OdinDocWriterState state;
|
||||||
@@ -1137,6 +1139,8 @@ gb_internal void odin_doc_write_to_file(OdinDocWriter *w, char const *filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
gb_internal void odin_doc_write(CheckerInfo *info, char const *filename) {
|
gb_internal void odin_doc_write(CheckerInfo *info, char const *filename) {
|
||||||
|
g_in_doc_writer.store(true);
|
||||||
|
|
||||||
OdinDocWriter w_ = {};
|
OdinDocWriter w_ = {};
|
||||||
OdinDocWriter *w = &w_;
|
OdinDocWriter *w = &w_;
|
||||||
defer (odin_doc_writer_destroy(w));
|
defer (odin_doc_writer_destroy(w));
|
||||||
@@ -1152,4 +1156,11 @@ gb_internal void odin_doc_write(CheckerInfo *info, char const *filename) {
|
|||||||
odin_doc_writer_end_writing(w);
|
odin_doc_writer_end_writing(w);
|
||||||
|
|
||||||
odin_doc_write_to_file(w, filename);
|
odin_doc_write_to_file(w, filename);
|
||||||
|
|
||||||
|
g_in_doc_writer.store(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gb_internal bool is_in_doc_writer(void) {
|
||||||
|
return g_in_doc_writer.load();
|
||||||
}
|
}
|
||||||
@@ -520,6 +520,8 @@ write_base_name:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gb_internal bool is_in_doc_writer(void);
|
||||||
|
|
||||||
// NOTE(bill): This exists so that we deterministically hash a type by serializing it to a canonical string
|
// NOTE(bill): This exists so that we deterministically hash a type by serializing it to a canonical string
|
||||||
gb_internal void write_type_to_canonical_string(TypeWriter *w, Type *type) {
|
gb_internal void write_type_to_canonical_string(TypeWriter *w, Type *type) {
|
||||||
if (type == nullptr) {
|
if (type == nullptr) {
|
||||||
@@ -719,7 +721,13 @@ gb_internal void write_type_to_canonical_string(TypeWriter *w, Type *type) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case Type_Generic:
|
case Type_Generic:
|
||||||
GB_PANIC("Type_Generic should never be hit");
|
if (is_in_doc_writer()) {
|
||||||
|
type_writer_appendc(w, "$");
|
||||||
|
type_writer_append(w, type->Generic.name.text, type->Generic.name.len);
|
||||||
|
type_writer_append_fmt(w, "%lld", cast(long long)type->Generic.id);
|
||||||
|
} else {
|
||||||
|
GB_PANIC("Type_Generic should never be hit");
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case Type_Named:
|
case Type_Named:
|
||||||
|
|||||||
Reference in New Issue
Block a user