aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-11 18:10:27 +0000
committergingerBill <bill@gingerbill.org>2023-01-11 18:10:27 +0000
commit7124d541a132fc94b2c66c54bd73eb0d103ce3d3 (patch)
treef0eb8f42e5ebc9ec6ac1ff332e09754a804c9a86 /src/checker.cpp
parent3c7e45a46fc68426641047a540d4cb50b0fbd9c8 (diff)
General optimizations
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 4e8d19016..473af7128 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -220,11 +220,9 @@ gb_internal DeclInfo *make_decl_info(Scope *scope, DeclInfo *parent) {
-gb_internal Scope *create_scope(CheckerInfo *info, Scope *parent, isize init_elements_capacity=DEFAULT_SCOPE_CAPACITY) {
+gb_internal Scope *create_scope(CheckerInfo *info, Scope *parent) {
Scope *s = gb_alloc_item(permanent_allocator(), Scope);
s->parent = parent;
- string_map_init(&s->elements, init_elements_capacity);
- ptr_set_init(&s->imported, 0);
if (parent != nullptr && parent != builtin_pkg->scope) {
Scope *prev_head_child = parent->head_child.exchange(s, std::memory_order_acq_rel);
@@ -246,7 +244,8 @@ gb_internal Scope *create_scope_from_file(CheckerInfo *info, AstFile *f) {
GB_ASSERT(f->pkg->scope != nullptr);
isize init_elements_capacity = gb_max(DEFAULT_SCOPE_CAPACITY, 2*f->total_file_decl_count);
- Scope *s = create_scope(info, f->pkg->scope, init_elements_capacity);
+ Scope *s = create_scope(info, f->pkg->scope);
+ string_map_init(&s->elements, init_elements_capacity);
s->flags |= ScopeFlag_File;
@@ -265,7 +264,8 @@ gb_internal Scope *create_scope_from_package(CheckerContext *c, AstPackage *pkg)
}
isize init_elements_capacity = gb_max(DEFAULT_SCOPE_CAPACITY, 2*total_pkg_decl_count);
- Scope *s = create_scope(c->info, builtin_pkg->scope, init_elements_capacity);
+ Scope *s = create_scope(c->info, builtin_pkg->scope);
+ string_map_init(&s->elements, init_elements_capacity);
s->flags |= ScopeFlag_Pkg;
s->pkg = pkg;
@@ -1753,7 +1753,8 @@ gb_internal void add_type_info_type_internal(CheckerContext *c, Type *t) {
add_type_info_dependency(c->info, c->decl, t);
MUTEX_GUARD_BLOCK(&c->info->type_info_mutex) {
- auto found = map_get(&c->info->type_info_map, t);
+ MapFindResult fr;
+ auto found = map_try_get(&c->info->type_info_map, t, &fr);
if (found != nullptr) {
// Types have already been added
return;
@@ -1777,7 +1778,7 @@ gb_internal void add_type_info_type_internal(CheckerContext *c, Type *t) {
ti_index = c->info->type_info_types.count;
array_add(&c->info->type_info_types, t);
}
- map_set(&c->checker->info.type_info_map, t, ti_index);
+ map_set_internal_from_try_get(&c->checker->info.type_info_map, t, ti_index, fr);
if (prev) {
// NOTE(bill): If a previous one exists already, no need to continue