forked from aniani/vim
patch 8.2.1224: Vim9: arguments from partial are not used
Problem: Vim9: arguments from partial are not used. Solution: Put the partial arguments on the stack. (closes #6460)
This commit is contained in:
parent
e30f64b4b5
commit
a90afb9a59
@ -1055,5 +1055,23 @@ def Test_closure_in_map()
|
||||
delete('XclosureDir', 'rf')
|
||||
enddef
|
||||
|
||||
def Test_partial_call()
|
||||
let Xsetlist = function('setloclist', [0])
|
||||
Xsetlist([], ' ', {'title': 'test'})
|
||||
assert_equal({'title': 'test'}, getloclist(0, {'title': 1}))
|
||||
|
||||
Xsetlist = function('setloclist', [0, [], ' '])
|
||||
Xsetlist({'title': 'test'})
|
||||
assert_equal({'title': 'test'}, getloclist(0, {'title': 1}))
|
||||
|
||||
Xsetlist = function('setqflist')
|
||||
Xsetlist([], ' ', {'title': 'test'})
|
||||
assert_equal({'title': 'test'}, getqflist({'title': 1}))
|
||||
|
||||
Xsetlist = function('setqflist', [[], ' '])
|
||||
Xsetlist({'title': 'test'})
|
||||
assert_equal({'title': 'test'}, getqflist({'title': 1}))
|
||||
enddef
|
||||
|
||||
|
||||
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
|
||||
|
@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1224,
|
||||
/**/
|
||||
1223,
|
||||
/**/
|
||||
|
@ -575,14 +575,32 @@ call_by_name(char_u *name, int argcount, ectx_T *ectx, isn_T *iptr)
|
||||
}
|
||||
|
||||
static int
|
||||
call_partial(typval_T *tv, int argcount, ectx_T *ectx)
|
||||
call_partial(typval_T *tv, int argcount_arg, ectx_T *ectx)
|
||||
{
|
||||
int argcount = argcount_arg;
|
||||
char_u *name = NULL;
|
||||
int called_emsg_before = called_emsg;
|
||||
|
||||
if (tv->v_type == VAR_PARTIAL)
|
||||
{
|
||||
partial_T *pt = tv->vval.v_partial;
|
||||
partial_T *pt = tv->vval.v_partial;
|
||||
int i;
|
||||
|
||||
if (pt->pt_argc > 0)
|
||||
{
|
||||
// Make space for arguments from the partial, shift the "argcount"
|
||||
// arguments up.
|
||||
if (ga_grow(&ectx->ec_stack, pt->pt_argc) == FAIL)
|
||||
return FAIL;
|
||||
for (i = 1; i <= argcount; ++i)
|
||||
*STACK_TV_BOT(-i + pt->pt_argc) = *STACK_TV_BOT(-i);
|
||||
ectx->ec_stack.ga_len += pt->pt_argc;
|
||||
argcount += pt->pt_argc;
|
||||
|
||||
// copy the arguments from the partial onto the stack
|
||||
for (i = 0; i < pt->pt_argc; ++i)
|
||||
copy_tv(&pt->pt_argv[i], STACK_TV_BOT(-argcount + i));
|
||||
}
|
||||
|
||||
if (pt->pt_func != NULL)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user