diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lisp.h | 71 |
1 files changed, 10 insertions, 61 deletions
diff --git a/src/lisp.h b/src/lisp.h index df62a261fe4..c8ca4c49ec6 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -463,17 +463,6 @@ extern Lisp_Object make_number P_ ((EMACS_INT)); | |||
| 463 | 463 | ||
| 464 | #endif /* NO_UNION_TYPE */ | 464 | #endif /* NO_UNION_TYPE */ |
| 465 | 465 | ||
| 466 | /* During garbage collection, XGCTYPE must be used for extracting types | ||
| 467 | so that the mark bit is ignored. XMARKBIT accesses the markbit. | ||
| 468 | Markbits are used only in particular slots of particular structure types. | ||
| 469 | Other markbits are always zero. | ||
| 470 | Outside of garbage collection, all mark bits are always zero. */ | ||
| 471 | |||
| 472 | #ifndef XGCTYPE | ||
| 473 | /* The distinction does not exist now that the MARKBIT has been eliminated. */ | ||
| 474 | #define XGCTYPE(a) XTYPE (a) | ||
| 475 | #endif | ||
| 476 | |||
| 477 | #ifndef XPNTR | 466 | #ifndef XPNTR |
| 478 | #ifdef HAVE_SHM | 467 | #ifdef HAVE_SHM |
| 479 | /* In this representation, data is found in two widely separated segments. */ | 468 | /* In this representation, data is found in two widely separated segments. */ |
| @@ -515,11 +504,11 @@ extern size_t pure_size; | |||
| 515 | 504 | ||
| 516 | /* Extract a value or address from a Lisp_Object. */ | 505 | /* Extract a value or address from a Lisp_Object. */ |
| 517 | 506 | ||
| 518 | #define XCONS(a) (eassert (GC_CONSP(a)),(struct Lisp_Cons *) XPNTR(a)) | 507 | #define XCONS(a) (eassert (CONSP(a)),(struct Lisp_Cons *) XPNTR(a)) |
| 519 | #define XVECTOR(a) (eassert (GC_VECTORLIKEP(a)),(struct Lisp_Vector *) XPNTR(a)) | 508 | #define XVECTOR(a) (eassert (VECTORLIKEP(a)),(struct Lisp_Vector *) XPNTR(a)) |
| 520 | #define XSTRING(a) (eassert (GC_STRINGP(a)),(struct Lisp_String *) XPNTR(a)) | 509 | #define XSTRING(a) (eassert (STRINGP(a)),(struct Lisp_String *) XPNTR(a)) |
| 521 | #define XSYMBOL(a) (eassert (GC_SYMBOLP(a)),(struct Lisp_Symbol *) XPNTR(a)) | 510 | #define XSYMBOL(a) (eassert (SYMBOLP(a)),(struct Lisp_Symbol *) XPNTR(a)) |
| 522 | #define XFLOAT(a) (eassert (GC_FLOATP(a)),(struct Lisp_Float *) XPNTR(a)) | 511 | #define XFLOAT(a) (eassert (FLOATP(a)),(struct Lisp_Float *) XPNTR(a)) |
| 523 | 512 | ||
| 524 | /* Misc types. */ | 513 | /* Misc types. */ |
| 525 | 514 | ||
| @@ -537,10 +526,10 @@ extern size_t pure_size; | |||
| 537 | 526 | ||
| 538 | /* Pseudovector types. */ | 527 | /* Pseudovector types. */ |
| 539 | 528 | ||
| 540 | #define XPROCESS(a) (eassert (GC_PROCESSP(a)),(struct Lisp_Process *) XPNTR(a)) | 529 | #define XPROCESS(a) (eassert (PROCESSP(a)),(struct Lisp_Process *) XPNTR(a)) |
| 541 | #define XWINDOW(a) (eassert (GC_WINDOWP(a)),(struct window *) XPNTR(a)) | 530 | #define XWINDOW(a) (eassert (WINDOWP(a)),(struct window *) XPNTR(a)) |
| 542 | #define XSUBR(a) (eassert (GC_SUBRP(a)),(struct Lisp_Subr *) XPNTR(a)) | 531 | #define XSUBR(a) (eassert (SUBRP(a)),(struct Lisp_Subr *) XPNTR(a)) |
| 543 | #define XBUFFER(a) (eassert (GC_BUFFERP(a)),(struct buffer *) XPNTR(a)) | 532 | #define XBUFFER(a) (eassert (BUFFERP(a)),(struct buffer *) XPNTR(a)) |
| 544 | #define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a)) | 533 | #define XCHAR_TABLE(a) ((struct Lisp_Char_Table *) XPNTR(a)) |
| 545 | #define XSUB_CHAR_TABLE(a) ((struct Lisp_Sub_Char_Table *) XPNTR(a)) | 534 | #define XSUB_CHAR_TABLE(a) ((struct Lisp_Sub_Char_Table *) XPNTR(a)) |
| 546 | #define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a)) | 535 | #define XBOOL_VECTOR(a) ((struct Lisp_Bool_Vector *) XPNTR(a)) |
| @@ -1063,7 +1052,6 @@ struct Lisp_Hash_Table | |||
| 1063 | (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE)) | 1052 | (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE)) |
| 1064 | 1053 | ||
| 1065 | #define HASH_TABLE_P(OBJ) PSEUDOVECTORP (OBJ, PVEC_HASH_TABLE) | 1054 | #define HASH_TABLE_P(OBJ) PSEUDOVECTORP (OBJ, PVEC_HASH_TABLE) |
| 1066 | #define GC_HASH_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_HASH_TABLE) | ||
| 1067 | 1055 | ||
| 1068 | #define CHECK_HASH_TABLE(x) \ | 1056 | #define CHECK_HASH_TABLE(x) \ |
| 1069 | CHECK_TYPE (HASH_TABLE_P (x), Qhash_table_p, x) | 1057 | CHECK_TYPE (HASH_TABLE_P (x), Qhash_table_p, x) |
| @@ -1449,48 +1437,28 @@ typedef unsigned char UCHAR; | |||
| 1449 | /* Data type checking */ | 1437 | /* Data type checking */ |
| 1450 | 1438 | ||
| 1451 | #define NILP(x) EQ (x, Qnil) | 1439 | #define NILP(x) EQ (x, Qnil) |
| 1452 | #define GC_NILP(x) GC_EQ (x, Qnil) | ||
| 1453 | 1440 | ||
| 1454 | #define NUMBERP(x) (INTEGERP (x) || FLOATP (x)) | 1441 | #define NUMBERP(x) (INTEGERP (x) || FLOATP (x)) |
| 1455 | #define GC_NUMBERP(x) (GC_INTEGERP (x) || GC_FLOATP (x)) | ||
| 1456 | #define NATNUMP(x) (INTEGERP (x) && XINT (x) >= 0) | 1442 | #define NATNUMP(x) (INTEGERP (x) && XINT (x) >= 0) |
| 1457 | #define GC_NATNUMP(x) (GC_INTEGERP (x) && XINT (x) >= 0) | ||
| 1458 | 1443 | ||
| 1459 | #define INTEGERP(x) (XTYPE ((x)) == Lisp_Int) | 1444 | #define INTEGERP(x) (XTYPE ((x)) == Lisp_Int) |
| 1460 | #define GC_INTEGERP(x) INTEGERP (x) | ||
| 1461 | #define SYMBOLP(x) (XTYPE ((x)) == Lisp_Symbol) | 1445 | #define SYMBOLP(x) (XTYPE ((x)) == Lisp_Symbol) |
| 1462 | #define GC_SYMBOLP(x) (XGCTYPE ((x)) == Lisp_Symbol) | ||
| 1463 | #define MISCP(x) (XTYPE ((x)) == Lisp_Misc) | 1446 | #define MISCP(x) (XTYPE ((x)) == Lisp_Misc) |
| 1464 | #define GC_MISCP(x) (XGCTYPE ((x)) == Lisp_Misc) | ||
| 1465 | #define VECTORLIKEP(x) (XTYPE ((x)) == Lisp_Vectorlike) | 1447 | #define VECTORLIKEP(x) (XTYPE ((x)) == Lisp_Vectorlike) |
| 1466 | #define GC_VECTORLIKEP(x) (XGCTYPE ((x)) == Lisp_Vectorlike) | ||
| 1467 | #define STRINGP(x) (XTYPE ((x)) == Lisp_String) | 1448 | #define STRINGP(x) (XTYPE ((x)) == Lisp_String) |
| 1468 | #define GC_STRINGP(x) (XGCTYPE ((x)) == Lisp_String) | ||
| 1469 | #define CONSP(x) (XTYPE ((x)) == Lisp_Cons) | 1449 | #define CONSP(x) (XTYPE ((x)) == Lisp_Cons) |
| 1470 | #define GC_CONSP(x) (XGCTYPE ((x)) == Lisp_Cons) | ||
| 1471 | 1450 | ||
| 1472 | #define FLOATP(x) (XTYPE ((x)) == Lisp_Float) | 1451 | #define FLOATP(x) (XTYPE ((x)) == Lisp_Float) |
| 1473 | #define GC_FLOATP(x) (XGCTYPE ((x)) == Lisp_Float) | 1452 | #define VECTORP(x) (VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG)) |
| 1474 | #define VECTORP(x) (VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG)) | ||
| 1475 | #define GC_VECTORP(x) (GC_VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG)) | ||
| 1476 | #define OVERLAYP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay) | 1453 | #define OVERLAYP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay) |
| 1477 | #define GC_OVERLAYP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay) | ||
| 1478 | #define MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker) | 1454 | #define MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker) |
| 1479 | #define GC_MARKERP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker) | ||
| 1480 | #define INTFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Intfwd) | 1455 | #define INTFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Intfwd) |
| 1481 | #define GC_INTFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Intfwd) | ||
| 1482 | #define BOOLFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Boolfwd) | 1456 | #define BOOLFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Boolfwd) |
| 1483 | #define GC_BOOLFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Boolfwd) | ||
| 1484 | #define OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Objfwd) | 1457 | #define OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Objfwd) |
| 1485 | #define GC_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Objfwd) | ||
| 1486 | #define BUFFER_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd) | 1458 | #define BUFFER_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd) |
| 1487 | #define GC_BUFFER_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd) | ||
| 1488 | #define BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value) | 1459 | #define BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value) |
| 1489 | #define GC_BUFFER_LOCAL_VALUEP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value) | ||
| 1490 | #define SOME_BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value) | 1460 | #define SOME_BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value) |
| 1491 | #define GC_SOME_BUFFER_LOCAL_VALUEP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value) | ||
| 1492 | #define KBOARD_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd) | 1461 | #define KBOARD_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd) |
| 1493 | #define GC_KBOARD_OBJFWDP(x) (GC_MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd) | ||
| 1494 | 1462 | ||
| 1495 | 1463 | ||
| 1496 | /* True if object X is a pseudovector whose code is CODE. */ | 1464 | /* True if object X is a pseudovector whose code is CODE. */ |
| @@ -1499,34 +1467,17 @@ typedef unsigned char UCHAR; | |||
| 1499 | && (((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) \ | 1467 | && (((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) \ |
| 1500 | == (PSEUDOVECTOR_FLAG | (code)))) | 1468 | == (PSEUDOVECTOR_FLAG | (code)))) |
| 1501 | 1469 | ||
| 1502 | /* True if object X is a pseudovector whose code is CODE. | ||
| 1503 | This one works during GC. */ | ||
| 1504 | #define GC_PSEUDOVECTORP(x, code) \ | ||
| 1505 | (GC_VECTORLIKEP (x) \ | ||
| 1506 | && (((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) \ | ||
| 1507 | == (PSEUDOVECTOR_FLAG | (code)))) | ||
| 1508 | |||
| 1509 | /* Test for specific pseudovector types. */ | 1470 | /* Test for specific pseudovector types. */ |
| 1510 | #define WINDOW_CONFIGURATIONP(x) PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION) | 1471 | #define WINDOW_CONFIGURATIONP(x) PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION) |
| 1511 | #define GC_WINDOW_CONFIGURATIONP(x) GC_PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION) | ||
| 1512 | #define PROCESSP(x) PSEUDOVECTORP (x, PVEC_PROCESS) | 1472 | #define PROCESSP(x) PSEUDOVECTORP (x, PVEC_PROCESS) |
| 1513 | #define GC_PROCESSP(x) GC_PSEUDOVECTORP (x, PVEC_PROCESS) | ||
| 1514 | #define WINDOWP(x) PSEUDOVECTORP (x, PVEC_WINDOW) | 1473 | #define WINDOWP(x) PSEUDOVECTORP (x, PVEC_WINDOW) |
| 1515 | #define GC_WINDOWP(x) GC_PSEUDOVECTORP (x, PVEC_WINDOW) | ||
| 1516 | #define SUBRP(x) PSEUDOVECTORP (x, PVEC_SUBR) | 1474 | #define SUBRP(x) PSEUDOVECTORP (x, PVEC_SUBR) |
| 1517 | #define GC_SUBRP(x) GC_PSEUDOVECTORP (x, PVEC_SUBR) | ||
| 1518 | #define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED) | 1475 | #define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED) |
| 1519 | #define GC_COMPILEDP(x) GC_PSEUDOVECTORP (x, PVEC_COMPILED) | ||
| 1520 | #define BUFFERP(x) PSEUDOVECTORP (x, PVEC_BUFFER) | 1476 | #define BUFFERP(x) PSEUDOVECTORP (x, PVEC_BUFFER) |
| 1521 | #define GC_BUFFERP(x) GC_PSEUDOVECTORP (x, PVEC_BUFFER) | ||
| 1522 | #define CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_CHAR_TABLE) | 1477 | #define CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_CHAR_TABLE) |
| 1523 | #define SUB_CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_SUB_CHAR_TABLE) | 1478 | #define SUB_CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_SUB_CHAR_TABLE) |
| 1524 | #define GC_SUB_CHAR_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_SUB_CHAR_TABLE) | ||
| 1525 | #define GC_CHAR_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_CHAR_TABLE) | ||
| 1526 | #define BOOL_VECTOR_P(x) PSEUDOVECTORP (x, PVEC_BOOL_VECTOR) | 1479 | #define BOOL_VECTOR_P(x) PSEUDOVECTORP (x, PVEC_BOOL_VECTOR) |
| 1527 | #define GC_BOOL_VECTOR_P(x) GC_PSEUDOVECTORP (x, PVEC_BOOL_VECTOR) | ||
| 1528 | #define FRAMEP(x) PSEUDOVECTORP (x, PVEC_FRAME) | 1480 | #define FRAMEP(x) PSEUDOVECTORP (x, PVEC_FRAME) |
| 1529 | #define GC_FRAMEP(x) GC_PSEUDOVECTORP (x, PVEC_FRAME) | ||
| 1530 | 1481 | ||
| 1531 | /* Test for image (image . spec) */ | 1482 | /* Test for image (image . spec) */ |
| 1532 | #define IMAGEP(x) (CONSP (x) && EQ (XCAR (x), Qimage)) | 1483 | #define IMAGEP(x) (CONSP (x) && EQ (XCAR (x), Qimage)) |
| @@ -1536,8 +1487,6 @@ typedef unsigned char UCHAR; | |||
| 1536 | #define ARRAYP(x) \ | 1487 | #define ARRAYP(x) \ |
| 1537 | (VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x)) | 1488 | (VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x)) |
| 1538 | 1489 | ||
| 1539 | #define GC_EQ(x, y) EQ (x, y) | ||
| 1540 | |||
| 1541 | #define CHECK_LIST(x) \ | 1490 | #define CHECK_LIST(x) \ |
| 1542 | CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x) | 1491 | CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x) |
| 1543 | 1492 | ||