To: vim_dev@googlegroups.com Subject: Patch 8.2.3177 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3177 Problem: Vim9: can not use "for _ in expr" at script level. Solution: Skip assignment if the loop variable is "_". Files: src/eval.c, src/testdir/test_vim9_script.vim *** ../vim-8.2.3176/src/eval.c 2021-07-18 13:42:25.903808826 +0200 --- src/eval.c 2021-07-18 17:01:50.812704196 +0200 *************** *** 1784,1789 **** --- 1784,1791 ---- | ASSIGN_NO_MEMBER_TYPE) : 0); listitem_T *item; + int skip_assign = in_vim9script() && arg[0] == '_' + && !eval_isnamec(arg[1]); if (fi->fi_blob != NULL) { *************** *** 1795,1800 **** --- 1797,1804 ---- tv.v_lock = VAR_FIXED; tv.vval.v_number = blob_get(fi->fi_blob, fi->fi_bi); ++fi->fi_bi; + if (skip_assign) + return TRUE; return ex_let_vars(arg, &tv, TRUE, fi->fi_semicolon, fi->fi_varcount, flag, NULL) == OK; } *************** *** 1812,1818 **** tv.vval.v_string = vim_strnsave(fi->fi_string + fi->fi_byte_idx, len); fi->fi_byte_idx += len; ++fi->fi_bi; ! result = ex_let_vars(arg, &tv, TRUE, fi->fi_semicolon, fi->fi_varcount, flag, NULL) == OK; vim_free(tv.vval.v_string); return result; --- 1816,1825 ---- tv.vval.v_string = vim_strnsave(fi->fi_string + fi->fi_byte_idx, len); fi->fi_byte_idx += len; ++fi->fi_bi; ! if (skip_assign) ! result = TRUE; ! else ! result = ex_let_vars(arg, &tv, TRUE, fi->fi_semicolon, fi->fi_varcount, flag, NULL) == OK; vim_free(tv.vval.v_string); return result; *************** *** 1825,1831 **** { fi->fi_lw.lw_item = item->li_next; ++fi->fi_bi; ! result = (ex_let_vars(arg, &item->li_tv, TRUE, fi->fi_semicolon, fi->fi_varcount, flag, NULL) == OK); } return result; --- 1832,1841 ---- { fi->fi_lw.lw_item = item->li_next; ++fi->fi_bi; ! if (skip_assign) ! result = TRUE; ! else ! result = (ex_let_vars(arg, &item->li_tv, TRUE, fi->fi_semicolon, fi->fi_varcount, flag, NULL) == OK); } return result; *** ../vim-8.2.3176/src/testdir/test_vim9_script.vim 2021-07-15 18:09:45.371406801 +0200 --- src/testdir/test_vim9_script.vim 2021-07-18 17:07:26.696237293 +0200 *************** *** 2557,2562 **** --- 2557,2568 ---- dd.counter = 12 endfor assert_equal([{a: 'Cat', counter: 12}], foo) + + reslist = [] + for _ in range(3) + reslist->add('x') + endfor + assert_equal(['x', 'x', 'x'], reslist) END CheckDefAndScriptSuccess(lines) enddef *** ../vim-8.2.3176/src/version.c 2021-07-18 14:43:39.791940898 +0200 --- src/version.c 2021-07-18 17:02:41.740633258 +0200 *************** *** 757,758 **** --- 757,760 ---- { /* Add new patch number below this line */ + /**/ + 3177, /**/ -- I'm so disorganized my keyboard isn't even in alphabetical order! /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///