Mercurial > emacs
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 } |
