summaryrefslogtreecommitdiff
path: root/src/userfunc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/userfunc.c')
-rw-r--r--src/userfunc.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/userfunc.c b/src/userfunc.c
index 6e49c035c..b4b8ccf91 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1712,7 +1712,7 @@ free_all_functions(void)
ufunc_T *fp;
long_u skipped = 0;
long_u todo = 1;
- long_u used;
+ int changed;
// Clean up the current_funccal chain and the funccal stack.
while (current_funccal != NULL)
@@ -1743,9 +1743,9 @@ free_all_functions(void)
++skipped;
else
{
- used = func_hashtab.ht_used;
+ changed = func_hashtab.ht_changed;
func_clear(fp, TRUE);
- if (used != func_hashtab.ht_used)
+ if (changed != func_hashtab.ht_changed)
{
skipped = 0;
break;
@@ -2484,12 +2484,11 @@ untrans_function_name(char_u *name)
static void
list_functions(regmatch_T *regmatch)
{
- long_u used = func_hashtab.ht_used;
- long_u todo = used;
- hashitem_T *ht_array = func_hashtab.ht_array;
+ int changed = func_hashtab.ht_changed;
+ long_u todo = func_hashtab.ht_used;
hashitem_T *hi;
- for (hi = ht_array; todo > 0 && !got_int; ++hi)
+ for (hi = func_hashtab.ht_array; todo > 0 && !got_int; ++hi)
{
if (!HASHITEM_EMPTY(hi))
{
@@ -2504,8 +2503,7 @@ list_functions(regmatch_T *regmatch)
&& vim_regexec(regmatch, fp->uf_name, 0)))
{
list_func_head(fp, FALSE);
- if (used != func_hashtab.ht_used
- || ht_array != func_hashtab.ht_array)
+ if (changed != func_hashtab.ht_changed)
{
emsg(_("E454: function list was modified"));
return;
@@ -3564,6 +3562,7 @@ get_expanded_name(char_u *name, int check)
get_user_func_name(expand_T *xp, int idx)
{
static long_u done;
+ static int changed;
static hashitem_T *hi;
ufunc_T *fp;
@@ -3571,8 +3570,9 @@ get_user_func_name(expand_T *xp, int idx)
{
done = 0;
hi = func_hashtab.ht_array;
+ changed = func_hashtab.ht_changed;
}
- if (done < func_hashtab.ht_used)
+ if (changed == func_hashtab.ht_changed && done < func_hashtab.ht_used)
{
if (done++ > 0)
++hi;