changeset 21907:f4e21796f47d v8.2.1503

patch 8.2.1503: Vim9: error for autocmd defined in :def in legacy script Commit: https://github.com/vim/vim/commit/81e17fbe00fd2ed93b262adc3ba41c86b02e7f46 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Aug 21 21:55:43 2020 +0200 patch 8.2.1503: Vim9: error for autocmd defined in :def in legacy script Problem: Vim9: error for an autocmd defined in a :def function in legacy Vim script. Solution: Don't check the variable type. (closes #6758)
author Bram Moolenaar <Bram@vim.org>
date Fri, 21 Aug 2020 22:00:04 +0200
parents b81818d441f7
children 9f0b9a678704
files src/testdir/test_vim9_script.vim src/version.c src/vim9script.c
diffstat 3 files changed, 23 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3166,6 +3166,23 @@ def Test_vim9_autoload()
   &rtp = save_rtp
 enddef
 
+def Test_script_var_in_autocmd()
+  # using a script variable from an autocommand, defined in a :def function in a
+  # legacy Vim script, cannot check the variable type.
+  let lines =<< trim END
+    let s:counter = 1
+    def s:Func()
+      au! CursorHold
+      au CursorHold * s:counter += 1
+    enddef
+    call s:Func()
+    doau CursorHold
+    call assert_equal(2, s:counter)
+    au! CursorHold
+  END
+  CheckScriptSuccess(lines)
+enddef
+
 def Test_cmdline_win()
   # if the Vim syntax highlighting uses Vim9 constructs they can be used from
   # the command line window.
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1503,
+/**/
     1502,
 /**/
     1501,
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -564,6 +564,10 @@ check_script_var_type(typval_T *dest, ty
     scriptitem_T    *si = SCRIPT_ITEM(current_sctx.sc_sid);
     int		    idx;
 
+    if (si->sn_version != SCRIPT_VERSION_VIM9)
+	// legacy script doesn't store variable types
+	return OK;
+
     // Find the svar_T in sn_var_vals.
     for (idx = 0; idx < si->sn_var_vals.ga_len; ++idx)
     {