Mercurial > vim
diff src/vim9compile.c @ 21610:586241ee8096 v8.2.1355
patch 8.2.1355: Vim9: no error using :let for options and registers
Commit: https://github.com/vim/vim/commit/c2ee44cc382d4b097f51ea3251f00fb35493ea4f
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Aug 2 16:59:00 2020 +0200
patch 8.2.1355: Vim9: no error using :let for options and registers
Problem: Vim9: no error using :let for options and registers.
Solution: Give an error. (closes https://github.com/vim/vim/issues/6568)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 02 Aug 2020 17:00:06 +0200 |
parents | d9c45474cac1 |
children | c495d3e30f4b |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -5067,7 +5067,12 @@ vim9_declare_error(char_u *name) case 'w': scope = _("window"); break; case 't': scope = _("tab"); break; case 'v': scope = "v:"; break; - case '$': semsg(_(e_declare_env_var), name); return; + case '$': semsg(_(e_declare_env_var), name); + return; + case '&': semsg(_("E1052: Cannot declare an option: %s"), name); + return; + case '@': semsg(_("E1066: Cannot declare a register: %s"), name); + return; default: return; } semsg(_(e_declare_var), scope, name); @@ -5229,6 +5234,8 @@ compile_assignment(char_u *arg, exarg_T if (cctx->ctx_skip != SKIP_YES) { + int declare_error = FALSE; + if (*var_start == '&') { int cc; @@ -5240,11 +5247,7 @@ compile_assignment(char_u *arg, exarg_T emsg(_(e_const_option)); goto theend; } - if (is_decl) - { - semsg(_("E1052: Cannot declare an option: %s"), var_start); - goto theend; - } + declare_error = is_decl; p = var_start; p = find_option_end(&p, &opt_flags); if (p == NULL) @@ -5272,11 +5275,7 @@ compile_assignment(char_u *arg, exarg_T { dest = dest_env; type = &t_string; - if (is_decl) - { - vim9_declare_error(name); - goto theend; - } + declare_error = is_decl; } else if (*var_start == '@') { @@ -5287,47 +5286,27 @@ compile_assignment(char_u *arg, exarg_T } dest = dest_reg; type = &t_string; - if (is_decl) - { - semsg(_("E1066: Cannot declare a register: %s"), name); - goto theend; - } + declare_error = is_decl; } else if (varlen > 1 && STRNCMP(var_start, "g:", 2) == 0) { dest = dest_global; - if (is_decl) - { - vim9_declare_error(name); - goto theend; - } + declare_error = is_decl; } else if (varlen > 1 && STRNCMP(var_start, "b:", 2) == 0) { dest = dest_buffer; - if (is_decl) - { - vim9_declare_error(name); - goto theend; - } + declare_error = is_decl; } else if (varlen > 1 && STRNCMP(var_start, "w:", 2) == 0) { dest = dest_window; - if (is_decl) - { - vim9_declare_error(name); - goto theend; - } + declare_error = is_decl; } else if (varlen > 1 && STRNCMP(var_start, "t:", 2) == 0) { dest = dest_tab; - if (is_decl) - { - vim9_declare_error(name); - goto theend; - } + declare_error = is_decl; } else if (varlen > 1 && STRNCMP(var_start, "v:", 2) == 0) { @@ -5346,11 +5325,7 @@ compile_assignment(char_u *arg, exarg_T dest = dest_vimvar; vtv = get_vim_var_tv(vimvaridx); type = typval2type_vimvar(vtv, cctx->ctx_type_list); - if (is_decl) - { - vim9_declare_error(name); - goto theend; - } + declare_error = is_decl; } else { @@ -5439,6 +5414,12 @@ compile_assignment(char_u *arg, exarg_T goto theend; } } + + if (declare_error) + { + vim9_declare_error(name); + goto theend; + } } // handle "a:name" as a name, not index "name" on "a"