]> granicus.if.org Git - vim/commitdiff
patch 8.2.2673: Vim9: script-local funcref can have lower case name v8.2.2673
authorBram Moolenaar <Bram@vim.org>
Sun, 28 Mar 2021 19:14:06 +0000 (21:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 28 Mar 2021 19:14:06 +0000 (21:14 +0200)
Problem:    Vim9: script-local funcref can have lower case name.
Solution:   Require an upper case name.

src/evalvars.c
src/testdir/test_vim9_assign.vim
src/version.c

index cd50ba7fdd384b62d49a01e008e97d79938d752c..e9e893a3f8ab495843e052050b611e932f68bbb2 100644 (file)
@@ -3453,8 +3453,10 @@ var_wrong_func_name(
     char_u *name,    // points to start of variable name
     int    new_var)  // TRUE when creating the variable
 {
-    // Allow for w: b: s: and t:.
-    if (!(vim_strchr((char_u *)"wbst", name[0]) != NULL && name[1] == ':')
+    // Allow for w: b: s: and t:.  In Vim9 script s: is not allowed, because
+    // the name can be used without the s: prefix.
+    if (!((vim_strchr((char_u *)"wbt", name[0]) != NULL
+                   || (!in_vim9script() && name[0] == 's')) && name[1] == ':')
            && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
                                                     ? name[2] : name[0]))
     {
index b9851a77f56af928af2e0bbf5c969f557dde3676..05e65e1ecfd4859fb9fbae2845562bde1d51d079 100644 (file)
@@ -1654,5 +1654,31 @@ def Test_assign_command_modifier()
   CheckDefAndScriptSuccess(lines)
 enddef
 
+def Test_script_funcref_case()
+  var lines =<< trim END
+      var Len = (s: string): number => len(s) + 1
+      assert_equal(5, Len('asdf'))
+  END
+  CheckDefAndScriptSuccess(lines)
+
+  lines =<< trim END
+      var len = (s: string): number => len(s) + 1
+  END
+  CheckDefAndScriptFailure(lines, 'E704:')
+
+  lines =<< trim END
+      vim9script
+      var s:Len = (s: string): number => len(s) + 2
+      assert_equal(6, Len('asdf'))
+  END
+  CheckScriptSuccess(lines)
+
+  lines =<< trim END
+      vim9script
+      var s:len = (s: string): number => len(s) + 1
+  END
+  CheckScriptFailure(lines, 'E704:')
+enddef
+
 
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
index 602fdb622c2bbb56fbdcc453c45f3c30b32452f2..fe274258ed6c6394fc0e8d8d9bb35d2583ac1e78 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2673,
 /**/
     2672,
 /**/