From bb80c1b05922a1d1a76e96f0bc5edba09292b1e9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 3 Jan 2023 17:07:53 +0000 Subject: Add `type_and_value_mutex` to `DeclInfo` --- src/checker.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/checker.cpp') diff --git a/src/checker.cpp b/src/checker.cpp index 3f5c2892f..11e0dfa47 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1453,7 +1453,9 @@ gb_internal void add_type_and_value(CheckerContext *ctx, Ast *expr, AddressingMo } BlockingMutex *mutex = &ctx->info->type_and_value_mutex; - if (ctx->pkg) { + if (ctx->decl) { + mutex = &ctx->decl->type_and_value_mutex; + } else if (ctx->pkg) { // TODO(bill): is a per package mutex is a good idea here? mutex = &ctx->pkg->type_and_value_mutex; } @@ -1749,7 +1751,7 @@ gb_internal void add_type_info_type_internal(CheckerContext *c, Type *t) { if (is_type_untyped(t)) { return; // Could be nil } - if (is_type_polymorphic(base_type(t))) { + if (is_type_polymorphic(t)) { return; } @@ -1764,6 +1766,8 @@ gb_internal void add_type_info_type_internal(CheckerContext *c, Type *t) { bool prev = false; isize ti_index = -1; + // NOTE(bill): this is a linear lookup, and is most likely very costly + // as this map keeps growing linearly for (auto const &e : c->info->type_info_map) { if (are_types_identical_unique_tuples(t, e.key)) { // Duplicate entry -- cgit v1.2.3