diff options
author | bfredl <bjorn.linse@gmail.com> | 2023-02-01 12:54:22 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2023-02-10 20:19:04 +0100 |
commit | f8f82901cdd0ccd5308e05c73af6deb7d083720f (patch) | |
tree | d0b5dfbdeb21c4281849365cf45be65bac9af723 /src/mpack/lmpack.c | |
parent | d6279f9392073cb1422d76c57baf3fd283ed954e (diff) | |
download | rneovim-f8f82901cdd0ccd5308e05c73af6deb7d083720f.tar.gz rneovim-f8f82901cdd0ccd5308e05c73af6deb7d083720f.tar.bz2 rneovim-f8f82901cdd0ccd5308e05c73af6deb7d083720f.zip |
fix(tests): fixes for using vim.mpack and more ASAN
Diffstat (limited to 'src/mpack/lmpack.c')
-rw-r--r-- | src/mpack/lmpack.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/mpack/lmpack.c b/src/mpack/lmpack.c index 53d7092a0c..957bac37cc 100644 --- a/src/mpack/lmpack.c +++ b/src/mpack/lmpack.c @@ -644,7 +644,13 @@ static void lmpack_unparse_enter(mpack_parser_t *parser, mpack_node_t *node) mpack_node_t *n; int has_meta = lua_getmetatable(L, -1); - if (packer->ext != LUA_NOREF && has_meta) { + int has_mtdict = false; + if (has_meta && packer->mtdict != LUA_NOREF) { + lmpack_geti(L, packer->reg, packer->mtdict); // [table, metatable, mtdict] + has_mtdict = lua_rawequal(L, -1, -2); + lua_pop(L, 1); // [table, metatable]; + } + if (packer->ext != LUA_NOREF && has_meta && !has_mtdict) { /* check if there's a handler for this metatable */ lmpack_geti(L, packer->reg, packer->ext); lua_pushvalue(L, -2); @@ -701,14 +707,7 @@ static void lmpack_unparse_enter(mpack_parser_t *parser, mpack_node_t *node) } } - int is_array = 1; if (has_meta) { - // stack: [table, metatable] - if (packer->mtdict != LUA_NOREF) { - lmpack_geti(L, packer->reg, packer->mtdict); // [table, metatable, mtdict] - is_array = !lua_rawequal(L, -1, -2); - lua_pop(L, 1); // [table, metatable]; - } lua_pop(L, 1); // [table] } @@ -726,6 +725,7 @@ static void lmpack_unparse_enter(mpack_parser_t *parser, mpack_node_t *node) lua_pop(L, 1); } + int is_array = !has_mtdict; len = lmpack_objlen(L, &is_array); if (is_array) { node->tok = mpack_pack_array(len); |