diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2005-05-16 15:45:15 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2005-05-16 15:45:15 -0300 |
| commit | a2b78aad49388c1fd5286773085ef8a35545faa6 (patch) | |
| tree | 305bc6c5316472b17fb668e9688e72b6652c79f8 /ldblib.c | |
| parent | c6293a76ccedbfc79f60261128e43fe95b350842 (diff) | |
| download | lua-a2b78aad49388c1fd5286773085ef8a35545faa6.tar.gz lua-a2b78aad49388c1fd5286773085ef8a35545faa6.tar.bz2 lua-a2b78aad49388c1fd5286773085ef8a35545faa6.zip | |
debug information for active lines
Diffstat (limited to 'ldblib.c')
| -rw-r--r-- | ldblib.c | 58 |
1 files changed, 30 insertions, 28 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldblib.c,v 1.94 2005/03/08 20:10:05 roberto Exp roberto $ | 2 | ** $Id: ldblib.c,v 1.95 2005/05/05 20:47:02 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 | */ |
| @@ -77,6 +77,17 @@ static lua_State *getthread (lua_State *L, int *arg) { | |||
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | 79 | ||
| 80 | static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { | ||
| 81 | if (L == L1) { | ||
| 82 | lua_pushvalue(L, -2); | ||
| 83 | lua_remove(L, -3); | ||
| 84 | } | ||
| 85 | else | ||
| 86 | lua_xmove(L1, L, 1); | ||
| 87 | lua_setfield(L, -2, fname); | ||
| 88 | } | ||
| 89 | |||
| 90 | |||
| 80 | static int db_getinfo (lua_State *L) { | 91 | static int db_getinfo (lua_State *L) { |
| 81 | lua_Debug ar; | 92 | lua_Debug ar; |
| 82 | int arg; | 93 | int arg; |
| @@ -99,34 +110,25 @@ static int db_getinfo (lua_State *L) { | |||
| 99 | if (!lua_getinfo(L1, options, &ar)) | 110 | if (!lua_getinfo(L1, options, &ar)) |
| 100 | return luaL_argerror(L, arg+2, "invalid option"); | 111 | return luaL_argerror(L, arg+2, "invalid option"); |
| 101 | lua_newtable(L); | 112 | lua_newtable(L); |
| 102 | for (; *options; options++) { | 113 | if (strchr(options, 'S')) { |
| 103 | switch (*options) { | 114 | settabss(L, "source", ar.source); |
| 104 | case 'S': | 115 | settabss(L, "short_src", ar.short_src); |
| 105 | settabss(L, "source", ar.source); | 116 | settabsi(L, "linedefined", ar.linedefined); |
| 106 | settabss(L, "short_src", ar.short_src); | 117 | settabsi(L, "lastlinedefined", ar.lastlinedefined); |
| 107 | settabsi(L, "linedefined", ar.linedefined); | 118 | settabss(L, "what", ar.what); |
| 108 | settabsi(L, "lastlinedefined", ar.lastlinedefined); | 119 | } |
| 109 | settabss(L, "what", ar.what); | 120 | if (strchr(options, 'l')) |
| 110 | break; | 121 | settabsi(L, "currentline", ar.currentline); |
| 111 | case 'l': | 122 | if (strchr(options, 'u')) |
| 112 | settabsi(L, "currentline", ar.currentline); | 123 | settabsi(L, "nups", ar.nups); |
| 113 | break; | 124 | if (strchr(options, 'n')) { |
| 114 | case 'u': | 125 | settabss(L, "name", ar.name); |
| 115 | settabsi(L, "nups", ar.nups); | 126 | settabss(L, "namewhat", ar.namewhat); |
| 116 | break; | ||
| 117 | case 'n': | ||
| 118 | settabss(L, "name", ar.name); | ||
| 119 | settabss(L, "namewhat", ar.namewhat); | ||
| 120 | break; | ||
| 121 | case 'f': | ||
| 122 | if (L == L1) | ||
| 123 | lua_pushvalue(L, -2); | ||
| 124 | else | ||
| 125 | lua_xmove(L1, L, 1); | ||
| 126 | lua_setfield(L, -2, "func"); | ||
| 127 | break; | ||
| 128 | } | ||
| 129 | } | 127 | } |
| 128 | if (strchr(options, 'L')) | ||
| 129 | treatstackoption(L, L1, "activelines"); | ||
| 130 | if (strchr(options, 'f')) | ||
| 131 | treatstackoption(L, L1, "func"); | ||
| 130 | return 1; /* return table */ | 132 | return 1; /* return table */ |
| 131 | } | 133 | } |
| 132 | 134 | ||
