diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-11 11:56:42 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2001-06-11 11:56:42 -0300 |
| commit | 0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf (patch) | |
| tree | f7c4e2b02380381e65fb19956ab7921bba33be97 /lvm.c | |
| parent | 79acf5ea6083fe4aebeb24740d25ddf35654944a (diff) | |
| download | lua-0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf.tar.gz lua-0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf.tar.bz2 lua-0a1b1acdd36a3ed4e6f1cadf62eec8531a437cbf.zip | |
details about opcode parameters
Diffstat (limited to 'lvm.c')
| -rw-r--r-- | lvm.c | 24 |
1 files changed, 12 insertions, 12 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 1.182 2001/06/08 19:00:57 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.183 2001/06/08 19:20:02 roberto Exp roberto $ |
| 3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -488,37 +488,37 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 488 | } | 488 | } |
| 489 | case OP_TESTEQ: { | 489 | case OP_TESTEQ: { |
| 490 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); | 490 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); |
| 491 | if (luaO_equalObj(RB(i), RKC(i))) dojump(pc, *pc); | 491 | if (luaO_equalObj(ra, RKC(i))) dojump(pc, *pc); |
| 492 | pc++; | 492 | pc++; |
| 493 | break; | 493 | break; |
| 494 | } | 494 | } |
| 495 | case OP_TESTNE: { | 495 | case OP_TESTNE: { |
| 496 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); | 496 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); |
| 497 | if (!luaO_equalObj(RB(i), RKC(i))) dojump(pc, *pc); | 497 | if (!luaO_equalObj(ra, RKC(i))) dojump(pc, *pc); |
| 498 | pc++; | 498 | pc++; |
| 499 | break; | 499 | break; |
| 500 | } | 500 | } |
| 501 | case OP_TESTLT: { | 501 | case OP_TESTLT: { |
| 502 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); | 502 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); |
| 503 | if (luaV_lessthan(L, RB(i), RKC(i))) dojump(pc, *pc); | 503 | if (luaV_lessthan(L, ra, RKC(i))) dojump(pc, *pc); |
| 504 | pc++; | 504 | pc++; |
| 505 | break; | 505 | break; |
| 506 | } | 506 | } |
| 507 | case OP_TESTLE: { /* b <= c === !(c<b) */ | 507 | case OP_TESTLE: { /* b <= c === !(c<b) */ |
| 508 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); | 508 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); |
| 509 | if (!luaV_lessthan(L, RKC(i), RB(i))) dojump(pc, *pc); | 509 | if (!luaV_lessthan(L, RKC(i), ra)) dojump(pc, *pc); |
| 510 | pc++; | 510 | pc++; |
| 511 | break; | 511 | break; |
| 512 | } | 512 | } |
| 513 | case OP_TESTGT: { /* b > c === (c<b) */ | 513 | case OP_TESTGT: { /* b > c === (c<b) */ |
| 514 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); | 514 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); |
| 515 | if (luaV_lessthan(L, RKC(i), RB(i))) dojump(pc, *pc); | 515 | if (luaV_lessthan(L, RKC(i), ra)) dojump(pc, *pc); |
| 516 | pc++; | 516 | pc++; |
| 517 | break; | 517 | break; |
| 518 | } | 518 | } |
| 519 | case OP_TESTGE: { /* b >= c === !(b<c) */ | 519 | case OP_TESTGE: { /* b >= c === !(b<c) */ |
| 520 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); | 520 | lua_assert(GET_OPCODE(*pc) == OP_CJMP); |
| 521 | if (!luaV_lessthan(L, RB(i), RKC(i))) dojump(pc, *pc); | 521 | if (!luaV_lessthan(L, ra, RKC(i))) dojump(pc, *pc); |
| 522 | pc++; | 522 | pc++; |
| 523 | break; | 523 | break; |
| 524 | } | 524 | } |
| @@ -550,11 +550,11 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 550 | int c; | 550 | int c; |
| 551 | int b = GETARG_B(i); | 551 | int b = GETARG_B(i); |
| 552 | if (b != NO_REG) | 552 | if (b != NO_REG) |
| 553 | L->top = base+b; | 553 | L->top = ra+b+1; |
| 554 | luaD_call(L, ra); | 554 | luaD_call(L, ra); |
| 555 | c = GETARG_C(i); | 555 | c = GETARG_C(i); |
| 556 | if (c != NO_REG) { | 556 | if (c != NO_REG) { |
| 557 | while (L->top < base+c) setnilvalue(L->top++); | 557 | while (L->top < ra+c) setnilvalue(L->top++); |
| 558 | L->top = base + tf->maxstacksize; | 558 | L->top = base + tf->maxstacksize; |
| 559 | } | 559 | } |
| 560 | break; | 560 | break; |
| @@ -562,7 +562,7 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 562 | case OP_RETURN: { | 562 | case OP_RETURN: { |
| 563 | int b = GETARG_B(i); | 563 | int b = GETARG_B(i); |
| 564 | if (b != NO_REG) | 564 | if (b != NO_REG) |
| 565 | L->top = base+b; | 565 | L->top = ra+b; |
| 566 | return ra; | 566 | return ra; |
| 567 | } | 567 | } |
| 568 | case OP_FORPREP: { | 568 | case OP_FORPREP: { |
| @@ -578,10 +578,10 @@ StkId luaV_execute (lua_State *L, const Closure *cl, StkId base) { | |||
| 578 | /* go through */ | 578 | /* go through */ |
| 579 | } | 579 | } |
| 580 | case OP_FORLOOP: { | 580 | case OP_FORLOOP: { |
| 581 | if (ttype(ra) != LUA_TNUMBER) | ||
| 582 | luaD_error(L, l_s("`for' index must be a number")); | ||
| 583 | runtime_check(L, ttype(ra+1) == LUA_TNUMBER && | 581 | runtime_check(L, ttype(ra+1) == LUA_TNUMBER && |
| 584 | ttype(ra+2) == LUA_TNUMBER); | 582 | ttype(ra+2) == LUA_TNUMBER); |
| 583 | if (ttype(ra) != LUA_TNUMBER) | ||
| 584 | luaD_error(L, l_s("`for' index must be a number")); | ||
| 585 | nvalue(ra) += nvalue(ra+2); /* increment index */ | 585 | nvalue(ra) += nvalue(ra+2); /* increment index */ |
| 586 | if (nvalue(ra+2) > 0 ? | 586 | if (nvalue(ra+2) > 0 ? |
| 587 | nvalue(ra) <= nvalue(ra+1) : | 587 | nvalue(ra) <= nvalue(ra+1) : |
