aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2025-09-10 19:38:30 +0100
committergingerBill <gingerBill@users.noreply.github.com>2025-09-10 19:38:30 +0100
commit01258d4817bb8d04ab287d847c93d36952f11f22 (patch)
tree9a8d5a873d2de694ffde76977eadefcf70d24335 /src
parenta36a8722dc823c6fe143f7935e79467c6569bc00 (diff)
Multithread "check all scope usages"
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp2
-rw-r--r--src/checker.cpp43
2 files changed, 34 insertions, 11 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 0c88f3d13..077660f10 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -1163,8 +1163,8 @@ gb_internal String internal_odin_root_dir(void) {
return global_module_path;
}
+ TEMPORARY_ALLOCATOR_GUARD();
auto path_buf = array_make<char>(temporary_allocator(), 300);
- defer (array_free(&path_buf));
len = 0;
for (;;) {
diff --git a/src/checker.cpp b/src/checker.cpp
index c1d6302ad..1fca3dfe5 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -7204,6 +7204,36 @@ gb_internal void check_update_dependency_tree_for_procedures(Checker *c) {
}
#endif
+gb_internal WORKER_TASK_PROC(check_scope_usage_file_worker) {
+ Checker *c = global_checker_ptr.load(std::memory_order_relaxed);
+ AstFile *f = cast(AstFile *)data;
+ u64 vet_flags = ast_file_vet_flags(f);
+ check_scope_usage(c, f->scope, vet_flags);
+ return 0;
+}
+
+gb_internal WORKER_TASK_PROC(check_scope_usage_pkg_worker) {
+ Checker *c = global_checker_ptr.load(std::memory_order_relaxed);
+ AstPackage *pkg = cast(AstPackage *)data;
+ check_scope_usage_internal(c, pkg->scope, 0, true);
+ return 0;
+}
+
+
+
+gb_internal void check_all_scope_usages(Checker *c) {
+ for (auto const &entry : c->info.files) {
+ AstFile *f = entry.value;
+ thread_pool_add_task(check_scope_usage_file_worker, f);
+ }
+ for (auto const &entry : c->info.packages) {
+ AstPackage *pkg = entry.value;
+ thread_pool_add_task(check_scope_usage_pkg_worker, pkg);
+ }
+
+ thread_pool_wait();
+}
+
gb_internal void check_parsed_files(Checker *c) {
global_checker_ptr.store(c, std::memory_order_relaxed);
@@ -7271,16 +7301,9 @@ gb_internal void check_parsed_files(Checker *c) {
TIME_SECTION("add entities from procedure bodies");
check_merge_queues_into_arrays(c);
- TIME_SECTION("check scope usage");
- for (auto const &entry : c->info.files) {
- AstFile *f = entry.value;
- u64 vet_flags = ast_file_vet_flags(f);
- check_scope_usage(c, f->scope, vet_flags);
- }
- for (auto const &entry : c->info.packages) {
- AstPackage *pkg = entry.value;
- check_scope_usage_internal(c, pkg->scope, 0, true);
- }
+ TIME_SECTION("check all scope usages");
+ check_all_scope_usages(c);
+
TIME_SECTION("add basic type information");
// Add "Basic" type information