diff options
| author | gingerBill <bill@gingerbill.org> | 2024-07-08 13:59:25 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-07-08 13:59:25 +0100 |
| commit | 0f664893dd5cd9b40ac7d4d205df7aa631616f68 (patch) | |
| tree | 769b25490e253518ec17a8efc37ca5728ac64c61 /src | |
| parent | 04e0b3e270c3dc59202e069bfe76c7c20ad7997f (diff) | |
Add sort for global types and procedures
Diffstat (limited to 'src')
| -rw-r--r-- | src/checker.cpp | 2 | ||||
| -rw-r--r-- | src/llvm_backend.cpp | 24 |
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; |