Mercurial > vim
comparison 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 |
comparison
equal
deleted
inserted
replaced
19228:6db2a20db2c3 | 19229:d776967d0f0d |
---|---|
124 int i; | 124 int i; |
125 | 125 |
126 l->lv_len = count; | 126 l->lv_len = count; |
127 l->lv_with_items = count; | 127 l->lv_with_items = count; |
128 l->lv_first = li; | 128 l->lv_first = li; |
129 l->lv_last = li + count - 1; | 129 l->lv_u.mat.lv_last = li + count - 1; |
130 for (i = 0; i < count; ++i) | 130 for (i = 0; i < count; ++i) |
131 { | 131 { |
132 if (i == 0) | 132 if (i == 0) |
133 li->li_prev = NULL; | 133 li->li_prev = NULL; |
134 else | 134 else |
404 return NULL; | 404 return NULL; |
405 | 405 |
406 range_list_materialize(l); | 406 range_list_materialize(l); |
407 | 407 |
408 // When there is a cached index may start search from there. | 408 // When there is a cached index may start search from there. |
409 if (l->lv_idx_item != NULL) | 409 if (l->lv_u.mat.lv_idx_item != NULL) |
410 { | 410 { |
411 if (n < l->lv_idx / 2) | 411 if (n < l->lv_u.mat.lv_idx / 2) |
412 { | 412 { |
413 // closest to the start of the list | 413 // closest to the start of the list |
414 item = l->lv_first; | 414 item = l->lv_first; |
415 idx = 0; | 415 idx = 0; |
416 } | 416 } |
417 else if (n > (l->lv_idx + l->lv_len) / 2) | 417 else if (n > (l->lv_u.mat.lv_idx + l->lv_len) / 2) |
418 { | 418 { |
419 // closest to the end of the list | 419 // closest to the end of the list |
420 item = l->lv_last; | 420 item = l->lv_u.mat.lv_last; |
421 idx = l->lv_len - 1; | 421 idx = l->lv_len - 1; |
422 } | 422 } |
423 else | 423 else |
424 { | 424 { |
425 // closest to the cached index | 425 // closest to the cached index |
426 item = l->lv_idx_item; | 426 item = l->lv_u.mat.lv_idx_item; |
427 idx = l->lv_idx; | 427 idx = l->lv_u.mat.lv_idx; |
428 } | 428 } |
429 } | 429 } |
430 else | 430 else |
431 { | 431 { |
432 if (n < l->lv_len / 2) | 432 if (n < l->lv_len / 2) |
436 idx = 0; | 436 idx = 0; |
437 } | 437 } |
438 else | 438 else |
439 { | 439 { |
440 // closest to the end of the list | 440 // closest to the end of the list |
441 item = l->lv_last; | 441 item = l->lv_u.mat.lv_last; |
442 idx = l->lv_len - 1; | 442 idx = l->lv_len - 1; |
443 } | 443 } |
444 } | 444 } |
445 | 445 |
446 while (n > idx) | 446 while (n > idx) |
455 item = item->li_prev; | 455 item = item->li_prev; |
456 --idx; | 456 --idx; |
457 } | 457 } |
458 | 458 |
459 // cache the used index | 459 // cache the used index |
460 l->lv_idx = idx; | 460 l->lv_u.mat.lv_idx = idx; |
461 l->lv_idx_item = item; | 461 l->lv_u.mat.lv_idx_item = item; |
462 | 462 |
463 return item; | 463 return item; |
464 } | 464 } |
465 | 465 |
466 /* | 466 /* |
489 if (errorp != NULL) | 489 if (errorp != NULL) |
490 *errorp = TRUE; | 490 *errorp = TRUE; |
491 return -1L; | 491 return -1L; |
492 } | 492 } |
493 | 493 |
494 return l->lv_start + n * l->lv_stride; | 494 return l->lv_u.nonmat.lv_start + n * l->lv_u.nonmat.lv_stride; |
495 } | 495 } |
496 | 496 |
497 li = list_find(l, idx); | 497 li = list_find(l, idx); |
498 if (li == NULL) | 498 if (li == NULL) |
499 { | 499 { |
547 */ | 547 */ |
548 void | 548 void |
549 list_append(list_T *l, listitem_T *item) | 549 list_append(list_T *l, listitem_T *item) |
550 { | 550 { |
551 range_list_materialize(l); | 551 range_list_materialize(l); |
552 if (l->lv_last == NULL) | 552 if (l->lv_u.mat.lv_last == NULL) |
553 { | 553 { |
554 // empty list | 554 // empty list |
555 l->lv_first = item; | 555 l->lv_first = item; |
556 l->lv_last = item; | 556 l->lv_u.mat.lv_last = item; |
557 item->li_prev = NULL; | 557 item->li_prev = NULL; |
558 } | 558 } |
559 else | 559 else |
560 { | 560 { |
561 l->lv_last->li_next = item; | 561 l->lv_u.mat.lv_last->li_next = item; |
562 item->li_prev = l->lv_last; | 562 item->li_prev = l->lv_u.mat.lv_last; |
563 l->lv_last = item; | 563 l->lv_u.mat.lv_last = item; |
564 } | 564 } |
565 ++l->lv_len; | 565 ++l->lv_len; |
566 item->li_next = NULL; | 566 item->li_next = NULL; |
567 } | 567 } |
568 | 568 |
708 ni->li_prev = item->li_prev; | 708 ni->li_prev = item->li_prev; |
709 ni->li_next = item; | 709 ni->li_next = item; |
710 if (item->li_prev == NULL) | 710 if (item->li_prev == NULL) |
711 { | 711 { |
712 l->lv_first = ni; | 712 l->lv_first = ni; |
713 ++l->lv_idx; | 713 ++l->lv_u.mat.lv_idx; |
714 } | 714 } |
715 else | 715 else |
716 { | 716 { |
717 item->li_prev->li_next = ni; | 717 item->li_prev->li_next = ni; |
718 l->lv_idx_item = NULL; | 718 l->lv_u.mat.lv_idx_item = NULL; |
719 } | 719 } |
720 item->li_prev = ni; | 720 item->li_prev = ni; |
721 ++l->lv_len; | 721 ++l->lv_len; |
722 } | 722 } |
723 } | 723 } |
844 if (ip == item2) | 844 if (ip == item2) |
845 break; | 845 break; |
846 } | 846 } |
847 | 847 |
848 if (item2->li_next == NULL) | 848 if (item2->li_next == NULL) |
849 l->lv_last = item->li_prev; | 849 l->lv_u.mat.lv_last = item->li_prev; |
850 else | 850 else |
851 item2->li_next->li_prev = item->li_prev; | 851 item2->li_next->li_prev = item->li_prev; |
852 if (item->li_prev == NULL) | 852 if (item->li_prev == NULL) |
853 l->lv_first = item2->li_next; | 853 l->lv_first = item2->li_next; |
854 else | 854 else |
855 item->li_prev->li_next = item2->li_next; | 855 item->li_prev->li_next = item2->li_next; |
856 l->lv_idx_item = NULL; | 856 l->lv_u.mat.lv_idx_item = NULL; |
857 } | 857 } |
858 | 858 |
859 /* | 859 /* |
860 * Return an allocated string with the string representation of a list. | 860 * Return an allocated string with the string representation of a list. |
861 * May return NULL. | 861 * May return NULL. |
1147 list_T *l = &sl->sl_list; | 1147 list_T *l = &sl->sl_list; |
1148 int i; | 1148 int i; |
1149 | 1149 |
1150 memset(sl, 0, sizeof(staticList10_T)); | 1150 memset(sl, 0, sizeof(staticList10_T)); |
1151 l->lv_first = &sl->sl_items[0]; | 1151 l->lv_first = &sl->sl_items[0]; |
1152 l->lv_last = &sl->sl_items[9]; | 1152 l->lv_u.mat.lv_last = &sl->sl_items[9]; |
1153 l->lv_refcount = DO_NOT_FREE_CNT; | 1153 l->lv_refcount = DO_NOT_FREE_CNT; |
1154 l->lv_lock = VAR_FIXED; | 1154 l->lv_lock = VAR_FIXED; |
1155 sl->sl_list.lv_len = 10; | 1155 sl->sl_list.lv_len = 10; |
1156 | 1156 |
1157 for (i = 0; i < 10; ++i) | 1157 for (i = 0; i < 10; ++i) |
1278 vimlist_remove(l, item, item2); | 1278 vimlist_remove(l, item, item2); |
1279 if (rettv_list_alloc(rettv) == OK) | 1279 if (rettv_list_alloc(rettv) == OK) |
1280 { | 1280 { |
1281 l = rettv->vval.v_list; | 1281 l = rettv->vval.v_list; |
1282 l->lv_first = item; | 1282 l->lv_first = item; |
1283 l->lv_last = item2; | 1283 l->lv_u.mat.lv_last = item2; |
1284 item->li_prev = NULL; | 1284 item->li_prev = NULL; |
1285 item2->li_next = NULL; | 1285 item2->li_next = NULL; |
1286 l->lv_len = cnt; | 1286 l->lv_len = cnt; |
1287 } | 1287 } |
1288 } | 1288 } |
1603 ? item_compare : item_compare2); | 1603 ? item_compare : item_compare2); |
1604 | 1604 |
1605 if (!info.item_compare_func_err) | 1605 if (!info.item_compare_func_err) |
1606 { | 1606 { |
1607 // Clear the List and append the items in sorted order. | 1607 // Clear the List and append the items in sorted order. |
1608 l->lv_first = l->lv_last = l->lv_idx_item = NULL; | 1608 l->lv_first = l->lv_u.mat.lv_last |
1609 = l->lv_u.mat.lv_idx_item = NULL; | |
1609 l->lv_len = 0; | 1610 l->lv_len = 0; |
1610 for (i = 0; i < len; ++i) | 1611 for (i = 0; i < len; ++i) |
1611 list_append(l, ptrs[i].item); | 1612 list_append(l, ptrs[i].item); |
1612 } | 1613 } |
1613 } | 1614 } |
1643 li = ptrs[i].item->li_next; | 1644 li = ptrs[i].item->li_next; |
1644 ptrs[i].item->li_next = li->li_next; | 1645 ptrs[i].item->li_next = li->li_next; |
1645 if (li->li_next != NULL) | 1646 if (li->li_next != NULL) |
1646 li->li_next->li_prev = ptrs[i].item; | 1647 li->li_next->li_prev = ptrs[i].item; |
1647 else | 1648 else |
1648 l->lv_last = ptrs[i].item; | 1649 l->lv_u.mat.lv_last = ptrs[i].item; |
1649 list_fix_watch(l, li); | 1650 list_fix_watch(l, li); |
1650 listitem_free(l, li); | 1651 listitem_free(l, li); |
1651 l->lv_len--; | 1652 l->lv_len--; |
1652 } | 1653 } |
1653 } | 1654 } |
2257 && !var_check_lock(l->lv_lock, | 2258 && !var_check_lock(l->lv_lock, |
2258 (char_u *)N_("reverse() argument"), TRUE)) | 2259 (char_u *)N_("reverse() argument"), TRUE)) |
2259 { | 2260 { |
2260 if (l->lv_first == &range_list_item) | 2261 if (l->lv_first == &range_list_item) |
2261 { | 2262 { |
2262 varnumber_T new_start = l->lv_start | 2263 varnumber_T new_start = l->lv_u.nonmat.lv_start |
2263 + (l->lv_len - 1) * l->lv_stride; | 2264 + (l->lv_len - 1) * l->lv_u.nonmat.lv_stride; |
2264 l->lv_end = new_start - (l->lv_end - l->lv_start); | 2265 l->lv_u.nonmat.lv_end = new_start |
2265 l->lv_start = new_start; | 2266 - (l->lv_u.nonmat.lv_end - l->lv_u.nonmat.lv_start); |
2266 l->lv_stride = -l->lv_stride; | 2267 l->lv_u.nonmat.lv_start = new_start; |
2268 l->lv_u.nonmat.lv_stride = -l->lv_u.nonmat.lv_stride; | |
2267 rettv_list_set(rettv, l); | 2269 rettv_list_set(rettv, l); |
2268 return; | 2270 return; |
2269 } | 2271 } |
2270 li = l->lv_last; | 2272 li = l->lv_u.mat.lv_last; |
2271 l->lv_first = l->lv_last = NULL; | 2273 l->lv_first = l->lv_u.mat.lv_last = NULL; |
2272 l->lv_len = 0; | 2274 l->lv_len = 0; |
2273 while (li != NULL) | 2275 while (li != NULL) |
2274 { | 2276 { |
2275 ni = li->li_prev; | 2277 ni = li->li_prev; |
2276 list_append(l, li); | 2278 list_append(l, li); |
2277 li = ni; | 2279 li = ni; |
2278 } | 2280 } |
2279 rettv_list_set(rettv, l); | 2281 rettv_list_set(rettv, l); |
2280 l->lv_idx = l->lv_len - l->lv_idx - 1; | 2282 l->lv_u.mat.lv_idx = l->lv_len - l->lv_u.mat.lv_idx - 1; |
2281 } | 2283 } |
2282 } | 2284 } |
2283 | 2285 |
2284 #endif // defined(FEAT_EVAL) | 2286 #endif // defined(FEAT_EVAL) |