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 #6937)
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index bd0a5c8..27dbd30 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3308,6 +3308,14 @@
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
diff --git a/src/version.c b/src/version.c
index f30daf8..503c6ea 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1674,
+/**/
1673,
/**/
1672,
diff --git a/src/vim9script.c b/src/vim9script.c
index 4816315..74d0579 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -548,7 +548,11 @@
// 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);