changeset 28111:d54541ce3e1b v8.2.4580

patch 8.2.4580: Vim9: incorrect error for shadowing variable Commit: https://github.com/vim/vim/commit/21dc8f1527fc41405b26a26bb0c318c4b7c1b5d4 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Mar 16 17:54:17 2022 +0000 patch 8.2.4580: Vim9: incorrect error for shadowing variable Problem: Vim9: incorrect error for shadowing variable. Solution: Do not pass the context when compiling a referenced function.
author Bram Moolenaar <Bram@vim.org>
date Wed, 16 Mar 2022 19:00:03 +0100
parents 4bcb871d7ccc
children e76b1fa085ca
files src/testdir/test_vim9_func.vim src/version.c src/vim9expr.c
diffstat 3 files changed, 21 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -2999,6 +2999,24 @@ def Test_lambda_arg_shadows_func()
   assert_equal([42], g:Shadowed())
 enddef
 
+def Test_compiling_referenced_func_no_shadow()
+  var lines =<< trim END
+      vim9script
+
+      def InitializeReply(lspserver: dict<any>)
+      enddef
+
+      def ProcessReply(lspserver: dict<any>)
+        var lsp_reply_handlers: dict<func> =
+          { 'initialize': InitializeReply }
+        lsp_reply_handlers['initialize'](lspserver)
+      enddef
+
+      call ProcessReply({})
+  END
+  v9.CheckScriptSuccess(lines)
+enddef
+
 def s:Line_continuation_in_def(dir: string = ''): string
   var path: string = empty(dir)
           \ ? 'empty'
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4580,
+/**/
     4579,
 /**/
     4578,
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -364,7 +364,7 @@ generate_funcref(cctx_T *cctx, char_u *n
     // Need to compile any default values to get the argument types.
     compile_type = get_compile_type(ufunc);
     if (func_needs_compiling(ufunc, compile_type)
-	      && compile_def_function(ufunc, TRUE, compile_type, cctx) == FAIL)
+	      && compile_def_function(ufunc, TRUE, compile_type, NULL) == FAIL)
 	return FAIL;
     return generate_PUSHFUNC(cctx, ufunc->uf_name, ufunc->uf_func_type);
 }