changeset 21313:e641f678bdb9 v8.2.1207

patch 8.2.1207: Vim9: crash in expr test when run in the GUI Commit: https://github.com/vim/vim/commit/7ce85be63b37ab4ec791dde93a380e8a4d8a04dd Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jul 14 15:01:05 2020 +0200 patch 8.2.1207: Vim9: crash in expr test when run in the GUI Problem: Vim9: crash in expr test when run in the GUI. Solution: Break out of loop over hashtab also when function got removed and added.
author Bram Moolenaar <Bram@vim.org>
date Tue, 14 Jul 2020 15:15:05 +0200
parents 0703e225bb72
children 3f34b98e3b3f
files src/testdir/test_vim9_expr.vim src/userfunc.c src/version.c
diffstat 3 files changed, 10 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1563,10 +1563,8 @@ def Test_expr7_method_call()
 enddef
 
 func Test_expr7_trailing_fails()
-  " Temporarily commented out - somehow crash occurs with too many
-  " CheckDefFailure calls in the GUI only.
-  " call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107')
-  " call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274')
+  call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)}'], 'E107')
+  call CheckDefFailure(['let l = [2]', 'l->{l -> add(l, 8)} ()'], 'E274')
 endfunc
 
 func Test_expr_fails()
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3444,8 +3444,8 @@ ex_function(exarg_T *eap)
     void
 ex_defcompile(exarg_T *eap UNUSED)
 {
-    long_u	ht_used = func_hashtab.ht_used;
-    int		todo = (int)ht_used;
+    long	todo = (long)func_hashtab.ht_used;
+    int		changed = func_hashtab.ht_changed;
     hashitem_T	*hi;
     ufunc_T	*ufunc;
 
@@ -3460,12 +3460,12 @@ ex_defcompile(exarg_T *eap UNUSED)
 	    {
 		compile_def_function(ufunc, FALSE, NULL);
 
-		if (func_hashtab.ht_used != ht_used)
+		if (func_hashtab.ht_changed != changed)
 		{
-		    // another function has been defined, need to start over
+		    // a function has been added or removed, need to start over
+		    todo = (long)func_hashtab.ht_used;
+		    changed = func_hashtab.ht_changed;
 		    hi = func_hashtab.ht_array;
-		    ht_used = func_hashtab.ht_used;
-		    todo = (int)ht_used;
 		    --hi;
 		}
 	    }
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1207,
+/**/
     1206,
 /**/
     1205,