Mercurial > emacs
comparison src/bytecode.c @ 71870:a0954041b695
(Fbyte_code): Use CAR, CDR for Bcar, Bcdr.
Use CAR_SAFE, CDR_SAFE for Bcar_safe, Bcdr_safe.
Simplify loops and use CAR for Bnth and Belt.
| author | Kim F. Storm <storm@cua.dk> |
|---|---|
| date | Thu, 13 Jul 2006 13:43:38 +0000 |
| parents | 7db6ed27e18f |
| children | 7c6439fdd0c7 8a8e69664178 |
comparison
equal
deleted
inserted
replaced
| 71869:5ccd38cf83f4 | 71870:a0954041b695 |
|---|---|
| 539 | 539 |
| 540 case Bcar: | 540 case Bcar: |
| 541 { | 541 { |
| 542 Lisp_Object v1; | 542 Lisp_Object v1; |
| 543 v1 = TOP; | 543 v1 = TOP; |
| 544 if (CONSP (v1)) | 544 TOP = CAR (v1); |
| 545 TOP = XCAR (v1); | |
| 546 else if (NILP (v1)) | |
| 547 TOP = Qnil; | |
| 548 else | |
| 549 wrong_type_argument (Qlistp, v1); | |
| 550 break; | 545 break; |
| 551 } | 546 } |
| 552 | 547 |
| 553 case Beq: | 548 case Beq: |
| 554 { | 549 { |
| 570 | 565 |
| 571 case Bcdr: | 566 case Bcdr: |
| 572 { | 567 { |
| 573 Lisp_Object v1; | 568 Lisp_Object v1; |
| 574 v1 = TOP; | 569 v1 = TOP; |
| 575 if (CONSP (v1)) | 570 TOP = CDR (v1); |
| 576 TOP = XCDR (v1); | |
| 577 else if (NILP (v1)) | |
| 578 TOP = Qnil; | |
| 579 else | |
| 580 wrong_type_argument (Qlistp, v1); | |
| 581 break; | 571 break; |
| 582 } | 572 } |
| 583 | 573 |
| 584 case Bvarset: | 574 case Bvarset: |
| 585 case Bvarset+1: | 575 case Bvarset+1: |
| 910 v2 = TOP; | 900 v2 = TOP; |
| 911 CHECK_NUMBER (v2); | 901 CHECK_NUMBER (v2); |
| 912 AFTER_POTENTIAL_GC (); | 902 AFTER_POTENTIAL_GC (); |
| 913 op = XINT (v2); | 903 op = XINT (v2); |
| 914 immediate_quit = 1; | 904 immediate_quit = 1; |
| 915 while (--op >= 0) | 905 while (--op >= 0 && CONSP (v1)) |
| 916 { | 906 v1 = XCDR (v1); |
| 917 if (CONSP (v1)) | |
| 918 v1 = XCDR (v1); | |
| 919 else if (!NILP (v1)) | |
| 920 { | |
| 921 immediate_quit = 0; | |
| 922 wrong_type_argument (Qlistp, v1); | |
| 923 } | |
| 924 } | |
| 925 immediate_quit = 0; | 907 immediate_quit = 0; |
| 926 if (CONSP (v1)) | 908 TOP = CAR (v1); |
| 927 TOP = XCAR (v1); | |
| 928 else if (NILP (v1)) | |
| 929 TOP = Qnil; | |
| 930 else | |
| 931 wrong_type_argument (Qlistp, v1); | |
| 932 break; | 909 break; |
| 933 } | 910 } |
| 934 | 911 |
| 935 case Bsymbolp: | 912 case Bsymbolp: |
| 936 TOP = SYMBOLP (TOP) ? Qt : Qnil; | 913 TOP = SYMBOLP (TOP) ? Qt : Qnil; |
| 1549 v1 = TOP; | 1526 v1 = TOP; |
| 1550 CHECK_NUMBER (v2); | 1527 CHECK_NUMBER (v2); |
| 1551 AFTER_POTENTIAL_GC (); | 1528 AFTER_POTENTIAL_GC (); |
| 1552 op = XINT (v2); | 1529 op = XINT (v2); |
| 1553 immediate_quit = 1; | 1530 immediate_quit = 1; |
| 1554 while (--op >= 0) | 1531 while (--op >= 0 && CONSP (v1)) |
| 1555 { | 1532 v1 = XCDR (v1); |
| 1556 if (CONSP (v1)) | |
| 1557 v1 = XCDR (v1); | |
| 1558 else if (!NILP (v1)) | |
| 1559 { | |
| 1560 immediate_quit = 0; | |
| 1561 wrong_type_argument (Qlistp, v1); | |
| 1562 } | |
| 1563 } | |
| 1564 immediate_quit = 0; | 1533 immediate_quit = 0; |
| 1565 if (CONSP (v1)) | 1534 TOP = CAR (v1); |
| 1566 TOP = XCAR (v1); | |
| 1567 else if (NILP (v1)) | |
| 1568 TOP = Qnil; | |
| 1569 else | |
| 1570 wrong_type_argument (Qlistp, v1); | |
| 1571 } | 1535 } |
| 1572 else | 1536 else |
| 1573 { | 1537 { |
| 1574 BEFORE_POTENTIAL_GC (); | 1538 BEFORE_POTENTIAL_GC (); |
| 1575 v1 = POP; | 1539 v1 = POP; |
| 1627 | 1591 |
| 1628 case Bcar_safe: | 1592 case Bcar_safe: |
| 1629 { | 1593 { |
| 1630 Lisp_Object v1; | 1594 Lisp_Object v1; |
| 1631 v1 = TOP; | 1595 v1 = TOP; |
| 1632 if (CONSP (v1)) | 1596 TOP = CAR_SAFE (v1); |
| 1633 TOP = XCAR (v1); | |
| 1634 else | |
| 1635 TOP = Qnil; | |
| 1636 break; | 1597 break; |
| 1637 } | 1598 } |
| 1638 | 1599 |
| 1639 case Bcdr_safe: | 1600 case Bcdr_safe: |
| 1640 { | 1601 { |
| 1641 Lisp_Object v1; | 1602 Lisp_Object v1; |
| 1642 v1 = TOP; | 1603 v1 = TOP; |
| 1643 if (CONSP (v1)) | 1604 TOP = CDR_SAFE (v1); |
| 1644 TOP = XCDR (v1); | |
| 1645 else | |
| 1646 TOP = Qnil; | |
| 1647 break; | 1605 break; |
| 1648 } | 1606 } |
| 1649 | 1607 |
| 1650 case Bnconc: | 1608 case Bnconc: |
| 1651 BEFORE_POTENTIAL_GC (); | 1609 BEFORE_POTENTIAL_GC (); |
