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 */
|
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.
|
* Info used by a ":for" loop.
|
||||||
*/
|
*/
|
||||||
@ -6058,6 +6069,7 @@ garbage_collect()
|
|||||||
int i;
|
int i;
|
||||||
funccall_T *fc;
|
funccall_T *fc;
|
||||||
int did_free = FALSE;
|
int did_free = FALSE;
|
||||||
|
av_list_item_T *av;
|
||||||
#ifdef FEAT_WINDOWS
|
#ifdef FEAT_WINDOWS
|
||||||
tabpage_T *tp;
|
tabpage_T *tp;
|
||||||
#endif
|
#endif
|
||||||
@ -6094,6 +6106,11 @@ garbage_collect()
|
|||||||
set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
|
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.
|
* 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;
|
error = ERROR_TOOMANY;
|
||||||
else
|
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;
|
argvars[argcount].v_type = VAR_UNKNOWN;
|
||||||
functions[i].f_func(argvars, rettv);
|
functions[i].f_func(argvars, rettv);
|
||||||
error = ERROR_NONE;
|
error = ERROR_NONE;
|
||||||
|
|
||||||
|
argvars_list = av_list_item.avl_next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -666,6 +666,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 */
|
||||||
|
/**/
|
||||||
|
82,
|
||||||
/**/
|
/**/
|
||||||
81,
|
81,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user