aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-12-15 10:59:34 +0000
committergingerBill <bill@gingerbill.org>2023-12-15 10:59:34 +0000
commit1606f756b3c78a1721c1cfa880860f6b8695349e (patch)
tree77bf3ddaf50530a5a63e3d8827fb484248b90e43 /src/checker.cpp
parent2e9298891e76b37721ae39b9813d720ad48cc103 (diff)
Remove neighbouring duplicates from neighbouring sorted array of entities; fixes duplicate tests
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp35
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) {