0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

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)
This commit is contained in:
Bram Moolenaar
2020-09-13 18:57:47 +02:00
parent b806aa5bd9
commit f0afd9e182
3 changed files with 15 additions and 1 deletions

View File

@@ -3308,6 +3308,14 @@ def Test_invalid_sid()
delete('Xdidit') delete('Xdidit')
enddef 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. " Keep this last, it messes up highlighting.
def Test_substitute_cmd() def Test_substitute_cmd()
new new

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1674,
/**/ /**/
1673, 1673,
/**/ /**/

View File

@@ -548,7 +548,11 @@ vim9_declare_scriptvar(exarg_T *eap, char_u *arg)
// Create the variable with 0/NULL value. // Create the variable with 0/NULL value.
CLEAR_FIELD(init_tv); 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); set_var_const(name, type, &init_tv, FALSE, 0);
vim_free(name); vim_free(name);