diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2004-06-29 14:05:00 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2004-06-29 14:05:00 -0300 |
| commit | 23e08a68f51b36506c5ee8571e9dca01d67b7454 (patch) | |
| tree | 90475f32f55c0281a7b0992af1bd6595d0e0145c | |
| parent | 0f5a497ed903fea2065f76d2cc2512ebeacef1d2 (diff) | |
| download | lua-23e08a68f51b36506c5ee8571e9dca01d67b7454.tar.gz lua-23e08a68f51b36506c5ee8571e9dca01d67b7454.tar.bz2 lua-23e08a68f51b36506c5ee8571e9dca01d67b7454.zip | |
detail
| -rw-r--r-- | lvm.c | 72 |
1 files changed, 36 insertions, 36 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 2.8 2004/06/02 19:07:55 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 2.9 2004/06/08 16:23:58 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 | */ |
| @@ -412,53 +412,53 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 412 | switch (GET_OPCODE(i)) { | 412 | switch (GET_OPCODE(i)) { |
| 413 | case OP_MOVE: { | 413 | case OP_MOVE: { |
| 414 | setobjs2s(L, ra, RB(i)); | 414 | setobjs2s(L, ra, RB(i)); |
| 415 | break; | 415 | continue; |
| 416 | } | 416 | } |
| 417 | case OP_LOADK: { | 417 | case OP_LOADK: { |
| 418 | setobj2s(L, ra, KBx(i)); | 418 | setobj2s(L, ra, KBx(i)); |
| 419 | break; | 419 | continue; |
| 420 | } | 420 | } |
| 421 | case OP_LOADBOOL: { | 421 | case OP_LOADBOOL: { |
| 422 | setbvalue(ra, GETARG_B(i)); | 422 | setbvalue(ra, GETARG_B(i)); |
| 423 | if (GETARG_C(i)) pc++; /* skip next instruction (if C) */ | 423 | if (GETARG_C(i)) pc++; /* skip next instruction (if C) */ |
| 424 | break; | 424 | continue; |
| 425 | } | 425 | } |
| 426 | case OP_LOADNIL: { | 426 | case OP_LOADNIL: { |
| 427 | TValue *rb = RB(i); | 427 | TValue *rb = RB(i); |
| 428 | do { | 428 | do { |
| 429 | setnilvalue(rb--); | 429 | setnilvalue(rb--); |
| 430 | } while (rb >= ra); | 430 | } while (rb >= ra); |
| 431 | break; | 431 | continue; |
| 432 | } | 432 | } |
| 433 | case OP_GETUPVAL: { | 433 | case OP_GETUPVAL: { |
| 434 | int b = GETARG_B(i); | 434 | int b = GETARG_B(i); |
| 435 | setobj2s(L, ra, cl->upvals[b]->v); | 435 | setobj2s(L, ra, cl->upvals[b]->v); |
| 436 | break; | 436 | continue; |
| 437 | } | 437 | } |
| 438 | case OP_GETGLOBAL: { | 438 | case OP_GETGLOBAL: { |
| 439 | TValue *rb = KBx(i); | 439 | TValue *rb = KBx(i); |
| 440 | lua_assert(ttisstring(rb) && ttistable(&cl->g)); | 440 | lua_assert(ttisstring(rb) && ttistable(&cl->g)); |
| 441 | base = luaV_gettable(L, &cl->g, rb, ra, pc); /***/ | 441 | base = luaV_gettable(L, &cl->g, rb, ra, pc); /***/ |
| 442 | break; | 442 | continue; |
| 443 | } | 443 | } |
| 444 | case OP_GETTABLE: { | 444 | case OP_GETTABLE: { |
| 445 | base = luaV_gettable(L, RB(i), RKC(i), ra, pc); /***/ | 445 | base = luaV_gettable(L, RB(i), RKC(i), ra, pc); /***/ |
| 446 | break; | 446 | continue; |
| 447 | } | 447 | } |
| 448 | case OP_SETGLOBAL: { | 448 | case OP_SETGLOBAL: { |
| 449 | lua_assert(ttisstring(KBx(i)) && ttistable(&cl->g)); | 449 | lua_assert(ttisstring(KBx(i)) && ttistable(&cl->g)); |
| 450 | base = luaV_settable(L, &cl->g, KBx(i), ra, pc); /***/ | 450 | base = luaV_settable(L, &cl->g, KBx(i), ra, pc); /***/ |
| 451 | break; | 451 | continue; |
| 452 | } | 452 | } |
| 453 | case OP_SETUPVAL: { | 453 | case OP_SETUPVAL: { |
| 454 | UpVal *uv = cl->upvals[GETARG_B(i)]; | 454 | UpVal *uv = cl->upvals[GETARG_B(i)]; |
| 455 | setobj(L, uv->v, ra); | 455 | setobj(L, uv->v, ra); |
| 456 | luaC_barrier(L, uv, ra); | 456 | luaC_barrier(L, uv, ra); |
| 457 | break; | 457 | continue; |
| 458 | } | 458 | } |
| 459 | case OP_SETTABLE: { | 459 | case OP_SETTABLE: { |
| 460 | base = luaV_settable(L, ra, RKB(i), RKC(i), pc); /***/ | 460 | base = luaV_settable(L, ra, RKB(i), RKC(i), pc); /***/ |
| 461 | break; | 461 | continue; |
| 462 | } | 462 | } |
| 463 | case OP_NEWTABLE: { | 463 | case OP_NEWTABLE: { |
| 464 | int b = GETARG_B(i); | 464 | int b = GETARG_B(i); |
| @@ -467,13 +467,13 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 467 | L->ci->savedpc = pc; | 467 | L->ci->savedpc = pc; |
| 468 | luaC_checkGC(L); /***/ | 468 | luaC_checkGC(L); /***/ |
| 469 | base = L->base; | 469 | base = L->base; |
| 470 | break; | 470 | continue; |
| 471 | } | 471 | } |
| 472 | case OP_SELF: { | 472 | case OP_SELF: { |
| 473 | StkId rb = RB(i); | 473 | StkId rb = RB(i); |
| 474 | setobjs2s(L, ra+1, rb); | 474 | setobjs2s(L, ra+1, rb); |
| 475 | base = luaV_gettable(L, rb, RKC(i), ra, pc); /***/ | 475 | base = luaV_gettable(L, rb, RKC(i), ra, pc); /***/ |
| 476 | break; | 476 | continue; |
| 477 | } | 477 | } |
| 478 | case OP_ADD: { | 478 | case OP_ADD: { |
| 479 | TValue *rb = RKB(i); | 479 | TValue *rb = RKB(i); |
| @@ -483,7 +483,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 483 | } | 483 | } |
| 484 | else | 484 | else |
| 485 | base = Arith(L, ra, rb, rc, TM_ADD, pc); /***/ | 485 | base = Arith(L, ra, rb, rc, TM_ADD, pc); /***/ |
| 486 | break; | 486 | continue; |
| 487 | } | 487 | } |
| 488 | case OP_SUB: { | 488 | case OP_SUB: { |
| 489 | TValue *rb = RKB(i); | 489 | TValue *rb = RKB(i); |
| @@ -493,7 +493,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 493 | } | 493 | } |
| 494 | else | 494 | else |
| 495 | base = Arith(L, ra, rb, rc, TM_SUB, pc); /***/ | 495 | base = Arith(L, ra, rb, rc, TM_SUB, pc); /***/ |
| 496 | break; | 496 | continue; |
| 497 | } | 497 | } |
| 498 | case OP_MUL: { | 498 | case OP_MUL: { |
| 499 | TValue *rb = RKB(i); | 499 | TValue *rb = RKB(i); |
| @@ -503,7 +503,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 503 | } | 503 | } |
| 504 | else | 504 | else |
| 505 | base = Arith(L, ra, rb, rc, TM_MUL, pc); /***/ | 505 | base = Arith(L, ra, rb, rc, TM_MUL, pc); /***/ |
| 506 | break; | 506 | continue; |
| 507 | } | 507 | } |
| 508 | case OP_DIV: { | 508 | case OP_DIV: { |
| 509 | TValue *rb = RKB(i); | 509 | TValue *rb = RKB(i); |
| @@ -513,11 +513,11 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 513 | } | 513 | } |
| 514 | else | 514 | else |
| 515 | base = Arith(L, ra, rb, rc, TM_DIV, pc); /***/ | 515 | base = Arith(L, ra, rb, rc, TM_DIV, pc); /***/ |
| 516 | break; | 516 | continue; |
| 517 | } | 517 | } |
| 518 | case OP_POW: { | 518 | case OP_POW: { |
| 519 | base = Arith(L, ra, RKB(i), RKC(i), TM_POW, pc); /***/ | 519 | base = Arith(L, ra, RKB(i), RKC(i), TM_POW, pc); /***/ |
| 520 | break; | 520 | continue; |
| 521 | } | 521 | } |
| 522 | case OP_UNM: { | 522 | case OP_UNM: { |
| 523 | const TValue *rb = RB(i); | 523 | const TValue *rb = RB(i); |
| @@ -532,12 +532,12 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 532 | luaG_aritherror(L, RB(i), &temp); | 532 | luaG_aritherror(L, RB(i), &temp); |
| 533 | base = L->base; | 533 | base = L->base; |
| 534 | } | 534 | } |
| 535 | break; | 535 | continue; |
| 536 | } | 536 | } |
| 537 | case OP_NOT: { | 537 | case OP_NOT: { |
| 538 | int res = l_isfalse(RB(i)); /* next assignment may change this value */ | 538 | int res = l_isfalse(RB(i)); /* next assignment may change this value */ |
| 539 | setbvalue(ra, res); | 539 | setbvalue(ra, res); |
| 540 | break; | 540 | continue; |
| 541 | } | 541 | } |
| 542 | case OP_CONCAT: { | 542 | case OP_CONCAT: { |
| 543 | int b = GETARG_B(i); | 543 | int b = GETARG_B(i); |
| @@ -547,32 +547,32 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 547 | luaC_checkGC(L); /***/ | 547 | luaC_checkGC(L); /***/ |
| 548 | base = L->base; | 548 | base = L->base; |
| 549 | setobjs2s(L, RA(i), base+b); | 549 | setobjs2s(L, RA(i), base+b); |
| 550 | break; | 550 | continue; |
| 551 | } | 551 | } |
| 552 | case OP_JMP: { | 552 | case OP_JMP: { |
| 553 | dojump(L, pc, GETARG_sBx(i)); | 553 | dojump(L, pc, GETARG_sBx(i)); |
| 554 | break; | 554 | continue; |
| 555 | } | 555 | } |
| 556 | case OP_EQ: { | 556 | case OP_EQ: { |
| 557 | L->ci->savedpc = pc; | 557 | L->ci->savedpc = pc; |
| 558 | if (equalobj(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; /***/ | 558 | if (equalobj(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; /***/ |
| 559 | else dojump(L, pc, GETARG_sBx(*pc) + 1); | 559 | else dojump(L, pc, GETARG_sBx(*pc) + 1); |
| 560 | base = L->base; | 560 | base = L->base; |
| 561 | break; | 561 | continue; |
| 562 | } | 562 | } |
| 563 | case OP_LT: { | 563 | case OP_LT: { |
| 564 | L->ci->savedpc = pc; | 564 | L->ci->savedpc = pc; |
| 565 | if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; /***/ | 565 | if (luaV_lessthan(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; /***/ |
| 566 | else dojump(L, pc, GETARG_sBx(*pc) + 1); | 566 | else dojump(L, pc, GETARG_sBx(*pc) + 1); |
| 567 | base = L->base; | 567 | base = L->base; |
| 568 | break; | 568 | continue; |
| 569 | } | 569 | } |
| 570 | case OP_LE: { | 570 | case OP_LE: { |
| 571 | L->ci->savedpc = pc; | 571 | L->ci->savedpc = pc; |
| 572 | if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; /***/ | 572 | if (luaV_lessequal(L, RKB(i), RKC(i)) != GETARG_A(i)) pc++; /***/ |
| 573 | else dojump(L, pc, GETARG_sBx(*pc) + 1); | 573 | else dojump(L, pc, GETARG_sBx(*pc) + 1); |
| 574 | base = L->base; | 574 | base = L->base; |
| 575 | break; | 575 | continue; |
| 576 | } | 576 | } |
| 577 | case OP_TEST: { | 577 | case OP_TEST: { |
| 578 | TValue *rb = RB(i); | 578 | TValue *rb = RB(i); |
| @@ -581,7 +581,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 581 | setobjs2s(L, ra, rb); | 581 | setobjs2s(L, ra, rb); |
| 582 | dojump(L, pc, GETARG_sBx(*pc) + 1); | 582 | dojump(L, pc, GETARG_sBx(*pc) + 1); |
| 583 | } | 583 | } |
| 584 | break; | 584 | continue; |
| 585 | } | 585 | } |
| 586 | case OP_CALL: { /***/ | 586 | case OP_CALL: { /***/ |
| 587 | int pcr; | 587 | int pcr; |
| @@ -598,7 +598,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 598 | /* it was a C function (`precall' called it); adjust results */ | 598 | /* it was a C function (`precall' called it); adjust results */ |
| 599 | if (nresults >= 0) L->top = L->ci->top; | 599 | if (nresults >= 0) L->top = L->ci->top; |
| 600 | base = L->base; | 600 | base = L->base; |
| 601 | break; | 601 | continue; |
| 602 | } | 602 | } |
| 603 | else { | 603 | else { |
| 604 | lua_assert(pcr == PCRYIELD); | 604 | lua_assert(pcr == PCRYIELD); |
| @@ -632,7 +632,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 632 | else if (pcr == PCRC) { | 632 | else if (pcr == PCRC) { |
| 633 | /* it was a C function (`precall' called it) */ | 633 | /* it was a C function (`precall' called it) */ |
| 634 | base = L->base; | 634 | base = L->base; |
| 635 | break; | 635 | continue; |
| 636 | } | 636 | } |
| 637 | else { | 637 | else { |
| 638 | lua_assert(pcr == PCRYIELD); | 638 | lua_assert(pcr == PCRYIELD); |
| @@ -665,7 +665,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 665 | setnvalue(ra, idx); /* update internal index... */ | 665 | setnvalue(ra, idx); /* update internal index... */ |
| 666 | setnvalue(ra+3, idx); /* ...and external index */ | 666 | setnvalue(ra+3, idx); /* ...and external index */ |
| 667 | } | 667 | } |
| 668 | break; | 668 | continue; |
| 669 | } | 669 | } |
| 670 | case OP_FORPREP: { /***/ | 670 | case OP_FORPREP: { /***/ |
| 671 | const TValue *init = ra; | 671 | const TValue *init = ra; |
| @@ -680,7 +680,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 680 | luaG_runerror(L, "`for' step must be a number"); | 680 | luaG_runerror(L, "`for' step must be a number"); |
| 681 | setnvalue(ra, nvalue(ra) - nvalue(pstep)); | 681 | setnvalue(ra, nvalue(ra) - nvalue(pstep)); |
| 682 | dojump(L, pc, GETARG_sBx(i)); | 682 | dojump(L, pc, GETARG_sBx(i)); |
| 683 | break; | 683 | continue; |
| 684 | } | 684 | } |
| 685 | case OP_TFORLOOP: { | 685 | case OP_TFORLOOP: { |
| 686 | StkId cb = ra + 3; /* call base */ | 686 | StkId cb = ra + 3; /* call base */ |
| @@ -699,7 +699,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 699 | setobjs2s(L, cb-1, cb); /* save control variable */ | 699 | setobjs2s(L, cb-1, cb); /* save control variable */ |
| 700 | dojump(L, pc, GETARG_sBx(*pc) + 1); /* jump back */ | 700 | dojump(L, pc, GETARG_sBx(*pc) + 1); /* jump back */ |
| 701 | } | 701 | } |
| 702 | break; | 702 | continue; |
| 703 | } | 703 | } |
| 704 | case OP_TFORPREP: { /* for compatibility only */ | 704 | case OP_TFORPREP: { /* for compatibility only */ |
| 705 | if (ttistable(ra)) { | 705 | if (ttistable(ra)) { |
| @@ -707,7 +707,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 707 | setobj2s(L, ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next"))); | 707 | setobj2s(L, ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next"))); |
| 708 | } | 708 | } |
| 709 | dojump(L, pc, GETARG_sBx(i)); | 709 | dojump(L, pc, GETARG_sBx(i)); |
| 710 | break; | 710 | continue; |
| 711 | } | 711 | } |
| 712 | case OP_SETLIST: | 712 | case OP_SETLIST: |
| 713 | case OP_SETLISTO: { | 713 | case OP_SETLISTO: { |
| @@ -731,11 +731,11 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 731 | setobj2t(L, luaH_setnum(L, h, last--), val); | 731 | setobj2t(L, luaH_setnum(L, h, last--), val); |
| 732 | luaC_barrier(L, h, val); | 732 | luaC_barrier(L, h, val); |
| 733 | } | 733 | } |
| 734 | break; | 734 | continue; |
| 735 | } | 735 | } |
| 736 | case OP_CLOSE: { | 736 | case OP_CLOSE: { |
| 737 | luaF_close(L, ra); | 737 | luaF_close(L, ra); |
| 738 | break; | 738 | continue; |
| 739 | } | 739 | } |
| 740 | case OP_CLOSURE: { | 740 | case OP_CLOSURE: { |
| 741 | Proto *p; | 741 | Proto *p; |
| @@ -757,7 +757,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 757 | L->ci->savedpc = pc; | 757 | L->ci->savedpc = pc; |
| 758 | luaC_checkGC(L); /***/ | 758 | luaC_checkGC(L); /***/ |
| 759 | base = L->base; | 759 | base = L->base; |
| 760 | break; | 760 | continue; |
| 761 | } | 761 | } |
| 762 | case OP_VARARG: { | 762 | case OP_VARARG: { |
| 763 | int b = GETARG_B(i) - 1; | 763 | int b = GETARG_B(i) - 1; |
| @@ -772,7 +772,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) { | |||
| 772 | setobjs2s(L, ra+j, ci->base - n + j); | 772 | setobjs2s(L, ra+j, ci->base - n + j); |
| 773 | for (; j<b; j++) | 773 | for (; j<b; j++) |
| 774 | setnilvalue(ra+j); | 774 | setnilvalue(ra+j); |
| 775 | break; | 775 | continue; |
| 776 | } | 776 | } |
| 777 | } | 777 | } |
| 778 | } | 778 | } |
