summaryrefslogtreecommitdiffstats
path: root/src/structs.h
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-05-01 19:29:08 +0200
committerBram Moolenaar <Bram@vim.org>2020-05-01 19:29:08 +0200
commitc8cd2b34d1027c93fbca90f3cdc8123fe22dfa25 (patch)
treef0b598e62075135cb334c356d6404908d37ae8f9 /src/structs.h
parent37addecc422c3b62a622b371246dc4ef0a2fa157 (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.h17
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