mirror of
https://github.com/lua/lua.git
synced 2025-01-14 05:43:00 +08:00
tests for locals and line numbers
This commit is contained in:
parent
5362426ffa
commit
7f867eb0b9
59
ltests.c
59
ltests.c
@ -1,5 +1,5 @@
|
||||
/*
|
||||
** $Id: ltests.c,v 1.26 2000/06/21 17:05:49 roberto Exp roberto $
|
||||
** $Id: ltests.c,v 1.27 2000/06/26 19:28:31 roberto Exp roberto $
|
||||
** Internal Module for Debugging of the Lua Implementation
|
||||
** See Copyright Notice in lua.h
|
||||
*/
|
||||
@ -17,6 +17,7 @@
|
||||
#include "lauxlib.h"
|
||||
#include "lcode.h"
|
||||
#include "ldo.h"
|
||||
#include "lfunc.h"
|
||||
#include "lmem.h"
|
||||
#include "lopcodes.h"
|
||||
#include "lstate.h"
|
||||
@ -62,22 +63,28 @@ static const char *const instrname[NUM_OPCODES] = {
|
||||
};
|
||||
|
||||
|
||||
static int pushop (Instruction i) {
|
||||
static int pushop (Proto *p, int pc) {
|
||||
char buff[100];
|
||||
Instruction i = p->code[pc];
|
||||
OpCode o = GET_OPCODE(i);
|
||||
const char *name = instrname[o];
|
||||
int *line = p->lines;
|
||||
if (line)
|
||||
sprintf(buff, "%5d - ", line[pc]);
|
||||
else
|
||||
strcpy(buff, " ");
|
||||
switch ((enum Mode)luaK_opproperties[o].mode) {
|
||||
case iO:
|
||||
sprintf(buff, "%s", name);
|
||||
sprintf(buff+8, "%s", name);
|
||||
break;
|
||||
case iU:
|
||||
sprintf(buff, "%-12s%4u", name, GETARG_U(i));
|
||||
sprintf(buff+8, "%-12s%4u", name, GETARG_U(i));
|
||||
break;
|
||||
case iS:
|
||||
sprintf(buff, "%-12s%4d", name, GETARG_S(i));
|
||||
sprintf(buff+8, "%-12s%4d", name, GETARG_S(i));
|
||||
break;
|
||||
case iAB:
|
||||
sprintf(buff, "%-12s%4d %4d", name, GETARG_A(i), GETARG_B(i));
|
||||
sprintf(buff+8, "%-12s%4d %4d", name, GETARG_A(i), GETARG_B(i));
|
||||
break;
|
||||
}
|
||||
lua_pushstring(buff);
|
||||
@ -88,18 +95,18 @@ static int pushop (Instruction i) {
|
||||
static void listcode (void) {
|
||||
lua_Object o = luaL_nonnullarg(1);
|
||||
lua_Object t = lua_createtable();
|
||||
Instruction *pc;
|
||||
int pc;
|
||||
Proto *p;
|
||||
int res;
|
||||
luaL_arg_check(ttype(o) == TAG_LCLOSURE, 1, "Lua function expected");
|
||||
p = clvalue(o)->f.l;
|
||||
setnameval(t, "maxstack", p->maxstacksize);
|
||||
setnameval(t, "numparams", p->numparams);
|
||||
pc = p->code;
|
||||
pc = 0;
|
||||
do {
|
||||
lua_pushobject(t);
|
||||
lua_pushnumber(pc - p->code + 1);
|
||||
res = pushop(*pc++);
|
||||
lua_pushnumber(pc+1);
|
||||
res = pushop(p, pc++);
|
||||
lua_settable();
|
||||
} while (res);
|
||||
lua_pushobject(t);
|
||||
@ -123,27 +130,40 @@ static void liststrings (void) {
|
||||
}
|
||||
|
||||
|
||||
static void listlocals (void) {
|
||||
lua_Object o = luaL_nonnullarg(1);
|
||||
Proto *p;
|
||||
int pc = luaL_check_int(2) - 1;
|
||||
int i = 1;
|
||||
const char *name;
|
||||
luaL_arg_check(ttype(o) == TAG_LCLOSURE, 1, "Lua function expected");
|
||||
p = clvalue(o)->f.l;
|
||||
while ((name = luaF_getlocalname(p, i++, pc)) != NULL)
|
||||
lua_pushstring(name);
|
||||
}
|
||||
|
||||
/* }====================================================== */
|
||||
|
||||
|
||||
|
||||
static void get_limits (void) {
|
||||
lua_Object t = lua_createtable();
|
||||
setnameval(t, "SIZE_OP", SIZE_OP);
|
||||
setnameval(t, "SIZE_U", SIZE_U);
|
||||
setnameval(t, "SIZE_A", SIZE_A);
|
||||
setnameval(t, "SIZE_B", SIZE_B);
|
||||
setnameval(t, "MAXARG_U", MAXARG_U);
|
||||
setnameval(t, "MAXARG_S", MAXARG_S);
|
||||
setnameval(t, "BITS_INT", BITS_INT);
|
||||
setnameval(t, "LFPF", LFIELDS_PER_FLUSH);
|
||||
setnameval(t, "MAXARG_A", MAXARG_A);
|
||||
setnameval(t, "MAXARG_B", MAXARG_B);
|
||||
setnameval(t, "MAXSTACK", MAXSTACK);
|
||||
setnameval(t, "MAXARG_S", MAXARG_S);
|
||||
setnameval(t, "MAXARG_U", MAXARG_U);
|
||||
setnameval(t, "MAXLOCALS", MAXLOCALS);
|
||||
setnameval(t, "MAXPARAMS", MAXPARAMS);
|
||||
setnameval(t, "MAXSTACK", MAXSTACK);
|
||||
setnameval(t, "MAXUPVALUES", MAXUPVALUES);
|
||||
setnameval(t, "MAXVARSLH", MAXVARSLH);
|
||||
setnameval(t, "MAXPARAMS", MAXPARAMS);
|
||||
setnameval(t, "LFPF", LFIELDS_PER_FLUSH);
|
||||
setnameval(t, "RFPF", RFIELDS_PER_FLUSH);
|
||||
setnameval(t, "SIZE_A", SIZE_A);
|
||||
setnameval(t, "SIZE_B", SIZE_B);
|
||||
setnameval(t, "SIZE_OP", SIZE_OP);
|
||||
setnameval(t, "SIZE_U", SIZE_U);
|
||||
lua_pushobject(t);
|
||||
}
|
||||
|
||||
@ -397,6 +417,7 @@ static const struct luaL_reg tests_funcs[] = {
|
||||
{"limits", (lua_CFunction)get_limits},
|
||||
{"listcode", (lua_CFunction)listcode},
|
||||
{"liststrings", (lua_CFunction)liststrings},
|
||||
{"listlocals", (lua_CFunction)listlocals},
|
||||
{"querystr", (lua_CFunction)string_query},
|
||||
{"querytab", (lua_CFunction)table_query},
|
||||
{"testC", (lua_CFunction)testC},
|
||||
|
Loading…
x
Reference in New Issue
Block a user