aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/typval.c
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-02-28 20:57:24 +0100
committerGitHub <noreply@github.com>2022-02-28 20:57:24 +0100
commitcf0266fae1b24ced577dfb8673c11efd4ceb1627 (patch)
tree0f0e998db32c33139809bce38b18e6ae54639165 /src/nvim/eval/typval.c
parent6732cd9e57bf39d1a0f5c4fa08fa54c1561f2d2f (diff)
parent0f613482b389ad259dd53d893907b024a115352e (diff)
downloadrneovim-cf0266fae1b24ced577dfb8673c11efd4ceb1627.tar.gz
rneovim-cf0266fae1b24ced577dfb8673c11efd4ceb1627.tar.bz2
rneovim-cf0266fae1b24ced577dfb8673c11efd4ceb1627.zip
Merge pull request #17551 from bfredl/lua_autocmd_rebase
feat(lua_autocmd): episode III (the autocmds strike back)
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r--src/nvim/eval/typval.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index fbda7fbc3c..44b003d106 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -8,6 +8,7 @@
#include <stdlib.h>
#include <string.h>
+#include "lauxlib.h"
#include "nvim/ascii.h"
#include "nvim/assert.h"
#include "nvim/charset.h"
@@ -1157,7 +1158,22 @@ void callback_free(Callback *callback)
/// Check if callback is freed
bool callback_is_freed(Callback callback)
{
- return false;
+ switch (callback.type) {
+ case kCallbackFuncref:
+ return false;
+ break;
+ case kCallbackPartial:
+ return false;
+ break;
+ case kCallbackLua:
+ return callback.data.luaref == LUA_NOREF;
+ break;
+ case kCallbackNone:
+ return true;
+ break;
+ }
+
+ return true;
}
/// Copy a callback into a typval_T.
@@ -1176,8 +1192,10 @@ void callback_put(Callback *cb, typval_T *tv)
func_ref(cb->data.funcref);
break;
case kCallbackLua:
- // TODO(tjdevries): I'm not even sure if this is strictly necessary?
- abort();
+ // TODO(tjdevries): Unified Callback.
+ // At this point this isn't possible, but it'd be nice to put
+ // these handled more neatly in one place.
+ // So instead, we just do the default and put nil
default:
tv->v_type = VAR_SPECIAL;
tv->vval.v_special = kSpecialVarNull;