changeset 8512:5104f96b6ecf v7.4.1546

commit https://github.com/vim/vim/commit/f6f32c38bf3319144a84a01a154c8c91939e7acf Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 12 19:03:59 2016 +0100 patch 7.4.1546 Problem: Sticky type checking is more annoying than useful. Solution: Remove the error for changing a variable type.
author Christian Brabandt <cb@256bit.org>
date Sat, 12 Mar 2016 19:15:04 +0100
parents 2712bfe5d62e
children 494f16489145
files runtime/doc/eval.txt src/eval.c src/testdir/test_alot.vim src/testdir/test_assign.vim src/version.c
diffstat 5 files changed, 26 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -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
@@ -113,16 +113,8 @@ to Float, printf() for Float to String a
 			*E891* *E892* *E893* *E894* *E907* *E911* *E914*
 When expecting a Float a Number can also be used, but nothing else.
 
-						*E706* *sticky-type-checking*
-You will get an error if you try to change the type of a variable.  You need
-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!
+						*no-type-checking*
+You will not get an error if you try to change the type of a variable.
 
 
 1.2 Function references ~
@@ -1969,6 +1961,7 @@ islocked( {expr})		Number	TRUE if {expr}
 isnan( {expr})			Number  TRUE if {expr} is NaN
 items( {dict})			List	key-value pairs in {dict}
 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_start( {command} [, {options}]) Job	 start a job
 job_status( {job})		String	get the status of {job}
@@ -4473,10 +4466,18 @@ job_getchannel({job})					 *job_getchann
 <
 		{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()*
 		Change options for {job}.  Supported are:
-			"stoponexit"	|job-stoponexit|
-			"exit-cb"	|job-exit-cb|
+		   "stoponexit"	|job-stoponexit|
+		   "exit-cb"	|job-exit-cb|
 
 job_start({command} [, {options}])			*job_start()*
 		Start a job and return a Job object.  Unlike |system()| and
--- a/src/eval.c
+++ b/src/eval.c
@@ -22091,22 +22091,6 @@ set_var(
 	if (var_check_ro(v->di_flags, name, FALSE)
 			       || tv_check_lock(v->di_tv.v_lock, name, FALSE))
 	    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
--- a/src/testdir/test_alot.vim
+++ b/src/testdir/test_alot.vim
@@ -1,6 +1,7 @@
 " A series of tests that can run in one Vim invocation.
 " This makes testing go faster, since Vim doesn't need to restart.
 
+source test_assign.vim
 source test_backspace_opt.vim
 source test_cursor_func.vim
 source test_delete.vim
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_assign.vim
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1546,
+/**/
     1545,
 /**/
     1544,