mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.1191: Vim9: crash when function calls itself
Problem: Vim9: crash when function calls itself. Solution: Add status UF_COMPILING. (closes #6441)
This commit is contained in:
@@ -1539,6 +1539,7 @@ typedef struct funccall_S funccall_T;
|
||||
typedef enum {
|
||||
UF_NOT_COMPILED,
|
||||
UF_TO_BE_COMPILED,
|
||||
UF_COMPILING,
|
||||
UF_COMPILED
|
||||
} def_status_T;
|
||||
|
||||
|
@@ -999,5 +999,17 @@ func Test_silent_echo()
|
||||
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
|
||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1191,
|
||||
/**/
|
||||
1190,
|
||||
/**/
|
||||
|
@@ -6802,6 +6802,8 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
|
||||
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;
|
||||
|
Reference in New Issue
Block a user