aboutsummaryrefslogtreecommitdiff
path: root/ldebug.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldebug.c')
-rw-r--r--ldebug.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/ldebug.c b/ldebug.c
index e76da28c..eb11ce17 100644
--- a/ldebug.c
+++ b/ldebug.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldebug.c,v 2.36 2007/05/09 15:49:36 roberto Exp roberto $ 2** $Id: ldebug.c,v 2.37 2007/05/29 18:59:59 roberto Exp roberto $
3** Debug Interface 3** Debug Interface
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -331,9 +331,9 @@ static Instruction symbexec (const Proto *pt, int lastpc, int reg) {
331 int b = 0; 331 int b = 0;
332 int c = 0; 332 int c = 0;
333 check(op < NUM_OPCODES); 333 check(op < NUM_OPCODES);
334 checkreg(pt, a);
335 switch (getOpMode(op)) { 334 switch (getOpMode(op)) {
336 case iABC: { 335 case iABC: {
336 checkreg(pt, a);
337 b = GETARG_B(i); 337 b = GETARG_B(i);
338 c = GETARG_C(i); 338 c = GETARG_C(i);
339 check(checkArgMode(pt, b, getBMode(op))); 339 check(checkArgMode(pt, b, getBMode(op)));
@@ -341,31 +341,27 @@ static Instruction symbexec (const Proto *pt, int lastpc, int reg) {
341 break; 341 break;
342 } 342 }
343 case iABx: { 343 case iABx: {
344 checkreg(pt, a);
344 b = GETARG_Bx(i); 345 b = GETARG_Bx(i);
345 if (getBMode(op) == OpArgK) check(b < pt->sizek); 346 if (getBMode(op) == OpArgK) check(b < pt->sizek);
346 break; 347 break;
347 } 348 }
348 case iAsBx: { 349 case iAsBx: {
350 checkreg(pt, a);
349 b = GETARG_sBx(i); 351 b = GETARG_sBx(i);
350 if (getBMode(op) == OpArgR) { 352 if (getBMode(op) == OpArgR) {
351 int dest = pc+1+b; 353 int dest = pc+1+b;
352 check(0 <= dest && dest < pt->sizecode); 354 check(0 <= dest && dest < pt->sizecode);
353 if (dest > 0) {
354 /* cannot jump to a setlist count */
355 Instruction d = pt->code[dest-1];
356 check(!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0));
357 }
358 } 355 }
359 break; 356 break;
360 } 357 }
358 case iAx: break;
361 } 359 }
362 if (testAMode(op)) { 360 if (testAMode(op)) {
363 if (a == reg) last = pc; /* change register `a' */ 361 if (a == reg) last = pc; /* change register `a' */
364 } 362 }
365 if (testTMode(op)) { 363 if (testTMode(op))
366 check(pc+2 < pt->sizecode); /* check skip */
367 check(GET_OPCODE(pt->code[pc+1]) == OP_JMP); 364 check(GET_OPCODE(pt->code[pc+1]) == OP_JMP);
368 }
369 switch (op) { 365 switch (op) {
370 case OP_LOADBOOL: { 366 case OP_LOADBOOL: {
371 check(c == 0 || pc+2 < pt->sizecode); /* check its jump */ 367 check(c == 0 || pc+2 < pt->sizecode); /* check its jump */
@@ -433,7 +429,7 @@ static Instruction symbexec (const Proto *pt, int lastpc, int reg) {
433 } 429 }
434 case OP_SETLIST: { 430 case OP_SETLIST: {
435 if (b > 0) checkreg(pt, a + b); 431 if (b > 0) checkreg(pt, a + b);
436 if (c == 0) pc++; 432 if (c == 0) check(GET_OPCODE(pt->code[pc + 1]) == OP_EXTRAARG);
437 break; 433 break;
438 } 434 }
439 case OP_CLOSURE: { 435 case OP_CLOSURE: {