mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
updated for version 7.0-082
This commit is contained in:
parent
68c3174108
commit
ac48dbff43
29
src/eval.c
29
src/eval.c
@ -247,6 +247,17 @@ struct funccall_S
|
||||
funccall_T *caller; /* calling function or NULL */
|
||||
};
|
||||
|
||||
/*
|
||||
* Struct used to make a list of all arguments used in internal functions.
|
||||
*/
|
||||
typedef struct av_list_item_S av_list_item_T;
|
||||
struct av_list_item_S {
|
||||
av_list_item_T *avl_next;
|
||||
typval_T *avl_argvars;
|
||||
};
|
||||
|
||||
av_list_item_T *argvars_list = NULL;
|
||||
|
||||
/*
|
||||
* Info used by a ":for" loop.
|
||||
*/
|
||||
@ -6058,6 +6069,7 @@ garbage_collect()
|
||||
int i;
|
||||
funccall_T *fc;
|
||||
int did_free = FALSE;
|
||||
av_list_item_T *av;
|
||||
#ifdef FEAT_WINDOWS
|
||||
tabpage_T *tp;
|
||||
#endif
|
||||
@ -6094,6 +6106,11 @@ garbage_collect()
|
||||
set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
|
||||
}
|
||||
|
||||
/* arguments for internal functions */
|
||||
for (av = argvars_list; av != NULL; av = av->avl_next)
|
||||
for (i = 0; av->avl_argvars[i].v_type != VAR_UNKNOWN; ++i)
|
||||
set_ref_in_item(&av->avl_argvars[i], copyID);
|
||||
|
||||
/*
|
||||
* 2. Go through the list of dicts and free items without the copyID.
|
||||
*/
|
||||
@ -7537,9 +7554,21 @@ call_func(name, len, rettv, argcount, argvars, firstline, lastline,
|
||||
error = ERROR_TOOMANY;
|
||||
else
|
||||
{
|
||||
av_list_item_T av_list_item;
|
||||
|
||||
/* Add the arguments to the "argvars_list" to avoid the
|
||||
* garbage collector not seeing them. This isn't needed
|
||||
* for user functions, because the arguments are available
|
||||
* in the a: hashtab. */
|
||||
av_list_item.avl_argvars = argvars;
|
||||
av_list_item.avl_next = argvars_list;
|
||||
argvars_list = &av_list_item;
|
||||
|
||||
argvars[argcount].v_type = VAR_UNKNOWN;
|
||||
functions[i].f_func(argvars, rettv);
|
||||
error = ERROR_NONE;
|
||||
|
||||
argvars_list = av_list_item.avl_next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -666,6 +666,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
82,
|
||||
/**/
|
||||
81,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user