mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #5058
This commit is contained in:
commit
77937c4edd
@ -103,17 +103,8 @@ to Float, printf() for Float to String and float2nr() for Float to Number.
|
|||||||
*E891* *E892* *E893* *E894*
|
*E891* *E892* *E893* *E894*
|
||||||
When expecting a Float a Number can also be used, but nothing else.
|
When expecting a Float a Number can also be used, but nothing else.
|
||||||
|
|
||||||
*E706* *sticky-type-checking*
|
*no-type-checking*
|
||||||
You will get an error if you try to change the type of a variable. You need
|
You will not get an error if you try to change the type of a variable.
|
||||||
to |:unlet| it first to avoid this error. String and Number are considered
|
|
||||||
equivalent though, as well are Float and Number. Consider this sequence of
|
|
||||||
commands: >
|
|
||||||
:let l = "string"
|
|
||||||
:let l = 44 " changes type from String to Number
|
|
||||||
:let l = [1, 2, 3] " error! l is still a Number
|
|
||||||
:let l = 4.4 " changes type from Number to Float
|
|
||||||
:let l = "string" " error!
|
|
||||||
|
|
||||||
|
|
||||||
1.2 Function references ~
|
1.2 Function references ~
|
||||||
*Funcref* *E695* *E718*
|
*Funcref* *E695* *E718*
|
||||||
|
@ -18886,19 +18886,6 @@ set_var (
|
|||||||
|| tv_check_lock(v->di_tv.v_lock, name, false)) {
|
|| tv_check_lock(v->di_tv.v_lock, name, false)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (v->di_tv.v_type != tv->v_type
|
|
||||||
&& !((v->di_tv.v_type == VAR_STRING
|
|
||||||
|| v->di_tv.v_type == VAR_NUMBER)
|
|
||||||
&& (tv->v_type == VAR_STRING
|
|
||||||
|| tv->v_type == VAR_NUMBER))
|
|
||||||
&& !((v->di_tv.v_type == VAR_NUMBER
|
|
||||||
|| v->di_tv.v_type == VAR_FLOAT)
|
|
||||||
&& (tv->v_type == VAR_NUMBER
|
|
||||||
|| tv->v_type == VAR_FLOAT))
|
|
||||||
) {
|
|
||||||
EMSG2(_("E706: Variable type mismatch for: %s"), name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle setting internal v: variables separately where needed to
|
// Handle setting internal v: variables separately where needed to
|
||||||
// prevent changing the type.
|
// prevent changing the type.
|
||||||
@ -18908,7 +18895,7 @@ set_var (
|
|||||||
if (copy || tv->v_type != VAR_STRING)
|
if (copy || tv->v_type != VAR_STRING)
|
||||||
v->di_tv.vval.v_string = vim_strsave(get_tv_string(tv));
|
v->di_tv.vval.v_string = vim_strsave(get_tv_string(tv));
|
||||||
else {
|
else {
|
||||||
/* Take over the string to avoid an extra alloc/free. */
|
// Take over the string to avoid an extra alloc/free.
|
||||||
v->di_tv.vval.v_string = tv->vval.v_string;
|
v->di_tv.vval.v_string = tv->vval.v_string;
|
||||||
tv->vval.v_string = NULL;
|
tv->vval.v_string = NULL;
|
||||||
}
|
}
|
||||||
|
@ -33,14 +33,11 @@ SCRIPTS := \
|
|||||||
# Tests using runtest.vim.vim.
|
# Tests using runtest.vim.vim.
|
||||||
# Keep test_alot*.res as the last one, sort the others.
|
# Keep test_alot*.res as the last one, sort the others.
|
||||||
NEW_TESTS = \
|
NEW_TESTS = \
|
||||||
test_cursor_func.res \
|
|
||||||
test_hardcopy.res \
|
test_hardcopy.res \
|
||||||
test_help_tagjump.res \
|
test_help_tagjump.res \
|
||||||
test_langmap.res \
|
test_langmap.res \
|
||||||
test_menu.res \
|
|
||||||
test_syntax.res \
|
test_syntax.res \
|
||||||
test_timers.res \
|
test_timers.res \
|
||||||
test_unlet.res \
|
|
||||||
test_viml.res \
|
test_viml.res \
|
||||||
test_alot.res
|
test_alot.res
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
" A series of tests that can run in one Vim invocation.
|
" A series of tests that can run in one Vim invocation.
|
||||||
" This makes testing go faster, since Vim doesn't need to restart.
|
" This makes testing go faster, since Vim doesn't need to restart.
|
||||||
|
|
||||||
|
source test_assign.vim
|
||||||
|
source test_cursor_func.vim
|
||||||
|
source test_menu.vim
|
||||||
|
source test_unlet.vim
|
||||||
|
9
src/nvim/testdir/test_assign.vim
Normal file
9
src/nvim/testdir/test_assign.vim
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
" Test for assignment
|
||||||
|
|
||||||
|
func Test_no_type_checking()
|
||||||
|
let v = 1
|
||||||
|
let v = [1,2,3]
|
||||||
|
let v = {'a':1, 'b':2}
|
||||||
|
let v = 3.4
|
||||||
|
let v = 'hello'
|
||||||
|
endfunc
|
@ -151,9 +151,9 @@ static int included_patches[] = {
|
|||||||
1551,
|
1551,
|
||||||
1550,
|
1550,
|
||||||
// 1549,
|
// 1549,
|
||||||
// 1548,
|
1548,
|
||||||
// 1547,
|
// 1547,
|
||||||
// 1546,
|
1546,
|
||||||
// 1545 NA
|
// 1545 NA
|
||||||
// 1544 NA
|
// 1544 NA
|
||||||
// 1543 NA
|
// 1543 NA
|
||||||
|
@ -112,29 +112,6 @@ describe('list and dictionary types', function()
|
|||||||
expect('\n101101')
|
expect('\n101101')
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('changing var type should fail', function()
|
|
||||||
source([[
|
|
||||||
lang C
|
|
||||||
" The list from the first test repeated after splitting the tests.
|
|
||||||
let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},]
|
|
||||||
" The dict from the first test repeated after splitting the tests.
|
|
||||||
let d = {'c': 'ccc', '1': 99, '3': 33, '-1': {'a': 1}}
|
|
||||||
try
|
|
||||||
let d = []
|
|
||||||
catch
|
|
||||||
$put =v:exception[:14] . v:exception[-1:-1]
|
|
||||||
endtry
|
|
||||||
try
|
|
||||||
let l = {}
|
|
||||||
catch
|
|
||||||
$put =v:exception[:14] . v:exception[-1:-1]
|
|
||||||
endtry]])
|
|
||||||
expect([[
|
|
||||||
|
|
||||||
Vim(let):E706: d
|
|
||||||
Vim(let):E706: l]])
|
|
||||||
end)
|
|
||||||
|
|
||||||
it('removing items with :unlet', function()
|
it('removing items with :unlet', function()
|
||||||
source([[
|
source([[
|
||||||
lang C
|
lang C
|
||||||
|
@ -61,6 +61,6 @@ describe('v:hlsearch', function()
|
|||||||
0:not highlighted
|
0:not highlighted
|
||||||
1:highlighted
|
1:highlighted
|
||||||
0:not highlighted
|
0:not highlighted
|
||||||
Vim(let):E706:]])
|
Vim(let):E745:]])
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user