]> granicus.if.org Git - vim/commitdiff
patch 8.2.2540: Vim9: no error for using script var name for argument v8.2.2540
authorBram Moolenaar <Bram@vim.org>
Sun, 21 Feb 2021 21:20:24 +0000 (22:20 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 21 Feb 2021 21:20:24 +0000 (22:20 +0100)
Problem:    Vim9: no error for using script var name for argument.
Solution:   Check for this error. (closes #7868)

src/proto/vim9compile.pro
src/testdir/test_vim9_func.vim
src/userfunc.c
src/version.c
src/vim9compile.c

index 04c3c5efda4b2b6319d750b962b4d419a5a732f7..410910f001966a5fd09ea26591e0f1849a8b0bcd 100644 (file)
@@ -1,4 +1,5 @@
 /* vim9compile.c */
+int script_var_exists(char_u *name, size_t len, int vim9script, cctx_T *cctx);
 int check_defined(char_u *p, size_t len, cctx_T *cctx);
 int check_compare_types(exprtype_T type, typval_T *tv1, typval_T *tv2);
 int use_typecheck(type_T *actual, type_T *expected);
index c24d32f93382ab504d9d0689590eaa69c5f4d8b2..05becd72c2431dd81a6f9d77a85bdaa2e8e9c0f4 100644 (file)
@@ -589,6 +589,15 @@ def Test_call_wrong_args()
   END
   CheckScriptFailure(lines, 'E1013: Argument 1: type mismatch, expected string but got list<unknown>', 5)
 
+  lines =<< trim END
+    vim9script
+    var name = 'piet'
+    def FuncOne(name: string)
+      echo nr
+    enddef
+  END
+  CheckScriptFailure(lines, 'E1054:')
+
   lines =<< trim END
     vim9script
     def FuncOne(nr: number)
index 450582c4f8e8d34fa4dd1cd18875067a24f2ce57..8579c3b3864a4fd454b180704573ecf156cf5ef4 100644 (file)
@@ -80,6 +80,14 @@ one_function_arg(
            semsg(_("E125: Illegal argument: %s"), arg);
        return arg;
     }
+
+    // Vim9 script: cannot use script var name for argument.
+    if (argtypes != NULL && script_var_exists(arg, p - arg, FALSE, NULL) == OK)
+    {
+       semsg(_(e_variable_already_declared_in_script), arg);
+       return arg;
+    }
+
     if (newargs != NULL && ga_grow(newargs, 1) == FAIL)
        return arg;
     if (newargs != NULL)
index b096340cfa5bea7d251394912f666d59cca18895..25ea70bee61ac51eacae4d6f0669e90646571574 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2540,
 /**/
     2539,
 /**/
index c9591ad7b7434fa79b27436424e105f23471b0ac..0be2b29d8b7a40c02f9d7b0523b8806a695438a9 100644 (file)
@@ -337,7 +337,7 @@ script_is_vim9()
  * "cctx" is NULL at the script level.
  * Returns OK or FAIL.
  */
-    static int
+    int
 script_var_exists(char_u *name, size_t len, int vim9script, cctx_T *cctx)
 {
     int                    is_vim9_script;