aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ltests.c59
1 files changed, 40 insertions, 19 deletions
diff --git a/ltests.c b/ltests.c
index 7e7c980b..c512718c 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltests.c,v 1.26 2000/06/21 17:05:49 roberto Exp roberto $ 2** $Id: ltests.c,v 1.27 2000/06/26 19:28:31 roberto Exp roberto $
3** Internal Module for Debugging of the Lua Implementation 3** Internal Module for Debugging of the Lua Implementation
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -17,6 +17,7 @@
17#include "lauxlib.h" 17#include "lauxlib.h"
18#include "lcode.h" 18#include "lcode.h"
19#include "ldo.h" 19#include "ldo.h"
20#include "lfunc.h"
20#include "lmem.h" 21#include "lmem.h"
21#include "lopcodes.h" 22#include "lopcodes.h"
22#include "lstate.h" 23#include "lstate.h"
@@ -62,22 +63,28 @@ static const char *const instrname[NUM_OPCODES] = {
62}; 63};
63 64
64 65
65static int pushop (Instruction i) { 66static int pushop (Proto *p, int pc) {
66 char buff[100]; 67 char buff[100];
68 Instruction i = p->code[pc];
67 OpCode o = GET_OPCODE(i); 69 OpCode o = GET_OPCODE(i);
68 const char *name = instrname[o]; 70 const char *name = instrname[o];
71 int *line = p->lines;
72 if (line)
73 sprintf(buff, "%5d - ", line[pc]);
74 else
75 strcpy(buff, " ");
69 switch ((enum Mode)luaK_opproperties[o].mode) { 76 switch ((enum Mode)luaK_opproperties[o].mode) {
70 case iO: 77 case iO:
71 sprintf(buff, "%s", name); 78 sprintf(buff+8, "%s", name);
72 break; 79 break;
73 case iU: 80 case iU:
74 sprintf(buff, "%-12s%4u", name, GETARG_U(i)); 81 sprintf(buff+8, "%-12s%4u", name, GETARG_U(i));
75 break; 82 break;
76 case iS: 83 case iS:
77 sprintf(buff, "%-12s%4d", name, GETARG_S(i)); 84 sprintf(buff+8, "%-12s%4d", name, GETARG_S(i));
78 break; 85 break;
79 case iAB: 86 case iAB:
80 sprintf(buff, "%-12s%4d %4d", name, GETARG_A(i), GETARG_B(i)); 87 sprintf(buff+8, "%-12s%4d %4d", name, GETARG_A(i), GETARG_B(i));
81 break; 88 break;
82 } 89 }
83 lua_pushstring(buff); 90 lua_pushstring(buff);
@@ -88,18 +95,18 @@ static int pushop (Instruction i) {
88static void listcode (void) { 95static void listcode (void) {
89 lua_Object o = luaL_nonnullarg(1); 96 lua_Object o = luaL_nonnullarg(1);
90 lua_Object t = lua_createtable(); 97 lua_Object t = lua_createtable();
91 Instruction *pc; 98 int pc;
92 Proto *p; 99 Proto *p;
93 int res; 100 int res;
94 luaL_arg_check(ttype(o) == TAG_LCLOSURE, 1, "Lua function expected"); 101 luaL_arg_check(ttype(o) == TAG_LCLOSURE, 1, "Lua function expected");
95 p = clvalue(o)->f.l; 102 p = clvalue(o)->f.l;
96 setnameval(t, "maxstack", p->maxstacksize); 103 setnameval(t, "maxstack", p->maxstacksize);
97 setnameval(t, "numparams", p->numparams); 104 setnameval(t, "numparams", p->numparams);
98 pc = p->code; 105 pc = 0;
99 do { 106 do {
100 lua_pushobject(t); 107 lua_pushobject(t);
101 lua_pushnumber(pc - p->code + 1); 108 lua_pushnumber(pc+1);
102 res = pushop(*pc++); 109 res = pushop(p, pc++);
103 lua_settable(); 110 lua_settable();
104 } while (res); 111 } while (res);
105 lua_pushobject(t); 112 lua_pushobject(t);
@@ -123,27 +130,40 @@ static void liststrings (void) {
123} 130}
124 131
125 132
133static void listlocals (void) {
134 lua_Object o = luaL_nonnullarg(1);
135 Proto *p;
136 int pc = luaL_check_int(2) - 1;
137 int i = 1;
138 const char *name;
139 luaL_arg_check(ttype(o) == TAG_LCLOSURE, 1, "Lua function expected");
140 p = clvalue(o)->f.l;
141 while ((name = luaF_getlocalname(p, i++, pc)) != NULL)
142 lua_pushstring(name);
143}
144
126/* }====================================================== */ 145/* }====================================================== */
127 146
128 147
129 148
130static void get_limits (void) { 149static void get_limits (void) {
131 lua_Object t = lua_createtable(); 150 lua_Object t = lua_createtable();
132 setnameval(t, "SIZE_OP", SIZE_OP); 151 setnameval(t, "BITS_INT", BITS_INT);
133 setnameval(t, "SIZE_U", SIZE_U); 152 setnameval(t, "LFPF", LFIELDS_PER_FLUSH);
134 setnameval(t, "SIZE_A", SIZE_A);
135 setnameval(t, "SIZE_B", SIZE_B);
136 setnameval(t, "MAXARG_U", MAXARG_U);
137 setnameval(t, "MAXARG_S", MAXARG_S);
138 setnameval(t, "MAXARG_A", MAXARG_A); 153 setnameval(t, "MAXARG_A", MAXARG_A);
139 setnameval(t, "MAXARG_B", MAXARG_B); 154 setnameval(t, "MAXARG_B", MAXARG_B);
140 setnameval(t, "MAXSTACK", MAXSTACK); 155 setnameval(t, "MAXARG_S", MAXARG_S);
156 setnameval(t, "MAXARG_U", MAXARG_U);
141 setnameval(t, "MAXLOCALS", MAXLOCALS); 157 setnameval(t, "MAXLOCALS", MAXLOCALS);
158 setnameval(t, "MAXPARAMS", MAXPARAMS);
159 setnameval(t, "MAXSTACK", MAXSTACK);
142 setnameval(t, "MAXUPVALUES", MAXUPVALUES); 160 setnameval(t, "MAXUPVALUES", MAXUPVALUES);
143 setnameval(t, "MAXVARSLH", MAXVARSLH); 161 setnameval(t, "MAXVARSLH", MAXVARSLH);
144 setnameval(t, "MAXPARAMS", MAXPARAMS);
145 setnameval(t, "LFPF", LFIELDS_PER_FLUSH);
146 setnameval(t, "RFPF", RFIELDS_PER_FLUSH); 162 setnameval(t, "RFPF", RFIELDS_PER_FLUSH);
163 setnameval(t, "SIZE_A", SIZE_A);
164 setnameval(t, "SIZE_B", SIZE_B);
165 setnameval(t, "SIZE_OP", SIZE_OP);
166 setnameval(t, "SIZE_U", SIZE_U);
147 lua_pushobject(t); 167 lua_pushobject(t);
148} 168}
149 169
@@ -397,6 +417,7 @@ static const struct luaL_reg tests_funcs[] = {
397 {"limits", (lua_CFunction)get_limits}, 417 {"limits", (lua_CFunction)get_limits},
398 {"listcode", (lua_CFunction)listcode}, 418 {"listcode", (lua_CFunction)listcode},
399 {"liststrings", (lua_CFunction)liststrings}, 419 {"liststrings", (lua_CFunction)liststrings},
420 {"listlocals", (lua_CFunction)listlocals},
400 {"querystr", (lua_CFunction)string_query}, 421 {"querystr", (lua_CFunction)string_query},
401 {"querytab", (lua_CFunction)table_query}, 422 {"querytab", (lua_CFunction)table_query},
402 {"testC", (lua_CFunction)testC}, 423 {"testC", (lua_CFunction)testC},