comparison src/bytecode.c @ 26380:97289ec4d7d0

* bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the BEFORE_POTENTIAL_GC before DISCARD.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 08 Nov 1999 00:06:01 +0000
parents 6706cd0ece4d
children d94d421ca521
comparison
equal deleted inserted replaced
26379:cd8c8fcf2d73 26380:97289ec4d7d0
498 498
499 case Bcar: 499 case Bcar:
500 { 500 {
501 Lisp_Object v1; 501 Lisp_Object v1;
502 v1 = TOP; 502 v1 = TOP;
503 if (CONSP (v1)) TOP = XCAR (v1); 503 if (CONSP (v1))
504 else if (NILP (v1)) TOP = Qnil; 504 TOP = XCAR (v1);
505 else Fcar (wrong_type_argument (Qlistp, v1)); 505 else if (NILP (v1))
506 TOP = Qnil;
507 else
508 Fcar (wrong_type_argument (Qlistp, v1));
506 break; 509 break;
507 } 510 }
508 511
509 case Beq: 512 case Beq:
510 { 513 {
524 527
525 case Bcdr: 528 case Bcdr:
526 { 529 {
527 Lisp_Object v1; 530 Lisp_Object v1;
528 v1 = TOP; 531 v1 = TOP;
529 if (CONSP (v1)) TOP = XCDR (v1); 532 if (CONSP (v1))
530 else if (NILP (v1)) TOP = Qnil; 533 TOP = XCDR (v1);
531 else Fcdr (wrong_type_argument (Qlistp, v1)); 534 else if (NILP (v1))
535 TOP = Qnil;
536 else
537 Fcdr (wrong_type_argument (Qlistp, v1));
532 break; 538 break;
533 } 539 }
534 540
535 case Bvarset+7: 541 case Bvarset+7:
536 op = FETCH2; 542 op = FETCH2;
564 570
565 case Bvarbind+7: 571 case Bvarbind+7:
566 op = FETCH2; 572 op = FETCH2;
567 goto varbind; 573 goto varbind;
568 574
569 case Bvarbind: case Bvarbind+1: case Bvarbind+2: case Bvarbind+3: 575 case Bvarbind:
570 case Bvarbind+4: case Bvarbind+5: 576 case Bvarbind+1:
577 case Bvarbind+2:
578 case Bvarbind+3:
579 case Bvarbind+4:
580 case Bvarbind+5:
571 op -= Bvarbind; 581 op -= Bvarbind;
572 varbind: 582 varbind:
573 specbind (vectorp[op], POP); 583 specbind (vectorp[op], POP);
574 break; 584 break;
575 585
579 589
580 case Bcall+7: 590 case Bcall+7:
581 op = FETCH2; 591 op = FETCH2;
582 goto docall; 592 goto docall;
583 593
584 case Bcall: case Bcall+1: case Bcall+2: case Bcall+3: 594 case Bcall:
585 case Bcall+4: case Bcall+5: 595 case Bcall+1:
596 case Bcall+2:
597 case Bcall+3:
598 case Bcall+4:
599 case Bcall+5:
586 op -= Bcall; 600 op -= Bcall;
587 docall: 601 docall:
588 { 602 {
603 BEFORE_POTENTIAL_GC ();
589 DISCARD (op); 604 DISCARD (op);
590 #ifdef BYTE_CODE_METER 605 #ifdef BYTE_CODE_METER
591 if (byte_metering_on && SYMBOLP (TOP)) 606 if (byte_metering_on && SYMBOLP (TOP))
592 { 607 {
593 Lisp_Object v1, v2; 608 Lisp_Object v1, v2;
600 XSETINT (v2, XINT (v2) + 1); 615 XSETINT (v2, XINT (v2) + 1);
601 Fput (v1, Qbyte_code_meter, v2); 616 Fput (v1, Qbyte_code_meter, v2);
602 } 617 }
603 } 618 }
604 #endif 619 #endif
605 BEFORE_POTENTIAL_GC ();
606 TOP = Ffuncall (op + 1, &TOP); 620 TOP = Ffuncall (op + 1, &TOP);
607 AFTER_POTENTIAL_GC (); 621 AFTER_POTENTIAL_GC ();
608 break; 622 break;
609 } 623 }
610 624
614 628
615 case Bunbind+7: 629 case Bunbind+7:
616 op = FETCH2; 630 op = FETCH2;
617 goto dounbind; 631 goto dounbind;
618 632
619 case Bunbind: case Bunbind+1: case Bunbind+2: case Bunbind+3: 633 case Bunbind:
620 case Bunbind+4: case Bunbind+5: 634 case Bunbind+1:
635 case Bunbind+2:
636 case Bunbind+3:
637 case Bunbind+4:
638 case Bunbind+5:
621 op -= Bunbind; 639 op -= Bunbind;
622 dounbind: 640 dounbind:
623 BEFORE_POTENTIAL_GC (); 641 BEFORE_POTENTIAL_GC ();
624 unbind_to (specpdl_ptr - specpdl - op, Qnil); 642 unbind_to (specpdl_ptr - specpdl - op, Qnil);
625 AFTER_POTENTIAL_GC (); 643 AFTER_POTENTIAL_GC ();
735 case Bconstant2: 753 case Bconstant2:
736 PUSH (vectorp[FETCH2]); 754 PUSH (vectorp[FETCH2]);
737 break; 755 break;
738 756
739 case Bsave_excursion: 757 case Bsave_excursion:
740 record_unwind_protect (save_excursion_restore, save_excursion_save ()); 758 record_unwind_protect (save_excursion_restore,
759 save_excursion_save ());
741 break; 760 break;
742 761
743 case Bsave_current_buffer: 762 case Bsave_current_buffer:
744 case Bsave_current_buffer_1: 763 case Bsave_current_buffer_1:
745 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ()); 764 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
750 TOP = Fsave_window_excursion (TOP); 769 TOP = Fsave_window_excursion (TOP);
751 AFTER_POTENTIAL_GC (); 770 AFTER_POTENTIAL_GC ();
752 break; 771 break;
753 772
754 case Bsave_restriction: 773 case Bsave_restriction:
755 record_unwind_protect (save_restriction_restore, save_restriction_save ()); 774 record_unwind_protect (save_restriction_restore,
775 save_restriction_save ());
756 break; 776 break;
757 777
758 case Bcatch: 778 case Bcatch:
759 { 779 {
760 Lisp_Object v1; 780 Lisp_Object v1;
761
762 v1 = POP; 781 v1 = POP;
763 BEFORE_POTENTIAL_GC (); 782 BEFORE_POTENTIAL_GC ();
764 TOP = internal_catch (TOP, Feval, v1); 783 TOP = internal_catch (TOP, Feval, v1);
765 AFTER_POTENTIAL_GC (); 784 AFTER_POTENTIAL_GC ();
766 break; 785 break;
821 immediate_quit = 1; 840 immediate_quit = 1;
822 op++; 841 op++;
823 } 842 }
824 } 843 }
825 immediate_quit = 0; 844 immediate_quit = 0;
826 if (CONSP (v1)) TOP = XCAR (v1); 845 if (CONSP (v1))
827 else if (NILP (v1)) TOP = Qnil; 846 TOP = XCAR (v1);
828 else Fcar (wrong_type_argument (Qlistp, v1)); 847 else if (NILP (v1))
848 TOP = Qnil;
849 else
850 Fcar (wrong_type_argument (Qlistp, v1));
829 break; 851 break;
830 } 852 }
831 853
832 case Bsymbolp: 854 case Bsymbolp:
833 TOP = SYMBOLP (TOP) ? Qt : Qnil; 855 TOP = SYMBOLP (TOP) ? Qt : Qnil;
939 961
940 case Bsubstring: 962 case Bsubstring:
941 { 963 {
942 Lisp_Object v1, v2; 964 Lisp_Object v1, v2;
943 v2 = POP; v1 = POP; 965 v2 = POP; v1 = POP;
966 BEFORE_POTENTIAL_GC ();
944 TOP = Fsubstring (TOP, v1, v2); 967 TOP = Fsubstring (TOP, v1, v2);
968 AFTER_POTENTIAL_GC ();
945 break; 969 break;
946 } 970 }
947 971
948 case Bconcat2: 972 case Bconcat2:
949 DISCARD (1); 973 DISCARD (1);
1119 AFTER_POTENTIAL_GC (); 1143 AFTER_POTENTIAL_GC ();
1120 break; 1144 break;
1121 1145
1122 case BinsertN: 1146 case BinsertN:
1123 op = FETCH; 1147 op = FETCH;
1148 BEFORE_POTENTIAL_GC ();
1124 DISCARD (op - 1); 1149 DISCARD (op - 1);
1125 BEFORE_POTENTIAL_GC ();
1126 TOP = Finsert (op, &TOP); 1150 TOP = Finsert (op, &TOP);
1127 AFTER_POTENTIAL_GC (); 1151 AFTER_POTENTIAL_GC ();
1128 break; 1152 break;
1129 1153
1130 case Bpoint_max: 1154 case Bpoint_max:
1371 immediate_quit = 1; 1395 immediate_quit = 1;
1372 op++; 1396 op++;
1373 } 1397 }
1374 } 1398 }
1375 immediate_quit = 0; 1399 immediate_quit = 0;
1376 if (CONSP (v1)) TOP = XCAR (v1); 1400 if (CONSP (v1))
1377 else if (NILP (v1)) TOP = Qnil; 1401 TOP = XCAR (v1);
1378 else Fcar (wrong_type_argument (Qlistp, v1)); 1402 else if (NILP (v1))
1403 TOP = Qnil;
1404 else
1405 Fcar (wrong_type_argument (Qlistp, v1));
1379 } 1406 }
1380 else 1407 else
1381 { 1408 {
1382 v1 = POP; 1409 v1 = POP;
1383 TOP = Felt (TOP, v1); 1410 TOP = Felt (TOP, v1);