webmcp
changeset 133:214e11b72907
Added functions json.object{...} and json.array{...}
author | jbe |
---|---|
date | Sun Jul 27 22:10:28 2014 +0200 (2014-07-27) |
parents | 3cafdf1143f3 |
children | a1507b499fa5 |
files | libraries/json/json.c |
line diff
1.1 --- a/libraries/json/json.c Sun Jul 27 22:02:37 2014 +0200 1.2 +++ b/libraries/json/json.c Sun Jul 27 22:10:28 2014 +0200 1.3 @@ -17,6 +17,40 @@ 1.4 #define JSON_STATE_ARRAY_SEPARATOR 6 1.5 #define JSON_STATE_END 7 1.6 1.7 +static int json_object(lua_State *L) { 1.8 + lua_settop(L, 1); 1.9 + if (lua_isnil(L, 1)) { 1.10 + lua_settop(L, 0); 1.11 + lua_newtable(L); 1.12 + } 1.13 + lua_pushvalue(L, JSON_UPVAL_METATABLE); 1.14 + lua_setmetatable(L, 1); 1.15 + lua_pushvalue(L, 1); 1.16 + lua_newtable(L); // internal shadow table 1.17 + lua_rawset(L, JSON_UPVAL_SHADOWTBL); 1.18 + lua_pushvalue(L, 1); 1.19 + lua_pushliteral(L, "object"); 1.20 + lua_rawset(L, JSON_UPVAL_TYPES); 1.21 + return 1; 1.22 +} 1.23 + 1.24 +static int json_array(lua_State *L) { 1.25 + lua_settop(L, 1); 1.26 + if (lua_isnil(L, 1)) { 1.27 + lua_settop(L, 0); 1.28 + lua_newtable(L); 1.29 + } 1.30 + lua_pushvalue(L, JSON_UPVAL_METATABLE); 1.31 + lua_setmetatable(L, 1); 1.32 + lua_pushvalue(L, 1); 1.33 + lua_newtable(L); // internal shadow table 1.34 + lua_rawset(L, JSON_UPVAL_SHADOWTBL); 1.35 + lua_pushvalue(L, 1); 1.36 + lua_pushliteral(L, "array"); 1.37 + lua_rawset(L, JSON_UPVAL_TYPES); 1.38 + return 1; 1.39 +} 1.40 + 1.41 static int json_import(lua_State *L) { 1.42 const char *str; 1.43 size_t total; 1.44 @@ -321,6 +355,8 @@ 1.45 } 1.46 1.47 static const struct luaL_Reg json_module_functions[] = { 1.48 + {"object", json_object}, 1.49 + {"array", json_array}, 1.50 {"import", json_import}, 1.51 {"get", json_get}, 1.52 {"type", json_type},