Patch 8.2.3089
Problem:    Garbage collection has useless code.
Solution:   Bail out when aborting. (closes #8504)
Files:      src/userfunc.c


*** ../vim-8.2.3088/src/userfunc.c      2021-06-27 22:03:28.649707714 +0200
--- src/userfunc.c      2021-07-03 16:32:44.105980894 +0200
***************
*** 5478,5512 ****
      int
  set_ref_in_previous_funccal(int copyID)
  {
-     int               abort = FALSE;
      funccall_T        *fc;
  
!     for (fc = previous_funccal; !abort && 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);
      }
!     return abort;
  }
  
      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);
      }
!     return abort;
  }
  
  /*
--- 5478,5509 ----
      int
  set_ref_in_previous_funccal(int copyID)
  {
      funccall_T        *fc;
  
!     for (fc = previous_funccal; fc != NULL; fc = fc->caller)
      {
        fc->fc_copyID = copyID + 1;
!       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 FALSE;
  }
  
      static int
  set_ref_in_funccal(funccall_T *fc, int copyID)
  {
      if (fc->fc_copyID != copyID)
      {
        fc->fc_copyID = 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 FALSE;
  }
  
  /*
***************
*** 5515,5533 ****
      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);
  
      // 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;
  }
  
  /*
--- 5512,5530 ----
      int
  set_ref_in_call_stack(int copyID)
  {
      funccall_T                *fc;
      funccal_entry_T   *entry;
  
!     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; 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,5544 ****
  {
      int               todo;
      hashitem_T        *hi = NULL;
-     int               abort = FALSE;
      ufunc_T   *fp;
  
      todo = (int)func_hashtab.ht_used;
--- 5535,5540 ----
***************
*** 5548,5558 ****
        {
            --todo;
            fp = HI2UF(hi);
!           if (!func_name_refcount(fp->uf_name))
!               abort = abort || set_ref_in_func(NULL, fp, copyID);
        }
      }
!     return abort;
  }
  
  /*
--- 5544,5555 ----
        {
            --todo;
            fp = HI2UF(hi);
!           if (!func_name_refcount(fp->uf_name)
!                                         && set_ref_in_func(NULL, fp, copyID))
!               return TRUE;
        }
      }
!     return FALSE;
  }
  
  /*
***************
*** 5562,5573 ****
  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;
  }
  
  /*
--- 5559,5570 ----
  set_ref_in_func_args(int copyID)
  {
      int i;
  
      for (i = 0; i < funcargs.ga_len; ++i)
!       if (set_ref_in_item(((typval_T **)funcargs.ga_data)[i],
!                                                         copyID, NULL, NULL))
!           return TRUE;
!     return FALSE;
  }
  
  /*
*** ../vim-8.2.3088/src/version.c       2021-07-03 15:08:19.341195138 +0200
--- src/version.c       2021-07-03 16:22:28.811426634 +0200
***************
*** 757,758 ****
--- 757,760 ----
  {   /* Add new patch number below this line */
+ /**/
+     3089,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
83. Batteries in the TV remote now last for months.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202107031433.163EXiAr2276669%40masaka.moolenaar.net.

Raspunde prin e-mail lui