summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-09-13 18:57:47 +0200
committerBram Moolenaar <Bram@vim.org>2020-09-13 18:57:47 +0200
commitf0afd9e18227d3459c888584d0658a1837d2aaf8 (patch)
tree58d6fe28100f18052a7c848f3db0fd592ba8356e
parentb806aa5bd910dba94fbde586f6019b4825813d28 (diff)
patch 8.2.1674: Vim9: internal error when using variable that was not setv8.2.1674
Problem: Vim9: internal error when using variable that was not set. Solution: Give a meaningful error. (closes #6937)
-rw-r--r--src/testdir/test_vim9_script.vim8
-rw-r--r--src/version.c2
-rw-r--r--src/vim9script.c6
3 files changed, 15 insertions, 1 deletions
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index bd0a5c8748..27dbd30d26 100644
--- 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
diff --git a/src/version.c b/src/version.c
index f30daf818b..503c6ead01 100644
--- 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,
diff --git a/src/vim9script.c b/src/vim9script.c
index 48163150c6..74d0579f35 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -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);