To: vim_dev@googlegroups.com Subject: Patch 8.2.0179 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0179 Problem: Still a few places where range() does not work. Solution: Fix using range() causing problems. Files: src/terminal.c, src/testdir/test_functions.vim, src/testdir/test_popupwin.vim, src/popupwin.c, src/tag.c, src/testdir/dumps/Test_popupwin_20.dump, src/testdir/dumps/Test_popupwin_21.dump, src/testdir/dumps/Test_popup_settext_07.dump, src/globals.h *** ../vim-8.2.0178/src/terminal.c 2019-12-05 21:31:25.000000000 +0100 --- src/terminal.c 2020-01-30 12:43:47.210765911 +0100 *************** *** 417,423 **** if ((opt->jo_set & (JO_IN_IO + JO_OUT_IO + JO_ERR_IO)) == (JO_IN_IO + JO_OUT_IO + JO_ERR_IO) || (!(opt->jo_set & JO_OUT_IO) && (opt->jo_set & JO_OUT_BUF)) ! || (!(opt->jo_set & JO_ERR_IO) && (opt->jo_set & JO_ERR_BUF))) { emsg(_(e_invarg)); return NULL; --- 417,427 ---- if ((opt->jo_set & (JO_IN_IO + JO_OUT_IO + JO_ERR_IO)) == (JO_IN_IO + JO_OUT_IO + JO_ERR_IO) || (!(opt->jo_set & JO_OUT_IO) && (opt->jo_set & JO_OUT_BUF)) ! || (!(opt->jo_set & JO_ERR_IO) && (opt->jo_set & JO_ERR_BUF)) ! || (argvar != NULL ! && argvar->v_type == VAR_LIST ! && argvar->vval.v_list != NULL ! && argvar->vval.v_list->lv_first == &range_list_item)) { emsg(_(e_invarg)); return NULL; *************** *** 538,544 **** } else if (argvar->v_type != VAR_LIST || argvar->vval.v_list == NULL ! || argvar->vval.v_list->lv_len < 1 || (cmd = tv_get_string_chk( &argvar->vval.v_list->lv_first->li_tv)) == NULL) cmd = (char_u*)""; --- 542,548 ---- } else if (argvar->v_type != VAR_LIST || argvar->vval.v_list == NULL ! || argvar->vval.v_list->lv_len == 0 || (cmd = tv_get_string_chk( &argvar->vval.v_list->lv_first->li_tv)) == NULL) cmd = (char_u*)""; *************** *** 3763,3771 **** { int n = 0; long_u rgb[16]; ! listitem_T *li = list->lv_first; ! for (; li != NULL && n < 16; li = li->li_next, n++) { char_u *color_name; guicolor_T guicolor; --- 3767,3775 ---- { int n = 0; long_u rgb[16]; ! listitem_T *li; ! for (li = list->lv_first; li != NULL && n < 16; li = li->li_next, n++) { char_u *color_name; guicolor_T guicolor; *************** *** 3800,3805 **** --- 3804,3810 ---- if (var != NULL && (var->di_tv.v_type != VAR_LIST || var->di_tv.vval.v_list == NULL + || var->di_tv.vval.v_list->lv_first == &range_list_item || set_ansi_colors_list(vterm, var->di_tv.vval.v_list) == FAIL)) semsg(_(e_invarg2), "g:terminal_ansi_colors"); } *** ../vim-8.2.0178/src/testdir/test_functions.vim 2020-01-28 20:49:02.288376955 +0100 --- src/testdir/test_functions.vim 2020-01-30 14:46:13.248820418 +0100 *************** *** 1955,1966 **** --- 1955,2003 ---- call setreg('a', range(3)) call assert_equal("0\n1\n2\n", getreg('a')) + " settagstack() + call settagstack(1, #{items : range(4)}) + + " sign_define() + call assert_fails("call sign_define(range(5))", "E715:") + call assert_fails("call sign_placelist(range(5))", "E715:") + + " sign_undefine() + call assert_fails("call sign_undefine(range(5))", "E908:") + + " sign_unplacelist() + call assert_fails("call sign_unplacelist(range(5))", "E715:") + " sort() call assert_equal([0, 1, 2, 3, 4, 5], sort(range(5, 0, -1))) + " 'spellsuggest' + func MySuggest() + return range(3) + endfunc + set spell spellsuggest=expr:MySuggest() + call assert_equal([], spellsuggest('baord', 3)) + set nospell spellsuggest& + " string() call assert_equal('[0, 1, 2, 3, 4]', string(range(5))) + " taglist() with 'tagfunc' + func TagFunc(pattern, flags, info) + return range(10) + endfunc + set tagfunc=TagFunc + call assert_fails("call taglist('asdf')", 'E987:') + set tagfunc= + + " term_start() + if has('terminal') + call assert_fails('call term_start(range(3, 4))', 'E474:') + let g:terminal_ansi_colors = range(16) + call assert_fails('call term_start("ls", #{term_finish: "close"})', 'E475:') + unlet g:terminal_ansi_colors + endif + " type() call assert_equal(v:t_list, type(range(5))) *** ../vim-8.2.0178/src/testdir/test_popupwin.vim 2020-01-23 15:33:31.526017874 +0100 --- src/testdir/test_popupwin.vim 2020-01-30 14:06:25.639470949 +0100 *************** *** 86,92 **** call popup_create('hello padding', #{line: 2, col: 23, padding: []}) call popup_create('hello both', #{line: 2, col: 43, border: [], padding: [], highlight: 'Normal'}) call popup_create('border TL', #{line: 6, col: 3, border: [1, 0, 0, 4]}) ! call popup_create('paddings', #{line: 6, col: 23, padding: [1, 3, 2, 4]}) call popup_create('wrapped longer text', #{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]}) call popup_create('right aligned text', #{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]}) call popup_create('X', #{line: 2, col: 73}) --- 86,92 ---- call popup_create('hello padding', #{line: 2, col: 23, padding: []}) call popup_create('hello both', #{line: 2, col: 43, border: [], padding: [], highlight: 'Normal'}) call popup_create('border TL', #{line: 6, col: 3, border: [1, 0, 0, 4]}) ! call popup_create('paddings', #{line: 6, col: 23, padding: range(1, 4)}) call popup_create('wrapped longer text', #{line: 8, col: 55, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]}) call popup_create('right aligned text', #{line: 11, col: 56, wrap: 0, padding: [0, 3, 0, 3], border: [0, 1, 0, 1]}) call popup_create('X', #{line: 2, col: 73}) *************** *** 180,185 **** --- 180,193 ---- call popup_setoptions(winid, options) call assert_equal(options, popup_getoptions(winid)) + " Check that range() doesn't crash + call popup_setoptions(winid, #{ + \ padding: range(1, 4), + \ border: range(5, 8), + \ borderhighlight: range(4), + \ borderchars: range(8), + \ }) + let winid = popup_create('hello both', #{line: 3, col: 8, border: [], padding: []}) call assert_equal(#{ \ line: 3, *************** *** 883,890 **** --- 891,904 ---- call popup_clear() call assert_fails('call popup_create([#{text: "text", props: ["none"]}], {})', 'E715:') call popup_clear() + call assert_fails('call popup_create([#{text: "text", props: range(3)}], {})', 'E715:') + call popup_clear() call assert_fails('call popup_create("text", #{mask: ["asdf"]})', 'E475:') call popup_clear() + call assert_fails('call popup_create("text", #{mask: range(5)})', 'E475:') + call popup_clear() + call popup_create("text", #{mask: [range(4)]}) + call popup_clear() call assert_fails('call popup_create("text", #{mask: test_null_list()})', 'E475:') call assert_fails('call popup_create("text", #{mapping: []})', 'E745:') call popup_clear() *************** *** 1331,1337 **** normal 3G45|r@ let winid1 = popup_atcursor(['First', 'SeconD'], #{ \ pos: 'topright', ! \ moved: [0, 0, 0], \ }) END call writefile(lines, 'XtestPopupAtcursorPos') --- 1345,1352 ---- normal 3G45|r@ let winid1 = popup_atcursor(['First', 'SeconD'], #{ \ pos: 'topright', ! \ moved: range(3), ! \ mousemoved: range(3), \ }) END call writefile(lines, 'XtestPopupAtcursorPos') *************** *** 2099,2104 **** --- 2114,2123 ---- call term_sendkeys(buf, ":call popup_settext(p, [#{text: 'aaaa'}, #{text: 'bbbb'}, #{text: 'cccc'}])\") call VerifyScreenDump(buf, 'Test_popup_settext_06', {}) + " range() (doesn't work) + call term_sendkeys(buf, ":call popup_settext(p, range(4, 8))\") + call VerifyScreenDump(buf, 'Test_popup_settext_07', {}) + " clean up call StopVimInTerminal(buf) call delete('XtestPopupSetText') *** ../vim-8.2.0178/src/popupwin.c 2020-01-23 15:33:31.526017874 +0100 --- src/popupwin.c 2020-01-30 13:56:29.701991887 +0100 *************** *** 97,102 **** --- 97,104 ---- for (i = 0; i < 4; ++i) array[i] = 1; if (list != NULL) + { + range_list_materialize(list); for (i = 0, li = list->lv_first; i < 4 && i < list->lv_len; ++i, li = li->li_next) { *************** *** 104,109 **** --- 106,112 ---- if (nr >= 0) array[i] = nr > max_val ? max_val : nr; } + } } } } *************** *** 476,481 **** --- 479,487 ---- wp->w_popup_prop_id = dict_get_number(d, (char_u *)"textpropid"); } + /* + * Handle "moved" and "mousemoved" arguments. + */ static void handle_moved_argument(win_T *wp, dictitem_T *di, int mousemoved) { *************** *** 506,516 **** || di->di_tv.vval.v_list->lv_len == 3)) { list_T *l = di->di_tv.vval.v_list; ! listitem_T *li = l->lv_first; int mincol; int maxcol; ! if (di->di_tv.vval.v_list->lv_len == 3) { varnumber_T nr = tv_get_number(&l->lv_first->li_tv); --- 512,524 ---- || di->di_tv.vval.v_list->lv_len == 3)) { list_T *l = di->di_tv.vval.v_list; ! listitem_T *li; int mincol; int maxcol; ! range_list_materialize(l); ! li = l->lv_first; ! if (l->lv_len == 3) { varnumber_T nr = tv_get_number(&l->lv_first->li_tv); *************** *** 748,753 **** --- 756,762 ---- listitem_T *li; int i; + range_list_materialize(list); for (i = 0, li = list->lv_first; i < 4 && i < list->lv_len; ++i, li = li->li_next) { *************** *** 780,785 **** --- 789,796 ---- int i; if (list != NULL) + { + range_list_materialize(list); for (i = 0, li = list->lv_first; i < 8 && i < list->lv_len; ++i, li = li->li_next) { *************** *** 787,792 **** --- 798,804 ---- if (*str != NUL) wp->w_border_char[i] = mb_ptr2char(str); } + } if (list->lv_len == 1) for (i = 1; i < 8; ++i) wp->w_border_char[i] = wp->w_border_char[0]; *************** *** 833,838 **** --- 845,852 ---- ok = FALSE; break; } + else + range_list_materialize(li->li_tv.vval.v_list); } } if (ok) *** ../vim-8.2.0178/src/tag.c 2020-01-29 22:38:41.848961650 +0100 --- src/tag.c 2020-01-30 12:47:42.309820826 +0100 *************** *** 4267,4272 **** --- 4267,4273 ---- taggy_T *tagstack = wp->w_tagstack; int tagstackidx = wp->w_tagstackidx; int tagstacklen = wp->w_tagstacklen; + // delete all the tag stack entries above the current entry while (tagstackidx < tagstacklen) tagstack_clear_entry(&tagstack[--tagstacklen]); *** ../vim-8.2.0178/src/testdir/dumps/Test_popupwin_20.dump 2020-01-06 23:07:44.808998838 +0100 --- src/testdir/dumps/Test_popupwin_20.dump 2020-01-30 13:12:06.932829556 +0100 *************** *** 3,13 **** |3| ||+0#0000001#ffd7ff255|h|e|l@1|o| |b|o|r|d|e|r||| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255|h|e|l@1|o| |p|a|d@1|i|n|g| | +0#0000000#ffffff0@4||| @11||| @16|X+0#0000001#ffd7ff255| +0#0000000#ffffff0 |4| |++0#0000001#ffd7ff255|-@11|+| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4||| |h|e|l@1|o| |b|o|t|h| ||| @17|X+0#0000001#ffd7ff255 |5+0#0000000#ffffff0| @40||| @11||| @17|X+0#0000001#ffd7ff255 ! |6+0#0000000#ffffff0| |++0#0000001#ffd7ff255|-@8| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|+|-@11|+| @18 ! |7| ||+0#0000001#ffd7ff255|b|o|r|d|e|r| |T|L| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@3|p|a|d@1|i|n|g|s| @2| +0#0000000#ffffff0@37 ! |8| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@12||+0#0000001#ffd7ff255| @2|w|r|a|p@1|e|d| |l|o|n|g|e|r| |t|e| @2|| ! |9+0#0000000#ffffff0| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@12||+0#0000001#ffd7ff255| @2|x|t| @17|| ! |1+0#0000000#ffffff0|0| @72 |1@1| @46||+0#0000001#ffd7ff255| @2|r|i|g|h|t| |a|l|i|g|n|e|d| |t|e|x|t| @2|| |1+0#0000000#ffffff0|2| @72 |1|3| @72 --- 3,13 ---- |3| ||+0#0000001#ffd7ff255|h|e|l@1|o| |b|o|r|d|e|r||| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255|h|e|l@1|o| |p|a|d@1|i|n|g| | +0#0000000#ffffff0@4||| @11||| @16|X+0#0000001#ffd7ff255| +0#0000000#ffffff0 |4| |++0#0000001#ffd7ff255|-@11|+| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4||| |h|e|l@1|o| |b|o|t|h| ||| @17|X+0#0000001#ffd7ff255 |5+0#0000000#ffffff0| @40||| @11||| @17|X+0#0000001#ffd7ff255 ! |6+0#0000000#ffffff0| |++0#0000001#ffd7ff255|-@8| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@5|+|-@11|+| @18 ! |7| ||+0#0000001#ffd7ff255|b|o|r|d|e|r| |T|L| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@3|p|a|d@1|i|n|g|s| @1| +0#0000000#ffffff0@38 ! |8| @20| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@13||+0#0000001#ffd7ff255| @2|w|r|a|p@1|e|d| |l|o|n|g|e|r| |t|e| @2|| ! |9+0#0000000#ffffff0| @20| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@13||+0#0000001#ffd7ff255| @2|x|t| @17|| ! |1+0#0000000#ffffff0|0| @19| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@38 |1@1| @46||+0#0000001#ffd7ff255| @2|r|i|g|h|t| |a|l|i|g|n|e|d| |t|e|x|t| @2|| |1+0#0000000#ffffff0|2| @72 |1|3| @72 *** ../vim-8.2.0178/src/testdir/dumps/Test_popupwin_21.dump 2020-01-06 23:07:44.808998838 +0100 --- src/testdir/dumps/Test_popupwin_21.dump 2020-01-30 13:12:08.044825623 +0100 *************** *** 3,13 **** |3| |║+0#0000001#ffd7ff255|h|e|l@1|o| |b|o|r|d|e|r|║| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255|h|e|l@1|o| |p|a|d@1|i|n|g| | +0#0000000#ffffff0@4|║| @11|║| @16|X+0#0000001#ffd7ff255| +0#0000000#ffffff0 |4| |╚+0#0000001#ffd7ff255|═@11|╝| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|║| |h|e|l@1|o| |b|o|t|h| |║| @17|X+0#0000001#ffd7ff255 |5+0#0000000#ffffff0| @40|║| @11|║| @17|X+0#0000001#ffd7ff255 ! |6+0#0000000#ffffff0| |╔+0#0000001#ffd7ff255|═@8| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|╚|═@11|╝| @18 ! |7| |║+0#0000001#ffd7ff255|b|o|r|d|e|r| |T|L| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@3|p|a|d@1|i|n|g|s| @2| +0#0000000#ffffff0@37 ! |8| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@12|║+0#0000001#ffd7ff255| @2|w|r|a|p@1|e|d| |l|o|n|g|e|r| |t|e| @2|║ ! |9+0#0000000#ffffff0| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@12|║+0#0000001#ffd7ff255| @2|x|t| @17|║ ! |1+0#0000000#ffffff0|0| @72 |1@1| @46|║+0#0000001#ffd7ff255| @2|r|i|g|h|t| |a|l|i|g|n|e|d| |t|e|x|t| @2|║ |1+0#0000000#ffffff0|2| @72 |1|3| @72 --- 3,13 ---- |3| |║+0#0000001#ffd7ff255|h|e|l@1|o| |b|o|r|d|e|r|║| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255|h|e|l@1|o| |p|a|d@1|i|n|g| | +0#0000000#ffffff0@4|║| @11|║| @16|X+0#0000001#ffd7ff255| +0#0000000#ffffff0 |4| |╚+0#0000001#ffd7ff255|═@11|╝| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|║| |h|e|l@1|o| |b|o|t|h| |║| @17|X+0#0000001#ffd7ff255 |5+0#0000000#ffffff0| @40|║| @11|║| @17|X+0#0000001#ffd7ff255 ! |6+0#0000000#ffffff0| |╔+0#0000001#ffd7ff255|═@8| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@5|╚|═@11|╝| @18 ! |7| |║+0#0000001#ffd7ff255|b|o|r|d|e|r| |T|L| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@3|p|a|d@1|i|n|g|s| @1| +0#0000000#ffffff0@38 ! |8| @20| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@13|║+0#0000001#ffd7ff255| @2|w|r|a|p@1|e|d| |l|o|n|g|e|r| |t|e| @2|║ ! |9+0#0000000#ffffff0| @20| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@13|║+0#0000001#ffd7ff255| @2|x|t| @17|║ ! |1+0#0000000#ffffff0|0| @19| +0#0000001#ffd7ff255@13| +0#0000000#ffffff0@38 |1@1| @46|║+0#0000001#ffd7ff255| @2|r|i|g|h|t| |a|l|i|g|n|e|d| |t|e|x|t| @2|║ |1+0#0000000#ffffff0|2| @72 |1|3| @72 *** ../vim-8.2.0178/src/testdir/dumps/Test_popup_settext_07.dump 2020-01-30 14:55:15.126725899 +0100 --- src/testdir/dumps/Test_popup_settext_07.dump 2020-01-30 13:49:34.819677537 +0100 *************** *** 0 **** --- 1,10 ---- + > +0&#ffffff0@74 + |~+0#4040ff13&| @73 + |~| @73 + |~| @73 + |~| @35| +0#0000001#ffd7ff255| +0#4040ff13#ffffff0@36 + |~| @73 + |~| @73 + |~| @73 + |~| @73 + |E+0#ffffff16#e000002|7|1|5|:| |D|i|c|t|i|o|n|a|r|y| |r|e|q|u|i|r|e|d| +0#0000000#ffffff0@31|0|,|0|-|1| @8|A|l@1| *** ../vim-8.2.0178/src/globals.h 2020-01-26 19:26:42.790068342 +0100 --- src/globals.h 2020-01-30 12:25:53.303012009 +0100 *************** *** 1798,1804 **** // Only filled for Win32. EXTERN char windowsVersion[20] INIT(= {0}); ! // Used for a non-materialized range() list. EXTERN listitem_T range_list_item; #endif --- 1798,1804 ---- // Only filled for Win32. EXTERN char windowsVersion[20] INIT(= {0}); ! // Used for lv_first in a non-materialized range() list. EXTERN listitem_T range_list_item; #endif *** ../vim-8.2.0178/src/version.c 2020-01-30 11:53:55.950449934 +0100 --- src/version.c 2020-01-30 14:55:01.170781615 +0100 *************** *** 744,745 **** --- 744,747 ---- { /* Add new patch number below this line */ + /**/ + 179, /**/ -- hundred-and-one symptoms of being an internet addict: 18. Your wife drapes a blond wig over your monitor to remind you of what she looks like. /// 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 ///