diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2021-11-05 18:12:40 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-05 18:12:40 +0000 |
| commit | ee259e42298eca0e4e5d6b8681c2403c3bf7a80e (patch) | |
| tree | 7bfd15490ddc4be6fcd41b4f969df6c901d98f76 /src/docs_writer.cpp | |
| parent | e963fc4d6a2b8fc63f46bb57b2c727999ce39e29 (diff) | |
| parent | 36985f8da0cea59cb1912f62ae4e700983159b6a (diff) | |
Merge pull request #1273 from odin-lang/compiler-map-improvements
Compiler Map Improvements
Diffstat (limited to 'src/docs_writer.cpp')
| -rw-r--r-- | src/docs_writer.cpp | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp index 1603ca22c..e7254e16b 100644 --- a/src/docs_writer.cpp +++ b/src/docs_writer.cpp @@ -26,12 +26,10 @@ struct OdinDocWriter { StringMap<OdinDocString> string_cache; - Map<OdinDocFileIndex> file_cache; // Key: AstFile * - Map<OdinDocPkgIndex> pkg_cache; // Key: AstPackage * - Map<OdinDocEntityIndex> entity_cache; // Key: Entity * - Map<Entity *> entity_id_cache; // Key: OdinDocEntityIndex - Map<OdinDocTypeIndex> type_cache; // Key: Type * - Map<Type *> type_id_cache; // Key: OdinDocTypeIndex + PtrMap<AstFile *, OdinDocFileIndex> file_cache; + PtrMap<AstPackage *, OdinDocPkgIndex> pkg_cache; + PtrMap<Entity *, OdinDocEntityIndex> entity_cache; + PtrMap<Type *, OdinDocTypeIndex> type_cache; OdinDocWriterItemTracker<OdinDocFile> files; OdinDocWriterItemTracker<OdinDocPkg> pkgs; @@ -61,9 +59,7 @@ void odin_doc_writer_prepare(OdinDocWriter *w) { map_init(&w->file_cache, a); map_init(&w->pkg_cache, a); map_init(&w->entity_cache, a); - map_init(&w->entity_id_cache, a); map_init(&w->type_cache, a); - map_init(&w->type_id_cache, a); odin_doc_writer_item_tracker_init(&w->files, 1); odin_doc_writer_item_tracker_init(&w->pkgs, 1); @@ -81,9 +77,7 @@ void odin_doc_writer_destroy(OdinDocWriter *w) { map_destroy(&w->file_cache); map_destroy(&w->pkg_cache); map_destroy(&w->entity_cache); - map_destroy(&w->entity_id_cache); map_destroy(&w->type_cache); - map_destroy(&w->type_id_cache); } @@ -115,9 +109,7 @@ void odin_doc_writer_start_writing(OdinDocWriter *w) { map_clear(&w->file_cache); map_clear(&w->pkg_cache); map_clear(&w->entity_cache); - map_clear(&w->entity_id_cache); map_clear(&w->type_cache); - map_clear(&w->type_id_cache); isize total_size = odin_doc_writer_calc_total_size(w); total_size = align_formula_isize(total_size, 8); @@ -267,7 +259,7 @@ OdinDocPosition odin_doc_token_pos_cast(OdinDocWriter *w, TokenPos const &pos) { if (pos.file_id != 0) { AstFile *file = get_ast_file_from_id(pos.file_id); if (file != nullptr) { - OdinDocFileIndex *file_index_found = map_get(&w->file_cache, hash_pointer(file)); + OdinDocFileIndex *file_index_found = map_get(&w->file_cache, file); GB_ASSERT(file_index_found != nullptr); file_index = *file_index_found; } @@ -483,16 +475,16 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) { if (type == nullptr) { return 0; } - OdinDocTypeIndex *found = map_get(&w->type_cache, hash_pointer(type)); + OdinDocTypeIndex *found = map_get(&w->type_cache, type); if (found) { return *found; } for_array(i, w->type_cache.entries) { // NOTE(bill): THIS IS SLOW - Type *other = cast(Type *)cast(uintptr)w->type_cache.entries[i].key.key; + Type *other = w->type_cache.entries[i].key; if (are_types_identical(type, other)) { OdinDocTypeIndex index = w->type_cache.entries[i].value; - map_set(&w->type_cache, hash_pointer(type), index); + map_set(&w->type_cache, type, index); return index; } } @@ -502,8 +494,7 @@ OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) { OdinDocType doc_type = {}; OdinDocTypeIndex type_index = 0; type_index = odin_doc_write_item(w, &w->types, &doc_type, &dst); - map_set(&w->type_cache, hash_pointer(type), type_index); - map_set(&w->type_id_cache, hash_integer(type_index), type); + map_set(&w->type_cache, type, type_index); switch (type->kind) { case Type_Basic: @@ -776,12 +767,12 @@ OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e) { return 0; } - OdinDocEntityIndex *prev_index = map_get(&w->entity_cache, hash_pointer(e)); + OdinDocEntityIndex *prev_index = map_get(&w->entity_cache, e); if (prev_index) { return *prev_index; } - if (e->pkg != nullptr && map_get(&w->pkg_cache, hash_pointer(e->pkg)) == nullptr) { + if (e->pkg != nullptr && map_get(&w->pkg_cache, e->pkg) == nullptr) { return 0; } @@ -789,8 +780,7 @@ OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e) { OdinDocEntity* dst = nullptr; OdinDocEntityIndex doc_entity_index = odin_doc_write_item(w, &w->entities, &doc_entity, &dst); - map_set(&w->entity_cache, hash_pointer(e), doc_entity_index); - map_set(&w->entity_id_cache, hash_integer(doc_entity_index), e); + map_set(&w->entity_cache, e, doc_entity_index); Ast *type_expr = nullptr; @@ -901,7 +891,7 @@ void odin_doc_update_entities(OdinDocWriter *w) { defer (array_free(&entities)); for_array(i, w->entity_cache.entries) { - Entity *e = cast(Entity *)cast(uintptr)w->entity_cache.entries[i].key.key; + Entity *e = w->entity_cache.entries[i].key; entities[i] = e; } for_array(i, entities) { @@ -912,7 +902,7 @@ void odin_doc_update_entities(OdinDocWriter *w) { } for_array(i, w->entity_cache.entries) { - Entity *e = cast(Entity *)cast(uintptr)w->entity_cache.entries[i].key.key; + Entity *e = w->entity_cache.entries[i].key; OdinDocEntityIndex entity_index = w->entity_cache.entries[i].value; OdinDocTypeIndex type_index = odin_doc_type(w, e->type); @@ -955,7 +945,7 @@ OdinDocArray<OdinDocEntityIndex> odin_doc_add_pkg_entities(OdinDocWriter *w, Ast if (pkg->scope == nullptr) { return {}; } - if (map_get(&w->pkg_cache, hash_pointer(pkg)) == nullptr) { + if (map_get(&w->pkg_cache, pkg) == nullptr) { return {}; } @@ -1056,7 +1046,7 @@ void odin_doc_write_docs(OdinDocWriter *w) { OdinDocPkg *dst = nullptr; OdinDocPkgIndex pkg_index = odin_doc_write_item(w, &w->pkgs, &doc_pkg, &dst); - map_set(&w->pkg_cache, hash_pointer(pkg), pkg_index); + map_set(&w->pkg_cache, pkg, pkg_index); auto file_indices = array_make<OdinDocFileIndex>(heap_allocator(), 0, pkg->files.count); defer (array_free(&file_indices)); @@ -1067,7 +1057,7 @@ void odin_doc_write_docs(OdinDocWriter *w) { doc_file.pkg = pkg_index; doc_file.name = odin_doc_write_string(w, file->fullpath); OdinDocFileIndex file_index = odin_doc_write_item(w, &w->files, &doc_file); - map_set(&w->file_cache, hash_pointer(file), file_index); + map_set(&w->file_cache, file, file_index); array_add(&file_indices, file_index); } |