sequencer: simplify allocation of result array in todo_list_rearrange_squash()

The operation doesn't change the number of elements in the array, so we do
not need to allocate the result piecewise.

This moves the re-assignment of todo_list->alloc at the end slighly up,
so it's right after the newly added assert which also refers to `nr`
(and which indeed should come first). Also, the value is more likely to
be still in a register at that point.

Signed-off-by: Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Oswald Buddenhagen 2023-08-09 19:15:32 +02:00 коммит произвёл Junio C Hamano
Родитель a82fb66fed
Коммит 82dc42cbd1
1 изменённых файлов: 5 добавлений и 4 удалений

Просмотреть файл

@ -6233,7 +6233,7 @@ static int skip_fixupish(const char *subject, const char **p) {
int todo_list_rearrange_squash(struct todo_list *todo_list)
{
struct hashmap subject2item;
int rearranged = 0, *next, *tail, i, nr = 0, alloc = 0;
int rearranged = 0, *next, *tail, i, nr = 0;
char **subjects;
struct commit_todo_item commit_todo;
struct todo_item *items = NULL;
@ -6345,6 +6345,8 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
}
if (rearranged) {
ALLOC_ARRAY(items, todo_list->nr);
for (i = 0; i < todo_list->nr; i++) {
enum todo_command command = todo_list->items[i].command;
int cur = i;
@ -6357,16 +6359,15 @@ int todo_list_rearrange_squash(struct todo_list *todo_list)
continue;
while (cur >= 0) {
ALLOC_GROW(items, nr + 1, alloc);
items[nr++] = todo_list->items[cur];
cur = next[cur];
}
}
assert(nr == todo_list->nr);
todo_list->alloc = nr;
FREE_AND_NULL(todo_list->items);
todo_list->items = items;
todo_list->nr = nr;
todo_list->alloc = alloc;
}
free(next);