diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-05-01 19:29:08 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-05-01 19:29:08 +0200 |
commit | c8cd2b34d1027c93fbca90f3cdc8123fe22dfa25 (patch) | |
tree | f0b598e62075135cb334c356d6404908d37ae8f9 /src/structs.h | |
parent | 37addecc422c3b62a622b371246dc4ef0a2fa157 (diff) |
patch 8.2.0677: Vim9: no support for closuresv8.2.0677
Problem: Vim9: no support for closures.
Solution: Find variables in the outer function scope, so long as the scope
exists.
Diffstat (limited to 'src/structs.h')
-rw-r--r-- | src/structs.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/structs.h b/src/structs.h index 1d3d411172..70b6e3f72a 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1561,7 +1561,11 @@ typedef struct sctx_T uf_script_ctx; // SCTX where function was defined, // used for s: variables int uf_refcount; // reference count, see func_name_refcount() + funccall_T *uf_scoped; // l: local variables for closure + garray_T *uf_ectx_stack; // where compiled closure finds local vars + int uf_ectx_frame; // index of function frame in uf_ectx_stack + char_u *uf_name_exp; // if "uf_name[]" starts with SNR the name with // "<SNR>" as a string, otherwise NULL char_u uf_name[1]; // name of function (actually longer); can @@ -1569,6 +1573,19 @@ typedef struct // KS_EXTRA KE_SNR) } ufunc_T; +// 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 + #define MAX_FUNC_ARGS 20 // maximum number of function arguments #define VAR_SHORT_LEN 20 // short variable name length #define FIXVAR_CNT 12 // number of fixed variables |