changeset 7718:6ebd8bdf41bc v7.4.1157

commit https://github.com/vim/vim/commit/f95534c3d411084d1b6112fe64f6108bf7acbb92 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 23 21:59:52 2016 +0100 patch 7.4.1157 Problem: type() does not work for v:true, v:none, etc. Solution: Add new type numbers.
author Christian Brabandt <cb@256bit.org>
date Sat, 23 Jan 2016 22:00:05 +0100
parents 9ad4ca70bcea
children fa9ea3fbf917
files src/eval.c src/testdir/test_json.vim src/testdir/test_viml.vim src/version.c
diffstat 4 files changed, 40 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -20157,6 +20157,13 @@ f_type(argvars, rettv)
 #ifdef FEAT_FLOAT
 	case VAR_FLOAT:  n = 5; break;
 #endif
+	case VAR_SPECIAL:
+			 if (argvars[0].vval.v_number == VVAL_FALSE
+				 || argvars[0].vval.v_number == VVAL_TRUE)
+			     n = 6;
+			 else
+			     n = 7;
+			 break;
 	default: EMSG2(_(e_intern2), "f_type()"); n = 0; break;
     }
     rettv->vval.v_number = n;
--- a/src/testdir/test_json.vim
+++ b/src/testdir/test_json.vim
@@ -88,4 +88,18 @@ func Test_decode()
   call assert_equal(s:vard2x, jsondecode(s:jsond2))
 
   call assert_equal(s:varvals, jsondecode(s:jsonvals))
+
+  call assert_equal(v:true, jsondecode('true'))
+  call assert_equal(type(v:true), type(jsondecode('true')))
+  call assert_equal(v:none, jsondecode(''))
+  call assert_equal(type(v:none), type(jsondecode('')))
+  call assert_equal("", jsondecode('""'))
+
+  call assert_fails('call jsondecode("\"")', "E474:")
+  call assert_fails('call jsondecode("{-}")', "E474:")
+  call assert_fails('call jsondecode("blah")', "E474:")
+  call assert_fails('call jsondecode("true blah")', "E474:")
+  call assert_fails('call jsondecode("<foobar>")', "E474:")
+  call assert_fails('call jsondecode("[foobar]")', "E474:")
+  call assert_fails('call jsondecode("{foobar}")', "E474:")
 endfunc
--- a/src/testdir/test_viml.vim
+++ b/src/testdir/test_viml.vim
@@ -922,6 +922,23 @@ func Test_curlies()
 endfunc
 
 "-------------------------------------------------------------------------------
+" Test 91:  using type().					    {{{1
+"-------------------------------------------------------------------------------
+
+func Test_type()
+    call assert_equal(0, type(0))
+    call assert_equal(1, type(""))
+    call assert_equal(2, type(function("tr")))
+    call assert_equal(3, type([]))
+    call assert_equal(4, type({}))
+    call assert_equal(5, type(0.0))
+    call assert_equal(6, type(v:false))
+    call assert_equal(6, type(v:true))
+    call assert_equal(7, type(v:none))
+    call assert_equal(7, type(v:null))
+endfunc
+
+"-------------------------------------------------------------------------------
 " Modelines								    {{{1
 " vim: ts=8 sw=4 tw=80 fdm=marker
 " vim: fdt=substitute(substitute(foldtext(),\ '\\%(^+--\\)\\@<=\\(\\s*\\)\\(.\\{-}\\)\:\ \\%(\"\ \\)\\=\\(Test\ \\d*\\)\:\\s*',\ '\\3\ (\\2)\:\ \\1',\ \"\"),\ '\\(Test\\s*\\)\\(\\d\\)\\D\\@=',\ '\\1\ \\2',\ "")
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1157,
+/**/
     1156,
 /**/
     1155,