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},

Impressum / About Us