mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 7.4.1546
Problem: Sticky type checking is more annoying than useful. Solution: Remove the error for changing a variable type.
This commit is contained in:
parent
b4ebf9ae3b
commit
f6f32c38bf
@ -1,4 +1,4 @@
|
|||||||
*eval.txt* For Vim version 7.4. Last change: 2016 Mar 08
|
*eval.txt* For Vim version 7.4. Last change: 2016 Mar 12
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -113,16 +113,8 @@ to Float, printf() for Float to String and float2nr() for Float to Number.
|
|||||||
*E891* *E892* *E893* *E894* *E907* *E911* *E914*
|
*E891* *E892* *E893* *E894* *E907* *E911* *E914*
|
||||||
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 ~
|
||||||
@ -1969,6 +1961,7 @@ islocked( {expr}) Number TRUE if {expr} is locked
|
|||||||
isnan( {expr}) Number TRUE if {expr} is NaN
|
isnan( {expr}) Number TRUE if {expr} is NaN
|
||||||
items( {dict}) List key-value pairs in {dict}
|
items( {dict}) List key-value pairs in {dict}
|
||||||
job_getchannel( {job}) Channel get the channel handle for {job}
|
job_getchannel( {job}) Channel get the channel handle for {job}
|
||||||
|
job_info( {job}) Dict get information about {job}
|
||||||
job_setoptions( {job}, {options}) none set options for {job}
|
job_setoptions( {job}, {options}) none set options for {job}
|
||||||
job_start( {command} [, {options}]) Job start a job
|
job_start( {command} [, {options}]) Job start a job
|
||||||
job_status( {job}) String get the status of {job}
|
job_status( {job}) String get the status of {job}
|
||||||
@ -4473,6 +4466,14 @@ job_getchannel({job}) *job_getchannel()*
|
|||||||
<
|
<
|
||||||
{only available when compiled with the |+job| feature}
|
{only available when compiled with the |+job| feature}
|
||||||
|
|
||||||
|
job_info({job}) *job_info()*
|
||||||
|
Returns a Dictionary with information about {job}:
|
||||||
|
"status" what |job_status()| returns
|
||||||
|
"channel" what |job_getchannel()| returns
|
||||||
|
"exitval" only valid when "status" is "dead"
|
||||||
|
"exit-cb" function to be called on exit
|
||||||
|
"stoponexit" |job-stoponexit|
|
||||||
|
|
||||||
job_setoptions({job}, {options}) *job_setoptions()*
|
job_setoptions({job}, {options}) *job_setoptions()*
|
||||||
Change options for {job}. Supported are:
|
Change options for {job}. Supported are:
|
||||||
"stoponexit" |job-stoponexit|
|
"stoponexit" |job-stoponexit|
|
||||||
|
16
src/eval.c
16
src/eval.c
@ -22091,22 +22091,6 @@ set_var(
|
|||||||
if (var_check_ro(v->di_flags, name, FALSE)
|
if (var_check_ro(v->di_flags, name, FALSE)
|
||||||
|| 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))
|
|
||||||
#ifdef FEAT_FLOAT
|
|
||||||
&& !((v->di_tv.v_type == VAR_NUMBER
|
|
||||||
|| v->di_tv.v_type == VAR_FLOAT)
|
|
||||||
&& (tv->v_type == VAR_NUMBER
|
|
||||||
|| tv->v_type == VAR_FLOAT))
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
{
|
|
||||||
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
|
||||||
|
@ -1,6 +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_backspace_opt.vim
|
source test_backspace_opt.vim
|
||||||
source test_cursor_func.vim
|
source test_cursor_func.vim
|
||||||
source test_delete.vim
|
source test_delete.vim
|
||||||
|
9
src/testdir/test_assign.vim
Normal file
9
src/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
|
@ -743,6 +743,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 */
|
||||||
|
/**/
|
||||||
|
1546,
|
||||||
/**/
|
/**/
|
||||||
1545,
|
1545,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user