From 30fed27241cc2a8f930212375f994a7fa6c99008 Mon Sep 17 00:00:00 2001 From: Michael Lingelbach Date: Thu, 23 Sep 2021 13:39:47 -0400 Subject: feat(lua): expose lua-cjson as vim.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add vim.json.encode and vim.json.decode * use vim.NIL instead of cjson.null * resolve strict-prototypes warnings * The following benchmark shows an approximately 2.5x (750 ms vs 300 ms) improvement in deserialization performance over vim.fn.json_decode on a medium package.json ```lua local uv = vim.loop local function readfile(path) return end local json_url = "https://raw.githubusercontent.com/rust-analyzer/rust-analyzer/b24c8d5c89ee93d1172b4127564f5da3b0c88dad/editors/code/package.json" io.popen(string.format('curl -v -f -L -O %q &> /dev/null', json_url)) local json_string = io.open('package.json'):read '*a' uv.update_time() local start = uv.hrtime() for i = 1,1000 do vim.fn.json_decode(json_string) end uv.update_time() print(string.format("Deserialization time vim.fn.json_decode: %s ms", (uv.hrtime() - start) * (1e-6))) uv.update_time() local start = uv.hrtime() for i = 1,1000 do vim.json.decode(json_string) end uv.update_time() print(string.format("Deserialization time vim.json.decode: %s ms", (uv.hrtime() - start) * (1e-6))) ``` Co-Authored-By: Björn Linse --- src/cjson/lua_cjson.h | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/cjson/lua_cjson.h (limited to 'src/cjson/lua_cjson.h') diff --git a/src/cjson/lua_cjson.h b/src/cjson/lua_cjson.h new file mode 100644 index 0000000000..3f70b679be --- /dev/null +++ b/src/cjson/lua_cjson.h @@ -0,0 +1,10 @@ +#ifndef CJSON_LUACJSON_H +#define CJSON_LUACJSON_H + +#include "lua.h" + +int lua_cjson_new(lua_State *l); +int luaopen_cjson(lua_State *l); +int luaopen_cjson_safe(lua_State *l); + +#endif // CJSON_LUACJSON_H -- cgit