To: vim_dev@googlegroups.com Subject: Patch 8.2.0182 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0182 Problem: Min() and max() materialize a range() list. Solution: Compute the result without materializing the list. (#5541) Files: src/evalfunc.c *** ../vim-8.2.0181/src/evalfunc.c 2020-01-29 21:27:17.574406732 +0100 --- src/evalfunc.c 2020-01-30 16:35:02.014749442 +0100 *************** *** 4881,4901 **** listitem_T *li; l = argvars[0].vval.v_list; ! if (l != NULL) { ! range_list_materialize(l); ! li = l->lv_first; ! if (li != NULL) { ! n = tv_get_number_chk(&li->li_tv, &error); ! for (;;) { ! li = li->li_next; ! if (li == NULL) ! break; ! i = tv_get_number_chk(&li->li_tv, &error); ! if (domax ? i > n : i < n) ! n = i; } } } --- 4881,4911 ---- listitem_T *li; l = argvars[0].vval.v_list; ! if (l != NULL && l->lv_len > 0) { ! if (l->lv_first == &range_list_item) { ! if ((l->lv_u.nonmat.lv_stride > 0) ^ domax) ! n = l->lv_u.nonmat.lv_start; ! else ! n = l->lv_u.nonmat.lv_start + (l->lv_len - 1) ! * l->lv_u.nonmat.lv_stride; ! } ! else ! { ! li = l->lv_first; ! if (li != NULL) { ! n = tv_get_number_chk(&li->li_tv, &error); ! for (;;) ! { ! li = li->li_next; ! if (li == NULL) ! break; ! i = tv_get_number_chk(&li->li_tv, &error); ! if (domax ? i > n : i < n) ! n = i; ! } } } } *** ../vim-8.2.0181/src/version.c 2020-01-30 16:27:02.068562909 +0100 --- src/version.c 2020-01-30 16:36:20.114447303 +0100 *************** *** 744,745 **** --- 744,747 ---- { /* Add new patch number below this line */ + /**/ + 182, /**/ -- Shift happens. -- Doppler /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///