# HG changeset patch # User jbe # Date 1406491828 -7200 # Node ID 214e11b729078aac3c4c963fe3bf8b611161e044 # Parent 3cafdf1143f3e21030ac69e4cd8d5ac3b0813287 Added functions json.object{...} and json.array{...} diff -r 3cafdf1143f3 -r 214e11b72907 libraries/json/json.c --- a/libraries/json/json.c Sun Jul 27 22:02:37 2014 +0200 +++ b/libraries/json/json.c Sun Jul 27 22:10:28 2014 +0200 @@ -17,6 +17,40 @@ #define JSON_STATE_ARRAY_SEPARATOR 6 #define JSON_STATE_END 7 +static int json_object(lua_State *L) { + lua_settop(L, 1); + if (lua_isnil(L, 1)) { + lua_settop(L, 0); + lua_newtable(L); + } + lua_pushvalue(L, JSON_UPVAL_METATABLE); + lua_setmetatable(L, 1); + lua_pushvalue(L, 1); + lua_newtable(L); // internal shadow table + lua_rawset(L, JSON_UPVAL_SHADOWTBL); + lua_pushvalue(L, 1); + lua_pushliteral(L, "object"); + lua_rawset(L, JSON_UPVAL_TYPES); + return 1; +} + +static int json_array(lua_State *L) { + lua_settop(L, 1); + if (lua_isnil(L, 1)) { + lua_settop(L, 0); + lua_newtable(L); + } + lua_pushvalue(L, JSON_UPVAL_METATABLE); + lua_setmetatable(L, 1); + lua_pushvalue(L, 1); + lua_newtable(L); // internal shadow table + lua_rawset(L, JSON_UPVAL_SHADOWTBL); + lua_pushvalue(L, 1); + lua_pushliteral(L, "array"); + lua_rawset(L, JSON_UPVAL_TYPES); + return 1; +} + static int json_import(lua_State *L) { const char *str; size_t total; @@ -321,6 +355,8 @@ } static const struct luaL_Reg json_module_functions[] = { + {"object", json_object}, + {"array", json_array}, {"import", json_import}, {"get", json_get}, {"type", json_type},