To: vim_dev@googlegroups.com Subject: Patch 8.2.0269 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0269 Problem: Vim9: operator after list index does not work. (Yasuhiro Matsumoto) Solution: After indexing a list change the type to the list member type. (closes #5651) Files: src/vim9compile.c, src/testdir/test_vim9_expr.vim *** ../vim-8.2.0268/src/vim9compile.c 2020-02-16 15:03:44.193305731 +0100 --- src/vim9compile.c 2020-02-17 21:06:39.222360747 +0100 *************** *** 2330,2335 **** --- 2330,2338 ---- } else if (**arg == '[') { + garray_T *stack; + type_T **typep; + // list index: list[123] // TODO: more arguments // TODO: dict member dict['name'] *************** *** 2346,2351 **** --- 2349,2362 ---- if (generate_instr_drop(cctx, ISN_INDEX, 1) == FAIL) return FAIL; + stack = &cctx->ctx_type_stack; + typep = ((type_T **)stack->ga_data) + stack->ga_len - 1; + if ((*typep)->tt_type != VAR_LIST && *typep != &t_any) + { + emsg(_(e_listreq)); + return FAIL; + } + *typep = (*typep)->tt_member; } else if (**arg == '.' && (*arg)[1] != '.') { *** ../vim-8.2.0268/src/testdir/test_vim9_expr.vim 2020-01-31 22:12:36.925061271 +0100 --- src/testdir/test_vim9_expr.vim 2020-02-17 21:09:36.041747173 +0100 *************** *** 478,483 **** --- 478,494 ---- assert_equal(2, g:anint % g:alsoint) assert_equal(4, 6 * 4 / 6) + + let x = [2] + let y = [3] + assert_equal(5, x[0] + y[0]) + assert_equal(6, x[0] * y[0]) + if has('float') + let xf = [2.0] + let yf = [3.0] + assert_equal(5.0, xf[0] + yf[0]) + assert_equal(6.0, xf[0] * yf[0]) + endif enddef def Test_expr6_float() *************** *** 538,543 **** --- 549,558 ---- call CheckDefFailure("let x = #{one: 1} / #{two: 2}", 'E1036:') call CheckDefFailure("let x = #{one: 1} % #{two: 2}", 'E1035:') + call CheckDefFailure("let x = 0xff[1]", 'E714:') + if has('float') + call CheckDefFailure("let x = 0.7[1]", 'E714:') + endif endfunc func Test_expr6_float_fails() *** ../vim-8.2.0268/src/version.c 2020-02-17 10:01:20.314906811 +0100 --- src/version.c 2020-02-17 21:11:21.237381971 +0100 *************** *** 744,745 **** --- 744,747 ---- { /* Add new patch number below this line */ + /**/ + 269, /**/ -- You are only young once, but you can stay immature indefinitely. /// 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 ///