aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKen Raeburn1999-08-28 22:15:12 +0000
committerKen Raeburn1999-08-28 22:15:12 +0000
commit8f34f70a36c9d3aeafc0b61130dd2dbee288a527 (patch)
tree49650ad9e627793925c981b041ba48cdef7c3b9d /src
parent5e8b779fcb008d2ecb142edb362c3865de987826 (diff)
downloademacs-8f34f70a36c9d3aeafc0b61130dd2dbee288a527.tar.gz
emacs-8f34f70a36c9d3aeafc0b61130dd2dbee288a527.zip
(struct Lisp_Cons, XCAR, XCDR, struct Lisp_Float): Change names of structure
elements if HIDE_LISP_IMPLEMENTATION is defined, to help detect code that uses knowledge of the Lisp internals that it shouldn't have. (XFLOAT_DATA): New macro.
Diffstat (limited to 'src')
-rw-r--r--src/lisp.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/lisp.h b/src/lisp.h
index d5e4aadc9e1..4d81d2f916c 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -525,12 +525,23 @@ typedef struct interval *INTERVAL;
525 525
526struct Lisp_Cons 526struct Lisp_Cons
527 { 527 {
528 /* Please do not use the names of these elements in code other
529 than the core lisp implementation. Use XCAR and XCDR below. */
530#ifdef HIDE_LISP_IMPLEMENTATION
531 Lisp_Object car_, cdr_;
532#else
528 Lisp_Object car, cdr; 533 Lisp_Object car, cdr;
534#endif
529 }; 535 };
530 536
531/* Take the car or cdr of something known to be a cons cell. */ 537/* Take the car or cdr of something known to be a cons cell. */
538#ifdef HIDE_LISP_IMPLEMENTATION
539#define XCAR(c) (XCONS ((c))->car_)
540#define XCDR(c) (XCONS ((c))->cdr_)
541#else
532#define XCAR(c) (XCONS ((c))->car) 542#define XCAR(c) (XCONS ((c))->car)
533#define XCDR(c) (XCONS ((c))->cdr) 543#define XCDR(c) (XCONS ((c))->cdr)
544#endif
534 545
535/* Take the car or cdr of something whose type is not known. */ 546/* Take the car or cdr of something whose type is not known. */
536#define CAR(c) \ 547#define CAR(c) \
@@ -1012,8 +1023,18 @@ struct Lisp_Float
1012 { 1023 {
1013 Lisp_Object type; /* essentially used for mark-bit 1024 Lisp_Object type; /* essentially used for mark-bit
1014 and chaining when on free-list */ 1025 and chaining when on free-list */
1026#ifdef HIDE_LISP_IMPLEMENTATION
1027 double data_;
1028#else
1015 double data; 1029 double data;
1030#endif
1016 }; 1031 };
1032
1033#ifdef HIDE_LISP_IMPLEMENTATION
1034#define XFLOAT_DATA(f) (XFLOAT (f)->data_)
1035#else
1036#define XFLOAT_DATA(f) (XFLOAT (f)->data)
1037#endif
1017#endif /* LISP_FLOAT_TYPE */ 1038#endif /* LISP_FLOAT_TYPE */
1018 1039
1019/* A character, declared with the following typedef, is a member 1040/* A character, declared with the following typedef, is a member