diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-03-09 10:57:37 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-03-09 10:57:37 -0300 |
| commit | e3cf93ddb677fe9482563a5687d3bf3e05ca0407 (patch) | |
| tree | c692a19e5597c785c198d558a07dd0571f3fa98c /lvm.c | |
| parent | 88b306f495fa7034c708c6b75a355a6deee51c58 (diff) | |
| download | lua-e3cf93ddb677fe9482563a5687d3bf3e05ca0407.tar.gz lua-e3cf93ddb677fe9482563a5687d3bf3e05ca0407.tar.bz2 lua-e3cf93ddb677fe9482563a5687d3bf3e05ca0407.zip | |
first implementation of "threaded code" for boolean operations
Diffstat (limited to 'lvm.c')
| -rw-r--r-- | lvm.c | 77 |
1 files changed, 41 insertions, 36 deletions
| @@ -478,36 +478,6 @@ StkId luaV_execute (lua_State *L, const Closure *cl, const TProtoFunc *tf, | |||
| 478 | break; | 478 | break; |
| 479 | } | 479 | } |
| 480 | 480 | ||
| 481 | case NEQOP: | ||
| 482 | top--; | ||
| 483 | setbool(top-1, !luaO_equalObj(top-1, top)); | ||
| 484 | break; | ||
| 485 | |||
| 486 | case EQOP: | ||
| 487 | top--; | ||
| 488 | setbool(top-1, luaO_equalObj(top-1, top)); | ||
| 489 | break; | ||
| 490 | |||
| 491 | case LTOP: | ||
| 492 | top--; | ||
| 493 | setbool(top-1, luaV_lessthan(L, top-1, top, top+1)); | ||
| 494 | break; | ||
| 495 | |||
| 496 | case LEOP: /* a <= b === !(b<a) */ | ||
| 497 | top--; | ||
| 498 | setbool(top-1, !luaV_lessthan(L, top, top-1, top+1)); | ||
| 499 | break; | ||
| 500 | |||
| 501 | case GTOP: /* a > b === (b<a) */ | ||
| 502 | top--; | ||
| 503 | setbool(top-1, luaV_lessthan(L, top, top-1, top+1)); | ||
| 504 | break; | ||
| 505 | |||
| 506 | case GEOP: /* a >= b === !(a<b) */ | ||
| 507 | top--; | ||
| 508 | setbool(top-1, !luaV_lessthan(L, top-1, top, top+1)); | ||
| 509 | break; | ||
| 510 | |||
| 511 | case ADDOP: | 481 | case ADDOP: |
| 512 | if (tonumber(top-1) || tonumber(top-2)) | 482 | if (tonumber(top-1) || tonumber(top-2)) |
| 513 | call_arith(L, top, IM_ADD); | 483 | call_arith(L, top, IM_ADD); |
| @@ -579,6 +549,44 @@ StkId luaV_execute (lua_State *L, const Closure *cl, const TProtoFunc *tf, | |||
| 579 | nvalue(top-1) = 1; | 549 | nvalue(top-1) = 1; |
| 580 | break; | 550 | break; |
| 581 | 551 | ||
| 552 | case IFNEQJMP: | ||
| 553 | top -= 2; | ||
| 554 | if (!luaO_equalObj(top, top+1)) pc += GETARG_S(i); | ||
| 555 | break; | ||
| 556 | |||
| 557 | case IFEQJMP: | ||
| 558 | top -= 2; | ||
| 559 | if (luaO_equalObj(top, top+1)) pc += GETARG_S(i); | ||
| 560 | break; | ||
| 561 | |||
| 562 | case IFLTJMP: | ||
| 563 | top -= 2; | ||
| 564 | if (luaV_lessthan(L, top, top+1, top+2)) pc += GETARG_S(i); | ||
| 565 | break; | ||
| 566 | |||
| 567 | case IFLEJMP: /* a <= b === !(b<a) */ | ||
| 568 | top -= 2; | ||
| 569 | if (!luaV_lessthan(L, top+1, top, top+2)) pc += GETARG_S(i); | ||
| 570 | break; | ||
| 571 | |||
| 572 | case IFGTJMP: /* a > b === (b<a) */ | ||
| 573 | top -= 2; | ||
| 574 | if (luaV_lessthan(L, top+1, top, top+2)) pc += GETARG_S(i); | ||
| 575 | break; | ||
| 576 | |||
| 577 | case IFGEJMP: /* a >= b === !(a<b) */ | ||
| 578 | top -= 2; | ||
| 579 | if (!luaV_lessthan(L, top, top+1, top+2)) pc += GETARG_S(i); | ||
| 580 | break; | ||
| 581 | |||
| 582 | case IFTJMP: | ||
| 583 | if (ttype(--top) != LUA_T_NIL) pc += GETARG_S(i); | ||
| 584 | break; | ||
| 585 | |||
| 586 | case IFFJMP: | ||
| 587 | if (ttype(--top) == LUA_T_NIL) pc += GETARG_S(i); | ||
| 588 | break; | ||
| 589 | |||
| 582 | case ONTJMP: | 590 | case ONTJMP: |
| 583 | if (ttype(top-1) != LUA_T_NIL) pc += GETARG_S(i); | 591 | if (ttype(top-1) != LUA_T_NIL) pc += GETARG_S(i); |
| 584 | else top--; | 592 | else top--; |
| @@ -593,12 +601,9 @@ StkId luaV_execute (lua_State *L, const Closure *cl, const TProtoFunc *tf, | |||
| 593 | pc += GETARG_S(i); | 601 | pc += GETARG_S(i); |
| 594 | break; | 602 | break; |
| 595 | 603 | ||
| 596 | case IFTJMP: | 604 | case PUSHNILJMP: |
| 597 | if (ttype(--top) != LUA_T_NIL) pc += GETARG_S(i); | 605 | ttype(top++) = LUA_T_NIL; |
| 598 | break; | 606 | pc++; |
| 599 | |||
| 600 | case IFFJMP: | ||
| 601 | if (ttype(--top) == LUA_T_NIL) pc += GETARG_S(i); | ||
| 602 | break; | 607 | break; |
| 603 | 608 | ||
| 604 | case CLOSURE: | 609 | case CLOSURE: |
