aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKarl Heuer1994-11-18 06:50:02 +0000
committerKarl Heuer1994-11-18 06:50:02 +0000
commitb5088f8084d2e9250650a4b58ac2111ac1ff2d96 (patch)
tree435305ba9eeb56115b77ea4388676c68c488a037 /src
parent76437631034878f5a3ee9bd0bf58c8367708af4c (diff)
downloademacs-b5088f8084d2e9250650a4b58ac2111ac1ff2d96.tar.gz
emacs-b5088f8084d2e9250650a4b58ac2111ac1ff2d96.zip
(enum Lisp_Misc_Type): Rename Lisp_Vector to Lisp_Vectorlike. Mark
Lisp_Window_Configuration as obsolete. (PSEUDOVECTOR_FLAG, PSEUDOVECTOR_SIZE_MASK, PVEC_BUFFER, PVEC_PROCESS, PVEC_FRAME, PVEC_COMPILED, PVEC_WINDOW, PVEC_WINDOW_CONFIGURATION): New constants. (XSETPSEUDOVECTOR, PSEUDOVECTORP, VECTORLIKEP): New macros. (XSETVECTOR, XSETWINDOW_CONFIGURATION, VECTORP, WINDOW_CONFIGURATIONP): Use the new convention. (XSETCOMPILED): New macro.
Diffstat (limited to 'src')
-rw-r--r--src/lisp.h48
1 files changed, 37 insertions, 11 deletions
diff --git a/src/lisp.h b/src/lisp.h
index ff2edc2ae67..1b773b2fa65 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -46,9 +46,11 @@ enum Lisp_Type
46 The length of the string, and its contents, are stored therein. */ 46 The length of the string, and its contents, are stored therein. */
47 Lisp_String, 47 Lisp_String,
48 48
49 /* Vector of Lisp objects. XVECTOR(object) points to a struct Lisp_Vector. 49 /* Vector of Lisp objects, or something resembling it.
50 The length of the vector, and its contents, are stored therein. */ 50 XVECTOR(object) points to a struct Lisp_Vector, which contains
51 Lisp_Vector, 51 the size and contents. The size field also contains the type
52 information, if it's not a real vector object. */
53 Lisp_Vectorlike,
52 54
53 /* Cons. XCONS (object) points to a struct Lisp_Cons. */ 55 /* Cons. XCONS (object) points to a struct Lisp_Cons. */
54 Lisp_Cons, 56 Lisp_Cons,
@@ -83,7 +85,7 @@ enum Lisp_Type
83 Lisp_Window, 85 Lisp_Window,
84 86
85 /* Used by save,set,restore-window-configuration */ 87 /* Used by save,set,restore-window-configuration */
86 Lisp_Window_Configuration, 88 OBSOLETE_Lisp_Window_Configuration,
87 89
88#ifdef LISP_FLOAT_TYPE 90#ifdef LISP_FLOAT_TYPE
89 Lisp_Float, 91 Lisp_Float,
@@ -218,7 +220,26 @@ Lisp_Object;
218#define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT) 220#define ARRAY_MARK_FLAG ((MARKBIT >> 1) & ~MARKBIT)
219#endif /* no ARRAY_MARK_FLAG */ 221#endif /* no ARRAY_MARK_FLAG */
220 222
221#if ARRAY_MARK_FLAG == MARKBIT 223/* In the size word of a struct Lisp_Vector, this bit means it's really
224 some other vector-like object. */
225#ifndef PSEUDOVECTOR_FLAG
226#define PSEUDOVECTOR_FLAG ((ARRAY_MARK_FLAG >> 1) & ~ARRAY_MARK_FLAG)
227#endif
228
229/* In a pseudo-vector, the size field actually contains a word with one
230 PSEUDOVECTOR_FLAG bit set, and exactly one of the following bits to
231 indicate the actual type. */
232#define PVEC_BUFFER 0x100
233#define PVEC_PROCESS 0x200
234#define PVEC_FRAME 0x400
235#define PVEC_COMPILED 0x800
236#define PVEC_WINDOW 0x1000
237#define PVEC_WINDOW_CONFIGURATION 0x2000
238
239/* For convenience, we also store the number of elements in these bits. */
240#define PSEUDOVECTOR_SIZE_MASK 0xff
241
242#if ARRAY_MARK_FLAG == MARKBIT || PSEUDOVECTOR_FLAG == ARRAY_MARK_FLAG || PSEUDOVECTOR_FLAG == MARKBIT
222you lose 243you lose
223#endif 244#endif
224 245
@@ -381,7 +402,7 @@ extern int pure_size;
381#define XSETINT(a, b) XSET (a, Lisp_Int, b) 402#define XSETINT(a, b) XSET (a, Lisp_Int, b)
382#define XSETCONS(a, b) XSET (a, Lisp_Cons, b) 403#define XSETCONS(a, b) XSET (a, Lisp_Cons, b)
383#define XSETBUFFER(a, b) XSET (a, Lisp_Buffer, b) 404#define XSETBUFFER(a, b) XSET (a, Lisp_Buffer, b)
384#define XSETVECTOR(a, b) XSET (a, Lisp_Vector, b) 405#define XSETVECTOR(a, b) XSET (a, Lisp_Vectorlike, b)
385#define XSETSUBR(a, b) XSET (a, Lisp_Subr, b) 406#define XSETSUBR(a, b) XSET (a, Lisp_Subr, b)
386#define XSETSTRING(a, b) XSET (a, Lisp_String, b) 407#define XSETSTRING(a, b) XSET (a, Lisp_String, b)
387#define XSETSYMBOL(a, b) XSET (a, Lisp_Symbol, b) 408#define XSETSYMBOL(a, b) XSET (a, Lisp_Symbol, b)
@@ -389,7 +410,8 @@ extern int pure_size;
389#define XSETWINDOW(a, b) XSET (a, Lisp_Window, b) 410#define XSETWINDOW(a, b) XSET (a, Lisp_Window, b)
390#define XSETPROCESS(a, b) XSET (a, Lisp_Process, b) 411#define XSETPROCESS(a, b) XSET (a, Lisp_Process, b)
391#define XSETFLOAT(a, b) XSET (a, Lisp_Float, b) 412#define XSETFLOAT(a, b) XSET (a, Lisp_Float, b)
392#define XSETWINDOW_CONFIGURATION(a, b) XSET (a, Lisp_Window_Configuration, b) 413#define XSETPSEUDOVECTOR(a, b, code) (XSETVECTOR (a, b), XVECTOR (a)->size |= PSEUDOVECTOR_FLAG | (code))
414#define XSETWINDOW_CONFIGURATION(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW_CONFIGURATION))
393#define XSETCOMPILED(a, b) XSET (a, Lisp_Compiled, b) 415#define XSETCOMPILED(a, b) XSET (a, Lisp_Compiled, b)
394#define XSETMARKER(a, b) (XSETMISC (a, b), XMISC (a)->type = Lisp_Misc_Marker) 416#define XSETMARKER(a, b) (XSETMISC (a, b), XMISC (a)->type = Lisp_Misc_Marker)
395 417
@@ -766,10 +788,10 @@ typedef unsigned char UCHAR;
766#define GC_SYMBOLP(x) (XGCTYPE ((x)) == Lisp_Symbol) 788#define GC_SYMBOLP(x) (XGCTYPE ((x)) == Lisp_Symbol)
767#define MISCP(x) (XTYPE ((x)) == Lisp_Misc) 789#define MISCP(x) (XTYPE ((x)) == Lisp_Misc)
768#define GC_MISCP(x) (XGCTYPE ((x)) == Lisp_Misc) 790#define GC_MISCP(x) (XGCTYPE ((x)) == Lisp_Misc)
791#define VECTORLIKEP(x) (XTYPE ((x)) == Lisp_Vectorlike)
792#define GC_VECTORLIKEP(x) (XGCTYPE ((x)) == Lisp_Vectorlike)
769#define STRINGP(x) (XTYPE ((x)) == Lisp_String) 793#define STRINGP(x) (XTYPE ((x)) == Lisp_String)
770#define GC_STRINGP(x) (XGCTYPE ((x)) == Lisp_String) 794#define GC_STRINGP(x) (XGCTYPE ((x)) == Lisp_String)
771#define VECTORP(x) (XTYPE ((x)) == Lisp_Vector)
772#define GC_VECTORP(x) (XGCTYPE ((x)) == Lisp_Vector)
773#define CONSP(x) (XTYPE ((x)) == Lisp_Cons) 795#define CONSP(x) (XTYPE ((x)) == Lisp_Cons)
774#define GC_CONSP(x) (XGCTYPE ((x)) == Lisp_Cons) 796#define GC_CONSP(x) (XGCTYPE ((x)) == Lisp_Cons)
775#define COMPILEDP(x) (XTYPE ((x)) == Lisp_Compiled) 797#define COMPILEDP(x) (XTYPE ((x)) == Lisp_Compiled)
@@ -793,8 +815,10 @@ typedef unsigned char UCHAR;
793#endif 815#endif
794#define WINDOWP(x) (XTYPE ((x)) == Lisp_Window) 816#define WINDOWP(x) (XTYPE ((x)) == Lisp_Window)
795#define GC_WINDOWP(x) (XGCTYPE ((x)) == Lisp_Window) 817#define GC_WINDOWP(x) (XGCTYPE ((x)) == Lisp_Window)
796#define WINDOW_CONFIGURATIONP(x) (XTYPE ((x)) == Lisp_Window_Configuration) 818#define PSEUDOVECTORP(x, code) (VECTORLIKEP (x) && ((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) == PSEUDOVECTOR_FLAG | (code))
797#define GC_WINDOW_CONFIGURATIONP(x) (XGCTYPE ((x)) == Lisp_Window_Configuration) 819#define GC_PSEUDOVECTORP(x, code) (GC_VECTORLIKEP (x) && ((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) == PSEUDOVECTOR_FLAG | (code))
820#define WINDOW_CONFIGURATIONP(x) PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION)
821#define GC_WINDOW_CONFIGURATIONP(x) GC_PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION)
798#ifdef LISP_FLOAT_TYPE 822#ifdef LISP_FLOAT_TYPE
799#define FLOATP(x) (XTYPE ((x)) == Lisp_Float) 823#define FLOATP(x) (XTYPE ((x)) == Lisp_Float)
800#define GC_FLOATP(x) (XGCTYPE ((x)) == Lisp_Float) 824#define GC_FLOATP(x) (XGCTYPE ((x)) == Lisp_Float)
@@ -802,6 +826,8 @@ typedef unsigned char UCHAR;
802#define FLOATP(x) (0) 826#define FLOATP(x) (0)
803#define GC_FLOATP(x) (0) 827#define GC_FLOATP(x) (0)
804#endif 828#endif
829#define VECTORP(x) (VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG))
830#define GC_VECTORP(x) (GC_VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG))
805#define OVERLAYP(x) (MISCP (x) && XMISC (x)->type == Lisp_Misc_Overlay) 831#define OVERLAYP(x) (MISCP (x) && XMISC (x)->type == Lisp_Misc_Overlay)
806#define GC_OVERLAYP(x) (GC_MISCP (x) && XMISC (x)->type == Lisp_Misc_Overlay) 832#define GC_OVERLAYP(x) (GC_MISCP (x) && XMISC (x)->type == Lisp_Misc_Overlay)
807#define MARKERP(x) (MISCP (x) && XMISC (x)->type == Lisp_Misc_Marker) 833#define MARKERP(x) (MISCP (x) && XMISC (x)->type == Lisp_Misc_Marker)