diff options
Diffstat (limited to 'ldebug.c')
-rw-r--r-- | ldebug.c | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldebug.c,v 1.1 2001/11/29 22:14:34 rieru Exp rieru $ | 2 | ** $Id: ldebug.c,v 1.96 2001/12/18 20:52:30 roberto Exp $ |
3 | ** Debug Interface | 3 | ** Debug Interface |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -303,7 +303,7 @@ static int checkopenop (const Proto *pt, int pc) { | |||
303 | switch (GET_OPCODE(i)) { | 303 | switch (GET_OPCODE(i)) { |
304 | case OP_CALL: | 304 | case OP_CALL: |
305 | case OP_RETURN: { | 305 | case OP_RETURN: { |
306 | check(GETARG_B(i) == NO_REG); | 306 | check(GETARG_B(i) == 0); |
307 | return 1; | 307 | return 1; |
308 | } | 308 | } |
309 | case OP_SETLISTO: return 1; | 309 | case OP_SETLISTO: return 1; |
@@ -391,10 +391,11 @@ static Instruction luaG_symbexec (const Proto *pt, int lastpc, int reg) { | |||
391 | break; | 391 | break; |
392 | } | 392 | } |
393 | case OP_CALL: { | 393 | case OP_CALL: { |
394 | if (b != NO_REG) { | 394 | if (b != 0) { |
395 | checkreg(pt, a+b); | 395 | checkreg(pt, a+b-1); |
396 | } | 396 | } |
397 | if (c == NO_REG) { | 397 | c--; /* c = num. returns */ |
398 | if (c == LUA_MULTRET) { | ||
398 | check(checkopenop(pt, pc)); | 399 | check(checkopenop(pt, pc)); |
399 | } | 400 | } |
400 | else if (c != 0) | 401 | else if (c != 0) |
@@ -403,8 +404,8 @@ static Instruction luaG_symbexec (const Proto *pt, int lastpc, int reg) { | |||
403 | break; | 404 | break; |
404 | } | 405 | } |
405 | case OP_RETURN: { | 406 | case OP_RETURN: { |
406 | if (b != NO_REG && b != 0) | 407 | b--; /* b = num. returns */ |
407 | checkreg(pt, a+b-1); | 408 | if (b > 0) checkreg(pt, a+b-1); |
408 | break; | 409 | break; |
409 | } | 410 | } |
410 | case OP_FORPREP: | 411 | case OP_FORPREP: |