summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-07-03 16:33:16 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-03 16:33:16 +0200
commit20cc52832067d22a3cd47dfb0805251228c32e7d (patch)
treeb4a5f253b995a554485e4f12d7641397ace60300
parent9cee4a1c9c69542ccd73bcd2db05920150856361 (diff)
patch 8.2.3089: garbage collection has useless codev8.2.3089
Problem: Garbage collection has useless code. Solution: Bail out when aborting. (closes #8504)
-rw-r--r--src/userfunc.c59
-rw-r--r--src/version.c2
2 files changed, 30 insertions, 31 deletions
diff --git a/src/userfunc.c b/src/userfunc.c
index 06fca0cf01..7e7c0f6f63 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -5478,35 +5478,32 @@ find_var_in_scoped_ht(char_u *name, int no_autoload)
int
set_ref_in_previous_funccal(int copyID)
{
- int abort = FALSE;
funccall_T *fc;
- for (fc = previous_funccal; !abort && fc != NULL; fc = fc->caller)
+ for (fc = previous_funccal; fc != NULL; fc = fc->caller)
{
fc->fc_copyID = copyID + 1;
- abort = abort
- || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1, NULL)
- || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1, NULL)
- || set_ref_in_list_items(&fc->l_varlist, copyID + 1, NULL);
+ if (set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID + 1, NULL)
+ || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID + 1, NULL)
+ || set_ref_in_list_items(&fc->l_varlist, copyID + 1, NULL))
+ return TRUE;
}
- return abort;
+ return FALSE;
}
static int
set_ref_in_funccal(funccall_T *fc, int copyID)
{
- int abort = FALSE;
-
if (fc->fc_copyID != copyID)
{
fc->fc_copyID = copyID;
- abort = abort
- || set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL)
- || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL)
- || set_ref_in_list_items(&fc->l_varlist, copyID, NULL)
- || set_ref_in_func(NULL, fc->func, copyID);
+ if (set_ref_in_ht(&fc->l_vars.dv_hashtab, copyID, NULL)
+ || set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID, NULL)
+ || set_ref_in_list_items(&fc->l_varlist, copyID, NULL)
+ || set_ref_in_func(NULL, fc->func, copyID))
+ return TRUE;
}
- return abort;
+ return FALSE;
}
/*
@@ -5515,19 +5512,19 @@ set_ref_in_funccal(funccall_T *fc, int copyID)
int
set_ref_in_call_stack(int copyID)
{
- int abort = FALSE;
funccall_T *fc;
funccal_entry_T *entry;
- for (fc = current_funccal; !abort && fc != NULL; fc = fc->caller)
- abort = abort || set_ref_in_funccal(fc, copyID);
+ for (fc = current_funccal; fc != NULL; fc = fc->caller)
+ if (set_ref_in_funccal(fc, copyID))
+ return TRUE;
// Also go through the funccal_stack.
- for (entry = funccal_stack; !abort && entry != NULL; entry = entry->next)
- for (fc = entry->top_funccal; !abort && fc != NULL; fc = fc->caller)
- abort = abort || set_ref_in_funccal(fc, copyID);
-
- return abort;
+ for (entry = funccal_stack; entry != NULL; entry = entry->next)
+ for (fc = entry->top_funccal; fc != NULL; fc = fc->caller)
+ if (set_ref_in_funccal(fc, copyID))
+ return TRUE;
+ return FALSE;
}
/*
@@ -5538,7 +5535,6 @@ set_ref_in_functions(int copyID)
{
int todo;
hashitem_T *hi = NULL;
- int abort = FALSE;
ufunc_T *fp;
todo = (int)func_hashtab.ht_used;
@@ -5548,11 +5544,12 @@ set_ref_in_functions(int copyID)
{
--todo;
fp = HI2UF(hi);
- if (!func_name_refcount(fp->uf_name))
- abort = abort || set_ref_in_func(NULL, fp, copyID);
+ if (!func_name_refcount(fp->uf_name)
+ && set_ref_in_func(NULL, fp, copyID))
+ return TRUE;
}
}
- return abort;
+ return FALSE;
}
/*
@@ -5562,12 +5559,12 @@ set_ref_in_functions(int copyID)
set_ref_in_func_args(int copyID)
{
int i;
- int abort = FALSE;
for (i = 0; i < funcargs.ga_len; ++i)
- abort = abort || set_ref_in_item(((typval_T **)funcargs.ga_data)[i],
- copyID, NULL, NULL);
- return abort;
+ if (set_ref_in_item(((typval_T **)funcargs.ga_data)[i],
+ copyID, NULL, NULL))
+ return TRUE;
+ return FALSE;
}
/*
diff --git a/src/version.c b/src/version.c
index 0c98a98b32..eb9f9f3f12 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3089,
+/**/
3088,
/**/
3087,