aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/userfunc.h
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2021-08-05 19:46:42 +0100
committerSean Dewar <seandewar@users.noreply.github.com>2021-08-12 22:35:19 +0100
commite6be6c307a832d661d2a6269ad2d322e4bf5e9cc (patch)
treeb2b4e54254af2af04763d4f650c43e481b36cd8b /src/nvim/eval/userfunc.h
parent4042ae5a2bc4bbca608ebb196a3d54a78d6c100c (diff)
downloadrneovim-e6be6c307a832d661d2a6269ad2d322e4bf5e9cc.tar.gz
rneovim-e6be6c307a832d661d2a6269ad2d322e4bf5e9cc.tar.bz2
rneovim-e6be6c307a832d661d2a6269ad2d322e4bf5e9cc.zip
vim-patch:8.1.1803: all builtin functions are global
Problem: All builtin functions are global. Solution: Add the method call operator ->. Implemented for a limited number of functions. https://github.com/vim/vim/commit/ac92e25a33c37ec5becbfffeccda136c73b761ac - Note that to *exactly* port hunk @@ -7376,18 +7444,19 from handle_subscript(), we need the :scriptversion patches (I have an open PR for those, but this patch works fine without them anyway). - Port call_internal_func() from v7.4.2058. - Adjust some error messages in tests, as they rely on the Blob patches. - Add a modeline to test_method.vim. Ignore the global_functions and base_method tables and prefer the current GPerf implementation. Instead, add an extra base_arg field to VimLFuncDef that holds the number of the argument to use as the base (1-indexed, so that 0 may be used to refer to functions that cannot be used as methods). This also means we support using any argument as a base from the get-go, rather than just the first (Vim includes this ability in future patches, however). To mark a function as usable as a method, use the "base" key as described in eval.lua.
Diffstat (limited to 'src/nvim/eval/userfunc.h')
-rw-r--r--src/nvim/eval/userfunc.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/nvim/eval/userfunc.h b/src/nvim/eval/userfunc.h
index 9af35e0411..513473449a 100644
--- a/src/nvim/eval/userfunc.h
+++ b/src/nvim/eval/userfunc.h
@@ -44,6 +44,7 @@ typedef struct {
bool evaluate; ///< actually evaluate expressions
partial_T *partial; ///< for extra arguments
dict_T *selfdict; ///< Dictionary for "self"
+ typval_T *basetv; ///< base for base->method()
} funcexe_T;
#define FUNCEXE_INIT (funcexe_T) { \
@@ -54,6 +55,7 @@ typedef struct {
.evaluate = false, \
.partial = NULL, \
.selfdict = NULL, \
+ .basetv = NULL, \
}
#define FUNCARG(fp, j) ((char_u **)(fp->uf_args.ga_data))[j]