To: vim_dev@googlegroups.com Subject: Patch 8.2.1127 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1127 Problem: Vim9: getting a dict member may not work. Solution: Clear the dict only after copying the item. (closes #6390) Files: src/vim9execute.c, src/testdir/test_vim9_expr.vim *** ../vim-8.2.1126/src/vim9execute.c 2020-07-01 18:29:23.685143414 +0200 --- src/vim9execute.c 2020-07-04 19:18:47.040316754 +0200 *************** *** 2188,2193 **** --- 2188,2194 ---- { dict_T *dict; dictitem_T *di; + typval_T temp_tv; tv = STACK_TV_BOT(-1); if (tv->v_type != VAR_DICT || tv->vval.v_dict == NULL) *************** *** 2203,2210 **** semsg(_(e_dictkey), iptr->isn_arg.string); goto failed; } ! clear_tv(tv); copy_tv(&di->di_tv, tv); } break; --- 2204,2214 ---- semsg(_(e_dictkey), iptr->isn_arg.string); goto failed; } ! // Clear the dict after getting the item, to avoid that it ! // make the item invalid. ! temp_tv = *tv; copy_tv(&di->di_tv, tv); + clear_tv(&temp_tv); } break; *** ../vim-8.2.1126/src/testdir/test_vim9_expr.vim 2020-07-03 21:09:48.865268894 +0200 --- src/testdir/test_vim9_expr.vim 2020-07-04 19:18:30.620395724 +0200 *************** *** 1133,1138 **** --- 1133,1141 ---- let d: dict = g:dict_one assert_equal(1, d['one']) + # getting the one member should clear the dict after getting the item + assert_equal('one', #{one: 'one'}.one) + call CheckDefFailure(["let x = g:dict_one.#$!"], 'E1002:') call CheckDefExecFailure(["let d: dict", "echo d['a']"], 'E716:') call CheckDefExecFailure(["let d: dict", "d = g:list_empty"], 'E1029: Expected dict but got list') *** ../vim-8.2.1126/src/version.c 2020-07-04 17:39:07.510515698 +0200 --- src/version.c 2020-07-04 19:16:44.636905930 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1127, /**/ -- Hacker: Someone skilled in computer programming (good guy). Cracker: A hacker that uses his skills to crack software (bad guy). /// 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 ///