diff options
Diffstat (limited to 'ltests.c')
-rw-r--r-- | ltests.c | 87 |
1 files changed, 29 insertions, 58 deletions
@@ -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) | 53 | static 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 | ||
59 | static int pushop (lua_State *L, Instruction i) { | 65 | static 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 | |||
117 | static void listcode (lua_State *L) { | 88 | static 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); |