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 ();