mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Use local mutexes rather than a global one for the dependency insertion
This commit is contained in:
+6
-24
@@ -743,21 +743,17 @@ gb_internal void check_scope_usage(Checker *c, Scope *scope) {
|
|||||||
|
|
||||||
|
|
||||||
gb_internal void add_dependency(CheckerInfo *info, DeclInfo *d, Entity *e) {
|
gb_internal void add_dependency(CheckerInfo *info, DeclInfo *d, Entity *e) {
|
||||||
mutex_lock(&info->deps_mutex);
|
mutex_lock(&d->deps_mutex);
|
||||||
ptr_set_add(&d->deps, e);
|
ptr_set_add(&d->deps, e);
|
||||||
mutex_unlock(&info->deps_mutex);
|
mutex_unlock(&d->deps_mutex);
|
||||||
}
|
}
|
||||||
gb_internal void add_type_info_dependency(CheckerInfo *info, DeclInfo *d, Type *type, bool require_mutex) {
|
gb_internal void add_type_info_dependency(CheckerInfo *info, DeclInfo *d, Type *type) {
|
||||||
if (d == nullptr) {
|
if (d == nullptr) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (require_mutex) {
|
mutex_lock(&d->type_info_deps_mutex);
|
||||||
mutex_lock(&info->deps_mutex);
|
|
||||||
}
|
|
||||||
ptr_set_add(&d->type_info_deps, type);
|
ptr_set_add(&d->type_info_deps, type);
|
||||||
if (require_mutex) {
|
mutex_unlock(&d->type_info_deps_mutex);
|
||||||
mutex_unlock(&info->deps_mutex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gb_internal AstPackage *get_core_package(CheckerInfo *info, String name) {
|
gb_internal AstPackage *get_core_package(CheckerInfo *info, String name) {
|
||||||
@@ -1157,13 +1153,6 @@ gb_internal void init_checker_info(CheckerInfo *i) {
|
|||||||
array_init(&i->required_foreign_imports_through_force, a, 0, 0);
|
array_init(&i->required_foreign_imports_through_force, a, 0, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
i->allow_identifier_uses = false;
|
|
||||||
if (i->allow_identifier_uses) {
|
|
||||||
array_init(&i->identifier_uses, a);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
TIME_SECTION("checker info: mpmc queues");
|
TIME_SECTION("checker info: mpmc queues");
|
||||||
|
|
||||||
mpmc_init(&i->entity_queue, a, 1<<20);
|
mpmc_init(&i->entity_queue, a, 1<<20);
|
||||||
@@ -1194,7 +1183,6 @@ gb_internal void destroy_checker_info(CheckerInfo *i) {
|
|||||||
string_map_destroy(&i->files);
|
string_map_destroy(&i->files);
|
||||||
string_map_destroy(&i->packages);
|
string_map_destroy(&i->packages);
|
||||||
array_free(&i->variable_init_order);
|
array_free(&i->variable_init_order);
|
||||||
array_free(&i->identifier_uses);
|
|
||||||
array_free(&i->required_foreign_imports_through_force);
|
array_free(&i->required_foreign_imports_through_force);
|
||||||
|
|
||||||
mpmc_destroy(&i->entity_queue);
|
mpmc_destroy(&i->entity_queue);
|
||||||
@@ -1597,12 +1585,6 @@ gb_internal void add_entity_use(CheckerContext *c, Ast *identifier, Entity *enti
|
|||||||
|
|
||||||
identifier->Ident.entity = entity;
|
identifier->Ident.entity = entity;
|
||||||
|
|
||||||
if (c->info->allow_identifier_uses) {
|
|
||||||
mutex_lock(&c->info->identifier_uses_mutex);
|
|
||||||
array_add(&c->info->identifier_uses, identifier);
|
|
||||||
mutex_unlock(&c->info->identifier_uses_mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
String dmsg = entity->deprecated_message;
|
String dmsg = entity->deprecated_message;
|
||||||
if (dmsg.len > 0) {
|
if (dmsg.len > 0) {
|
||||||
warning(identifier, "%.*s is deprecated: %.*s", LIT(entity->token.string), LIT(dmsg));
|
warning(identifier, "%.*s is deprecated: %.*s", LIT(entity->token.string), LIT(dmsg));
|
||||||
@@ -1767,7 +1749,7 @@ gb_internal void add_type_info_type_internal(CheckerContext *c, Type *t) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_type_info_dependency(c->info, c->decl, t, false);
|
add_type_info_dependency(c->info, c->decl, t);
|
||||||
|
|
||||||
auto found = map_get(&c->info->type_info_map, t);
|
auto found = map_get(&c->info->type_info_map, t);
|
||||||
if (found != nullptr) {
|
if (found != nullptr) {
|
||||||
|
|||||||
+5
-6
@@ -179,8 +179,12 @@ struct DeclInfo {
|
|||||||
CommentGroup *comment;
|
CommentGroup *comment;
|
||||||
CommentGroup *docs;
|
CommentGroup *docs;
|
||||||
|
|
||||||
PtrSet<Entity *> deps;
|
BlockingMutex deps_mutex;
|
||||||
|
PtrSet<Entity *> deps;
|
||||||
|
|
||||||
|
BlockingMutex type_info_deps_mutex;
|
||||||
PtrSet<Type *> type_info_deps;
|
PtrSet<Type *> type_info_deps;
|
||||||
|
|
||||||
Array<BlockLabel> labels;
|
Array<BlockLabel> labels;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -375,11 +379,6 @@ struct CheckerInfo {
|
|||||||
BlockingMutex foreign_mutex; // NOT recursive
|
BlockingMutex foreign_mutex; // NOT recursive
|
||||||
StringMap<Entity *> foreigns;
|
StringMap<Entity *> foreigns;
|
||||||
|
|
||||||
// only used by 'odin query'
|
|
||||||
bool allow_identifier_uses;
|
|
||||||
BlockingMutex identifier_uses_mutex;
|
|
||||||
Array<Ast *> identifier_uses;
|
|
||||||
|
|
||||||
// NOTE(bill): These are actually MPSC queues
|
// NOTE(bill): These are actually MPSC queues
|
||||||
// TODO(bill): Convert them to be MPSC queues
|
// TODO(bill): Convert them to be MPSC queues
|
||||||
MPMCQueue<Entity *> definition_queue;
|
MPMCQueue<Entity *> definition_queue;
|
||||||
|
|||||||
Reference in New Issue
Block a user