diff options
| author | gingerBill <bill@gingerbill.org> | 2023-12-15 10:59:34 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-12-15 10:59:34 +0000 |
| commit | 1606f756b3c78a1721c1cfa880860f6b8695349e (patch) | |
| tree | 77bf3ddaf50530a5a63e3d8827fb484248b90e43 /src/checker.cpp | |
| parent | 2e9298891e76b37721ae39b9813d720ad48cc103 (diff) | |
Remove neighbouring duplicates from neighbouring sorted array of entities; fixes duplicate tests
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index 2c6878eca..e550f75ad 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -5548,6 +5548,9 @@ gb_internal void check_test_procedures(Checker *c) { } } + gb_sort_array(c->info.testing_procedures.data, c->info.testing_procedures.count, testing_procedures_cmp); + remove_neighbouring_duplicate_entires_from_sorted_array(&c->info.testing_procedures); + for (isize i = 0; i < c->info.testing_procedures.count; /**/) { Entity *e = c->info.testing_procedures[i]; String name = e->token.string; @@ -5975,36 +5978,28 @@ gb_internal GB_COMPARE_PROC(fini_procedures_cmp) { return init_procedures_cmp(b, a); } - -gb_internal void check_sort_init_and_fini_procedures(Checker *c) { - gb_sort_array(c->info.init_procedures.data, c->info.init_procedures.count, init_procedures_cmp); - gb_sort_array(c->info.fini_procedures.data, c->info.fini_procedures.count, fini_procedures_cmp); - - // NOTE(bill): remove possible duplicates from the init/fini lists - // NOTE(bill): because the arrays are sorted, you only need to check the previous element +gb_internal void remove_neighbouring_duplicate_entires_from_sorted_array(Array<Entity *> *array) { Entity *prev = nullptr; - for (isize i = 0; i < c->info.init_procedures.count; /**/) { - Entity *curr = c->info.init_procedures[i]; + for (isize i = 0; i < array->count; /**/) { + Entity *curr = array->data[i]; if (prev == curr) { - array_ordered_remove(&c->info.init_procedures, i); + array_ordered_remove(array, i); } else { prev = curr; i += 1; } } +} - prev = nullptr; +gb_internal void check_sort_init_and_fini_procedures(Checker *c) { + gb_sort_array(c->info.init_procedures.data, c->info.init_procedures.count, init_procedures_cmp); + gb_sort_array(c->info.fini_procedures.data, c->info.fini_procedures.count, fini_procedures_cmp); - for (isize i = 0; i < c->info.fini_procedures.count; /**/) { - Entity *curr = c->info.fini_procedures[i]; - if (prev == curr) { - array_ordered_remove(&c->info.fini_procedures, i); - } else { - prev = curr; - i += 1; - } - } + // NOTE(bill): remove possible duplicates from the init/fini lists + // NOTE(bill): because the arrays are sorted, you only need to check the previous element + remove_neighbouring_duplicate_entires_from_sorted_array(&c->info.init_procedures); + remove_neighbouring_duplicate_entires_from_sorted_array(&c->info.fini_procedures); } gb_internal void add_type_info_for_type_definitions(Checker *c) { |