From 7d5b8becc342e49e491053ea842e59f82d072001 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Mon, 22 Nov 2021 15:05:46 +0000 Subject: patch 8.2.3645: Vim9: The "no effect" error is not given for all registers Problem: Vim9: The "no effect" error is not given for all registers. Solution: Include any character following '@'. (closes #8779) --- src/ex_eval.c | 24 +++++++++++++++++------- src/testdir/test_vim9_cmd.vim | 29 ++++++++++++++++++++++++++++- src/version.c | 2 ++ 3 files changed, 47 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/ex_eval.c b/src/ex_eval.c index 1f66e336f6..d80500eb0b 100644 --- a/src/ex_eval.c +++ b/src/ex_eval.c @@ -887,22 +887,32 @@ report_discard_pending(int pending, void *value) } } +/* + * Return TRUE if "arg" is only a variable, register or option name. + */ int cmd_is_name_only(char_u *arg) { char_u *p = arg; - char_u *alias; + char_u *alias = NULL; int name_only = FALSE; - if (*p == '&') + if (*p == '@') { ++p; - if (STRNCMP("l:", p, 2) == 0 || STRNCMP("g:", p, 2) == 0) - p += 2; + if (*p != NUL) + ++p; + } + else + { + if (*p == '&') + { + ++p; + if (STRNCMP("l:", p, 2) == 0 || STRNCMP("g:", p, 2) == 0) + p += 2; + } + get_name_len(&p, &alias, FALSE, FALSE); } - else if (*p == '@') - ++p; - get_name_len(&p, &alias, FALSE, FALSE); name_only = ends_excmd2(arg, skipwhite(p)); vim_free(alias); return name_only; diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim index 0fa65d1b28..31f20cb266 100644 --- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -556,7 +556,34 @@ def Test_use_register() @a = 'echo "text"' @a END - CheckDefAndScriptFailure(lines, 'E1207:') + CheckDefAndScriptFailure(lines, 'E1207:', 2) + + lines =<< trim END + @/ = 'pattern' + @/ + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + + lines =<< trim END + &opfunc = 'nothing' + &opfunc + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + &opfunc = '' + + lines =<< trim END + &l:showbreak = 'nothing' + &l:showbreak + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + &l:showbreak = '' + + lines =<< trim END + &g:showbreak = 'nothing' + &g:showbreak + END + CheckDefAndScriptFailure(lines, 'E1207:', 2) + &g:showbreak = '' enddef def Test_environment_use_linebreak() diff --git a/src/version.c b/src/version.c index 67b2634522..d91f522a2f 100644 --- a/src/version.c +++ b/src/version.c @@ -757,6 +757,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3645, /**/ 3644, /**/ -- cgit v1.2.3