comparison src/vim9compile.c @ 21614:d0128ecd4341 v8.2.1357

patch 8.2.1357: Vim9: cannot assign to / register Commit: https://github.com/vim/vim/commit/658217276fccb5e53cdf4ba0f023bca80e0a8fed Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 2 18:58:54 2020 +0200 patch 8.2.1357: Vim9: cannot assign to / register Problem: Vim9: cannot assign to / register. Solution: Adjust check for assignment.
author Bram Moolenaar <Bram@vim.org>
date Sun, 02 Aug 2020 19:00:03 +0200
parents c495d3e30f4b
children 3c6c52fbc8ea
comparison
equal deleted inserted replaced
21613:9dade08b2bad 21614:d0128ecd4341
5212 lvar_T arg_lvar; 5212 lvar_T arg_lvar;
5213 int has_type = FALSE; 5213 int has_type = FALSE;
5214 int has_index = FALSE; 5214 int has_index = FALSE;
5215 int instr_count = -1; 5215 int instr_count = -1;
5216 5216
5217 p = (*var_start == '&' || *var_start == '$' 5217 if (*var_start == '@')
5218 || *var_start == '@') ? var_start + 1 : var_start; 5218 p = var_start + 2;
5219 p = to_name_end(p, TRUE); 5219 else
5220 {
5221 p = (*var_start == '&' || *var_start == '$')
5222 ? var_start + 1 : var_start;
5223 p = to_name_end(p, TRUE);
5224 }
5220 5225
5221 // "a: type" is declaring variable "a" with a type, not "a:". 5226 // "a: type" is declaring variable "a" with a type, not "a:".
5222 if (is_decl && var_end == var_start + 2 && var_end[-1] == ':') 5227 if (is_decl && var_end == var_start + 2 && var_end[-1] == ':')
5223 --var_end; 5228 --var_end;
5224 if (is_decl && p == var_start + 2 && p[-1] == ':') 5229 if (is_decl && p == var_start + 2 && p[-1] == ':')
5277 type = &t_string; 5282 type = &t_string;
5278 declare_error = is_decl; 5283 declare_error = is_decl;
5279 } 5284 }
5280 else if (*var_start == '@') 5285 else if (*var_start == '@')
5281 { 5286 {
5282 if (!valid_yank_reg(var_start[1], TRUE)) 5287 if (!valid_yank_reg(var_start[1], FALSE) || var_start[1] == '.')
5283 { 5288 {
5284 emsg_invreg(var_start[1]); 5289 emsg_invreg(var_start[1]);
5285 goto theend; 5290 goto theend;
5286 } 5291 }
5287 dest = dest_reg; 5292 dest = dest_reg;
7245 { 7250 {
7246 char_u *var_end; 7251 char_u *var_end;
7247 int oplen; 7252 int oplen;
7248 int heredoc; 7253 int heredoc;
7249 7254
7250 var_end = find_name_end(pskip, NULL, NULL, 7255 if (ea.cmd[0] == '@')
7256 var_end = ea.cmd + 2;
7257 else
7258 var_end = find_name_end(pskip, NULL, NULL,
7251 FNE_CHECK_START | FNE_INCL_BR); 7259 FNE_CHECK_START | FNE_INCL_BR);
7252 oplen = assignment_len(skipwhite(var_end), &heredoc); 7260 oplen = assignment_len(skipwhite(var_end), &heredoc);
7253 if (oplen > 0) 7261 if (oplen > 0)
7254 { 7262 {
7255 size_t len = p - ea.cmd; 7263 size_t len = p - ea.cmd;