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 /lvm.c | |
parent | 0f5a497ed903fea2065f76d2cc2512ebeacef1d2 (diff) | |
download | lua-23e08a68f51b36506c5ee8571e9dca01d67b7454.tar.gz lua-23e08a68f51b36506c5ee8571e9dca01d67b7454.tar.bz2 lua-23e08a68f51b36506c5ee8571e9dca01d67b7454.zip |
detail
Diffstat (limited to 'lvm.c')
-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 | } |