diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-12-19 16:30:44 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-12-19 16:30:44 +0100 |
commit | 03290b8444b69c6d7307755770467bc488384e1a (patch) | |
tree | 7b6b7eaaa41c2f2194a0712f6848fe8209552af6 /src/evalvars.c | |
parent | 1f33e0a7c4cd278158b37f91a2aa44f0bcd1f21a (diff) | |
download | vim-git-03290b8444b69c6d7307755770467bc488384e1a.tar.gz |
patch 8.2.2162: Vim9: Cannot load or store autoload variablesv8.2.2162
Problem: Vim9: Cannot load or store autoload variables.
Solution: Add ISN_LOADAUTO and ISN_STOREAUTO. (closes #7485)
Diffstat (limited to 'src/evalvars.c')
-rw-r--r-- | src/evalvars.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/evalvars.c b/src/evalvars.c index fde80d750..654eeff23 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -3195,8 +3195,10 @@ set_var_const( goto failed; } - // Make sure the variable name is valid. - if (!valid_varname(varname)) + // Make sure the variable name is valid. In Vim9 script an autoload + // variable must be prefixed with "g:". + if (!valid_varname(varname, !vim9script + || STRNCMP(name, "g:", 2) == 0)) goto failed; di = alloc(sizeof(dictitem_T) + STRLEN(varname)); @@ -3349,17 +3351,17 @@ value_check_lock(int lock, char_u *name, int use_gettext) } /* - * Check if a variable name is valid. + * Check if a variable name is valid. When "autoload" is true "#" is allowed. * Return FALSE and give an error if not. */ int -valid_varname(char_u *varname) +valid_varname(char_u *varname, int autoload) { char_u *p; for (p = varname; *p != NUL; ++p) if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p)) - && *p != AUTOLOAD_CHAR) + && !(autoload && *p == AUTOLOAD_CHAR)) { semsg(_(e_illvar), varname); return FALSE; |