Mercurial > vim
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; } }