diff options
Diffstat (limited to 'ldblib.c')
| -rw-r--r-- | ldblib.c | 28 |
1 files changed, 27 insertions, 1 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldblib.c,v 1.74 2002/12/04 17:38:31 roberto Exp roberto $ | 2 | ** $Id: ldblib.c,v 1.75 2002/12/05 17:50:10 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 | */ |
| @@ -108,6 +108,30 @@ static int setlocal (lua_State *L) { | |||
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | 110 | ||
| 111 | static int auxupvalue (lua_State *L, int get) { | ||
| 112 | const char *name; | ||
| 113 | int n = luaL_checkint(L, 2); | ||
| 114 | luaL_checktype(L, 1, LUA_TFUNCTION); | ||
| 115 | if (lua_iscfunction(L, 1)) return 0; /* cannot touch C upvalues from Lua */ | ||
| 116 | name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); | ||
| 117 | if (name == NULL) return 0; | ||
| 118 | lua_pushstring(L, name); | ||
| 119 | lua_insert(L, -(get+1)); | ||
| 120 | return get + 1; | ||
| 121 | } | ||
| 122 | |||
| 123 | |||
| 124 | static int getupvalue (lua_State *L) { | ||
| 125 | return auxupvalue(L, 1); | ||
| 126 | } | ||
| 127 | |||
| 128 | |||
| 129 | static int setupvalue (lua_State *L) { | ||
| 130 | luaL_checkany(L, 3); | ||
| 131 | return auxupvalue(L, 0); | ||
| 132 | } | ||
| 133 | |||
| 134 | |||
| 111 | 135 | ||
| 112 | static const char KEY_HOOK = 'h'; | 136 | static const char KEY_HOOK = 'h'; |
| 113 | 137 | ||
| @@ -253,8 +277,10 @@ static const luaL_reg dblib[] = { | |||
| 253 | {"getlocal", getlocal}, | 277 | {"getlocal", getlocal}, |
| 254 | {"getinfo", getinfo}, | 278 | {"getinfo", getinfo}, |
| 255 | {"gethook", gethook}, | 279 | {"gethook", gethook}, |
| 280 | {"getupvalue", getupvalue}, | ||
| 256 | {"sethook", sethook}, | 281 | {"sethook", sethook}, |
| 257 | {"setlocal", setlocal}, | 282 | {"setlocal", setlocal}, |
| 283 | {"setupvalue", setupvalue}, | ||
| 258 | {"debug", debug}, | 284 | {"debug", debug}, |
| 259 | {"traceback", errorfb}, | 285 | {"traceback", errorfb}, |
| 260 | {NULL, NULL} | 286 | {NULL, NULL} |
