To: vim_dev@googlegroups.com Subject: Patch 8.2.1263 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.1263 Problem: Vim9: comperators use 'ignorecase' in Vim9 script. Solution: Ignore 'ignorecase'. Use true and false instead of 1 and 0. (closes #6497) Files: src/eval.c, src/typval.c, src/vim9execute.c, src/testdir/test_vim9_expr.vim *** ../vim-8.2.1262/src/eval.c 2020-07-19 14:41:54.625623029 +0200 --- src/eval.c 2020-07-21 21:23:26.689658519 +0200 *************** *** 2413,2425 **** static int eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg) { - typval_T var2; char_u *p; int getnext; int i; exptype_T type = EXPR_UNKNOWN; int len = 2; - int ic; /* * Get the first variable. --- 2413,2423 ---- *************** *** 2472,2477 **** --- 2470,2479 ---- */ if (type != EXPR_UNKNOWN) { + typval_T var2; + int ic; + int vim9script = in_vim9script(); + if (getnext) *arg = eval_next_line(evalarg); *************** *** 2487,2495 **** ic = FALSE; ++len; } ! // nothing appended: use 'ignorecase' else ! ic = p_ic; /* * Get the second variable. --- 2489,2497 ---- ic = FALSE; ++len; } ! // nothing appended: use 'ignorecase' if not in Vim script else ! ic = vim9script ? FALSE : p_ic; /* * Get the second variable. *************** *** 2504,2511 **** { int ret; ! if (in_vim9script() && check_compare_types( ! type, rettv, &var2) == FAIL) { ret = FAIL; clear_tv(rettv); --- 2506,2512 ---- { int ret; ! if (vim9script && check_compare_types(type, rettv, &var2) == FAIL) { ret = FAIL; clear_tv(rettv); *** ../vim-8.2.1262/src/typval.c 2020-07-01 18:29:23.681143435 +0200 --- src/typval.c 2020-07-21 21:26:10.204808451 +0200 *************** *** 790,797 **** } } clear_tv(typ1); ! typ1->v_type = VAR_NUMBER; ! typ1->vval.v_number = n1; return OK; } --- 790,805 ---- } } clear_tv(typ1); ! if (in_vim9script()) ! { ! typ1->v_type = VAR_BOOL; ! typ1->vval.v_number = n1 ? VVAL_TRUE : VVAL_FALSE; ! } ! else ! { ! typ1->v_type = VAR_NUMBER; ! typ1->vval.v_number = n1; ! } return OK; } *** ../vim-8.2.1262/src/vim9execute.c 2020-07-21 20:55:46.873920166 +0200 --- src/vim9execute.c 2020-07-21 21:26:57.984579063 +0200 *************** *** 2017,2025 **** typval_compare(tv1, tv2, exptype, ic); clear_tv(tv2); - tv1->v_type = VAR_BOOL; - tv1->vval.v_number = tv1->vval.v_number - ? VVAL_TRUE : VVAL_FALSE; --ectx.ec_stack.ga_len; } break; --- 2017,2022 ---- *** ../vim-8.2.1262/src/testdir/test_vim9_expr.vim 2020-07-21 20:55:46.873920166 +0200 --- src/testdir/test_vim9_expr.vim 2020-07-21 21:29:45.367828568 +0200 *************** *** 651,657 **** vim9script let var = 0 < 1 ! assert_equal(1, var) END CheckScriptSuccess(lines) --- 651,657 ---- vim9script let var = 0 < 1 ! assert_equal(true, var) END CheckScriptSuccess(lines) *************** *** 659,665 **** vim9script let var = 123 != 123 ! assert_equal(0, var) END CheckScriptSuccess(lines) --- 659,665 ---- vim9script let var = 123 != 123 ! assert_equal(false, var) END CheckScriptSuccess(lines) *************** *** 667,673 **** vim9script let var = 123 == 123 ! assert_equal(1, var) END CheckScriptSuccess(lines) --- 667,673 ---- vim9script let var = 123 == 123 ! assert_equal(true, var) END CheckScriptSuccess(lines) *************** *** 676,682 **** let list = [1, 2, 3] let var = list is list ! assert_equal(1, var) END CheckScriptSuccess(lines) --- 676,682 ---- let list = [1, 2, 3] let var = list is list ! assert_equal(true, var) END CheckScriptSuccess(lines) *************** *** 685,691 **** let myblob = 0z1234 let var = myblob isnot 0z11 ! assert_equal(1, var) END CheckScriptSuccess(lines) --- 685,691 ---- let myblob = 0z1234 let var = myblob isnot 0z11 ! assert_equal(true, var) END CheckScriptSuccess(lines) *************** *** 707,712 **** --- 707,731 ---- echo 123 is 123 END CheckScriptFailure(lines, 'Cannot use "is" with number') + + # check 'ignorecase' not being used + lines =<< trim END + vim9script + set ignorecase + assert_equal(false, 'abc' == 'ABC') + assert_equal(false, 'abc' ==# 'ABC') + assert_equal(true, 'abc' ==? 'ABC') + + assert_equal(true, 'abc' != 'ABC') + assert_equal(true, 'abc' !=# 'ABC') + assert_equal(false, 'abc' !=? 'ABC') + + assert_equal(false, 'abc' =~ 'ABC') + assert_equal(false, 'abc' =~# 'ABC') + assert_equal(true, 'abc' =~? 'ABC') + set noignorecase + END + CheckScriptSuccess(lines) enddef func Test_expr4_fails() *** ../vim-8.2.1262/src/version.c 2020-07-21 21:07:00.720496743 +0200 --- src/version.c 2020-07-21 21:20:57.314330482 +0200 *************** *** 756,757 **** --- 756,759 ---- { /* Add new patch number below this line */ + /**/ + 1263, /**/ -- hundred-and-one symptoms of being an internet addict: 54. You start tilting your head sideways to smile. :-) /// 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 ///