comparison src/bytecode.c @ 67336:1eb416c4b163

(Fbyte_code): Avoid dangerous side effects in NILP argument.
author Ken Raeburn <raeburn@raeburn.org>
date Tue, 06 Dec 2005 07:39:05 +0000
parents 098219e8d2e8
children 3bd95f4f2941 7beb78bc1f8e
comparison
equal deleted inserted replaced
67335:a4a1c5b73301 67336:1eb416c4b163
522 PUSH (v2); 522 PUSH (v2);
523 break; 523 break;
524 } 524 }
525 525
526 case Bgotoifnil: 526 case Bgotoifnil:
527 MAYBE_GC (); 527 {
528 op = FETCH2; 528 Lisp_Object v1;
529 if (NILP (POP)) 529 MAYBE_GC ();
530 { 530 op = FETCH2;
531 BYTE_CODE_QUIT; 531 v1 = POP;
532 CHECK_RANGE (op); 532 if (NILP (v1))
533 stack.pc = stack.byte_string_start + op; 533 {
534 } 534 BYTE_CODE_QUIT;
535 break; 535 CHECK_RANGE (op);
536 stack.pc = stack.byte_string_start + op;
537 }
538 break;
539 }
536 540
537 case Bcar: 541 case Bcar:
538 { 542 {
539 Lisp_Object v1; 543 Lisp_Object v1;
540 v1 = TOP; 544 v1 = TOP;
728 CHECK_RANGE (op); 732 CHECK_RANGE (op);
729 stack.pc = stack.byte_string_start + op; 733 stack.pc = stack.byte_string_start + op;
730 break; 734 break;
731 735
732 case Bgotoifnonnil: 736 case Bgotoifnonnil:
733 MAYBE_GC (); 737 {
734 op = FETCH2; 738 Lisp_Object v1;
735 if (!NILP (POP)) 739 MAYBE_GC ();
736 { 740 op = FETCH2;
737 BYTE_CODE_QUIT; 741 v1 = POP;
738 CHECK_RANGE (op); 742 if (!NILP (v1))
739 stack.pc = stack.byte_string_start + op; 743 {
740 } 744 BYTE_CODE_QUIT;
741 break; 745 CHECK_RANGE (op);
746 stack.pc = stack.byte_string_start + op;
747 }
748 break;
749 }
742 750
743 case Bgotoifnilelsepop: 751 case Bgotoifnilelsepop:
744 MAYBE_GC (); 752 MAYBE_GC ();
745 op = FETCH2; 753 op = FETCH2;
746 if (NILP (TOP)) 754 if (NILP (TOP))
769 BYTE_CODE_QUIT; 777 BYTE_CODE_QUIT;
770 stack.pc += (int) *stack.pc - 127; 778 stack.pc += (int) *stack.pc - 127;
771 break; 779 break;
772 780
773 case BRgotoifnil: 781 case BRgotoifnil:
774 MAYBE_GC (); 782 {
775 if (NILP (POP)) 783 Lisp_Object v1;
776 { 784 MAYBE_GC ();
777 BYTE_CODE_QUIT; 785 v1 = POP;
778 stack.pc += (int) *stack.pc - 128; 786 if (NILP (v1))
779 } 787 {
780 stack.pc++; 788 BYTE_CODE_QUIT;
781 break; 789 stack.pc += (int) *stack.pc - 128;
790 }
791 stack.pc++;
792 break;
793 }
782 794
783 case BRgotoifnonnil: 795 case BRgotoifnonnil:
784 MAYBE_GC (); 796 {
785 if (!NILP (POP)) 797 Lisp_Object v1;
786 { 798 MAYBE_GC ();
787 BYTE_CODE_QUIT; 799 v1 = POP;
788 stack.pc += (int) *stack.pc - 128; 800 if (!NILP (v1))
789 } 801 {
790 stack.pc++; 802 BYTE_CODE_QUIT;
791 break; 803 stack.pc += (int) *stack.pc - 128;
804 }
805 stack.pc++;
806 break;
807 }
792 808
793 case BRgotoifnilelsepop: 809 case BRgotoifnilelsepop:
794 MAYBE_GC (); 810 MAYBE_GC ();
795 op = *stack.pc++; 811 op = *stack.pc++;
796 if (NILP (TOP)) 812 if (NILP (TOP))