1
0
forked from aniani/vim

patch 8.2.3733: Vim9: using "legacy" before range does not work

Problem:    Vim9: using "legacy" before range does not work.
Solution:   Skip over range before parsing command. (closes #9270)
This commit is contained in:
Bram Moolenaar
2021-12-04 11:57:00 +00:00
parent cd2f8f0e00
commit b579f6ebbf
4 changed files with 12 additions and 7 deletions

View File

@@ -1019,6 +1019,11 @@ def Test_range_after_command_modifier()
CheckScriptSuccess(['vim9script', 'silent keepjump :1d _']) CheckScriptSuccess(['vim9script', 'silent keepjump :1d _'])
assert_equal('', getline(1)) assert_equal('', getline(1))
bwipe! bwipe!
var lines =<< trim END
legacy /pat/
END
CheckDefExecAndScriptFailure(lines, 'E486: Pattern not found: pat')
enddef enddef
def Test_silent_pattern() def Test_silent_pattern()

View File

@@ -1394,6 +1394,7 @@ produce_cmdmods(char_u *buf, cmdmod_T *cmod, int quote)
#ifdef HAVE_SANDBOX #ifdef HAVE_SANDBOX
{CMOD_SANDBOX, "sandbox"}, {CMOD_SANDBOX, "sandbox"},
#endif #endif
{CMOD_LEGACY, "legacy"},
{0, NULL} {0, NULL}
}; };

View File

@@ -753,6 +753,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 */
/**/
3733,
/**/ /**/
3732, 3732,
/**/ /**/

View File

@@ -9903,15 +9903,15 @@ compile_def_function(
* in "$ENV->func()" the "$" is not a range * in "$ENV->func()" the "$" is not a range
*/ */
cmd = ea.cmd; cmd = ea.cmd;
if (!(local_cmdmod.cmod_flags & CMOD_LEGACY) if ((*cmd != '$' || starts_with_colon)
&& (*cmd != '$' || starts_with_colon)
&& (starts_with_colon || !(*cmd == '\'' && (starts_with_colon || !(*cmd == '\''
|| (cmd[0] == cmd[1] && (*cmd == '+' || *cmd == '-'))))) || (cmd[0] == cmd[1] && (*cmd == '+' || *cmd == '-')))))
{ {
ea.cmd = skip_range(ea.cmd, TRUE, NULL); ea.cmd = skip_range(ea.cmd, TRUE, NULL);
if (ea.cmd > cmd) if (ea.cmd > cmd)
{ {
if (!starts_with_colon) if (!starts_with_colon
&& !(local_cmdmod.cmod_flags & CMOD_LEGACY))
{ {
semsg(_(e_colon_required_before_range_str), cmd); semsg(_(e_colon_required_before_range_str), cmd);
goto erret; goto erret;
@@ -9920,11 +9920,8 @@ compile_def_function(
if (ends_excmd2(line, ea.cmd)) if (ends_excmd2(line, ea.cmd))
{ {
// A range without a command: jump to the line. // A range without a command: jump to the line.
line = skipwhite(line);
while (*line == ':')
++line;
generate_EXEC(&cctx, ISN_EXECRANGE, generate_EXEC(&cctx, ISN_EXECRANGE,
vim_strnsave(line, ea.cmd - line)); vim_strnsave(cmd, ea.cmd - cmd));
line = ea.cmd; line = ea.cmd;
goto nextline; goto nextline;
} }