]> granicus.if.org Git - vim/commitdiff
patch 8.2.1674: Vim9: internal error when using variable that was not set v8.2.1674
authorBram Moolenaar <Bram@vim.org>
Sun, 13 Sep 2020 16:57:47 +0000 (18:57 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 13 Sep 2020 16:57:47 +0000 (18:57 +0200)
Problem:    Vim9: internal error when using variable that was not set.
Solution:   Give a meaningful error. (closes #6937)

src/testdir/test_vim9_script.vim
src/version.c
src/vim9script.c

index bd0a5c874884503a20beb55b6448b8a788193817..27dbd30d26413ac0de90df8d820ae25304c60585 100644 (file)
@@ -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
index f30daf818b1249d210dc4fb45acf2f7471dcaaff..503c6ead0196d58fcde0cd8e38495cde7bd63075 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1674,
 /**/
     1673,
 /**/
index 48163150c6cac8c154e03bbf06c9d3a9ae8c4b04..74d0579f35e695d99b8dec7dd54163ae61d0f857 100644 (file)
@@ -548,7 +548,11 @@ vim9_declare_scriptvar(exarg_T *eap, char_u *arg)
 
     // 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);