To: vim_dev@googlegroups.com Subject: Patch 8.2.1890 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1890 Problem: Vim9: strange error for subtracting from a list. Solution: Check getting a number, not a string. (closes #7167) Files: src/eval.c, src/testdir/test_vim9_expr.vim *** ../vim-8.2.1889/src/eval.c 2020-10-15 21:54:51.788563670 +0200 --- src/eval.c 2020-10-22 19:42:07.586862014 +0200 *************** *** 2679,2684 **** --- 2679,2687 ---- return OK; } + /* + * Make a copy of blob "tv1" and append blob "tv2". + */ void eval_addblob(typval_T *tv1, typval_T *tv2) { *************** *** 2699,2704 **** --- 2702,2710 ---- } } + /* + * Make a copy of list "tv1" and append list "tv2". + */ int eval_addlist(typval_T *tv1, typval_T *tv2) { *************** *** 2777,2784 **** #ifdef FEAT_FLOAT && (op == '.' || rettv->v_type != VAR_FLOAT) #endif ! ) { // For "list + ...", an illegal use of the first operand as // a number cannot be determined before evaluating the 2nd // operand: if this is also a list, all is ok. --- 2783,2792 ---- #ifdef FEAT_FLOAT && (op == '.' || rettv->v_type != VAR_FLOAT) #endif ! && evaluate) { + int error = FALSE; + // For "list + ...", an illegal use of the first operand as // a number cannot be determined before evaluating the 2nd // operand: if this is also a list, all is ok. *************** *** 2786,2792 **** // we know that the first operand needs to be a string or number // without evaluating the 2nd operand. So check before to avoid // side effects after an error. ! if (evaluate && tv_get_string_chk(rettv) == NULL) { clear_tv(rettv); return FAIL; --- 2794,2802 ---- // we know that the first operand needs to be a string or number // without evaluating the 2nd operand. So check before to avoid // side effects after an error. ! if (op != '.') ! tv_get_number_chk(rettv, &error); ! if ((op == '.' && tv_get_string_chk(rettv) == NULL) || error) { clear_tv(rettv); return FAIL; *** ../vim-8.2.1889/src/testdir/test_vim9_expr.vim 2020-10-22 18:59:57.954560128 +0200 --- src/testdir/test_vim9_expr.vim 2020-10-22 19:45:27.166278522 +0200 *************** *** 1128,1134 **** vim9script echo {} - 22 END ! CheckScriptFailure(lines, 'E731:', 2) lines =<< trim END vim9script --- 1128,1146 ---- vim9script echo {} - 22 END ! CheckScriptFailure(lines, 'E728:', 2) ! ! lines =<< trim END ! vim9script ! echo [] - 33 ! END ! CheckScriptFailure(lines, 'E745:', 2) ! ! lines =<< trim END ! vim9script ! echo 0z1234 - 44 ! END ! CheckScriptFailure(lines, 'E974:', 2) lines =<< trim END vim9script *** ../vim-8.2.1889/src/version.c 2020-10-22 18:59:57.958560114 +0200 --- src/version.c 2020-10-22 19:43:10.666678135 +0200 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 1890, /**/ -- hundred-and-one symptoms of being an internet addict: 112. You are amazed that anyone uses a phone without data...let alone hear actual voices. /// 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 ///