aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-07-13 23:09:24 +0100
committergingerBill <bill@gingerbill.org>2021-07-13 23:09:24 +0100
commit7a9b7af078da29ca54e4dbd653b4ac0fa46d18c3 (patch)
tree04641e379659ffa6c031bf532feba4c6cf1ecbcd /src/check_expr.cpp
parent31c7afce1bc33d791542baaddfa9ef72e3ce19c7 (diff)
Reduce mutex usage and convert things to queues from arrays
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index beff1a532..70d8a891f 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -225,15 +225,13 @@ bool find_or_generate_polymorphic_procedure(CheckerContext *c, Entity *base_enti
return false;
}
-
- gb_mutex_lock(&info->gen_procs_mutex);
- defer (gb_mutex_unlock(&info->gen_procs_mutex));
-
String name = base_entity->token.string;
Type *src = base_type(base_entity->type);
Type *dst = nullptr;
- if (type != nullptr) dst = base_type(type);
+ if (type != nullptr) {
+ dst = base_type(type);
+ }
if (param_operands == nullptr) {
GB_ASSERT(dst != nullptr);
@@ -242,6 +240,8 @@ bool find_or_generate_polymorphic_procedure(CheckerContext *c, Entity *base_enti
GB_ASSERT(dst == nullptr);
}
+ gb_mutex_lock(&info->gen_procs_mutex);
+ defer (gb_mutex_unlock(&info->gen_procs_mutex));
if (!src->Proc.is_polymorphic || src->Proc.is_poly_specialized) {
return false;
@@ -314,9 +314,6 @@ bool find_or_generate_polymorphic_procedure(CheckerContext *c, Entity *base_enti
auto *found_gen_procs = map_get(&info->gen_procs, hash_pointer(base_entity->identifier));
if (found_gen_procs) {
- // gb_mutex_lock(&info->gen_procs_mutex);
- // defer (gb_mutex_unlock(&info->gen_procs_mutex));
-
auto procs = *found_gen_procs;
for_array(i, procs) {
Entity *other = procs[i];
@@ -353,9 +350,6 @@ bool find_or_generate_polymorphic_procedure(CheckerContext *c, Entity *base_enti
}
if (found_gen_procs) {
- // gb_mutex_lock(&info->gen_procs_mutex);
- // defer (gb_mutex_unlock(&info->gen_procs_mutex));
-
auto procs = *found_gen_procs;
for_array(i, procs) {
Entity *other = procs[i];
@@ -425,7 +419,6 @@ bool find_or_generate_polymorphic_procedure(CheckerContext *c, Entity *base_enti
proc_info->generated_from_polymorphic = true;
proc_info->poly_def_node = poly_def_node;
- // gb_mutex_lock(&info->gen_procs_mutex);
if (found_gen_procs) {
array_add(found_gen_procs, entity);
} else {
@@ -433,7 +426,6 @@ bool find_or_generate_polymorphic_procedure(CheckerContext *c, Entity *base_enti
array_add(&array, entity);
map_set(&info->gen_procs, hash_pointer(base_entity->identifier), array);
}
- // gb_mutex_unlock(&info->gen_procs_mutex);
GB_ASSERT(entity != nullptr);