mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.2.1644: Vim9: cannot assign 1 and 0 to bool at script level
Problem: Vim9: cannot assign 1 and 0 to bool at script level. Solution: Add the TTFLAG_BOOL_OK flag to the type. Fix name of test function.
This commit is contained in:
@@ -2382,7 +2382,7 @@ func Test_expr_fails()
|
|||||||
|
|
||||||
call CheckDefFailure(["CallMe ('yes')"], 'E476:', 1)
|
call CheckDefFailure(["CallMe ('yes')"], 'E476:', 1)
|
||||||
call CheckScriptFailure(["CallMe ('yes')"], 'E492:', 1)
|
call CheckScriptFailure(["CallMe ('yes')"], 'E492:', 1)
|
||||||
call CheckScriptAndDefFailure(["CallMe2('yes','no')"], 'E1069:', 1)
|
call CheckDefAndScriptFailure(["CallMe2('yes','no')"], 'E1069:', 1)
|
||||||
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:', 1)
|
call CheckDefFailure(["CallMe2('yes' , 'no')"], 'E1068:', 1)
|
||||||
|
|
||||||
call CheckDefFailure(["v:nosuch += 3"], 'E1001:', 1)
|
call CheckDefFailure(["v:nosuch += 3"], 'E1001:', 1)
|
||||||
|
@@ -39,7 +39,7 @@ let g:alist = [7]
|
|||||||
let g:astring = 'text'
|
let g:astring = 'text'
|
||||||
let g:anumber = 123
|
let g:anumber = 123
|
||||||
|
|
||||||
def Test_assignment()
|
def Test_assignment_bool()
|
||||||
let bool1: bool = true
|
let bool1: bool = true
|
||||||
assert_equal(v:true, bool1)
|
assert_equal(v:true, bool1)
|
||||||
let bool2: bool = false
|
let bool2: bool = false
|
||||||
@@ -50,6 +50,25 @@ def Test_assignment()
|
|||||||
let bool4: bool = 1
|
let bool4: bool = 1
|
||||||
assert_equal(1, bool4)
|
assert_equal(1, bool4)
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
def GetFlag(): bool
|
||||||
|
let flag: bool = 1
|
||||||
|
return flag
|
||||||
|
enddef
|
||||||
|
let flag: bool = GetFlag()
|
||||||
|
flag = 0
|
||||||
|
flag = 1
|
||||||
|
END
|
||||||
|
CheckScriptSuccess(lines)
|
||||||
|
CheckDefAndScriptFailure(['let x: bool = 2'], 'E1012:')
|
||||||
|
CheckDefAndScriptFailure(['let x: bool = -1'], 'E1012:')
|
||||||
|
CheckDefAndScriptFailure(['let x: bool = [1]'], 'E1012:')
|
||||||
|
CheckDefAndScriptFailure(['let x: bool = {}'], 'E1012:')
|
||||||
|
CheckDefAndScriptFailure(['let x: bool = "x"'], 'E1012:')
|
||||||
|
enddef
|
||||||
|
|
||||||
|
def Test_assignment()
|
||||||
CheckDefFailure(['let x:string'], 'E1069:')
|
CheckDefFailure(['let x:string'], 'E1069:')
|
||||||
CheckDefFailure(['let x:string = "x"'], 'E1069:')
|
CheckDefFailure(['let x:string = "x"'], 'E1069:')
|
||||||
CheckDefFailure(['let a:string = "x"'], 'E1069:')
|
CheckDefFailure(['let a:string = "x"'], 'E1069:')
|
||||||
@@ -164,8 +183,7 @@ def Test_assignment()
|
|||||||
assert_equal('xxx', &t_TI)
|
assert_equal('xxx', &t_TI)
|
||||||
&t_TI = save_TI
|
&t_TI = save_TI
|
||||||
END
|
END
|
||||||
CheckDefSuccess(lines)
|
CheckDefAndScriptSuccess(lines)
|
||||||
CheckScriptSuccess(['vim9script'] + lines)
|
|
||||||
|
|
||||||
CheckDefFailure(['&t_TI = 123'], 'E1012:')
|
CheckDefFailure(['&t_TI = 123'], 'E1012:')
|
||||||
CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:')
|
CheckScriptFailure(['vim9script', '&t_TI = 123'], 'E928:')
|
||||||
|
@@ -48,7 +48,7 @@ enddef
|
|||||||
|
|
||||||
" Check that a command fails both when used in a :def function and when used
|
" Check that a command fails both when used in a :def function and when used
|
||||||
" in Vim9 script.
|
" in Vim9 script.
|
||||||
def CheckScriptAndDefFailure(lines: list<string>, error: string, lnum = -3)
|
def CheckDefAndScriptFailure(lines: list<string>, error: string, lnum = -3)
|
||||||
CheckDefFailure(lines, error, lnum)
|
CheckDefFailure(lines, error, lnum)
|
||||||
CheckScriptFailure(['vim9script'] + lines, error, lnum + 1)
|
CheckScriptFailure(['vim9script'] + lines, error, lnum + 1)
|
||||||
enddef
|
enddef
|
||||||
|
@@ -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 */
|
||||||
|
/**/
|
||||||
|
1644,
|
||||||
/**/
|
/**/
|
||||||
1643,
|
1643,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -202,11 +202,23 @@ func_type_add_arg_types(
|
|||||||
type_T *
|
type_T *
|
||||||
typval2type(typval_T *tv, garray_T *type_gap)
|
typval2type(typval_T *tv, garray_T *type_gap)
|
||||||
{
|
{
|
||||||
type_T *actual;
|
type_T *type;
|
||||||
type_T *member_type;
|
type_T *member_type;
|
||||||
|
|
||||||
if (tv->v_type == VAR_NUMBER)
|
if (tv->v_type == VAR_NUMBER)
|
||||||
|
{
|
||||||
|
if (tv->vval.v_number == 0 || tv->vval.v_number == 1)
|
||||||
|
{
|
||||||
|
// number 0 and 1 can also be used for bool
|
||||||
|
type = alloc_type(type_gap);
|
||||||
|
if (type == NULL)
|
||||||
|
return NULL;
|
||||||
|
type->tt_type = VAR_NUMBER;
|
||||||
|
type->tt_flags = TTFLAG_BOOL_OK;
|
||||||
|
return type;
|
||||||
|
}
|
||||||
return &t_number;
|
return &t_number;
|
||||||
|
}
|
||||||
if (tv->v_type == VAR_BOOL)
|
if (tv->v_type == VAR_BOOL)
|
||||||
return &t_bool; // not used
|
return &t_bool; // not used
|
||||||
if (tv->v_type == VAR_STRING)
|
if (tv->v_type == VAR_STRING)
|
||||||
@@ -276,13 +288,13 @@ typval2type(typval_T *tv, garray_T *type_gap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
actual = alloc_type(type_gap);
|
type = alloc_type(type_gap);
|
||||||
if (actual == NULL)
|
if (type == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
actual->tt_type = tv->v_type;
|
type->tt_type = tv->v_type;
|
||||||
actual->tt_member = &t_any;
|
type->tt_member = &t_any;
|
||||||
|
|
||||||
return actual;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user