aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-07-08 13:59:25 +0100
committergingerBill <bill@gingerbill.org>2024-07-08 13:59:25 +0100
commit0f664893dd5cd9b40ac7d4d205df7aa631616f68 (patch)
tree769b25490e253518ec17a8efc37ca5728ac64c61 /src
parent04e0b3e270c3dc59202e069bfe76c7c20ad7997f (diff)
Add sort for global types and procedures
Diffstat (limited to 'src')
-rw-r--r--src/checker.cpp2
-rw-r--r--src/llvm_backend.cpp24
2 files changed, 25 insertions, 1 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 503494c76..18b9db6ef 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -519,7 +519,7 @@ gb_internal Entity *scope_insert_no_mutex(Scope *s, Entity *entity) {
}
-GB_COMPARE_PROC(entity_variable_pos_cmp) {
+gb_internal GB_COMPARE_PROC(entity_variable_pos_cmp) {
Entity *x = *cast(Entity **)a;
Entity *y = *cast(Entity **)b;
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 92c8138c5..343edaeb0 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -1321,6 +1321,24 @@ gb_internal WORKER_TASK_PROC(lb_generate_procedures_and_types_per_module) {
return 0;
}
+gb_internal GB_COMPARE_PROC(llvm_global_entity_cmp) {
+ Entity *x = *cast(Entity **)a;
+ Entity *y = *cast(Entity **)b;
+ if (x == y) {
+ return 0;
+ }
+ if (x->kind != y->kind) {
+ return cast(i32)(x->kind - y->kind);
+ }
+
+ i32 cmp = 0;
+ cmp = token_pos_cmp(x->token.pos, y->token.pos);
+ if (!cmp) {
+ return cmp;
+ }
+ return cmp;
+}
+
gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, CheckerInfo *info, bool do_threading) {
auto *min_dep_set = &info->minimum_dependency_set;
@@ -1377,6 +1395,12 @@ gb_internal void lb_create_global_procedures_and_types(lbGenerator *gen, Checker
}
}
+ for (auto const &entry : gen->modules) {
+ lbModule *m = entry.value;
+ gb_sort_array(m->global_types_to_create.data, m->global_types_to_create.count, llvm_global_entity_cmp);
+ gb_sort_array(m->global_procedures_to_create.data, m->global_procedures_to_create.count, llvm_global_entity_cmp);
+ }
+
if (do_threading) {
for (auto const &entry : gen->modules) {
lbModule *m = entry.value;