1
0
forked from aniani/vim

patch 8.2.0677: Vim9: no support for closures

Problem:    Vim9: no support for closures.
Solution:   Find variables in the outer function scope, so long as the scope
            exists.
This commit is contained in:
Bram Moolenaar
2020-05-01 19:29:08 +02:00
parent 37addecc42
commit c8cd2b34d1
8 changed files with 223 additions and 126 deletions

View File

@@ -14,19 +14,6 @@
#include "vim.h"
#if defined(FEAT_EVAL) || defined(PROTO)
// flags used in uf_flags
#define FC_ABORT 0x01 // abort function on error
#define FC_RANGE 0x02 // function accepts range
#define FC_DICT 0x04 // Dict function, uses "self"
#define FC_CLOSURE 0x08 // closure, uses outer scope variables
#define FC_DELETED 0x10 // :delfunction used while uf_refcount > 0
#define FC_REMOVED 0x20 // function redefined while uf_refcount > 0
#define FC_SANDBOX 0x40 // function defined in the sandbox
#define FC_DEAD 0x80 // function kept only for reference to dfunc
#define FC_EXPORT 0x100 // "export def Func()"
#define FC_NOARGS 0x200 // no a: variables in lambda
#define FC_VIM9 0x400 // defined in vim9 script file
/*
* All user-defined functions are found in this hashtable.
*/
@@ -3267,7 +3254,7 @@ ex_function(exarg_T *eap)
// ":def Func()" needs to be compiled
if (eap->cmdidx == CMD_def)
compile_def_function(fp, FALSE);
compile_def_function(fp, FALSE, NULL);
goto ret_free;