summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-07-14 15:01:05 +0200
committerBram Moolenaar <Bram@vim.org>2020-07-14 15:01:05 +0200
commit7ce85be63b37ab4ec791dde93a380e8a4d8a04dd (patch)
treeda679ce583f4876ac399b19f7dc2e0f2d1b42886
parent1bce831e13c42daa3563c7f90432d9bd9b959b81 (diff)
downloadvim-git-7ce85be63b37ab4ec791dde93a380e8a4d8a04dd.tar.gz
patch 8.2.1207: Vim9: crash in expr test when run in the GUIv8.2.1207
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.
-rw-r--r--src/testdir/test_vim9_expr.vim6
-rw-r--r--src/userfunc.c12
-rw-r--r--src/version.c2
3 files changed, 10 insertions, 10 deletions
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 020a752e3..dc9514480 100644
--- 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()
diff --git a/src/userfunc.c b/src/userfunc.c
index 467a04601..6e49c035c 100644
--- 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;
}
}
diff --git a/src/version.c b/src/version.c
index a2775b399..490e5a3dc 100644
--- 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,