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 -- [email protected] -- 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 ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/vim_dev/202007211931.06LJVRIM819801%40masaka.moolenaar.net.