diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-02-20 13:52:50 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2018-02-20 13:52:50 -0300 |
commit | ca6fe7449a74efde6f959605dbe77acf3e64ca0b (patch) | |
tree | a6190e813ff712f7db750d4ecd3afd3ac9c0dbab /ldblib.c | |
parent | 1afd5a152dc8b3a304236dc4e07bca38ea5eb53a (diff) | |
download | lua-ca6fe7449a74efde6f959605dbe77acf3e64ca0b.tar.gz lua-ca6fe7449a74efde6f959605dbe77acf3e64ca0b.tar.bz2 lua-ca6fe7449a74efde6f959605dbe77acf3e64ca0b.zip |
userdata can have multiple user values
Diffstat (limited to 'ldblib.c')
-rw-r--r-- | ldblib.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldblib.c,v 1.151 2015/11/23 11:29:43 roberto Exp roberto $ | 2 | ** $Id: ldblib.c,v 1.152 2018/02/17 19:29:29 roberto Exp roberto $ |
3 | ** Interface from Lua to its debug API | 3 | ** Interface from Lua to its debug API |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -64,19 +64,24 @@ static int db_setmetatable (lua_State *L) { | |||
64 | 64 | ||
65 | 65 | ||
66 | static int db_getuservalue (lua_State *L) { | 66 | static int db_getuservalue (lua_State *L) { |
67 | int n = luaL_optinteger(L, 2, 1); | ||
67 | if (lua_type(L, 1) != LUA_TUSERDATA) | 68 | if (lua_type(L, 1) != LUA_TUSERDATA) |
68 | lua_pushnil(L); | 69 | lua_pushnil(L); |
69 | else | 70 | else if (lua_getiuservalue(L, 1, n) != LUA_TNONE) { |
70 | lua_getuservalue(L, 1); | 71 | lua_pushboolean(L, 1); |
72 | return 2; | ||
73 | } | ||
71 | return 1; | 74 | return 1; |
72 | } | 75 | } |
73 | 76 | ||
74 | 77 | ||
75 | static int db_setuservalue (lua_State *L) { | 78 | static int db_setuservalue (lua_State *L) { |
79 | int n = luaL_optinteger(L, 3, 1); | ||
76 | luaL_checktype(L, 1, LUA_TUSERDATA); | 80 | luaL_checktype(L, 1, LUA_TUSERDATA); |
77 | luaL_checkany(L, 2); | 81 | luaL_checkany(L, 2); |
78 | lua_settop(L, 2); | 82 | lua_settop(L, 2); |
79 | lua_setuservalue(L, 1); | 83 | if (!lua_setiuservalue(L, 1, n)) |
84 | lua_pushnil(L); | ||
80 | return 1; | 85 | return 1; |
81 | } | 86 | } |
82 | 87 | ||