patch 8.2.1191: Vim9: crash when function calls itself
Problem: Vim9: crash when function calls itself.
Solution: Add status UF_COMPILING. (closes #6441)
diff --git a/src/structs.h b/src/structs.h
index bdc763b..4a0c10a 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1539,6 +1539,7 @@
typedef enum {
UF_NOT_COMPILED,
UF_TO_BE_COMPILED,
+ UF_COMPILING,
UF_COMPILED
} def_status_T;
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 5ea2945..53206df 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -999,5 +999,17 @@
call delete('XTest_silent_echo')
endfunc
+def Fibonacci(n: number): number
+ if n < 2
+ return n
+ else
+ return Fibonacci(n - 1) + Fibonacci(n - 2)
+ endif
+enddef
+
+def Test_recursive_call()
+ assert_equal(6765, Fibonacci(20))
+enddef
+
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
diff --git a/src/version.c b/src/version.c
index 8ae2f29..487303e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1191,
+/**/
1190,
/**/
1189,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index fceb481..8d6c139 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -6802,6 +6802,8 @@
else if (add_def_function(ufunc) == FAIL)
return FAIL;
+ ufunc->uf_def_status = UF_COMPILING;
+
CLEAR_FIELD(cctx);
cctx.ctx_ufunc = ufunc;
cctx.ctx_lnum = -1;