aboutsummaryrefslogtreecommitdiffstats
path: root/src/bytecode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bytecode.c')
-rw-r--r--src/bytecode.c268
1 files changed, 24 insertions, 244 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index fb9f617b514..ee1b79f1826 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -17,22 +17,6 @@ GNU General Public License for more details.
17You should have received a copy of the GNU General Public License 17You should have received a copy of the GNU General Public License
18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ 18along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
19 19
20/*
21hacked on by jwz@lucid.com 17-jun-91
22 o added a compile-time switch to turn on simple sanity checking;
23 o put back the obsolete byte-codes for error-detection;
24 o added a new instruction, unbind_all, which I will use for
25 tail-recursion elimination;
26 o made temp_output_buffer_show be called with the right number
27 of args;
28 o made the new bytecodes be called with args in the right order;
29 o added metering support.
30
31by Hallvard:
32 o added relative jump instructions;
33 o all conditionals now only do QUIT if they jump.
34 */
35
36#include <config.h> 20#include <config.h>
37 21
38#include "lisp.h" 22#include "lisp.h"
@@ -43,9 +27,9 @@ by Hallvard:
43#include "syntax.h" 27#include "syntax.h"
44#include "window.h" 28#include "window.h"
45 29
46#ifdef CHECK_FRAME_FONT 30/* Work around GCC bug 54561. */
47#include "frame.h" 31#if GNUC_PREREQ (4, 3, 0)
48#include "xterm.h" 32# pragma GCC diagnostic ignored "-Wclobbered"
49#endif 33#endif
50 34
51/* 35/*
@@ -294,9 +278,6 @@ enum byte_code_op
294 Bset_mark = 0163, /* this loser is no longer generated as of v18 */ 278 Bset_mark = 0163, /* this loser is no longer generated as of v18 */
295#endif 279#endif
296}; 280};
297
298/* Whether to maintain a `top' and `bottom' field in the stack frame. */
299#define BYTE_MAINTAIN_TOP BYTE_CODE_SAFE
300 281
301/* Structure describing a value stack used during byte-code execution 282/* Structure describing a value stack used during byte-code execution
302 in Fbyte_code. */ 283 in Fbyte_code. */
@@ -307,15 +288,14 @@ struct byte_stack
307 and is relocated when that string is relocated. */ 288 and is relocated when that string is relocated. */
308 const unsigned char *pc; 289 const unsigned char *pc;
309 290
310 /* Top and bottom of stack. The bottom points to an area of memory 291 /* bottom of stack. The bottom points to an area of memory
311 allocated with alloca in Fbyte_code. */ 292 allocated with alloca in Fbyte_code. */
312#if BYTE_MAINTAIN_TOP 293#ifdef BYTE_CODE_SAFE
313 Lisp_Object *top, *bottom; 294 Lisp_Object *bottom;
314#endif 295#endif
315 296
316 /* The string containing the byte-code, and its current address. 297 /* The string containing the byte-code, and its current address.
317 Storing this here protects it from GC because mark_byte_stack 298 Storing this here protects it from GC. */
318 marks it. */
319 Lisp_Object byte_string; 299 Lisp_Object byte_string;
320 const unsigned char *byte_string_start; 300 const unsigned char *byte_string_start;
321 301
@@ -364,12 +344,10 @@ relocate_byte_stack (void)
364 344
365#define FETCH2 (op = FETCH, op + (FETCH << 8)) 345#define FETCH2 (op = FETCH, op + (FETCH << 8))
366 346
367/* Push x onto the execution stack. This used to be #define PUSH(x) 347/* Push X onto the execution stack. The expression X should not
368 (*++stackp = (x)) This oddity is necessary because Alliant can't be 348 contain TOP, to avoid competing side effects. */
369 bothered to compile the preincrement operator properly, as of 4/91.
370 -JimB */
371 349
372#define PUSH(x) (top++, *top = (x)) 350#define PUSH(x) (*++top = (x))
373 351
374/* Pop a value off the execution stack. */ 352/* Pop a value off the execution stack. */
375 353
@@ -384,27 +362,6 @@ relocate_byte_stack (void)
384 362
385#define TOP (*top) 363#define TOP (*top)
386 364
387/* Actions that must be performed before and after calling a function
388 that might GC. */
389
390#if !BYTE_MAINTAIN_TOP
391#define BEFORE_POTENTIAL_GC() ((void)0)
392#define AFTER_POTENTIAL_GC() ((void)0)
393#else
394#define BEFORE_POTENTIAL_GC() stack.top = top
395#define AFTER_POTENTIAL_GC() stack.top = NULL
396#endif
397
398/* Garbage collect if we have consed enough since the last time.
399 We do this at every branch, to avoid loops that never GC. */
400
401#define MAYBE_GC() \
402 do { \
403 BEFORE_POTENTIAL_GC (); \
404 maybe_gc (); \
405 AFTER_POTENTIAL_GC (); \
406 } while (0)
407
408/* Check for jumping out of range. */ 365/* Check for jumping out of range. */
409 366
410#ifdef BYTE_CODE_SAFE 367#ifdef BYTE_CODE_SAFE
@@ -427,11 +384,9 @@ relocate_byte_stack (void)
427 { \ 384 { \
428 Lisp_Object flag = Vquit_flag; \ 385 Lisp_Object flag = Vquit_flag; \
429 Vquit_flag = Qnil; \ 386 Vquit_flag = Qnil; \
430 BEFORE_POTENTIAL_GC (); \
431 if (EQ (Vthrow_on_input, flag)) \ 387 if (EQ (Vthrow_on_input, flag)) \
432 Fthrow (Vthrow_on_input, Qt); \ 388 Fthrow (Vthrow_on_input, Qt); \
433 Fsignal (Qquit, Qnil); \ 389 quit (); \
434 AFTER_POTENTIAL_GC (); \
435 } \ 390 } \
436 else if (pending_signals) \ 391 else if (pending_signals) \
437 process_pending_signals (); \ 392 process_pending_signals (); \
@@ -485,16 +440,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
485 Lisp_Object result; 440 Lisp_Object result;
486 enum handlertype type; 441 enum handlertype type;
487 442
488#if 0 /* CHECK_FRAME_FONT */
489 {
490 struct frame *f = SELECTED_FRAME ();
491 if (FRAME_X_P (f)
492 && FRAME_FONT (f)->direction != 0
493 && FRAME_FONT (f)->direction != 1)
494 emacs_abort ();
495 }
496#endif
497
498 CHECK_STRING (bytestr); 443 CHECK_STRING (bytestr);
499 CHECK_VECTOR (vector); 444 CHECK_VECTOR (vector);
500 CHECK_NATNUM (maxdepth); 445 CHECK_NATNUM (maxdepth);
@@ -521,9 +466,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
521 if (MAX_ALLOCA / word_size <= XFASTINT (maxdepth)) 466 if (MAX_ALLOCA / word_size <= XFASTINT (maxdepth))
522 memory_full (SIZE_MAX); 467 memory_full (SIZE_MAX);
523 top = alloca ((XFASTINT (maxdepth) + 1) * sizeof *top); 468 top = alloca ((XFASTINT (maxdepth) + 1) * sizeof *top);
524#if BYTE_MAINTAIN_TOP 469#ifdef BYTE_CODE_SAFE
525 stack.bottom = top + 1; 470 stack.bottom = top + 1;
526 stack.top = NULL;
527#endif 471#endif
528 stack.next = byte_stack_list; 472 stack.next = byte_stack_list;
529 byte_stack_list = &stack; 473 byte_stack_list = &stack;
@@ -637,7 +581,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
637 the table clearer. */ 581 the table clearer. */
638#define LABEL(OP) [OP] = &&insn_ ## OP 582#define LABEL(OP) [OP] = &&insn_ ## OP
639 583
640#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) 584#if GNUC_PREREQ (4, 6, 0)
641# pragma GCC diagnostic push 585# pragma GCC diagnostic push
642# pragma GCC diagnostic ignored "-Woverride-init" 586# pragma GCC diagnostic ignored "-Woverride-init"
643#elif defined __clang__ 587#elif defined __clang__
@@ -656,7 +600,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
656#undef DEFINE 600#undef DEFINE
657 }; 601 };
658 602
659#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) || defined __clang__ 603#if GNUC_PREREQ (4, 6, 0) || defined __clang__
660# pragma GCC diagnostic pop 604# pragma GCC diagnostic pop
661#endif 605#endif
662 606
@@ -693,16 +637,12 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
693 || (v2 = SYMBOL_VAL (XSYMBOL (v1)), 637 || (v2 = SYMBOL_VAL (XSYMBOL (v1)),
694 EQ (v2, Qunbound))) 638 EQ (v2, Qunbound)))
695 { 639 {
696 BEFORE_POTENTIAL_GC ();
697 v2 = Fsymbol_value (v1); 640 v2 = Fsymbol_value (v1);
698 AFTER_POTENTIAL_GC ();
699 } 641 }
700 } 642 }
701 else 643 else
702 { 644 {
703 BEFORE_POTENTIAL_GC ();
704 v2 = Fsymbol_value (v1); 645 v2 = Fsymbol_value (v1);
705 AFTER_POTENTIAL_GC ();
706 } 646 }
707 PUSH (v2); 647 PUSH (v2);
708 NEXT; 648 NEXT;
@@ -711,7 +651,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
711 CASE (Bgotoifnil): 651 CASE (Bgotoifnil):
712 { 652 {
713 Lisp_Object v1; 653 Lisp_Object v1;
714 MAYBE_GC (); 654 maybe_gc ();
715 op = FETCH2; 655 op = FETCH2;
716 v1 = POP; 656 v1 = POP;
717 if (NILP (v1)) 657 if (NILP (v1))
@@ -733,7 +673,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
733 TOP = Qnil; 673 TOP = Qnil;
734 else 674 else
735 { 675 {
736 BEFORE_POTENTIAL_GC ();
737 wrong_type_argument (Qlistp, v1); 676 wrong_type_argument (Qlistp, v1);
738 } 677 }
739 NEXT; 678 NEXT;
@@ -750,10 +689,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
750 CASE (Bmemq): 689 CASE (Bmemq):
751 { 690 {
752 Lisp_Object v1; 691 Lisp_Object v1;
753 BEFORE_POTENTIAL_GC ();
754 v1 = POP; 692 v1 = POP;
755 TOP = Fmemq (TOP, v1); 693 TOP = Fmemq (TOP, v1);
756 AFTER_POTENTIAL_GC ();
757 NEXT; 694 NEXT;
758 } 695 }
759 696
@@ -767,7 +704,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
767 TOP = Qnil; 704 TOP = Qnil;
768 else 705 else
769 { 706 {
770 BEFORE_POTENTIAL_GC ();
771 wrong_type_argument (Qlistp, v1); 707 wrong_type_argument (Qlistp, v1);
772 } 708 }
773 NEXT; 709 NEXT;
@@ -803,9 +739,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
803 SET_SYMBOL_VAL (XSYMBOL (sym), val); 739 SET_SYMBOL_VAL (XSYMBOL (sym), val);
804 else 740 else
805 { 741 {
806 BEFORE_POTENTIAL_GC ();
807 set_internal (sym, val, Qnil, 0); 742 set_internal (sym, val, Qnil, 0);
808 AFTER_POTENTIAL_GC ();
809 } 743 }
810 } 744 }
811 (void) POP; 745 (void) POP;
@@ -838,9 +772,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
838 op -= Bvarbind; 772 op -= Bvarbind;
839 varbind: 773 varbind:
840 /* Specbind can signal and thus GC. */ 774 /* Specbind can signal and thus GC. */
841 BEFORE_POTENTIAL_GC ();
842 specbind (vectorp[op], POP); 775 specbind (vectorp[op], POP);
843 AFTER_POTENTIAL_GC ();
844 NEXT; 776 NEXT;
845 777
846 CASE (Bcall6): 778 CASE (Bcall6):
@@ -860,7 +792,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
860 op -= Bcall; 792 op -= Bcall;
861 docall: 793 docall:
862 { 794 {
863 BEFORE_POTENTIAL_GC ();
864 DISCARD (op); 795 DISCARD (op);
865#ifdef BYTE_CODE_METER 796#ifdef BYTE_CODE_METER
866 if (byte_metering_on && SYMBOLP (TOP)) 797 if (byte_metering_on && SYMBOLP (TOP))
@@ -878,7 +809,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
878 } 809 }
879#endif 810#endif
880 TOP = Ffuncall (op + 1, &TOP); 811 TOP = Ffuncall (op + 1, &TOP);
881 AFTER_POTENTIAL_GC ();
882 NEXT; 812 NEXT;
883 } 813 }
884 814
@@ -898,21 +828,17 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
898 CASE (Bunbind5): 828 CASE (Bunbind5):
899 op -= Bunbind; 829 op -= Bunbind;
900 dounbind: 830 dounbind:
901 BEFORE_POTENTIAL_GC ();
902 unbind_to (SPECPDL_INDEX () - op, Qnil); 831 unbind_to (SPECPDL_INDEX () - op, Qnil);
903 AFTER_POTENTIAL_GC ();
904 NEXT; 832 NEXT;
905 833
906 CASE (Bunbind_all): /* Obsolete. Never used. */ 834 CASE (Bunbind_all): /* Obsolete. Never used. */
907 /* To unbind back to the beginning of this frame. Not used yet, 835 /* To unbind back to the beginning of this frame. Not used yet,
908 but will be needed for tail-recursion elimination. */ 836 but will be needed for tail-recursion elimination. */
909 BEFORE_POTENTIAL_GC ();
910 unbind_to (count, Qnil); 837 unbind_to (count, Qnil);
911 AFTER_POTENTIAL_GC ();
912 NEXT; 838 NEXT;
913 839
914 CASE (Bgoto): 840 CASE (Bgoto):
915 MAYBE_GC (); 841 maybe_gc ();
916 BYTE_CODE_QUIT; 842 BYTE_CODE_QUIT;
917 op = FETCH2; /* pc = FETCH2 loses since FETCH2 contains pc++ */ 843 op = FETCH2; /* pc = FETCH2 loses since FETCH2 contains pc++ */
918 CHECK_RANGE (op); 844 CHECK_RANGE (op);
@@ -922,7 +848,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
922 CASE (Bgotoifnonnil): 848 CASE (Bgotoifnonnil):
923 { 849 {
924 Lisp_Object v1; 850 Lisp_Object v1;
925 MAYBE_GC (); 851 maybe_gc ();
926 op = FETCH2; 852 op = FETCH2;
927 v1 = POP; 853 v1 = POP;
928 if (!NILP (v1)) 854 if (!NILP (v1))
@@ -935,7 +861,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
935 } 861 }
936 862
937 CASE (Bgotoifnilelsepop): 863 CASE (Bgotoifnilelsepop):
938 MAYBE_GC (); 864 maybe_gc ();
939 op = FETCH2; 865 op = FETCH2;
940 if (NILP (TOP)) 866 if (NILP (TOP))
941 { 867 {
@@ -947,7 +873,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
947 NEXT; 873 NEXT;
948 874
949 CASE (Bgotoifnonnilelsepop): 875 CASE (Bgotoifnonnilelsepop):
950 MAYBE_GC (); 876 maybe_gc ();
951 op = FETCH2; 877 op = FETCH2;
952 if (!NILP (TOP)) 878 if (!NILP (TOP))
953 { 879 {
@@ -959,7 +885,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
959 NEXT; 885 NEXT;
960 886
961 CASE (BRgoto): 887 CASE (BRgoto):
962 MAYBE_GC (); 888 maybe_gc ();
963 BYTE_CODE_QUIT; 889 BYTE_CODE_QUIT;
964 stack.pc += (int) *stack.pc - 127; 890 stack.pc += (int) *stack.pc - 127;
965 NEXT; 891 NEXT;
@@ -967,7 +893,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
967 CASE (BRgotoifnil): 893 CASE (BRgotoifnil):
968 { 894 {
969 Lisp_Object v1; 895 Lisp_Object v1;
970 MAYBE_GC (); 896 maybe_gc ();
971 v1 = POP; 897 v1 = POP;
972 if (NILP (v1)) 898 if (NILP (v1))
973 { 899 {
@@ -981,7 +907,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
981 CASE (BRgotoifnonnil): 907 CASE (BRgotoifnonnil):
982 { 908 {
983 Lisp_Object v1; 909 Lisp_Object v1;
984 MAYBE_GC (); 910 maybe_gc ();
985 v1 = POP; 911 v1 = POP;
986 if (!NILP (v1)) 912 if (!NILP (v1))
987 { 913 {
@@ -993,7 +919,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
993 } 919 }
994 920
995 CASE (BRgotoifnilelsepop): 921 CASE (BRgotoifnilelsepop):
996 MAYBE_GC (); 922 maybe_gc ();
997 op = *stack.pc++; 923 op = *stack.pc++;
998 if (NILP (TOP)) 924 if (NILP (TOP))
999 { 925 {
@@ -1004,7 +930,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1004 NEXT; 930 NEXT;
1005 931
1006 CASE (BRgotoifnonnilelsepop): 932 CASE (BRgotoifnonnilelsepop):
1007 MAYBE_GC (); 933 maybe_gc ();
1008 op = *stack.pc++; 934 op = *stack.pc++;
1009 if (!NILP (TOP)) 935 if (!NILP (TOP))
1010 { 936 {
@@ -1041,10 +967,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1041 ptrdiff_t count1 = SPECPDL_INDEX (); 967 ptrdiff_t count1 = SPECPDL_INDEX ();
1042 record_unwind_protect (restore_window_configuration, 968 record_unwind_protect (restore_window_configuration,
1043 Fcurrent_window_configuration (Qnil)); 969 Fcurrent_window_configuration (Qnil));
1044 BEFORE_POTENTIAL_GC ();
1045 TOP = Fprogn (TOP); 970 TOP = Fprogn (TOP);
1046 unbind_to (count1, TOP); 971 unbind_to (count1, TOP);
1047 AFTER_POTENTIAL_GC ();
1048 NEXT; 972 NEXT;
1049 } 973 }
1050 974
@@ -1056,10 +980,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1056 CASE (Bcatch): /* Obsolete since 24.4. */ 980 CASE (Bcatch): /* Obsolete since 24.4. */
1057 { 981 {
1058 Lisp_Object v1; 982 Lisp_Object v1;
1059 BEFORE_POTENTIAL_GC ();
1060 v1 = POP; 983 v1 = POP;
1061 TOP = internal_catch (TOP, eval_sub, v1); 984 TOP = internal_catch (TOP, eval_sub, v1);
1062 AFTER_POTENTIAL_GC ();
1063 NEXT; 985 NEXT;
1064 } 986 }
1065 987
@@ -1115,30 +1037,24 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1115 Lisp_Object handlers, body; 1037 Lisp_Object handlers, body;
1116 handlers = POP; 1038 handlers = POP;
1117 body = POP; 1039 body = POP;
1118 BEFORE_POTENTIAL_GC ();
1119 TOP = internal_lisp_condition_case (TOP, body, handlers); 1040 TOP = internal_lisp_condition_case (TOP, body, handlers);
1120 AFTER_POTENTIAL_GC ();
1121 NEXT; 1041 NEXT;
1122 } 1042 }
1123 1043
1124 CASE (Btemp_output_buffer_setup): /* Obsolete since 24.1. */ 1044 CASE (Btemp_output_buffer_setup): /* Obsolete since 24.1. */
1125 BEFORE_POTENTIAL_GC ();
1126 CHECK_STRING (TOP); 1045 CHECK_STRING (TOP);
1127 temp_output_buffer_setup (SSDATA (TOP)); 1046 temp_output_buffer_setup (SSDATA (TOP));
1128 AFTER_POTENTIAL_GC ();
1129 TOP = Vstandard_output; 1047 TOP = Vstandard_output;
1130 NEXT; 1048 NEXT;
1131 1049
1132 CASE (Btemp_output_buffer_show): /* Obsolete since 24.1. */ 1050 CASE (Btemp_output_buffer_show): /* Obsolete since 24.1. */
1133 { 1051 {
1134 Lisp_Object v1; 1052 Lisp_Object v1;
1135 BEFORE_POTENTIAL_GC ();
1136 v1 = POP; 1053 v1 = POP;
1137 temp_output_buffer_show (TOP); 1054 temp_output_buffer_show (TOP);
1138 TOP = v1; 1055 TOP = v1;
1139 /* pop binding of standard-output */ 1056 /* pop binding of standard-output */
1140 unbind_to (SPECPDL_INDEX () - 1, Qnil); 1057 unbind_to (SPECPDL_INDEX () - 1, Qnil);
1141 AFTER_POTENTIAL_GC ();
1142 NEXT; 1058 NEXT;
1143 } 1059 }
1144 1060
@@ -1146,7 +1062,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1146 { 1062 {
1147 Lisp_Object v1, v2; 1063 Lisp_Object v1, v2;
1148 EMACS_INT n; 1064 EMACS_INT n;
1149 BEFORE_POTENTIAL_GC ();
1150 v1 = POP; 1065 v1 = POP;
1151 v2 = TOP; 1066 v2 = TOP;
1152 CHECK_NUMBER (v2); 1067 CHECK_NUMBER (v2);
@@ -1156,7 +1071,6 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1156 v1 = XCDR (v1); 1071 v1 = XCDR (v1);
1157 immediate_quit = 0; 1072 immediate_quit = 0;
1158 TOP = CAR (v1); 1073 TOP = CAR (v1);
1159 AFTER_POTENTIAL_GC ();
1160 NEXT; 1074 NEXT;
1161 } 1075 }
1162 1076
@@ -1217,110 +1131,84 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1217 NEXT; 1131 NEXT;
1218 1132
1219 CASE (Blength): 1133 CASE (Blength):
1220 BEFORE_POTENTIAL_GC ();
1221 TOP = Flength (TOP); 1134 TOP = Flength (TOP);
1222 AFTER_POTENTIAL_GC ();
1223 NEXT; 1135 NEXT;
1224 1136
1225 CASE (Baref): 1137 CASE (Baref):
1226 { 1138 {
1227 Lisp_Object v1; 1139 Lisp_Object v1;
1228 BEFORE_POTENTIAL_GC ();
1229 v1 = POP; 1140 v1 = POP;
1230 TOP = Faref (TOP, v1); 1141 TOP = Faref (TOP, v1);
1231 AFTER_POTENTIAL_GC ();
1232 NEXT; 1142 NEXT;
1233 } 1143 }
1234 1144
1235 CASE (Baset): 1145 CASE (Baset):
1236 { 1146 {
1237 Lisp_Object v1, v2; 1147 Lisp_Object v1, v2;
1238 BEFORE_POTENTIAL_GC ();
1239 v2 = POP; v1 = POP; 1148 v2 = POP; v1 = POP;
1240 TOP = Faset (TOP, v1, v2); 1149 TOP = Faset (TOP, v1, v2);
1241 AFTER_POTENTIAL_GC ();
1242 NEXT; 1150 NEXT;
1243 } 1151 }
1244 1152
1245 CASE (Bsymbol_value): 1153 CASE (Bsymbol_value):
1246 BEFORE_POTENTIAL_GC ();
1247 TOP = Fsymbol_value (TOP); 1154 TOP = Fsymbol_value (TOP);
1248 AFTER_POTENTIAL_GC ();
1249 NEXT; 1155 NEXT;
1250 1156
1251 CASE (Bsymbol_function): 1157 CASE (Bsymbol_function):
1252 BEFORE_POTENTIAL_GC ();
1253 TOP = Fsymbol_function (TOP); 1158 TOP = Fsymbol_function (TOP);
1254 AFTER_POTENTIAL_GC ();
1255 NEXT; 1159 NEXT;
1256 1160
1257 CASE (Bset): 1161 CASE (Bset):
1258 { 1162 {
1259 Lisp_Object v1; 1163 Lisp_Object v1;
1260 BEFORE_POTENTIAL_GC ();
1261 v1 = POP; 1164 v1 = POP;
1262 TOP = Fset (TOP, v1); 1165 TOP = Fset (TOP, v1);
1263 AFTER_POTENTIAL_GC ();
1264 NEXT; 1166 NEXT;
1265 } 1167 }
1266 1168
1267 CASE (Bfset): 1169 CASE (Bfset):
1268 { 1170 {
1269 Lisp_Object v1; 1171 Lisp_Object v1;
1270 BEFORE_POTENTIAL_GC ();
1271 v1 = POP; 1172 v1 = POP;
1272 TOP = Ffset (TOP, v1); 1173 TOP = Ffset (TOP, v1);
1273 AFTER_POTENTIAL_GC ();
1274 NEXT; 1174 NEXT;
1275 } 1175 }
1276 1176
1277 CASE (Bget): 1177 CASE (Bget):
1278 { 1178 {
1279 Lisp_Object v1; 1179 Lisp_Object v1;
1280 BEFORE_POTENTIAL_GC ();
1281 v1 = POP; 1180 v1 = POP;
1282 TOP = Fget (TOP, v1); 1181 TOP = Fget (TOP, v1);
1283 AFTER_POTENTIAL_GC ();
1284 NEXT; 1182 NEXT;
1285 } 1183 }
1286 1184
1287 CASE (Bsubstring): 1185 CASE (Bsubstring):
1288 { 1186 {
1289 Lisp_Object v1, v2; 1187 Lisp_Object v1, v2;
1290 BEFORE_POTENTIAL_GC ();
1291 v2 = POP; v1 = POP; 1188 v2 = POP; v1 = POP;
1292 TOP = Fsubstring (TOP, v1, v2); 1189 TOP = Fsubstring (TOP, v1, v2);
1293 AFTER_POTENTIAL_GC ();
1294 NEXT; 1190 NEXT;
1295 } 1191 }
1296 1192
1297 CASE (Bconcat2): 1193 CASE (Bconcat2):
1298 BEFORE_POTENTIAL_GC ();
1299 DISCARD (1); 1194 DISCARD (1);
1300 TOP = Fconcat (2, &TOP); 1195 TOP = Fconcat (2, &TOP);
1301 AFTER_POTENTIAL_GC ();
1302 NEXT; 1196 NEXT;
1303 1197
1304 CASE (Bconcat3): 1198 CASE (Bconcat3):
1305 BEFORE_POTENTIAL_GC ();
1306 DISCARD (2); 1199 DISCARD (2);
1307 TOP = Fconcat (3, &TOP); 1200 TOP = Fconcat (3, &TOP);
1308 AFTER_POTENTIAL_GC ();
1309 NEXT; 1201 NEXT;
1310 1202
1311 CASE (Bconcat4): 1203 CASE (Bconcat4):
1312 BEFORE_POTENTIAL_GC ();
1313 DISCARD (3); 1204 DISCARD (3);
1314 TOP = Fconcat (4, &TOP); 1205 TOP = Fconcat (4, &TOP);
1315 AFTER_POTENTIAL_GC ();
1316 NEXT; 1206 NEXT;
1317 1207
1318 CASE (BconcatN): 1208 CASE (BconcatN):
1319 op = FETCH; 1209 op = FETCH;
1320 BEFORE_POTENTIAL_GC ();
1321 DISCARD (op - 1); 1210 DISCARD (op - 1);
1322 TOP = Fconcat (op, &TOP); 1211 TOP = Fconcat (op, &TOP);
1323 AFTER_POTENTIAL_GC ();
1324 NEXT; 1212 NEXT;
1325 1213
1326 CASE (Bsub1): 1214 CASE (Bsub1):
@@ -1334,9 +1222,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1334 } 1222 }
1335 else 1223 else
1336 { 1224 {
1337 BEFORE_POTENTIAL_GC ();
1338 TOP = Fsub1 (v1); 1225 TOP = Fsub1 (v1);
1339 AFTER_POTENTIAL_GC ();
1340 } 1226 }
1341 NEXT; 1227 NEXT;
1342 } 1228 }
@@ -1352,9 +1238,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1352 } 1238 }
1353 else 1239 else
1354 { 1240 {
1355 BEFORE_POTENTIAL_GC ();
1356 TOP = Fadd1 (v1); 1241 TOP = Fadd1 (v1);
1357 AFTER_POTENTIAL_GC ();
1358 } 1242 }
1359 NEXT; 1243 NEXT;
1360 } 1244 }
@@ -1362,11 +1246,9 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1362 CASE (Beqlsign): 1246 CASE (Beqlsign):
1363 { 1247 {
1364 Lisp_Object v1, v2; 1248 Lisp_Object v1, v2;
1365 BEFORE_POTENTIAL_GC ();
1366 v2 = POP; v1 = TOP; 1249 v2 = POP; v1 = TOP;
1367 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1); 1250 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1);
1368 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2); 1251 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2);
1369 AFTER_POTENTIAL_GC ();
1370 if (FLOATP (v1) || FLOATP (v2)) 1252 if (FLOATP (v1) || FLOATP (v2))
1371 { 1253 {
1372 double f1, f2; 1254 double f1, f2;
@@ -1383,48 +1265,38 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1383 CASE (Bgtr): 1265 CASE (Bgtr):
1384 { 1266 {
1385 Lisp_Object v1; 1267 Lisp_Object v1;
1386 BEFORE_POTENTIAL_GC ();
1387 v1 = POP; 1268 v1 = POP;
1388 TOP = arithcompare (TOP, v1, ARITH_GRTR); 1269 TOP = arithcompare (TOP, v1, ARITH_GRTR);
1389 AFTER_POTENTIAL_GC ();
1390 NEXT; 1270 NEXT;
1391 } 1271 }
1392 1272
1393 CASE (Blss): 1273 CASE (Blss):
1394 { 1274 {
1395 Lisp_Object v1; 1275 Lisp_Object v1;
1396 BEFORE_POTENTIAL_GC ();
1397 v1 = POP; 1276 v1 = POP;
1398 TOP = arithcompare (TOP, v1, ARITH_LESS); 1277 TOP = arithcompare (TOP, v1, ARITH_LESS);
1399 AFTER_POTENTIAL_GC ();
1400 NEXT; 1278 NEXT;
1401 } 1279 }
1402 1280
1403 CASE (Bleq): 1281 CASE (Bleq):
1404 { 1282 {
1405 Lisp_Object v1; 1283 Lisp_Object v1;
1406 BEFORE_POTENTIAL_GC ();
1407 v1 = POP; 1284 v1 = POP;
1408 TOP = arithcompare (TOP, v1, ARITH_LESS_OR_EQUAL); 1285 TOP = arithcompare (TOP, v1, ARITH_LESS_OR_EQUAL);
1409 AFTER_POTENTIAL_GC ();
1410 NEXT; 1286 NEXT;
1411 } 1287 }
1412 1288
1413 CASE (Bgeq): 1289 CASE (Bgeq):
1414 { 1290 {
1415 Lisp_Object v1; 1291 Lisp_Object v1;
1416 BEFORE_POTENTIAL_GC ();
1417 v1 = POP; 1292 v1 = POP;
1418 TOP = arithcompare (TOP, v1, ARITH_GRTR_OR_EQUAL); 1293 TOP = arithcompare (TOP, v1, ARITH_GRTR_OR_EQUAL);
1419 AFTER_POTENTIAL_GC ();
1420 NEXT; 1294 NEXT;
1421 } 1295 }
1422 1296
1423 CASE (Bdiff): 1297 CASE (Bdiff):
1424 BEFORE_POTENTIAL_GC ();
1425 DISCARD (1); 1298 DISCARD (1);
1426 TOP = Fminus (2, &TOP); 1299 TOP = Fminus (2, &TOP);
1427 AFTER_POTENTIAL_GC ();
1428 NEXT; 1300 NEXT;
1429 1301
1430 CASE (Bnegate): 1302 CASE (Bnegate):
@@ -1438,55 +1310,41 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1438 } 1310 }
1439 else 1311 else
1440 { 1312 {
1441 BEFORE_POTENTIAL_GC ();
1442 TOP = Fminus (1, &TOP); 1313 TOP = Fminus (1, &TOP);
1443 AFTER_POTENTIAL_GC ();
1444 } 1314 }
1445 NEXT; 1315 NEXT;
1446 } 1316 }
1447 1317
1448 CASE (Bplus): 1318 CASE (Bplus):
1449 BEFORE_POTENTIAL_GC ();
1450 DISCARD (1); 1319 DISCARD (1);
1451 TOP = Fplus (2, &TOP); 1320 TOP = Fplus (2, &TOP);
1452 AFTER_POTENTIAL_GC ();
1453 NEXT; 1321 NEXT;
1454 1322
1455 CASE (Bmax): 1323 CASE (Bmax):
1456 BEFORE_POTENTIAL_GC ();
1457 DISCARD (1); 1324 DISCARD (1);
1458 TOP = Fmax (2, &TOP); 1325 TOP = Fmax (2, &TOP);
1459 AFTER_POTENTIAL_GC ();
1460 NEXT; 1326 NEXT;
1461 1327
1462 CASE (Bmin): 1328 CASE (Bmin):
1463 BEFORE_POTENTIAL_GC ();
1464 DISCARD (1); 1329 DISCARD (1);
1465 TOP = Fmin (2, &TOP); 1330 TOP = Fmin (2, &TOP);
1466 AFTER_POTENTIAL_GC ();
1467 NEXT; 1331 NEXT;
1468 1332
1469 CASE (Bmult): 1333 CASE (Bmult):
1470 BEFORE_POTENTIAL_GC ();
1471 DISCARD (1); 1334 DISCARD (1);
1472 TOP = Ftimes (2, &TOP); 1335 TOP = Ftimes (2, &TOP);
1473 AFTER_POTENTIAL_GC ();
1474 NEXT; 1336 NEXT;
1475 1337
1476 CASE (Bquo): 1338 CASE (Bquo):
1477 BEFORE_POTENTIAL_GC ();
1478 DISCARD (1); 1339 DISCARD (1);
1479 TOP = Fquo (2, &TOP); 1340 TOP = Fquo (2, &TOP);
1480 AFTER_POTENTIAL_GC ();
1481 NEXT; 1341 NEXT;
1482 1342
1483 CASE (Brem): 1343 CASE (Brem):
1484 { 1344 {
1485 Lisp_Object v1; 1345 Lisp_Object v1;
1486 BEFORE_POTENTIAL_GC ();
1487 v1 = POP; 1346 v1 = POP;
1488 TOP = Frem (TOP, v1); 1347 TOP = Frem (TOP, v1);
1489 AFTER_POTENTIAL_GC ();
1490 NEXT; 1348 NEXT;
1491 } 1349 }
1492 1350
@@ -1499,23 +1357,17 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1499 } 1357 }
1500 1358
1501 CASE (Bgoto_char): 1359 CASE (Bgoto_char):
1502 BEFORE_POTENTIAL_GC ();
1503 TOP = Fgoto_char (TOP); 1360 TOP = Fgoto_char (TOP);
1504 AFTER_POTENTIAL_GC ();
1505 NEXT; 1361 NEXT;
1506 1362
1507 CASE (Binsert): 1363 CASE (Binsert):
1508 BEFORE_POTENTIAL_GC ();
1509 TOP = Finsert (1, &TOP); 1364 TOP = Finsert (1, &TOP);
1510 AFTER_POTENTIAL_GC ();
1511 NEXT; 1365 NEXT;
1512 1366
1513 CASE (BinsertN): 1367 CASE (BinsertN):
1514 op = FETCH; 1368 op = FETCH;
1515 BEFORE_POTENTIAL_GC ();
1516 DISCARD (op - 1); 1369 DISCARD (op - 1);
1517 TOP = Finsert (op, &TOP); 1370 TOP = Finsert (op, &TOP);
1518 AFTER_POTENTIAL_GC ();
1519 NEXT; 1371 NEXT;
1520 1372
1521 CASE (Bpoint_max): 1373 CASE (Bpoint_max):
@@ -1535,17 +1387,13 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1535 } 1387 }
1536 1388
1537 CASE (Bchar_after): 1389 CASE (Bchar_after):
1538 BEFORE_POTENTIAL_GC ();
1539 TOP = Fchar_after (TOP); 1390 TOP = Fchar_after (TOP);
1540 AFTER_POTENTIAL_GC ();
1541 NEXT; 1391 NEXT;
1542 1392
1543 CASE (Bfollowing_char): 1393 CASE (Bfollowing_char):
1544 { 1394 {
1545 Lisp_Object v1; 1395 Lisp_Object v1;
1546 BEFORE_POTENTIAL_GC ();
1547 v1 = Ffollowing_char (); 1396 v1 = Ffollowing_char ();
1548 AFTER_POTENTIAL_GC ();
1549 PUSH (v1); 1397 PUSH (v1);
1550 NEXT; 1398 NEXT;
1551 } 1399 }
@@ -1553,9 +1401,7 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1553 CASE (Bpreceding_char): 1401 CASE (Bpreceding_char):
1554 { 1402 {
1555 Lisp_Object v1; 1403 Lisp_Object v1;
1556 BEFORE_POTENTIAL_GC ();
1557 v1 = Fprevious_char (); 1404 v1 = Fprevious_char ();
1558 AFTER_POTENTIAL_GC ();
1559 PUSH (v1); 1405 PUSH (v1);
1560 NEXT; 1406 NEXT;
1561 } 1407 }
@@ -1563,17 +1409,13 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1563 CASE (Bcurrent_column): 1409 CASE (Bcurrent_column):
1564 { 1410 {
1565 Lisp_Object v1; 1411 Lisp_Object v1;
1566 BEFORE_POTENTIAL_GC ();
1567 XSETFASTINT (v1, current_column ()); 1412 XSETFASTINT (v1, current_column ());
1568 AFTER_POTENTIAL_GC ();
1569 PUSH (v1); 1413 PUSH (v1);
1570 NEXT; 1414 NEXT;
1571 } 1415 }
1572 1416
1573 CASE (Bindent_to): 1417 CASE (Bindent_to):
1574 BEFORE_POTENTIAL_GC ();
1575 TOP = Findent_to (TOP, Qnil); 1418 TOP = Findent_to (TOP, Qnil);
1576 AFTER_POTENTIAL_GC ();
1577 NEXT; 1419 NEXT;
1578 1420
1579 CASE (Beolp): 1421 CASE (Beolp):
@@ -1597,62 +1439,46 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1597 NEXT; 1439 NEXT;
1598 1440
1599 CASE (Bset_buffer): 1441 CASE (Bset_buffer):
1600 BEFORE_POTENTIAL_GC ();
1601 TOP = Fset_buffer (TOP); 1442 TOP = Fset_buffer (TOP);
1602 AFTER_POTENTIAL_GC ();
1603 NEXT; 1443 NEXT;
1604 1444
1605 CASE (Binteractive_p): /* Obsolete since 24.1. */ 1445 CASE (Binteractive_p): /* Obsolete since 24.1. */
1606 BEFORE_POTENTIAL_GC ();
1607 PUSH (call0 (intern ("interactive-p"))); 1446 PUSH (call0 (intern ("interactive-p")));
1608 AFTER_POTENTIAL_GC ();
1609 NEXT; 1447 NEXT;
1610 1448
1611 CASE (Bforward_char): 1449 CASE (Bforward_char):
1612 BEFORE_POTENTIAL_GC ();
1613 TOP = Fforward_char (TOP); 1450 TOP = Fforward_char (TOP);
1614 AFTER_POTENTIAL_GC ();
1615 NEXT; 1451 NEXT;
1616 1452
1617 CASE (Bforward_word): 1453 CASE (Bforward_word):
1618 BEFORE_POTENTIAL_GC ();
1619 TOP = Fforward_word (TOP); 1454 TOP = Fforward_word (TOP);
1620 AFTER_POTENTIAL_GC ();
1621 NEXT; 1455 NEXT;
1622 1456
1623 CASE (Bskip_chars_forward): 1457 CASE (Bskip_chars_forward):
1624 { 1458 {
1625 Lisp_Object v1; 1459 Lisp_Object v1;
1626 BEFORE_POTENTIAL_GC ();
1627 v1 = POP; 1460 v1 = POP;
1628 TOP = Fskip_chars_forward (TOP, v1); 1461 TOP = Fskip_chars_forward (TOP, v1);
1629 AFTER_POTENTIAL_GC ();
1630 NEXT; 1462 NEXT;
1631 } 1463 }
1632 1464
1633 CASE (Bskip_chars_backward): 1465 CASE (Bskip_chars_backward):
1634 { 1466 {
1635 Lisp_Object v1; 1467 Lisp_Object v1;
1636 BEFORE_POTENTIAL_GC ();
1637 v1 = POP; 1468 v1 = POP;
1638 TOP = Fskip_chars_backward (TOP, v1); 1469 TOP = Fskip_chars_backward (TOP, v1);
1639 AFTER_POTENTIAL_GC ();
1640 NEXT; 1470 NEXT;
1641 } 1471 }
1642 1472
1643 CASE (Bforward_line): 1473 CASE (Bforward_line):
1644 BEFORE_POTENTIAL_GC ();
1645 TOP = Fforward_line (TOP); 1474 TOP = Fforward_line (TOP);
1646 AFTER_POTENTIAL_GC ();
1647 NEXT; 1475 NEXT;
1648 1476
1649 CASE (Bchar_syntax): 1477 CASE (Bchar_syntax):
1650 { 1478 {
1651 int c; 1479 int c;
1652 1480
1653 BEFORE_POTENTIAL_GC ();
1654 CHECK_CHARACTER (TOP); 1481 CHECK_CHARACTER (TOP);
1655 AFTER_POTENTIAL_GC ();
1656 c = XFASTINT (TOP); 1482 c = XFASTINT (TOP);
1657 if (NILP (BVAR (current_buffer, enable_multibyte_characters))) 1483 if (NILP (BVAR (current_buffer, enable_multibyte_characters)))
1658 MAKE_CHAR_MULTIBYTE (c); 1484 MAKE_CHAR_MULTIBYTE (c);
@@ -1663,97 +1489,73 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1663 CASE (Bbuffer_substring): 1489 CASE (Bbuffer_substring):
1664 { 1490 {
1665 Lisp_Object v1; 1491 Lisp_Object v1;
1666 BEFORE_POTENTIAL_GC ();
1667 v1 = POP; 1492 v1 = POP;
1668 TOP = Fbuffer_substring (TOP, v1); 1493 TOP = Fbuffer_substring (TOP, v1);
1669 AFTER_POTENTIAL_GC ();
1670 NEXT; 1494 NEXT;
1671 } 1495 }
1672 1496
1673 CASE (Bdelete_region): 1497 CASE (Bdelete_region):
1674 { 1498 {
1675 Lisp_Object v1; 1499 Lisp_Object v1;
1676 BEFORE_POTENTIAL_GC ();
1677 v1 = POP; 1500 v1 = POP;
1678 TOP = Fdelete_region (TOP, v1); 1501 TOP = Fdelete_region (TOP, v1);
1679 AFTER_POTENTIAL_GC ();
1680 NEXT; 1502 NEXT;
1681 } 1503 }
1682 1504
1683 CASE (Bnarrow_to_region): 1505 CASE (Bnarrow_to_region):
1684 { 1506 {
1685 Lisp_Object v1; 1507 Lisp_Object v1;
1686 BEFORE_POTENTIAL_GC ();
1687 v1 = POP; 1508 v1 = POP;
1688 TOP = Fnarrow_to_region (TOP, v1); 1509 TOP = Fnarrow_to_region (TOP, v1);
1689 AFTER_POTENTIAL_GC ();
1690 NEXT; 1510 NEXT;
1691 } 1511 }
1692 1512
1693 CASE (Bwiden): 1513 CASE (Bwiden):
1694 BEFORE_POTENTIAL_GC ();
1695 PUSH (Fwiden ()); 1514 PUSH (Fwiden ());
1696 AFTER_POTENTIAL_GC ();
1697 NEXT; 1515 NEXT;
1698 1516
1699 CASE (Bend_of_line): 1517 CASE (Bend_of_line):
1700 BEFORE_POTENTIAL_GC ();
1701 TOP = Fend_of_line (TOP); 1518 TOP = Fend_of_line (TOP);
1702 AFTER_POTENTIAL_GC ();
1703 NEXT; 1519 NEXT;
1704 1520
1705 CASE (Bset_marker): 1521 CASE (Bset_marker):
1706 { 1522 {
1707 Lisp_Object v1, v2; 1523 Lisp_Object v1, v2;
1708 BEFORE_POTENTIAL_GC ();
1709 v1 = POP; 1524 v1 = POP;
1710 v2 = POP; 1525 v2 = POP;
1711 TOP = Fset_marker (TOP, v2, v1); 1526 TOP = Fset_marker (TOP, v2, v1);
1712 AFTER_POTENTIAL_GC ();
1713 NEXT; 1527 NEXT;
1714 } 1528 }
1715 1529
1716 CASE (Bmatch_beginning): 1530 CASE (Bmatch_beginning):
1717 BEFORE_POTENTIAL_GC ();
1718 TOP = Fmatch_beginning (TOP); 1531 TOP = Fmatch_beginning (TOP);
1719 AFTER_POTENTIAL_GC ();
1720 NEXT; 1532 NEXT;
1721 1533
1722 CASE (Bmatch_end): 1534 CASE (Bmatch_end):
1723 BEFORE_POTENTIAL_GC ();
1724 TOP = Fmatch_end (TOP); 1535 TOP = Fmatch_end (TOP);
1725 AFTER_POTENTIAL_GC ();
1726 NEXT; 1536 NEXT;
1727 1537
1728 CASE (Bupcase): 1538 CASE (Bupcase):
1729 BEFORE_POTENTIAL_GC ();
1730 TOP = Fupcase (TOP); 1539 TOP = Fupcase (TOP);
1731 AFTER_POTENTIAL_GC ();
1732 NEXT; 1540 NEXT;
1733 1541
1734 CASE (Bdowncase): 1542 CASE (Bdowncase):
1735 BEFORE_POTENTIAL_GC ();
1736 TOP = Fdowncase (TOP); 1543 TOP = Fdowncase (TOP);
1737 AFTER_POTENTIAL_GC ();
1738 NEXT; 1544 NEXT;
1739 1545
1740 CASE (Bstringeqlsign): 1546 CASE (Bstringeqlsign):
1741 { 1547 {
1742 Lisp_Object v1; 1548 Lisp_Object v1;
1743 BEFORE_POTENTIAL_GC ();
1744 v1 = POP; 1549 v1 = POP;
1745 TOP = Fstring_equal (TOP, v1); 1550 TOP = Fstring_equal (TOP, v1);
1746 AFTER_POTENTIAL_GC ();
1747 NEXT; 1551 NEXT;
1748 } 1552 }
1749 1553
1750 CASE (Bstringlss): 1554 CASE (Bstringlss):
1751 { 1555 {
1752 Lisp_Object v1; 1556 Lisp_Object v1;
1753 BEFORE_POTENTIAL_GC ();
1754 v1 = POP; 1557 v1 = POP;
1755 TOP = Fstring_lessp (TOP, v1); 1558 TOP = Fstring_lessp (TOP, v1);
1756 AFTER_POTENTIAL_GC ();
1757 NEXT; 1559 NEXT;
1758 } 1560 }
1759 1561
@@ -1768,10 +1570,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1768 CASE (Bnthcdr): 1570 CASE (Bnthcdr):
1769 { 1571 {
1770 Lisp_Object v1; 1572 Lisp_Object v1;
1771 BEFORE_POTENTIAL_GC ();
1772 v1 = POP; 1573 v1 = POP;
1773 TOP = Fnthcdr (TOP, v1); 1574 TOP = Fnthcdr (TOP, v1);
1774 AFTER_POTENTIAL_GC ();
1775 NEXT; 1575 NEXT;
1776 } 1576 }
1777 1577
@@ -1782,11 +1582,9 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1782 { 1582 {
1783 /* Exchange args and then do nth. */ 1583 /* Exchange args and then do nth. */
1784 EMACS_INT n; 1584 EMACS_INT n;
1785 BEFORE_POTENTIAL_GC ();
1786 v2 = POP; 1585 v2 = POP;
1787 v1 = TOP; 1586 v1 = TOP;
1788 CHECK_NUMBER (v2); 1587 CHECK_NUMBER (v2);
1789 AFTER_POTENTIAL_GC ();
1790 n = XINT (v2); 1588 n = XINT (v2);
1791 immediate_quit = 1; 1589 immediate_quit = 1;
1792 while (--n >= 0 && CONSP (v1)) 1590 while (--n >= 0 && CONSP (v1))
@@ -1796,10 +1594,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1796 } 1594 }
1797 else 1595 else
1798 { 1596 {
1799 BEFORE_POTENTIAL_GC ();
1800 v1 = POP; 1597 v1 = POP;
1801 TOP = Felt (TOP, v1); 1598 TOP = Felt (TOP, v1);
1802 AFTER_POTENTIAL_GC ();
1803 } 1599 }
1804 NEXT; 1600 NEXT;
1805 } 1601 }
@@ -1807,46 +1603,36 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1807 CASE (Bmember): 1603 CASE (Bmember):
1808 { 1604 {
1809 Lisp_Object v1; 1605 Lisp_Object v1;
1810 BEFORE_POTENTIAL_GC ();
1811 v1 = POP; 1606 v1 = POP;
1812 TOP = Fmember (TOP, v1); 1607 TOP = Fmember (TOP, v1);
1813 AFTER_POTENTIAL_GC ();
1814 NEXT; 1608 NEXT;
1815 } 1609 }
1816 1610
1817 CASE (Bassq): 1611 CASE (Bassq):
1818 { 1612 {
1819 Lisp_Object v1; 1613 Lisp_Object v1;
1820 BEFORE_POTENTIAL_GC ();
1821 v1 = POP; 1614 v1 = POP;
1822 TOP = Fassq (TOP, v1); 1615 TOP = Fassq (TOP, v1);
1823 AFTER_POTENTIAL_GC ();
1824 NEXT; 1616 NEXT;
1825 } 1617 }
1826 1618
1827 CASE (Bnreverse): 1619 CASE (Bnreverse):
1828 BEFORE_POTENTIAL_GC ();
1829 TOP = Fnreverse (TOP); 1620 TOP = Fnreverse (TOP);
1830 AFTER_POTENTIAL_GC ();
1831 NEXT; 1621 NEXT;
1832 1622
1833 CASE (Bsetcar): 1623 CASE (Bsetcar):
1834 { 1624 {
1835 Lisp_Object v1; 1625 Lisp_Object v1;
1836 BEFORE_POTENTIAL_GC ();
1837 v1 = POP; 1626 v1 = POP;
1838 TOP = Fsetcar (TOP, v1); 1627 TOP = Fsetcar (TOP, v1);
1839 AFTER_POTENTIAL_GC ();
1840 NEXT; 1628 NEXT;
1841 } 1629 }
1842 1630
1843 CASE (Bsetcdr): 1631 CASE (Bsetcdr):
1844 { 1632 {
1845 Lisp_Object v1; 1633 Lisp_Object v1;
1846 BEFORE_POTENTIAL_GC ();
1847 v1 = POP; 1634 v1 = POP;
1848 TOP = Fsetcdr (TOP, v1); 1635 TOP = Fsetcdr (TOP, v1);
1849 AFTER_POTENTIAL_GC ();
1850 NEXT; 1636 NEXT;
1851 } 1637 }
1852 1638
@@ -1867,10 +1653,8 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1867 } 1653 }
1868 1654
1869 CASE (Bnconc): 1655 CASE (Bnconc):
1870 BEFORE_POTENTIAL_GC ();
1871 DISCARD (1); 1656 DISCARD (1);
1872 TOP = Fnconc (2, &TOP); 1657 TOP = Fnconc (2, &TOP);
1873 AFTER_POTENTIAL_GC ();
1874 NEXT; 1658 NEXT;
1875 1659
1876 CASE (Bnumberp): 1660 CASE (Bnumberp):
@@ -1887,14 +1671,10 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object vector, Lisp_Object maxdepth,
1887 interpreter. */ 1671 interpreter. */
1888 1672
1889 case Bset_mark: 1673 case Bset_mark:
1890 BEFORE_POTENTIAL_GC ();
1891 error ("set-mark is an obsolete bytecode"); 1674 error ("set-mark is an obsolete bytecode");
1892 AFTER_POTENTIAL_GC ();
1893 break; 1675 break;
1894 case Bscan_buffer: 1676 case Bscan_buffer:
1895 BEFORE_POTENTIAL_GC ();
1896 error ("scan-buffer is an obsolete bytecode"); 1677 error ("scan-buffer is an obsolete bytecode");
1897 AFTER_POTENTIAL_GC ();
1898 break; 1678 break;
1899#endif 1679#endif
1900 1680