]> granicus.if.org Git - vim/commitdiff
patch 8.2.2291: Vim9: cannot use "null" for v:null v8.2.2291
authorBram Moolenaar <Bram@vim.org>
Sun, 3 Jan 2021 20:53:53 +0000 (21:53 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 3 Jan 2021 20:53:53 +0000 (21:53 +0100)
Problem:    Vim9: cannot use "null" for v:null.
Solution:   Support "null" like "true" and "false". (closes #7495)

runtime/doc/vim9.txt
src/evalvars.c
src/testdir/test_vim9_expr.vim
src/version.c
src/vim9compile.c

index e13863a0299bc7a3c8af6a17342ecbdf7646af06..b30db0b8691643099fe19c220cb03a3b2d0f5176 100644 (file)
@@ -1,4 +1,4 @@
-*vim9.txt*     For Vim version 8.2.  Last change: 2021 Jan 02
+*vim9.txt*     For Vim version 8.2.  Last change: 2021 Jan 03
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -640,11 +640,11 @@ always converted to string: >
 
 Simple types are string, float, special and bool.  For other types |string()|
 can be used.
-                                                       *false* *true*
-In Vim9 script one can use "true" for v:true and "false" for v:false.  When
-converting a boolean to a string "false" and "true" are used, not "v:false"
-and "v:true" like in legacy script.  "v:none" and "v:null" are not changed,
-they are only used in JSON.
+                                                       *false* *true* *null*
+In Vim9 script one can use "true" for v:true, "false" for v:false and "null"
+for v:null.  When converting a boolean to a string "false" and "true" are
+used, not "v:false" and "v:true" like in legacy script.  "v:none" is not
+changed, it is only used in JSON and has no equivalent in other languages.
 
 Indexing a string with [idx] or [idx, idx] uses character indexes instead of
 byte indexes. Example: >
index c6b03e99389f6b08cfd0dcd9b85f384265625a5e..42ff828a549f3bef306c0597f03f49565fa09072 100644 (file)
@@ -2072,8 +2072,8 @@ get_var_special_name(int nr)
     {
        case VVAL_FALSE: return in_vim9script() ? "false" : "v:false";
        case VVAL_TRUE:  return in_vim9script() ? "true" : "v:true";
+       case VVAL_NULL:  return in_vim9script() ? "null" : "v:null";
        case VVAL_NONE:  return "v:none";
-       case VVAL_NULL:  return "v:null";
     }
     internal_error("get_var_special_name()");
     return "42";
index d22ece29dc222ea049b2f93038e57f874dae2ca3..e613f106bbbc75ce62cb42524617c5547fe290f0 100644 (file)
@@ -511,6 +511,8 @@ def Test_expr4_equal()
       assert_equal(true, v:none == v:none)
       assert_equal(false, v:none == v:null)
       assert_equal(true, g:anone == v:none)
+      assert_equal(true, null == v:null)
+      assert_equal(true, null == g:anull)
       assert_equal(false, v:none == g:anull)
 
       var nr0 = 0
@@ -1063,7 +1065,7 @@ def Test_expr5()
 
       assert_equal('atrue', 'a' .. true)
       assert_equal('afalse', 'a' .. false)
-      assert_equal('av:null', 'a' .. v:null)
+      assert_equal('anull', 'a' .. v:null)
       assert_equal('av:none', 'a' .. v:none)
       if has('float')
         assert_equal('a0.123', 'a' .. 0.123)
@@ -1657,6 +1659,7 @@ def Test_expr7_special()
       assert_equal(false, f)
 
       assert_equal(g:special_null, v:null)
+      assert_equal(g:special_null, null)
       assert_equal(g:special_none, v:none)
   END
   CheckDefAndScriptSuccess(lines)
index 55853654441a90f5b7a8d8bbcb3839a3b782c800..4a42d490958b370a56955d7b8b40b93d93189073 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2291,
 /**/
     2290,
 /**/
index 412f0c96cc10575db912cf4b4d9a3ed1055452a4..3eae641f295be365c72da5904bd4c3ab043ed46b 100644 (file)
@@ -3967,6 +3967,20 @@ compile_expr7(
                        ret = NOTDONE;
                    break;
 
+       /*
+        * "null" constant
+        */
+       case 'n':   if (STRNCMP(*arg, "null", 4) == 0
+                                                  && !eval_isnamec((*arg)[5]))
+                   {
+                       *arg += 4;
+                       rettv->v_type = VAR_SPECIAL;
+                       rettv->vval.v_number = VVAL_NULL;
+                   }
+                   else
+                       ret = NOTDONE;
+                   break;
+
        /*
         * List: [expr, expr]
         */
@@ -5006,6 +5020,7 @@ assignment_len(char_u *p, int *heredoc)
 static char *reserved[] = {
     "true",
     "false",
+    "null",
     NULL
 };