diff options
Diffstat (limited to 'lvm.c')
| -rw-r--r-- | lvm.c | 64 |
1 files changed, 33 insertions, 31 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 1.5 1997/09/24 19:43:11 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.6 1997/09/26 15:02:26 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 | */ |
| @@ -452,8 +452,13 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
| 452 | break; | 452 | break; |
| 453 | 453 | ||
| 454 | case CREATEARRAY: | 454 | case CREATEARRAY: |
| 455 | aux = next_word(pc); goto createarray; | ||
| 456 | |||
| 457 | case CREATEARRAYB: | ||
| 458 | aux = *pc++; | ||
| 459 | createarray: | ||
| 455 | luaC_checkGC(); | 460 | luaC_checkGC(); |
| 456 | avalue(luaD_stack.top) = luaH_new(next_word(pc)); | 461 | avalue(luaD_stack.top) = luaH_new(aux); |
| 457 | ttype(luaD_stack.top) = LUA_T_ARRAY; | 462 | ttype(luaD_stack.top) = LUA_T_ARRAY; |
| 458 | luaD_stack.top++; | 463 | luaD_stack.top++; |
| 459 | break; | 464 | break; |
| @@ -565,54 +570,51 @@ StkId luaV_execute (Closure *cl, StkId base) | |||
| 565 | break; | 570 | break; |
| 566 | 571 | ||
| 567 | case ONTJMP: | 572 | case ONTJMP: |
| 568 | if (ttype(luaD_stack.top-1) != LUA_T_NIL) | 573 | if (ttype(luaD_stack.top-1) != LUA_T_NIL) pc += *pc; |
| 569 | pc += *pc; | 574 | else { pc++; luaD_stack.top--; } |
| 570 | else { | ||
| 571 | pc++; | ||
| 572 | luaD_stack.top--; | ||
| 573 | } | ||
| 574 | break; | 575 | break; |
| 575 | 576 | ||
| 576 | case ONFJMP: | 577 | case ONFJMP: |
| 577 | if (ttype(luaD_stack.top-1) == LUA_T_NIL) | 578 | if (ttype(luaD_stack.top-1) == LUA_T_NIL) pc += *pc; |
| 578 | pc += *pc; | 579 | else { pc++; luaD_stack.top--; } |
| 579 | else { | 580 | break; |
| 580 | pc++; | 581 | |
| 581 | luaD_stack.top--; | 582 | case JMPB: |
| 582 | } | 583 | pc += *pc; |
| 583 | break; | 584 | break; |
| 584 | 585 | ||
| 585 | case JMP: | 586 | case JMP: |
| 586 | pc += get_word(pc); | 587 | pc += get_word(pc); |
| 587 | break; | 588 | break; |
| 588 | 589 | ||
| 589 | case UPJMPB: | 590 | case IFFJMPB: |
| 590 | pc -= *pc; | 591 | if (ttype(--luaD_stack.top) == LUA_T_NIL) pc += *pc; |
| 592 | else pc++; | ||
| 591 | break; | 593 | break; |
| 592 | 594 | ||
| 593 | case UPJMP: | 595 | case IFFJMP: |
| 594 | pc -= get_word(pc); | 596 | if (ttype(--luaD_stack.top) == LUA_T_NIL) pc += get_word(pc); |
| 597 | else skip_word(pc); | ||
| 595 | break; | 598 | break; |
| 596 | 599 | ||
| 597 | case IFFJMP: | 600 | case IFTUPJMPB: |
| 598 | if (ttype(--luaD_stack.top) == LUA_T_NIL) | 601 | if (ttype(--luaD_stack.top) != LUA_T_NIL) pc -= *pc; |
| 599 | pc += get_word(pc); | 602 | else pc++; |
| 600 | else | 603 | break; |
| 601 | skip_word(pc); | 604 | |
| 605 | case IFTUPJMP: | ||
| 606 | if (ttype(--luaD_stack.top) != LUA_T_NIL) pc -= get_word(pc); | ||
| 607 | else skip_word(pc); | ||
| 602 | break; | 608 | break; |
| 603 | 609 | ||
| 604 | case IFFUPJMPB: | 610 | case IFFUPJMPB: |
| 605 | if (ttype(--luaD_stack.top) == LUA_T_NIL) | 611 | if (ttype(--luaD_stack.top) == LUA_T_NIL) pc -= *pc; |
| 606 | pc -= *pc; | 612 | else pc++; |
| 607 | else | ||
| 608 | pc++; | ||
| 609 | break; | 613 | break; |
| 610 | 614 | ||
| 611 | case IFFUPJMP: | 615 | case IFFUPJMP: |
| 612 | if (ttype(--luaD_stack.top) == LUA_T_NIL) | 616 | if (ttype(--luaD_stack.top) == LUA_T_NIL) pc -= get_word(pc); |
| 613 | pc -= get_word(pc); | 617 | else skip_word(pc); |
| 614 | else | ||
| 615 | skip_word(pc); | ||
| 616 | break; | 618 | break; |
| 617 | 619 | ||
| 618 | case CLOSURE: | 620 | case CLOSURE: |
