CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
ldblib.c-Dateireferenz
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
+ Include-Abhängigkeitsdiagramm für ldblib.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define ldblib_c
 
#define LUA_LIB
 
#define LEVELS1   12 /* size of the first part of the stack */
 
#define LEVELS2   10 /* size of the second part of the stack */
 

Funktionen

static int db_getregistry (lua_State *L)
 
static int db_getmetatable (lua_State *L)
 
static int db_setmetatable (lua_State *L)
 
static int db_getfenv (lua_State *L)
 
static int db_setfenv (lua_State *L)
 
static void settabss (lua_State *L, const char *i, const char *v)
 
static void settabsi (lua_State *L, const char *i, int v)
 
static lua_Stategetthread (lua_State *L, int *arg)
 
static void treatstackoption (lua_State *L, lua_State *L1, const char *fname)
 
static int db_getinfo (lua_State *L)
 
static int db_getlocal (lua_State *L)
 
static int db_setlocal (lua_State *L)
 
static int auxupvalue (lua_State *L, int get)
 
static int db_getupvalue (lua_State *L)
 
static int db_setupvalue (lua_State *L)
 
static void hookf (lua_State *L, lua_Debug *ar)
 
static int makemask (const char *smask, int count)
 
static char * unmakemask (int mask, char *smask)
 
static void gethooktable (lua_State *L)
 
static int db_sethook (lua_State *L)
 
static int db_gethook (lua_State *L)
 
static int db_errorfb (lua_State *L)
 
LUALIB_API int luaopen_debug (lua_State *L)
 

Variablen

static const char KEY_HOOK = 'h'
 
static const luaL_Reg dblib []
 

Makro-Dokumentation

#define ldblib_c

Definiert in Zeile 12 der Datei ldblib.c.

#define LEVELS1   12 /* size of the first part of the stack */

Definiert in Zeile 319 der Datei ldblib.c.

#define LEVELS2   10 /* size of the second part of the stack */

Definiert in Zeile 320 der Datei ldblib.c.

#define LUA_LIB

Definiert in Zeile 13 der Datei ldblib.c.

Dokumentation der Funktionen

static int auxupvalue ( lua_State L,
int  get 
)
static

Definiert in Zeile 179 der Datei ldblib.c.

179  {
180  const char *name;
181  int n = luaL_checkint(L, 2);
183  if (lua_iscfunction(L, 1)) return 0; /* cannot touch C upvalues from Lua */
184  name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n);
185  if (name == NULL) return 0;
186  lua_pushstring(L, name);
187  lua_insert(L, -(get+1));
188  return get + 1;
189 }
static int db_errorfb ( lua_State L)
static

Definiert in Zeile 322 der Datei ldblib.c.

322  {
323  int level;
324  int firstpart = 1; /* still before eventual `...' */
325  int arg;
326  lua_State *L1 = getthread(L, &arg);
327  lua_Debug ar;
328  if (lua_isnumber(L, arg+2)) {
329  level = (int)lua_tointeger(L, arg+2);
330  lua_pop(L, 1);
331  }
332  else
333  level = (L == L1) ? 1 : 0; /* level 0 may be this own function */
334  if (lua_gettop(L) == arg)
335  lua_pushliteral(L, "");
336  else if (!lua_isstring(L, arg+1)) return 1; /* message is not a string */
337  else lua_pushliteral(L, "\n");
338  lua_pushliteral(L, "stack traceback:");
339  while (lua_getstack(L1, level++, &ar)) {
340  if (level > LEVELS1 && firstpart) {
341  /* no more than `LEVELS2' more levels? */
342  if (!lua_getstack(L1, level+LEVELS2, &ar))
343  level--; /* keep going */
344  else {
345  lua_pushliteral(L, "\n\t..."); /* too many levels */
346  while (lua_getstack(L1, level+LEVELS2, &ar)) /* find last levels */
347  level++;
348  }
349  firstpart = 0;
350  continue;
351  }
352  lua_pushliteral(L, "\n\t");
353  lua_getinfo(L1, "Snl", &ar);
354  lua_pushfstring(L, "%s:", ar.short_src);
355  if (ar.currentline > 0)
356  lua_pushfstring(L, "%d:", ar.currentline);
357  if (*ar.namewhat != '\0') /* is there a name? */
358  lua_pushfstring(L, " in function " LUA_QS, ar.name);
359  else {
360  if (*ar.what == 'm') /* main? */
361  lua_pushfstring(L, " in main chunk");
362  else if (*ar.what == 'C' || *ar.what == 't')
363  lua_pushliteral(L, " ?"); /* C function or tail call */
364  else
365  lua_pushfstring(L, " in function <%s:%d>",
366  ar.short_src, ar.linedefined);
367  }
368  lua_concat(L, lua_gettop(L) - arg);
369  }
370  lua_concat(L, lua_gettop(L) - arg);
371  return 1;
372 }
static int db_getfenv ( lua_State L)
static

Definiert in Zeile 47 der Datei ldblib.c.

47  {
48  luaL_checkany(L, 1);
49  lua_getfenv(L, 1);
50  return 1;
51 }
static int db_gethook ( lua_State L)
static

Definiert in Zeile 282 der Datei ldblib.c.

282  {
283  int arg;
284  lua_State *L1 = getthread(L, &arg);
285  char buff[5];
286  int mask = lua_gethookmask(L1);
287  lua_Hook hook = lua_gethook(L1);
288  if (hook != NULL && hook != hookf) /* external hook? */
289  lua_pushliteral(L, "external hook");
290  else {
291  gethooktable(L);
292  lua_pushlightuserdata(L, L1);
293  lua_rawget(L, -2); /* get hook */
294  lua_remove(L, -2); /* remove hook table */
295  }
296  lua_pushstring(L, unmakemask(mask, buff));
298  return 3;
299 }
static int db_getinfo ( lua_State L)
static

Definiert in Zeile 99 der Datei ldblib.c.

99  {
100  lua_Debug ar;
101  int arg;
102  lua_State *L1 = getthread(L, &arg);
103  const char *options = luaL_optstring(L, arg+2, "flnSu");
104  if (lua_isnumber(L, arg+1)) {
105  if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) {
106  lua_pushnil(L); /* level out of range */
107  return 1;
108  }
109  }
110  else if (lua_isfunction(L, arg+1)) {
111  lua_pushfstring(L, ">%s", options);
112  options = lua_tostring(L, -1);
113  lua_pushvalue(L, arg+1);
114  lua_xmove(L, L1, 1);
115  }
116  else
117  return luaL_argerror(L, arg+1, "function or level expected");
118  if (!lua_getinfo(L1, options, &ar))
119  return luaL_argerror(L, arg+2, "invalid option");
120  lua_createtable(L, 0, 2);
121  if (strchr(options, 'S')) {
122  settabss(L, "source", ar.source);
123  settabss(L, "short_src", ar.short_src);
124  settabsi(L, "linedefined", ar.linedefined);
125  settabsi(L, "lastlinedefined", ar.lastlinedefined);
126  settabss(L, "what", ar.what);
127  }
128  if (strchr(options, 'l'))
129  settabsi(L, "currentline", ar.currentline);
130  if (strchr(options, 'u'))
131  settabsi(L, "nups", ar.nups);
132  if (strchr(options, 'n')) {
133  settabss(L, "name", ar.name);
134  settabss(L, "namewhat", ar.namewhat);
135  }
136  if (strchr(options, 'L'))
137  treatstackoption(L, L1, "activelines");
138  if (strchr(options, 'f'))
139  treatstackoption(L, L1, "func");
140  return 1; /* return table */
141 }
static int db_getlocal ( lua_State L)
static

Definiert in Zeile 144 der Datei ldblib.c.

144  {
145  int arg;
146  lua_State *L1 = getthread(L, &arg);
147  lua_Debug ar;
148  const char *name;
149  if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */
150  return luaL_argerror(L, arg+1, "level out of range");
151  name = lua_getlocal(L1, &ar, luaL_checkint(L, arg+2));
152  if (name) {
153  lua_xmove(L1, L, 1);
154  lua_pushstring(L, name);
155  lua_pushvalue(L, -2);
156  return 2;
157  }
158  else {
159  lua_pushnil(L);
160  return 1;
161  }
162 }
static int db_getmetatable ( lua_State L)
static

Definiert in Zeile 28 der Datei ldblib.c.

28  {
29  luaL_checkany(L, 1);
30  if (!lua_getmetatable(L, 1)) {
31  lua_pushnil(L); /* no metatable */
32  }
33  return 1;
34 }
static int db_getregistry ( lua_State L)
static

Definiert in Zeile 22 der Datei ldblib.c.

22  {
24  return 1;
25 }
static int db_getupvalue ( lua_State L)
static

Definiert in Zeile 192 der Datei ldblib.c.

192  {
193  return auxupvalue(L, 1);
194 }
static int db_setfenv ( lua_State L)
static

Definiert in Zeile 54 der Datei ldblib.c.

54  {
56  lua_settop(L, 2);
57  if (lua_setfenv(L, 1) == 0)
58  luaL_error(L, LUA_QL("setfenv")
59  " cannot change environment of given object");
60  return 1;
61 }
static int db_sethook ( lua_State L)
static

Definiert in Zeile 258 der Datei ldblib.c.

258  {
259  int arg, mask, count;
260  lua_Hook func;
261  lua_State *L1 = getthread(L, &arg);
262  if (lua_isnoneornil(L, arg+1)) {
263  lua_settop(L, arg+1);
264  func = NULL; mask = 0; count = 0; /* turn off hooks */
265  }
266  else {
267  const char *smask = luaL_checkstring(L, arg+2);
268  luaL_checktype(L, arg+1, LUA_TFUNCTION);
269  count = luaL_optint(L, arg+3, 0);
270  func = hookf; mask = makemask(smask, count);
271  }
272  gethooktable(L);
273  lua_pushlightuserdata(L, L1);
274  lua_pushvalue(L, arg+1);
275  lua_rawset(L, -3); /* set new hook */
276  lua_pop(L, 1); /* remove hook table */
277  lua_sethook(L1, func, mask, count); /* set hooks */
278  return 0;
279 }
static int db_setlocal ( lua_State L)
static

Definiert in Zeile 165 der Datei ldblib.c.

165  {
166  int arg;
167  lua_State *L1 = getthread(L, &arg);
168  lua_Debug ar;
169  if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */
170  return luaL_argerror(L, arg+1, "level out of range");
171  luaL_checkany(L, arg+3);
172  lua_settop(L, arg+3);
173  lua_xmove(L, L1, 1);
174  lua_pushstring(L, lua_setlocal(L1, &ar, luaL_checkint(L, arg+2)));
175  return 1;
176 }
static int db_setmetatable ( lua_State L)
static

Definiert in Zeile 37 der Datei ldblib.c.

37  {
38  int t = lua_type(L, 2);
39  luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2,
40  "nil or table expected");
41  lua_settop(L, 2);
43  return 1;
44 }
static int db_setupvalue ( lua_State L)
static

Definiert in Zeile 197 der Datei ldblib.c.

197  {
198  luaL_checkany(L, 3);
199  return auxupvalue(L, 0);
200 }
static void gethooktable ( lua_State L)
static

Definiert in Zeile 245 der Datei ldblib.c.

245  {
246  lua_pushlightuserdata(L, (void *)&KEY_HOOK);
248  if (!lua_istable(L, -1)) {
249  lua_pop(L, 1);
250  lua_createtable(L, 0, 1);
251  lua_pushlightuserdata(L, (void *)&KEY_HOOK);
252  lua_pushvalue(L, -2);
254  }
255 }
static lua_State* getthread ( lua_State L,
int *  arg 
)
static

Definiert in Zeile 76 der Datei ldblib.c.

76  {
77  if (lua_isthread(L, 1)) {
78  *arg = 1;
79  return lua_tothread(L, 1);
80  }
81  else {
82  *arg = 0;
83  return L;
84  }
85 }
static void hookf ( lua_State L,
lua_Debug ar 
)
static

Definiert in Zeile 207 der Datei ldblib.c.

207  {
208  static const char *const hooknames[] =
209  {"call", "return", "line", "count", "tail return"};
210  lua_pushlightuserdata(L, (void *)&KEY_HOOK);
212  lua_pushlightuserdata(L, L);
213  lua_rawget(L, -2);
214  if (lua_isfunction(L, -1)) {
215  lua_pushstring(L, hooknames[(int)ar->event]);
216  if (ar->currentline >= 0)
218  else lua_pushnil(L);
219  lua_assert(lua_getinfo(L, "lS", ar));
220  lua_call(L, 2, 0);
221  }
222 }
LUALIB_API int luaopen_debug ( lua_State L)

Definiert in Zeile 394 der Datei ldblib.c.

394  {
396  return 1;
397 }
static int makemask ( const char *  smask,
int  count 
)
static

Definiert in Zeile 225 der Datei ldblib.c.

225  {
226  int mask = 0;
227  if (strchr(smask, 'c')) mask |= LUA_MASKCALL;
228  if (strchr(smask, 'r')) mask |= LUA_MASKRET;
229  if (strchr(smask, 'l')) mask |= LUA_MASKLINE;
230  if (count > 0) mask |= LUA_MASKCOUNT;
231  return mask;
232 }
static void settabsi ( lua_State L,
const char *  i,
int  v 
)
static

Definiert in Zeile 70 der Datei ldblib.c.

70  {
71  lua_pushinteger(L, v);
72  lua_setfield(L, -2, i);
73 }
static void settabss ( lua_State L,
const char *  i,
const char *  v 
)
static

Definiert in Zeile 64 der Datei ldblib.c.

64  {
65  lua_pushstring(L, v);
66  lua_setfield(L, -2, i);
67 }
static void treatstackoption ( lua_State L,
lua_State L1,
const char *  fname 
)
static

Definiert in Zeile 88 der Datei ldblib.c.

88  {
89  if (L == L1) {
90  lua_pushvalue(L, -2);
91  lua_remove(L, -3);
92  }
93  else
94  lua_xmove(L1, L, 1);
95  lua_setfield(L, -2, fname);
96 }
static char* unmakemask ( int  mask,
char *  smask 
)
static

Definiert in Zeile 235 der Datei ldblib.c.

235  {
236  int i = 0;
237  if (mask & LUA_MASKCALL) smask[i++] = 'c';
238  if (mask & LUA_MASKRET) smask[i++] = 'r';
239  if (mask & LUA_MASKLINE) smask[i++] = 'l';
240  smask[i] = '\0';
241  return smask;
242 }

Variablen-Dokumentation

const luaL_Reg dblib[]
static
Initialisierung:
= {
{"getfenv", db_getfenv},
{"gethook", db_gethook},
{"getinfo", db_getinfo},
{"getlocal", db_getlocal},
{"getregistry", db_getregistry},
{"getmetatable", db_getmetatable},
{"getupvalue", db_getupvalue},
{"setfenv", db_setfenv},
{"sethook", db_sethook},
{"setlocal", db_setlocal},
{"setmetatable", db_setmetatable},
{"setupvalue", db_setupvalue},
{"traceback", db_errorfb},
}

Definiert in Zeile 375 der Datei ldblib.c.

const char KEY_HOOK = 'h'
static

Definiert in Zeile 204 der Datei ldblib.c.