comparison src/bytecode.c @ 27442:ad65b21bc4cd

(Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where an error may be signalled.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 26 Jan 2000 14:46:36 +0000
parents 5218aa03936e
children 9400865ec7cf
comparison
equal deleted inserted replaced
27441:3e7c95e7bec6 27442:ad65b21bc4cd
503 if (CONSP (v1)) 503 if (CONSP (v1))
504 TOP = XCAR (v1); 504 TOP = XCAR (v1);
505 else if (NILP (v1)) 505 else if (NILP (v1))
506 TOP = Qnil; 506 TOP = Qnil;
507 else 507 else
508 Fcar (wrong_type_argument (Qlistp, v1)); 508 {
509 BEFORE_POTENTIAL_GC ();
510 Fcar (wrong_type_argument (Qlistp, v1));
511 AFTER_POTENTIAL_GC ();
512 }
509 break; 513 break;
510 } 514 }
511 515
512 case Beq: 516 case Beq:
513 { 517 {
532 if (CONSP (v1)) 536 if (CONSP (v1))
533 TOP = XCDR (v1); 537 TOP = XCDR (v1);
534 else if (NILP (v1)) 538 else if (NILP (v1))
535 TOP = Qnil; 539 TOP = Qnil;
536 else 540 else
537 Fcdr (wrong_type_argument (Qlistp, v1)); 541 {
542 BEFORE_POTENTIAL_GC ();
543 Fcdr (wrong_type_argument (Qlistp, v1));
544 AFTER_POTENTIAL_GC ();
545 }
538 break; 546 break;
539 } 547 }
540 548
541 case Bvarset+7: 549 case Bvarset+7:
542 op = FETCH2; 550 op = FETCH2;
824 case Bnth: 832 case Bnth:
825 { 833 {
826 Lisp_Object v1, v2; 834 Lisp_Object v1, v2;
827 v1 = POP; 835 v1 = POP;
828 v2 = TOP; 836 v2 = TOP;
837 BEFORE_POTENTIAL_GC ();
829 CHECK_NUMBER (v2, 0); 838 CHECK_NUMBER (v2, 0);
839 AFTER_POTENTIAL_GC ();
830 op = XINT (v2); 840 op = XINT (v2);
831 immediate_quit = 1; 841 immediate_quit = 1;
832 while (--op >= 0) 842 while (--op >= 0)
833 { 843 {
834 if (CONSP (v1)) 844 if (CONSP (v1))
835 v1 = XCDR (v1); 845 v1 = XCDR (v1);
836 else if (!NILP (v1)) 846 else if (!NILP (v1))
837 { 847 {
838 immediate_quit = 0; 848 immediate_quit = 0;
849 BEFORE_POTENTIAL_GC ();
839 v1 = wrong_type_argument (Qlistp, v1); 850 v1 = wrong_type_argument (Qlistp, v1);
851 AFTER_POTENTIAL_GC ();
840 immediate_quit = 1; 852 immediate_quit = 1;
841 op++; 853 op++;
842 } 854 }
843 } 855 }
844 immediate_quit = 0; 856 immediate_quit = 0;
845 if (CONSP (v1)) 857 if (CONSP (v1))
846 TOP = XCAR (v1); 858 TOP = XCAR (v1);
847 else if (NILP (v1)) 859 else if (NILP (v1))
848 TOP = Qnil; 860 TOP = Qnil;
849 else 861 else
850 Fcar (wrong_type_argument (Qlistp, v1)); 862 {
863 BEFORE_POTENTIAL_GC ();
864 Fcar (wrong_type_argument (Qlistp, v1));
865 AFTER_POTENTIAL_GC ();
866 }
851 break; 867 break;
852 } 868 }
853 869
854 case Bsymbolp: 870 case Bsymbolp:
855 TOP = SYMBOLP (TOP) ? Qt : Qnil; 871 TOP = SYMBOLP (TOP) ? Qt : Qnil;
1020 1036
1021 case Beqlsign: 1037 case Beqlsign:
1022 { 1038 {
1023 Lisp_Object v1, v2; 1039 Lisp_Object v1, v2;
1024 v2 = POP; v1 = TOP; 1040 v2 = POP; v1 = TOP;
1041 BEFORE_POTENTIAL_GC ();
1025 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1, 0); 1042 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1, 0);
1026 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2, 0); 1043 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2, 0);
1044 AFTER_POTENTIAL_GC ();
1027 #ifdef LISP_FLOAT_TYPE 1045 #ifdef LISP_FLOAT_TYPE
1028 if (FLOATP (v1) || FLOATP (v2)) 1046 if (FLOATP (v1) || FLOATP (v2))
1029 { 1047 {
1030 double f1, f2; 1048 double f1, f2;
1031 1049
1268 TOP = Fforward_line (TOP); 1286 TOP = Fforward_line (TOP);
1269 AFTER_POTENTIAL_GC (); 1287 AFTER_POTENTIAL_GC ();
1270 break; 1288 break;
1271 1289
1272 case Bchar_syntax: 1290 case Bchar_syntax:
1291 BEFORE_POTENTIAL_GC ();
1273 CHECK_NUMBER (TOP, 0); 1292 CHECK_NUMBER (TOP, 0);
1293 AFTER_POTENTIAL_GC ();
1274 XSETFASTINT (TOP, syntax_code_spec[(int) SYNTAX (XINT (TOP))]); 1294 XSETFASTINT (TOP, syntax_code_spec[(int) SYNTAX (XINT (TOP))]);
1275 break; 1295 break;
1276 1296
1277 case Bbuffer_substring: 1297 case Bbuffer_substring:
1278 { 1298 {
1379 if (CONSP (TOP)) 1399 if (CONSP (TOP))
1380 { 1400 {
1381 /* Exchange args and then do nth. */ 1401 /* Exchange args and then do nth. */
1382 v2 = POP; 1402 v2 = POP;
1383 v1 = TOP; 1403 v1 = TOP;
1404 BEFORE_POTENTIAL_GC ();
1384 CHECK_NUMBER (v2, 0); 1405 CHECK_NUMBER (v2, 0);
1406 AFTER_POTENTIAL_GC ();
1385 op = XINT (v2); 1407 op = XINT (v2);
1386 immediate_quit = 1; 1408 immediate_quit = 1;
1387 while (--op >= 0) 1409 while (--op >= 0)
1388 { 1410 {
1389 if (CONSP (v1)) 1411 if (CONSP (v1))
1390 v1 = XCDR (v1); 1412 v1 = XCDR (v1);
1391 else if (!NILP (v1)) 1413 else if (!NILP (v1))
1392 { 1414 {
1393 immediate_quit = 0; 1415 immediate_quit = 0;
1416 BEFORE_POTENTIAL_GC ();
1394 v1 = wrong_type_argument (Qlistp, v1); 1417 v1 = wrong_type_argument (Qlistp, v1);
1418 AFTER_POTENTIAL_GC ();
1395 immediate_quit = 1; 1419 immediate_quit = 1;
1396 op++; 1420 op++;
1397 } 1421 }
1398 } 1422 }
1399 immediate_quit = 0; 1423 immediate_quit = 0;
1400 if (CONSP (v1)) 1424 if (CONSP (v1))
1401 TOP = XCAR (v1); 1425 TOP = XCAR (v1);
1402 else if (NILP (v1)) 1426 else if (NILP (v1))
1403 TOP = Qnil; 1427 TOP = Qnil;
1404 else 1428 else
1405 Fcar (wrong_type_argument (Qlistp, v1)); 1429 {
1430 BEFORE_POTENTIAL_GC ();
1431 Fcar (wrong_type_argument (Qlistp, v1));
1432 AFTER_POTENTIAL_GC ();
1433 }
1406 } 1434 }
1407 else 1435 else
1408 { 1436 {
1409 v1 = POP; 1437 v1 = POP;
1410 TOP = Felt (TOP, v1); 1438 TOP = Felt (TOP, v1);
1483 TOP = INTEGERP (TOP) ? Qt : Qnil; 1511 TOP = INTEGERP (TOP) ? Qt : Qnil;
1484 break; 1512 break;
1485 1513
1486 #ifdef BYTE_CODE_SAFE 1514 #ifdef BYTE_CODE_SAFE
1487 case Bset_mark: 1515 case Bset_mark:
1516 BEFORE_POTENTIAL_GC ();
1488 error ("set-mark is an obsolete bytecode"); 1517 error ("set-mark is an obsolete bytecode");
1518 AFTER_POTENTIAL_GC ();
1489 break; 1519 break;
1490 case Bscan_buffer: 1520 case Bscan_buffer:
1521 BEFORE_POTENTIAL_GC ();
1491 error ("scan-buffer is an obsolete bytecode"); 1522 error ("scan-buffer is an obsolete bytecode");
1523 AFTER_POTENTIAL_GC ();
1492 break; 1524 break;
1493 #endif 1525 #endif
1494 1526
1495 case 0: 1527 case 0:
1496 abort (); 1528 abort ();
1497 1529
1498 case 255: 1530 case 255:
1499 default: 1531 default:
1500 #ifdef BYTE_CODE_SAFE 1532 #ifdef BYTE_CODE_SAFE
1501 if (op < Bconstant) 1533 if (op < Bconstant)
1502 error ("unknown bytecode %d (byte compiler bug)", op); 1534 {
1535 BEFORE_POTENTIAL_GC ();
1536 error ("unknown bytecode %d (byte compiler bug)", op);
1537 AFTER_POTENTIAL_GC ();
1538 }
1503 if ((op -= Bconstant) >= const_length) 1539 if ((op -= Bconstant) >= const_length)
1504 error ("no constant number %d (byte compiler bug)", op); 1540 {
1541 BEFORE_POTENTIAL_GC ();
1542 error ("no constant number %d (byte compiler bug)", op);
1543 AFTER_POTENTIAL_GC ();
1544 }
1505 PUSH (vectorp[op]); 1545 PUSH (vectorp[op]);
1506 #else 1546 #else
1507 PUSH (vectorp[op - Bconstant]); 1547 PUSH (vectorp[op - Bconstant]);
1508 #endif 1548 #endif
1509 } 1549 }