mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
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:
@@ -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()
|
||||||
|
@@ -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}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user