Mercurial > vim
diff src/list.c @ 19229:d776967d0f0d v8.2.0173
patch 8.2.0173: build fails with old compiler
Commit: https://github.com/vim/vim/commit/0ff6aad393c4130818fb4f49137380f78d7cc882
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Jan 29 21:27:21 2020 +0100
patch 8.2.0173: build fails with old compiler
Problem: Build fails with old compiler.
Solution: Do not use anonymous unions. (John Marriott)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Wed, 29 Jan 2020 21:30:05 +0100 |
parents | 09f01421a356 |
children | 04c164c971a3 |
line wrap: on
line diff
--- a/src/list.c +++ b/src/list.c @@ -126,7 +126,7 @@ list_alloc_with_items(int count) l->lv_len = count; l->lv_with_items = count; l->lv_first = li; - l->lv_last = li + count - 1; + l->lv_u.mat.lv_last = li + count - 1; for (i = 0; i < count; ++i) { if (i == 0) @@ -406,25 +406,25 @@ list_find(list_T *l, long n) range_list_materialize(l); // When there is a cached index may start search from there. - if (l->lv_idx_item != NULL) + if (l->lv_u.mat.lv_idx_item != NULL) { - if (n < l->lv_idx / 2) + if (n < l->lv_u.mat.lv_idx / 2) { // closest to the start of the list item = l->lv_first; idx = 0; } - else if (n > (l->lv_idx + l->lv_len) / 2) + else if (n > (l->lv_u.mat.lv_idx + l->lv_len) / 2) { // closest to the end of the list - item = l->lv_last; + item = l->lv_u.mat.lv_last; idx = l->lv_len - 1; } else { // closest to the cached index - item = l->lv_idx_item; - idx = l->lv_idx; + item = l->lv_u.mat.lv_idx_item; + idx = l->lv_u.mat.lv_idx; } } else @@ -438,7 +438,7 @@ list_find(list_T *l, long n) else { // closest to the end of the list - item = l->lv_last; + item = l->lv_u.mat.lv_last; idx = l->lv_len - 1; } } @@ -457,8 +457,8 @@ list_find(list_T *l, long n) } // cache the used index - l->lv_idx = idx; - l->lv_idx_item = item; + l->lv_u.mat.lv_idx = idx; + l->lv_u.mat.lv_idx_item = item; return item; } @@ -491,7 +491,7 @@ list_find_nr( return -1L; } - return l->lv_start + n * l->lv_stride; + return l->lv_u.nonmat.lv_start + n * l->lv_u.nonmat.lv_stride; } li = list_find(l, idx); @@ -549,18 +549,18 @@ list_idx_of_item(list_T *l, listitem_T * list_append(list_T *l, listitem_T *item) { range_list_materialize(l); - if (l->lv_last == NULL) + if (l->lv_u.mat.lv_last == NULL) { // empty list l->lv_first = item; - l->lv_last = item; + l->lv_u.mat.lv_last = item; item->li_prev = NULL; } else { - l->lv_last->li_next = item; - item->li_prev = l->lv_last; - l->lv_last = item; + l->lv_u.mat.lv_last->li_next = item; + item->li_prev = l->lv_u.mat.lv_last; + l->lv_u.mat.lv_last = item; } ++l->lv_len; item->li_next = NULL; @@ -710,12 +710,12 @@ list_insert(list_T *l, listitem_T *ni, l if (item->li_prev == NULL) { l->lv_first = ni; - ++l->lv_idx; + ++l->lv_u.mat.lv_idx; } else { item->li_prev->li_next = ni; - l->lv_idx_item = NULL; + l->lv_u.mat.lv_idx_item = NULL; } item->li_prev = ni; ++l->lv_len; @@ -846,14 +846,14 @@ vimlist_remove(list_T *l, listitem_T *it } if (item2->li_next == NULL) - l->lv_last = item->li_prev; + l->lv_u.mat.lv_last = item->li_prev; else item2->li_next->li_prev = item->li_prev; if (item->li_prev == NULL) l->lv_first = item2->li_next; else item->li_prev->li_next = item2->li_next; - l->lv_idx_item = NULL; + l->lv_u.mat.lv_idx_item = NULL; } /* @@ -1149,7 +1149,7 @@ init_static_list(staticList10_T *sl) memset(sl, 0, sizeof(staticList10_T)); l->lv_first = &sl->sl_items[0]; - l->lv_last = &sl->sl_items[9]; + l->lv_u.mat.lv_last = &sl->sl_items[9]; l->lv_refcount = DO_NOT_FREE_CNT; l->lv_lock = VAR_FIXED; sl->sl_list.lv_len = 10; @@ -1280,7 +1280,7 @@ list_remove(typval_T *argvars, typval_T { l = rettv->vval.v_list; l->lv_first = item; - l->lv_last = item2; + l->lv_u.mat.lv_last = item2; item->li_prev = NULL; item2->li_next = NULL; l->lv_len = cnt; @@ -1605,7 +1605,8 @@ do_sort_uniq(typval_T *argvars, typval_T if (!info.item_compare_func_err) { // Clear the List and append the items in sorted order. - l->lv_first = l->lv_last = l->lv_idx_item = NULL; + l->lv_first = l->lv_u.mat.lv_last + = l->lv_u.mat.lv_idx_item = NULL; l->lv_len = 0; for (i = 0; i < len; ++i) list_append(l, ptrs[i].item); @@ -1645,7 +1646,7 @@ do_sort_uniq(typval_T *argvars, typval_T if (li->li_next != NULL) li->li_next->li_prev = ptrs[i].item; else - l->lv_last = ptrs[i].item; + l->lv_u.mat.lv_last = ptrs[i].item; list_fix_watch(l, li); listitem_free(l, li); l->lv_len--; @@ -2259,16 +2260,17 @@ f_reverse(typval_T *argvars, typval_T *r { if (l->lv_first == &range_list_item) { - varnumber_T new_start = l->lv_start - + (l->lv_len - 1) * l->lv_stride; - l->lv_end = new_start - (l->lv_end - l->lv_start); - l->lv_start = new_start; - l->lv_stride = -l->lv_stride; + varnumber_T new_start = l->lv_u.nonmat.lv_start + + (l->lv_len - 1) * l->lv_u.nonmat.lv_stride; + l->lv_u.nonmat.lv_end = new_start + - (l->lv_u.nonmat.lv_end - l->lv_u.nonmat.lv_start); + l->lv_u.nonmat.lv_start = new_start; + l->lv_u.nonmat.lv_stride = -l->lv_u.nonmat.lv_stride; rettv_list_set(rettv, l); return; } - li = l->lv_last; - l->lv_first = l->lv_last = NULL; + li = l->lv_u.mat.lv_last; + l->lv_first = l->lv_u.mat.lv_last = NULL; l->lv_len = 0; while (li != NULL) { @@ -2277,7 +2279,7 @@ f_reverse(typval_T *argvars, typval_T *r li = ni; } rettv_list_set(rettv, l); - l->lv_idx = l->lv_len - l->lv_idx - 1; + l->lv_u.mat.lv_idx = l->lv_len - l->lv_u.mat.lv_idx - 1; } }