0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.1427: Vim9: cannot use a range with marks in :def function

Problem:    Vim9: cannot use a range with marks in :def function.
Solution:   Parse range after colon. (closes #6686)
This commit is contained in:
Bram Moolenaar
2020-08-12 15:48:55 +02:00
parent a177344dc0
commit 7c5ad34878
3 changed files with 34 additions and 15 deletions

View File

@@ -83,20 +83,37 @@ enddef
def Test_disassemble_exec_expr() def Test_disassemble_exec_expr()
let res = execute('disass s:EditExpand') let res = execute('disass s:EditExpand')
assert_match('<SNR>\d*_EditExpand.*' .. assert_match('<SNR>\d*_EditExpand\_s*' ..
' let filename = "file".*' .. ' let filename = "file"\_s*' ..
'\d PUSHS "file".*' .. '\d PUSHS "file"\_s*' ..
'\d STORE $0.*' .. '\d STORE $0\_s*' ..
' let filenr = 123.*' .. ' let filenr = 123\_s*' ..
'\d STORE 123 in $1.*' .. '\d STORE 123 in $1\_s*' ..
' edit the`=filename``=filenr`.txt.*' .. ' edit the`=filename``=filenr`.txt\_s*' ..
'\d PUSHS "edit the".*' .. '\d PUSHS "edit the"\_s*' ..
'\d LOAD $0.*' .. '\d LOAD $0\_s*' ..
'\d LOAD $1.*' .. '\d LOAD $1\_s*' ..
'\d 2STRING stack\[-1\].*' .. '\d 2STRING stack\[-1\]\_s*' ..
'\d PUSHS ".txt".*' .. '\d\+ PUSHS ".txt"\_s*' ..
'\d EXECCONCAT 4.*' .. '\d\+ EXECCONCAT 4\_s*' ..
'\d PUSHNR 0.*' .. '\d\+ PUSHNR 0\_s*' ..
'\d\+ RETURN',
res)
enddef
def s:YankRange()
norm! m[jjm]
:'[,']yank
enddef
def Test_disassemble_yank_range()
let res = execute('disass s:YankRange')
assert_match('<SNR>\d*_YankRange.*' ..
' norm! m\[jjm\]\_s*' ..
'\d EXEC norm! m\[jjm\]\_s*' ..
' :''\[,''\]yank\_s*' ..
'\d EXEC :''\[,''\]yank\_s*' ..
'\d PUSHNR 0\_s*' ..
'\d RETURN', '\d RETURN',
res) res)
enddef enddef

View File

@@ -754,6 +754,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 */
/**/
1427,
/**/ /**/
1426, 1426,
/**/ /**/

View File

@@ -6567,7 +6567,7 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
* 'text'->func() should not be confused with 'a mark * 'text'->func() should not be confused with 'a mark
*/ */
cmd = ea.cmd; cmd = ea.cmd;
if (*cmd != '\'') if (*cmd != '\'' || starts_with_colon)
{ {
ea.cmd = skip_range(ea.cmd, NULL); ea.cmd = skip_range(ea.cmd, NULL);
if (ea.cmd > cmd && !starts_with_colon) if (ea.cmd > cmd && !starts_with_colon)