diff options
author | Michael Ennen <mike.ennen@gmail.com> | 2016-10-24 23:53:07 -0700 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2016-12-12 10:17:34 -0500 |
commit | 521e45f2a8c0619335288accdda0f0aaa1fc6513 (patch) | |
tree | c9f188f26ae7738a2dc2e71e3c816cdf62d5c151 /src/nvim/eval_defs.h | |
parent | 75c18b6aaa8430596fa10466dc7918047b13ff2b (diff) | |
download | rneovim-521e45f2a8c0619335288accdda0f0aaa1fc6513.tar.gz rneovim-521e45f2a8c0619335288accdda0f0aaa1fc6513.tar.bz2 rneovim-521e45f2a8c0619335288accdda0f0aaa1fc6513.zip |
vim-patch:7.4.1559
Problem: Passing cookie to a callback is clumsy.
Solution: Change function() to take arguments and return a partial.
https://github.com/vim/vim/commit/1735bc988c546cc962c5f94792815b4d7cb79710
Diffstat (limited to 'src/nvim/eval_defs.h')
-rw-r--r-- | src/nvim/eval_defs.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/nvim/eval_defs.h b/src/nvim/eval_defs.h index 91d544074f..a33ac10e61 100644 --- a/src/nvim/eval_defs.h +++ b/src/nvim/eval_defs.h @@ -15,6 +15,7 @@ typedef double float_T; typedef struct listvar_S list_T; typedef struct dictvar_S dict_T; +typedef struct partial_S partial_T; /// Special variable values typedef enum { @@ -35,7 +36,8 @@ typedef enum { VAR_UNKNOWN = 0, ///< Unknown (unspecified) value. VAR_NUMBER, ///< Number, .v_number is used. VAR_STRING, ///< String, .v_string is used. - VAR_FUNC, ///< Function referene, .v_string is used for function name. + VAR_FUNC, ///< Function reference, .v_string is used as function name. + VAR_PARTIAL, ///< Partial, .v_partial is used. VAR_LIST, ///< List, .v_list is used. VAR_DICT, ///< Dictionary, .v_dict is used. VAR_FLOAT, ///< Floating-point value, .v_float is used. @@ -54,6 +56,7 @@ typedef struct { char_u *v_string; ///< String, for VAR_STRING and VAR_FUNC, can be NULL. list_T *v_list; ///< List for VAR_LIST, can be NULL. dict_T *v_dict; ///< Dictionary for VAR_DICT, can be NULL. + partial_T *v_partial; ///< Closure: function with args. } vval; ///< Actual value. } typval_T; @@ -144,6 +147,14 @@ struct dictvar_S { QUEUE watchers; ///< Dictionary key watchers set by user code. }; +struct partial_S { + int pt_refcount; ///< Reference count. + char_u *pt_name; ///< Function name. + int pt_argc; ///< Number of arguments. + typval_T *pt_argv; ///< Arguments in allocated array. + dict_T *pt_dict; ///< Dict for "self". +}; + // structure used for explicit stack while garbage collecting hash tables typedef struct ht_stack_S { hashtab_T *ht; |