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) : |