]> granicus.if.org Git - vim/commitdiff
patch 8.2.0975: Vim9: script variable does not accept optional s: prefix v8.2.0975
authorBram Moolenaar <Bram@vim.org>
Sun, 14 Jun 2020 10:50:24 +0000 (12:50 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 14 Jun 2020 10:50:24 +0000 (12:50 +0200)
Problem:    Vim9: script variable does not accept optional s: prefix.
Solution:   Adjust the accepted syntax.

src/testdir/test_vim9_script.vim
src/version.c
src/vim9script.c

index 2fea0de92015d8b0bbfc83473b0e540f54e4e8b9..58b2ba2551aac98775383a8b6fcea0cfed5e5cc7 100644 (file)
@@ -1822,13 +1822,24 @@ def Test_let_declaration()
     g:var_uninit = var
     var = 'text'
     g:var_test = var
+    " prefixing s: is optional
+    s:var = 'prefixed'
+    g:var_prefixed = s:var
+
+    let s:other: number
+    other = 1234
+    g:other_var = other
   END
   CheckScriptSuccess(lines)
   assert_equal('', g:var_uninit)
   assert_equal('text', g:var_test)
+  assert_equal('prefixed', g:var_prefixed)
+  assert_equal(1234, g:other_var)
 
   unlet g:var_uninit
   unlet g:var_test
+  unlet g:var_prefixed
+  unlet g:other_var
 enddef
 
 def Test_let_type_check()
@@ -1838,6 +1849,12 @@ def Test_let_type_check()
     var = 1234
   END
   CheckScriptFailure(lines, 'E1013:')
+
+  lines =<< trim END
+    vim9script
+    let var:string
+  END
+  CheckScriptFailure(lines, 'E1069:')
 enddef
 
 def Test_forward_declaration()
index 1f91903289a487a16abd95f1aadad5e7d2a5af2a..e9a0723bdf6a9a91be7fe68d1c7bd50102e6ab35 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    975,
 /**/
     974,
 /**/
index 650168419cf0a7206c987946b342a38c3fb64187..cdbcb47e742603b22fd5beef770fe770ed82ab05 100644 (file)
@@ -462,15 +462,20 @@ vim9_declare_scriptvar(exarg_T *eap, char_u *arg)
        return arg + STRLEN(arg);
     }
 
-    for (p = arg + 1; *p != NUL && *p != ':' && eval_isnamec(*p);
-                                                                MB_PTR_ADV(p))
-       ;
+    for (p = arg + 1; *p != NUL && eval_isnamec(*p); MB_PTR_ADV(p))
+       if (*p == ':' && p != arg + 1)
+           break;
 
     if (*p != ':')
     {
        emsg(_(e_type_req));
        return arg + STRLEN(arg);
     }
+    if (!VIM_ISWHITE(p[1]))
+    {
+       semsg(_(e_white_after), ":");
+       return arg + STRLEN(arg);
+    }
     name = vim_strnsave(arg, p - arg);
 
     // parse type