mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.1506: Vim9: no error when using a number other than 0 or 1 as bool
Problem: Vim9: no error when using a number other than 0 or 1 as bool. Solution: Check the number is 0 or 1.
This commit is contained in:
@@ -73,7 +73,8 @@ EXTERN char e_const_requires_a_value[]
|
|||||||
INIT(= N_("E1021: const requires a value"));
|
INIT(= N_("E1021: const requires a value"));
|
||||||
EXTERN char e_type_or_initialization_required[]
|
EXTERN char e_type_or_initialization_required[]
|
||||||
INIT(= N_("E1022: type or initialization required"));
|
INIT(= N_("E1022: type or initialization required"));
|
||||||
// E1023 unused
|
EXTERN char e_using_number_as_bool_nr[]
|
||||||
|
INIT(= N_("E1023: Using a Number as a Bool: %d"));
|
||||||
EXTERN char e_using_number_as_string[]
|
EXTERN char e_using_number_as_string[]
|
||||||
INIT(= N_("E1024: Using a Number as a String"));
|
INIT(= N_("E1024: Using a Number as a String"));
|
||||||
EXTERN char e_using_rcurly_outside_if_block_scope[]
|
EXTERN char e_using_rcurly_outside_if_block_scope[]
|
||||||
|
@@ -1389,12 +1389,22 @@ def Test_search()
|
|||||||
new
|
new
|
||||||
setline(1, ['foo', 'bar'])
|
setline(1, ['foo', 'bar'])
|
||||||
let val = 0
|
let val = 0
|
||||||
|
# skip expr returns boolean
|
||||||
assert_equal(2, search('bar', 'W', 0, 0, {-> val == 1}))
|
assert_equal(2, search('bar', 'W', 0, 0, {-> val == 1}))
|
||||||
|
:1
|
||||||
|
assert_equal(0, search('bar', 'W', 0, 0, {-> val == 0}))
|
||||||
|
# skip expr returns number, only 0 and 1 are accepted
|
||||||
|
:1
|
||||||
|
assert_equal(2, search('bar', 'W', 0, 0, {-> 0}))
|
||||||
|
:1
|
||||||
|
assert_equal(0, search('bar', 'W', 0, 0, {-> 1}))
|
||||||
|
assert_fails("search('bar', '', 0, 0, {-> -1})", 'E1023:')
|
||||||
|
assert_fails("search('bar', '', 0, 0, {-> -1})", 'E1023:')
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_readdir()
|
def Test_readdir()
|
||||||
eval expand('.')->readdir({e -> e[0] !=# '.'})
|
eval expand('sautest')->readdir({e -> e[0] !=# '.'})
|
||||||
eval expand('.')->readdirex({e -> e.name[0] !=# '.'})
|
eval expand('sautest')->readdirex({e -> e.name[0] !=# '.'})
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
def Test_setbufvar()
|
def Test_setbufvar()
|
||||||
|
@@ -177,6 +177,12 @@ tv_get_bool_or_number_chk(typval_T *varp, int *denote, int want_bool)
|
|||||||
switch (varp->v_type)
|
switch (varp->v_type)
|
||||||
{
|
{
|
||||||
case VAR_NUMBER:
|
case VAR_NUMBER:
|
||||||
|
if (want_bool && varp->vval.v_number != 0
|
||||||
|
&& varp->vval.v_number != 1)
|
||||||
|
{
|
||||||
|
semsg(_(e_using_number_as_bool_nr), varp->vval.v_number);
|
||||||
|
break;
|
||||||
|
}
|
||||||
return varp->vval.v_number;
|
return varp->vval.v_number;
|
||||||
case VAR_FLOAT:
|
case VAR_FLOAT:
|
||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
@@ -261,13 +267,12 @@ tv_get_number_chk(typval_T *varp, int *denote)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the boolean value of "varp". This is like tv_get_number_chk(),
|
* Get the boolean value of "varp". This is like tv_get_number_chk(),
|
||||||
* but in Vim9 script accepts Number and Bool.
|
* but in Vim9 script accepts Number (0 and 1) and Bool/Special.
|
||||||
*/
|
*/
|
||||||
varnumber_T
|
varnumber_T
|
||||||
tv_get_bool(typval_T *varp)
|
tv_get_bool(typval_T *varp)
|
||||||
{
|
{
|
||||||
return tv_get_bool_or_number_chk(varp, NULL, TRUE);
|
return tv_get_bool_or_number_chk(varp, NULL, TRUE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1506,
|
||||||
/**/
|
/**/
|
||||||
1505,
|
1505,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user