changeset 22250:dd42235ed626 v8.2.1674

patch 8.2.1674: Vim9: internal error when using variable that was not set Commit: https://github.com/vim/vim/commit/f0afd9e18227d3459c888584d0658a1837d2aaf8 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Sep 13 18:57:47 2020 +0200 patch 8.2.1674: Vim9: internal error when using variable that was not set Problem: Vim9: internal error when using variable that was not set. Solution: Give a meaningful error. (closes https://github.com/vim/vim/issues/6937)
author Bram Moolenaar <Bram@vim.org>
date Sun, 13 Sep 2020 19:00:08 +0200
parents ef6c936e63fb
children 99cf46e7d4bf
files src/testdir/test_vim9_script.vim src/version.c src/vim9script.c
diffstat 3 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3308,6 +3308,14 @@ def Test_invalid_sid()
   delete('Xdidit')
 enddef
 
+def Test_unset_any_variable()
+  let lines =<< trim END
+    let var: any
+    assert_equal(0, var)
+  END
+  CheckDefAndScriptSuccess(lines)
+enddef
+
 " Keep this last, it messes up highlighting.
 def Test_substitute_cmd()
   new
--- 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 */
 /**/
+    1674,
+/**/
     1673,
 /**/
     1672,
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -548,7 +548,11 @@ vim9_declare_scriptvar(exarg_T *eap, cha
 
     // Create the variable with 0/NULL value.
     CLEAR_FIELD(init_tv);
-    init_tv.v_type = type->tt_type;
+    if (type->tt_type == VAR_ANY)
+	// A variable of type "any" is not possible, just use zero instead
+	init_tv.v_type = VAR_NUMBER;
+    else
+	init_tv.v_type = type->tt_type;
     set_var_const(name, type, &init_tv, FALSE, 0);
 
     vim_free(name);