aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-02 16:56:05 +0000
committergingerBill <bill@gingerbill.org>2023-01-02 16:56:05 +0000
commitc293f5b7ebc3b733e996a97c6e32d678f13b3ee5 (patch)
tree41935353d5e02213733dd846cf7b3f46a20703fe /src/check_expr.cpp
parentfa562ec5d60319f5cd7e85bb337bd21feb7ceeb8 (diff)
Remove unneeded mutex
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 5445e73c7..f47361c27 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -193,8 +193,7 @@ gb_internal void check_did_you_mean_objc_entity(String const &name, Entity *e, b
GB_ASSERT(e->kind == Entity_TypeName);
GB_ASSERT(e->TypeName.objc_metadata != nullptr);
auto *objc_metadata = e->TypeName.objc_metadata;
- mutex_lock(objc_metadata->mutex);
- defer (mutex_unlock(objc_metadata->mutex));
+ MUTEX_GUARD(objc_metadata->mutex);
StringSet set = {};
string_set_init(&set, heap_allocator());
@@ -369,8 +368,7 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
GB_ASSERT(dst == nullptr);
}
- mutex_lock(&info->gen_procs_mutex);
- defer (mutex_unlock(&info->gen_procs_mutex));
+ // MUTEX_GUARD(&info->gen_procs_mutex);
if (!src->Proc.is_polymorphic || src->Proc.is_poly_specialized) {
return false;
@@ -436,11 +434,14 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
return false;
}
- auto *found_gen_procs = map_get(&info->gen_procs, base_entity->identifier.load());
+ GenProcsData *found_gen_procs = nullptr;
+
+ MUTEX_GUARD(&info->gen_procs_mutex);
+
+ found_gen_procs = map_get(&info->gen_procs, base_entity->identifier.load());
if (found_gen_procs) {
- auto procs = *found_gen_procs;
- for_array(i, procs) {
- Entity *other = procs[i];
+ MUTEX_GUARD(&found_gen_procs->mutex);
+ for (Entity *other : found_gen_procs->procs) {
Type *pt = base_type(other->type);
if (are_types_identical(pt, final_proc_type)) {
if (poly_proc_data) {
@@ -463,15 +464,13 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
// LEAK TODO(bill): Cloning this AST may be leaky
Ast *cloned_proc_type_node = clone_ast(pt->node);
success = check_procedure_type(&nctx, final_proc_type, cloned_proc_type_node, &operands);
-
if (!success) {
return false;
}
if (found_gen_procs) {
- auto procs = *found_gen_procs;
- for_array(i, procs) {
- Entity *other = procs[i];
+ MUTEX_GUARD(&found_gen_procs->mutex);
+ for (Entity *other : found_gen_procs->procs) {
Type *pt = base_type(other->type);
if (are_types_identical(pt, final_proc_type)) {
if (poly_proc_data) {
@@ -567,11 +566,13 @@ gb_internal bool find_or_generate_polymorphic_procedure(CheckerContext *old_c, E
proc_info->poly_def_node = poly_def_node;
if (found_gen_procs) {
- array_add(found_gen_procs, entity);
+ MUTEX_GUARD(&found_gen_procs->mutex);
+ array_add(&found_gen_procs->procs, entity);
} else {
- auto array = array_make<Entity *>(heap_allocator());
- array_add(&array, entity);
- map_set(&info->gen_procs, base_entity->identifier.load(), array);
+ GenProcsData gen_proc_data = {};
+ gen_proc_data.procs = array_make<Entity *>(heap_allocator());
+ array_add(&gen_proc_data.procs, entity);
+ map_set(&info->gen_procs, base_entity->identifier.load(), gen_proc_data);
}
if (poly_proc_data) {