Răsfoiți Sursa

Remove neighbouring duplicates from neighbouring sorted array of entities; fixes duplicate tests

gingerBill 1 an în urmă
părinte
comite
1606f756b3
1 a modificat fișierele cu 15 adăugiri și 20 ștergeri
  1. 15 20
      src/checker.cpp

+ 15 - 20
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) {