diff options
Diffstat (limited to 'lua_cjson.c')
| -rw-r--r-- | lua_cjson.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lua_cjson.c b/lua_cjson.c index 3a77644..1695979 100644 --- a/lua_cjson.c +++ b/lua_cjson.c | |||
| @@ -1401,10 +1401,21 @@ static int lua_cjson_new(lua_State *l) | |||
| 1401 | /* Initialise number conversions */ | 1401 | /* Initialise number conversions */ |
| 1402 | fpconv_init(); | 1402 | fpconv_init(); |
| 1403 | 1403 | ||
| 1404 | /* Create empty array metatable */ | 1404 | /* Test if empty array metatable is in registry */ |
| 1405 | lua_pushlightuserdata(l, &json_empty_array); | 1405 | lua_pushlightuserdata(l, &json_empty_array); |
| 1406 | lua_newtable(l); | 1406 | lua_rawget(l, LUA_REGISTRYINDEX); |
| 1407 | lua_rawset(l, LUA_REGISTRYINDEX); | 1407 | if (lua_isnil(l, -1)) { |
| 1408 | /* Create empty array metatable. | ||
| 1409 | * | ||
| 1410 | * If multiple calls to lua_cjson_new() are made, | ||
| 1411 | * this prevents overriding the table at the given | ||
| 1412 | * registry's index with a new one. | ||
| 1413 | */ | ||
| 1414 | lua_pop(l, 1); | ||
| 1415 | lua_pushlightuserdata(l, &json_empty_array); | ||
| 1416 | lua_newtable(l); | ||
| 1417 | lua_rawset(l, LUA_REGISTRYINDEX); | ||
| 1418 | } | ||
| 1408 | 1419 | ||
| 1409 | /* cjson module table */ | 1420 | /* cjson module table */ |
| 1410 | lua_newtable(l); | 1421 | lua_newtable(l); |
