aboutsummaryrefslogtreecommitdiff
path: root/ltests.c
diff options
context:
space:
mode:
Diffstat (limited to 'ltests.c')
-rw-r--r--ltests.c87
1 files changed, 29 insertions, 58 deletions
diff --git a/ltests.c b/ltests.c
index 8502c95a..c541e02e 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltests.c,v 1.18 2000/05/10 16:33:20 roberto Exp roberto $ 2** $Id: ltests.c,v 1.19 2000/05/15 19:48:04 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*/
@@ -14,6 +14,7 @@
14 14
15#include "lapi.h" 15#include "lapi.h"
16#include "lauxlib.h" 16#include "lauxlib.h"
17#include "lcode.h"
17#include "ldo.h" 18#include "ldo.h"
18#include "lmem.h" 19#include "lmem.h"
19#include "lopcodes.h" 20#include "lopcodes.h"
@@ -49,71 +50,41 @@ static void setnameval (lua_State *L, lua_Object t, const char *name, int val) {
49*/ 50*/
50 51
51 52
52#define O(o) sprintf(buff, "%s", o) 53static const char *const instrname[OP_SETLINE+1] = {
53#define U(o) sprintf(buff, "%-12s%4u", o, GETARG_U(i)) 54 "END", "RETURN", "CALL", "TAILCALL", "PUSHNIL", "POP", "PUSHINT",
54#define S(o) sprintf(buff, "%-12s%4d", o, GETARG_S(i)) 55 "PUSHSTRING", "PUSHNUM", "PUSHNEGNUM", "PUSHUPVALUE", "GETLOCAL",
55#define AB(o) sprintf(buff, "%-12s%4d %4d", o, GETARG_A(i), GETARG_B(i)) 56 "GETGLOBAL", "GETTABLE", "GETDOTTED", "GETINDEXED", "PUSHSELF",
56 57 "CREATETABLE", "SETLOCAL", "SETGLOBAL", "SETTABLE", "SETLIST", "SETMAP",
58 "ADD", "ADDI", "SUB", "MULT", "DIV", "POW", "CONCAT", "MINUS", "NOT",
59 "JMPNE", "JMPEQ", "JMPLT", "JMPLE", "JMPGT", "JMPGE", "JMPT", "JMPF",
60 "JMPONT", "JMPONF", "JMP", "PUSHNILJMP", "FORPREP", "FORLOOP", "LFORPREP",
61 "LFORLOOP", "CLOSURE", "SETLINE"
62};
57 63
58 64
59static int pushop (lua_State *L, Instruction i) { 65static int pushop (lua_State *L, Instruction i) {
60 char buff[100]; 66 char buff[100];
61 switch (GET_OPCODE(i)) { 67 OpCode o = GET_OPCODE(i);
62 case OP_END: O("END"); lua_pushstring(L, buff); return 0; 68 const char *name = instrname[o];
63 case OP_RETURN: U("RETURN"); break; 69 switch ((enum Mode)luaK_opproperties[o].mode) {
64 case OP_CALL: AB("CALL"); break; 70 case iO:
65 case OP_TAILCALL: AB("TAILCALL"); break; 71 sprintf(buff, "%s", name);
66 case OP_PUSHNIL: U("PUSHNIL"); break; 72 break;
67 case OP_POP: U("POP"); break; 73 case iU:
68 case OP_PUSHINT: S("PUSHINT"); break; 74 sprintf(buff, "%-12s%4u", name, GETARG_U(i));
69 case OP_PUSHSTRING: U("PUSHSTRING"); break; 75 break;
70 case OP_PUSHNUM: U("PUSHNUM"); break; 76 case iS:
71 case OP_PUSHNEGNUM: U("PUSHNEGNUM"); break; 77 sprintf(buff, "%-12s%4d", name, GETARG_S(i));
72 case OP_PUSHUPVALUE: U("PUSHUPVALUE"); break; 78 break;
73 case OP_GETLOCAL: U("GETLOCAL"); break; 79 case iAB:
74 case OP_GETGLOBAL: U("GETGLOBAL"); break; 80 sprintf(buff, "%-12s%4d %4d", name, GETARG_A(i), GETARG_B(i));
75 case OP_GETTABLE: O("GETTABLE"); break; 81 break;
76 case OP_GETDOTTED: U("GETDOTTED"); break;
77 case OP_GETINDEXED: U("GETINDEXED"); break;
78 case OP_PUSHSELF: U("PUSHSELF"); break;
79 case OP_CREATETABLE: U("CREATETABLE"); break;
80 case OP_SETLOCAL: U("SETLOCAL"); break;
81 case OP_SETGLOBAL: U("SETGLOBAL"); break;
82 case OP_SETTABLE: AB("SETTABLE"); break;
83 case OP_SETLIST: AB("SETLIST"); break;
84 case OP_SETMAP: U("SETMAP"); break;
85 case OP_ADD: O("ADD"); break;
86 case OP_ADDI: S("ADDI"); break;
87 case OP_SUB: O("SUB"); break;
88 case OP_MULT: O("MULT"); break;
89 case OP_DIV: O("DIV"); break;
90 case OP_POW: O("POW"); break;
91 case OP_CONCAT: U("CONCAT"); break;
92 case OP_MINUS: O("MINUS"); break;
93 case OP_NOT: O("NOT"); break;
94 case OP_JMPNE: S("JMPNE"); break;
95 case OP_JMPEQ: S("JMPEQ"); break;
96 case OP_JMPLT: S("JMPLT"); break;
97 case OP_JMPLE: S("JMPLE"); break;
98 case OP_JMPGT: S("JMPGT"); break;
99 case OP_JMPGE: S("JMPGE"); break;
100 case OP_JMPT: S("JMPT"); break;
101 case OP_JMPF: S("JMPF"); break;
102 case OP_JMPONT: S("JMPONT"); break;
103 case OP_JMPONF: S("JMPONF"); break;
104 case OP_JMP: S("JMP"); break;
105 case OP_PUSHNILJMP: O("PUSHNILJMP"); break;
106 case OP_FORPREP: S("FORPREP"); break;
107 case OP_FORLOOP: S("FORLOOP"); break;
108 case OP_LFORPREP: S("LFORPREP"); break;
109 case OP_LFORLOOP: S("LFORLOOP"); break;
110 case OP_CLOSURE: AB("CLOSURE"); break;
111 case OP_SETLINE: U("SETLINE"); break;
112 } 82 }
113 lua_pushstring(L, buff); 83 lua_pushstring(L, buff);
114 return 1; 84 return (o != OP_END);
115} 85}
116 86
87
117static void listcode (lua_State *L) { 88static void listcode (lua_State *L) {
118 lua_Object o = luaL_nonnullarg(L, 1); 89 lua_Object o = luaL_nonnullarg(L, 1);
119 lua_Object t = lua_createtable(L); 90 lua_Object t = lua_createtable(L);