Mercurial > hg > xemacs-beta
comparison src/lisp.h @ 5140:e5380fdaf8f1
merge
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Sat, 13 Mar 2010 05:38:34 -0600 |
parents | a48ef26d87ee 7be849cb8828 |
children | 186aebf7f6c6 |
comparison
equal
deleted
inserted
replaced
5139:a48ef26d87ee | 5140:e5380fdaf8f1 |
---|---|
2389 { | 2389 { |
2390 Dynarr_declare (struct face_cachel); | 2390 Dynarr_declare (struct face_cachel); |
2391 } face_cachel_dynarr; | 2391 } face_cachel_dynarr; |
2392 | 2392 |
2393 #ifdef NEW_GC | 2393 #ifdef NEW_GC |
2394 DECLARE_LRECORD (face_cachel_dynarr, face_cachel_dynarr); | 2394 DECLARE_LISP_OBJECT (face_cachel_dynarr, face_cachel_dynarr); |
2395 #define XFACE_CACHEL_DYNARR(x) \ | 2395 #define XFACE_CACHEL_DYNARR(x) \ |
2396 XRECORD (x, face_cachel_dynarr, face_cachel_dynarr) | 2396 XRECORD (x, face_cachel_dynarr, face_cachel_dynarr) |
2397 #define wrap_face_cachel_dynarr(p) wrap_record (p, face_cachel_dynarr) | 2397 #define wrap_face_cachel_dynarr(p) wrap_record (p, face_cachel_dynarr) |
2398 #define FACE_CACHEL_DYNARRP(x) RECORDP (x, face_cachel_dynarr) | 2398 #define FACE_CACHEL_DYNARRP(x) RECORDP (x, face_cachel_dynarr) |
2399 #define CHECK_FACE_CACHEL_DYNARR(x) CHECK_RECORD (x, face_cachel_dynarr) | 2399 #define CHECK_FACE_CACHEL_DYNARR(x) CHECK_RECORD (x, face_cachel_dynarr) |
2404 { | 2404 { |
2405 Dynarr_declare (struct glyph_cachel); | 2405 Dynarr_declare (struct glyph_cachel); |
2406 } glyph_cachel_dynarr; | 2406 } glyph_cachel_dynarr; |
2407 | 2407 |
2408 #ifdef NEW_GC | 2408 #ifdef NEW_GC |
2409 DECLARE_LRECORD (glyph_cachel_dynarr, glyph_cachel_dynarr); | 2409 DECLARE_LISP_OBJECT (glyph_cachel_dynarr, glyph_cachel_dynarr); |
2410 #define XGLYPH_CACHEL_DYNARR(x) \ | 2410 #define XGLYPH_CACHEL_DYNARR(x) \ |
2411 XRECORD (x, glyph_cachel_dynarr, glyph_cachel_dynarr) | 2411 XRECORD (x, glyph_cachel_dynarr, glyph_cachel_dynarr) |
2412 #define wrap_glyph_cachel_dynarr(p) wrap_record (p, glyph_cachel_dynarr) | 2412 #define wrap_glyph_cachel_dynarr(p) wrap_record (p, glyph_cachel_dynarr) |
2413 #define GLYPH_CACHEL_DYNARRP(x) RECORDP (x, glyph_cachel_dynarr) | 2413 #define GLYPH_CACHEL_DYNARRP(x) RECORDP (x, glyph_cachel_dynarr) |
2414 #define CHECK_GLYPH_CACHEL_DYNARR(x) CHECK_RECORD (x, glyph_cachel_dynarr) | 2414 #define CHECK_GLYPH_CACHEL_DYNARR(x) CHECK_RECORD (x, glyph_cachel_dynarr) |
2465 | 2465 |
2466 /* In a cons, the markbit of the car is the gc mark bit */ | 2466 /* In a cons, the markbit of the car is the gc mark bit */ |
2467 | 2467 |
2468 struct Lisp_Cons | 2468 struct Lisp_Cons |
2469 { | 2469 { |
2470 struct lrecord_header lheader; | 2470 FROB_BLOCK_LISP_OBJECT_HEADER lheader; |
2471 Lisp_Object car_, cdr_; | 2471 Lisp_Object car_, cdr_; |
2472 }; | 2472 }; |
2473 typedef struct Lisp_Cons Lisp_Cons; | 2473 typedef struct Lisp_Cons Lisp_Cons; |
2474 | 2474 |
2475 #if 0 /* FSFmacs */ | 2475 #if 0 /* FSFmacs */ |
2482 struct buffer *buffer; | 2482 struct buffer *buffer; |
2483 int charbpos; | 2483 int charbpos; |
2484 }; | 2484 }; |
2485 #endif | 2485 #endif |
2486 | 2486 |
2487 DECLARE_MODULE_API_LRECORD (cons, Lisp_Cons); | 2487 DECLARE_MODULE_API_LISP_OBJECT (cons, Lisp_Cons); |
2488 #define XCONS(x) XRECORD (x, cons, Lisp_Cons) | 2488 #define XCONS(x) XRECORD (x, cons, Lisp_Cons) |
2489 #define wrap_cons(p) wrap_record (p, cons) | 2489 #define wrap_cons(p) wrap_record (p, cons) |
2490 #define CONSP(x) RECORDP (x, cons) | 2490 #define CONSP(x) RECORDP (x, cons) |
2491 #define CHECK_CONS(x) CHECK_RECORD (x, cons) | 2491 #define CHECK_CONS(x) CHECK_RECORD (x, cons) |
2492 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) | 2492 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons) |
3020 /*------------------------------ string --------------------------------*/ | 3020 /*------------------------------ string --------------------------------*/ |
3021 | 3021 |
3022 #ifdef NEW_GC | 3022 #ifdef NEW_GC |
3023 struct Lisp_String_Direct_Data | 3023 struct Lisp_String_Direct_Data |
3024 { | 3024 { |
3025 struct lrecord_header header; | 3025 NORMAL_LISP_OBJECT_HEADER header; |
3026 Bytecount size; | 3026 Bytecount size; |
3027 Ibyte data[1]; | 3027 Ibyte data[1]; |
3028 }; | 3028 }; |
3029 typedef struct Lisp_String_Direct_Data Lisp_String_Direct_Data; | 3029 typedef struct Lisp_String_Direct_Data Lisp_String_Direct_Data; |
3030 | 3030 |
3031 DECLARE_MODULE_API_LRECORD (string_direct_data, Lisp_String_Direct_Data); | 3031 DECLARE_MODULE_API_LISP_OBJECT (string_direct_data, Lisp_String_Direct_Data); |
3032 #define XSTRING_DIRECT_DATA(x) \ | 3032 #define XSTRING_DIRECT_DATA(x) \ |
3033 XRECORD (x, string_direct_data, Lisp_String_Direct_Data) | 3033 XRECORD (x, string_direct_data, Lisp_String_Direct_Data) |
3034 #define wrap_string_direct_data(p) wrap_record (p, string_direct_data) | 3034 #define wrap_string_direct_data(p) wrap_record (p, string_direct_data) |
3035 #define STRING_DIRECT_DATAP(x) RECORDP (x, string_direct_data) | 3035 #define STRING_DIRECT_DATAP(x) RECORDP (x, string_direct_data) |
3036 #define CHECK_STRING_DIRECT_DATA(x) CHECK_RECORD (x, string_direct_data) | 3036 #define CHECK_STRING_DIRECT_DATA(x) CHECK_RECORD (x, string_direct_data) |
3040 #define XSTRING_DIRECT_DATA_DATA(x) XSTRING_DIRECT_DATA (x)->data | 3040 #define XSTRING_DIRECT_DATA_DATA(x) XSTRING_DIRECT_DATA (x)->data |
3041 | 3041 |
3042 | 3042 |
3043 struct Lisp_String_Indirect_Data | 3043 struct Lisp_String_Indirect_Data |
3044 { | 3044 { |
3045 struct lrecord_header header; | 3045 NORMAL_LISP_OBJECT_HEADER header; |
3046 Bytecount size; | 3046 Bytecount size; |
3047 Ibyte *data; | 3047 Ibyte *data; |
3048 }; | 3048 }; |
3049 typedef struct Lisp_String_Indirect_Data Lisp_String_Indirect_Data; | 3049 typedef struct Lisp_String_Indirect_Data Lisp_String_Indirect_Data; |
3050 | 3050 |
3051 DECLARE_MODULE_API_LRECORD (string_indirect_data, Lisp_String_Indirect_Data); | 3051 DECLARE_MODULE_API_LISP_OBJECT (string_indirect_data, Lisp_String_Indirect_Data); |
3052 #define XSTRING_INDIRECT_DATA(x) \ | 3052 #define XSTRING_INDIRECT_DATA(x) \ |
3053 XRECORD (x, string_indirect_data, Lisp_String_Indirect_Data) | 3053 XRECORD (x, string_indirect_data, Lisp_String_Indirect_Data) |
3054 #define wrap_string_indirect_data(p) wrap_record (p, string_indirect_data) | 3054 #define wrap_string_indirect_data(p) wrap_record (p, string_indirect_data) |
3055 #define STRING_INDIRECT_DATAP(x) RECORDP (x, string_indirect_data) | 3055 #define STRING_INDIRECT_DATAP(x) RECORDP (x, string_indirect_data) |
3056 #define CHECK_STRING_INDIRECT_DATA(x) CHECK_RECORD (x, string_indirect_data) | 3056 #define CHECK_STRING_INDIRECT_DATA(x) CHECK_RECORD (x, string_indirect_data) |
3121 #define MAX_STRING_ASCII_BEGIN ((1 << 22) - 1) | 3121 #define MAX_STRING_ASCII_BEGIN ((1 << 22) - 1) |
3122 #else /* not NEW_GC */ | 3122 #else /* not NEW_GC */ |
3123 #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1) | 3123 #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1) |
3124 #endif /* not NEW_GC */ | 3124 #endif /* not NEW_GC */ |
3125 | 3125 |
3126 DECLARE_MODULE_API_LRECORD (string, Lisp_String); | 3126 DECLARE_MODULE_API_LISP_OBJECT (string, Lisp_String); |
3127 #define XSTRING(x) XRECORD (x, string, Lisp_String) | 3127 #define XSTRING(x) XRECORD (x, string, Lisp_String) |
3128 #define wrap_string(p) wrap_record (p, string) | 3128 #define wrap_string(p) wrap_record (p, string) |
3129 #define STRINGP(x) RECORDP (x, string) | 3129 #define STRINGP(x) RECORDP (x, string) |
3130 #define CHECK_STRING(x) CHECK_RECORD (x, string) | 3130 #define CHECK_STRING(x) CHECK_RECORD (x, string) |
3131 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string) | 3131 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string) |
3194 | 3194 |
3195 /*------------------------------ vector --------------------------------*/ | 3195 /*------------------------------ vector --------------------------------*/ |
3196 | 3196 |
3197 struct Lisp_Vector | 3197 struct Lisp_Vector |
3198 { | 3198 { |
3199 struct LCRECORD_HEADER header; | 3199 NORMAL_LISP_OBJECT_HEADER header; |
3200 long size; | 3200 long size; |
3201 Lisp_Object contents[1]; | 3201 Lisp_Object contents[1]; |
3202 }; | 3202 }; |
3203 typedef struct Lisp_Vector Lisp_Vector; | 3203 typedef struct Lisp_Vector Lisp_Vector; |
3204 | 3204 |
3205 DECLARE_LRECORD (vector, Lisp_Vector); | 3205 DECLARE_LISP_OBJECT (vector, Lisp_Vector); |
3206 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector) | 3206 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector) |
3207 #define wrap_vector(p) wrap_record (p, vector) | 3207 #define wrap_vector(p) wrap_record (p, vector) |
3208 #define VECTORP(x) RECORDP (x, vector) | 3208 #define VECTORP(x) RECORDP (x, vector) |
3209 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector) | 3209 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector) |
3210 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector) | 3210 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector) |
3231 #error You really have 128-bit integers?! | 3231 #error You really have 128-bit integers?! |
3232 #endif | 3232 #endif |
3233 | 3233 |
3234 struct Lisp_Bit_Vector | 3234 struct Lisp_Bit_Vector |
3235 { | 3235 { |
3236 struct LCRECORD_HEADER lheader; | 3236 NORMAL_LISP_OBJECT_HEADER lheader; |
3237 Elemcount size; | 3237 Elemcount size; |
3238 unsigned long bits[1]; | 3238 unsigned long bits[1]; |
3239 }; | 3239 }; |
3240 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector; | 3240 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector; |
3241 | 3241 |
3242 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector); | 3242 DECLARE_LISP_OBJECT (bit_vector, Lisp_Bit_Vector); |
3243 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector) | 3243 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector) |
3244 #define wrap_bit_vector(p) wrap_record (p, bit_vector) | 3244 #define wrap_bit_vector(p) wrap_record (p, bit_vector) |
3245 #define BIT_VECTORP(x) RECORDP (x, bit_vector) | 3245 #define BIT_VECTORP(x) RECORDP (x, bit_vector) |
3246 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector) | 3246 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector) |
3247 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector) | 3247 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector) |
3285 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2) | 3285 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2) |
3286 | 3286 |
3287 /* For when we want to include a bit vector in another structure, and we | 3287 /* For when we want to include a bit vector in another structure, and we |
3288 know it's of a fixed size. */ | 3288 know it's of a fixed size. */ |
3289 #define DECLARE_INLINE_LISP_BIT_VECTOR(numbits) struct { \ | 3289 #define DECLARE_INLINE_LISP_BIT_VECTOR(numbits) struct { \ |
3290 struct LCRECORD_HEADER lheader; \ | 3290 NORMAL_LISP_OBJECT_HEADER lheader; \ |
3291 Elemcount size; \ | 3291 Elemcount size; \ |
3292 unsigned long bits[BIT_VECTOR_LONG_STORAGE(numbits)]; \ | 3292 unsigned long bits[BIT_VECTOR_LONG_STORAGE(numbits)]; \ |
3293 } | 3293 } |
3294 /*---------------------- array, sequence -----------------------------*/ | 3294 /*---------------------- array, sequence -----------------------------*/ |
3295 | 3295 |
3320 /*------------------------------ symbol --------------------------------*/ | 3320 /*------------------------------ symbol --------------------------------*/ |
3321 | 3321 |
3322 typedef struct Lisp_Symbol Lisp_Symbol; | 3322 typedef struct Lisp_Symbol Lisp_Symbol; |
3323 struct Lisp_Symbol | 3323 struct Lisp_Symbol |
3324 { | 3324 { |
3325 struct lrecord_header lheader; | 3325 FROB_BLOCK_LISP_OBJECT_HEADER lheader; |
3326 /* next symbol in this obarray bucket */ | 3326 /* next symbol in this obarray bucket */ |
3327 Lisp_Symbol *next; | 3327 Lisp_Symbol *next; |
3328 Lisp_Object name; | 3328 Lisp_Object name; |
3329 Lisp_Object value; | 3329 Lisp_Object value; |
3330 Lisp_Object function; | 3330 Lisp_Object function; |
3336 && EQ (sym, oblookup (Vobarray, \ | 3336 && EQ (sym, oblookup (Vobarray, \ |
3337 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \ | 3337 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \ |
3338 XSTRING_LENGTH (symbol_name (XSYMBOL (sym)))))) | 3338 XSTRING_LENGTH (symbol_name (XSYMBOL (sym)))))) |
3339 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj)) | 3339 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj)) |
3340 | 3340 |
3341 DECLARE_MODULE_API_LRECORD (symbol, Lisp_Symbol); | 3341 DECLARE_MODULE_API_LISP_OBJECT (symbol, Lisp_Symbol); |
3342 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol) | 3342 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol) |
3343 #define wrap_symbol(p) wrap_record (p, symbol) | 3343 #define wrap_symbol(p) wrap_record (p, symbol) |
3344 #define SYMBOLP(x) RECORDP (x, symbol) | 3344 #define SYMBOLP(x) RECORDP (x, symbol) |
3345 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol) | 3345 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol) |
3346 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol) | 3346 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol) |
3364 We could define such types for n arguments, if needed. */ | 3364 We could define such types for n arguments, if needed. */ |
3365 typedef Lisp_Object (*lisp_fn_t) (void); | 3365 typedef Lisp_Object (*lisp_fn_t) (void); |
3366 | 3366 |
3367 struct Lisp_Subr | 3367 struct Lisp_Subr |
3368 { | 3368 { |
3369 struct lrecord_header lheader; | 3369 FROB_BLOCK_LISP_OBJECT_HEADER lheader; |
3370 short min_args; | 3370 short min_args; |
3371 short max_args; | 3371 short max_args; |
3372 /* #### We should make these const Ascbyte * or const Ibyte *, not const | 3372 /* #### We should make these const Ascbyte * or const Ibyte *, not const |
3373 char *. */ | 3373 char *. */ |
3374 const char *prompt; | 3374 const char *prompt; |
3376 const char *name; | 3376 const char *name; |
3377 lisp_fn_t subr_fn; | 3377 lisp_fn_t subr_fn; |
3378 }; | 3378 }; |
3379 typedef struct Lisp_Subr Lisp_Subr; | 3379 typedef struct Lisp_Subr Lisp_Subr; |
3380 | 3380 |
3381 DECLARE_LRECORD (subr, Lisp_Subr); | 3381 DECLARE_LISP_OBJECT (subr, Lisp_Subr); |
3382 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr) | 3382 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr) |
3383 #define wrap_subr(p) wrap_record (p, subr) | 3383 #define wrap_subr(p) wrap_record (p, subr) |
3384 #define SUBRP(x) RECORDP (x, subr) | 3384 #define SUBRP(x) RECORDP (x, subr) |
3385 #define CHECK_SUBR(x) CHECK_RECORD (x, subr) | 3385 #define CHECK_SUBR(x) CHECK_RECORD (x, subr) |
3386 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr) | 3386 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr) |
3394 | 3394 |
3395 | 3395 |
3396 typedef struct Lisp_Marker Lisp_Marker; | 3396 typedef struct Lisp_Marker Lisp_Marker; |
3397 struct Lisp_Marker | 3397 struct Lisp_Marker |
3398 { | 3398 { |
3399 struct lrecord_header lheader; | 3399 FROB_BLOCK_LISP_OBJECT_HEADER lheader; |
3400 Lisp_Marker *next; | 3400 Lisp_Marker *next; |
3401 Lisp_Marker *prev; | 3401 Lisp_Marker *prev; |
3402 struct buffer *buffer; | 3402 struct buffer *buffer; |
3403 Membpos membpos; | 3403 Membpos membpos; |
3404 char insertion_type; | 3404 char insertion_type; |
3405 }; | 3405 }; |
3406 | 3406 |
3407 DECLARE_MODULE_API_LRECORD (marker, Lisp_Marker); | 3407 DECLARE_MODULE_API_LISP_OBJECT (marker, Lisp_Marker); |
3408 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker) | 3408 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker) |
3409 #define wrap_marker(p) wrap_record (p, marker) | 3409 #define wrap_marker(p) wrap_record (p, marker) |
3410 #define MARKERP(x) RECORDP (x, marker) | 3410 #define MARKERP(x) RECORDP (x, marker) |
3411 #define CHECK_MARKER(x) CHECK_RECORD (x, marker) | 3411 #define CHECK_MARKER(x) CHECK_RECORD (x, marker) |
3412 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker) | 3412 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker) |
3637 free list. This makes a difference in the unlikely case of | 3637 free list. This makes a difference in the unlikely case of |
3638 sizeof(double) being smaller than sizeof(void *). */ | 3638 sizeof(double) being smaller than sizeof(void *). */ |
3639 | 3639 |
3640 struct Lisp_Float | 3640 struct Lisp_Float |
3641 { | 3641 { |
3642 struct lrecord_header lheader; | 3642 FROB_BLOCK_LISP_OBJECT_HEADER lheader; |
3643 union { double d; struct Lisp_Float *unused_next_; } data; | 3643 union { double d; struct Lisp_Float *unused_next_; } data; |
3644 }; | 3644 }; |
3645 typedef struct Lisp_Float Lisp_Float; | 3645 typedef struct Lisp_Float Lisp_Float; |
3646 | 3646 |
3647 DECLARE_LRECORD (float, Lisp_Float); | 3647 DECLARE_LISP_OBJECT (float, Lisp_Float); |
3648 #define XFLOAT(x) XRECORD (x, float, Lisp_Float) | 3648 #define XFLOAT(x) XRECORD (x, float, Lisp_Float) |
3649 #define wrap_float(p) wrap_record (p, float) | 3649 #define wrap_float(p) wrap_record (p, float) |
3650 #define FLOATP(x) RECORDP (x, float) | 3650 #define FLOATP(x) RECORDP (x, float) |
3651 #define CHECK_FLOAT(x) CHECK_RECORD (x, float) | 3651 #define CHECK_FLOAT(x) CHECK_RECORD (x, float) |
3652 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) | 3652 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float) |
3725 | 3725 |
3726 /*---------------------------- weak boxes ------------------------------*/ | 3726 /*---------------------------- weak boxes ------------------------------*/ |
3727 | 3727 |
3728 struct weak_box | 3728 struct weak_box |
3729 { | 3729 { |
3730 struct LCRECORD_HEADER header; | 3730 NORMAL_LISP_OBJECT_HEADER header; |
3731 Lisp_Object value; | 3731 Lisp_Object value; |
3732 | 3732 |
3733 Lisp_Object next_weak_box; /* don't mark through this! */ | 3733 Lisp_Object next_weak_box; /* don't mark through this! */ |
3734 }; | 3734 }; |
3735 | 3735 |
3736 void prune_weak_boxes (void); | 3736 void prune_weak_boxes (void); |
3737 Lisp_Object make_weak_box (Lisp_Object value); | 3737 Lisp_Object make_weak_box (Lisp_Object value); |
3738 Lisp_Object weak_box_ref (Lisp_Object value); | 3738 Lisp_Object weak_box_ref (Lisp_Object value); |
3739 | 3739 |
3740 DECLARE_LRECORD (weak_box, struct weak_box); | 3740 DECLARE_LISP_OBJECT (weak_box, struct weak_box); |
3741 #define XWEAK_BOX(x) XRECORD (x, weak_box, struct weak_box) | 3741 #define XWEAK_BOX(x) XRECORD (x, weak_box, struct weak_box) |
3742 #define XSET_WEAK_BOX(x, v) (XWEAK_BOX (x)->value = (v)) | 3742 #define XSET_WEAK_BOX(x, v) (XWEAK_BOX (x)->value = (v)) |
3743 #define wrap_weak_box(p) wrap_record (p, weak_box) | 3743 #define wrap_weak_box(p) wrap_record (p, weak_box) |
3744 #define WEAK_BOXP(x) RECORDP (x, weak_box) | 3744 #define WEAK_BOXP(x) RECORDP (x, weak_box) |
3745 #define CHECK_WEAK_BOX(x) CHECK_RECORD (x, weak_box) | 3745 #define CHECK_WEAK_BOX(x) CHECK_RECORD (x, weak_box) |
3747 | 3747 |
3748 /*--------------------------- ephemerons ----------------------------*/ | 3748 /*--------------------------- ephemerons ----------------------------*/ |
3749 | 3749 |
3750 struct ephemeron | 3750 struct ephemeron |
3751 { | 3751 { |
3752 struct LCRECORD_HEADER header; | 3752 NORMAL_LISP_OBJECT_HEADER header; |
3753 | 3753 |
3754 Lisp_Object key; | 3754 Lisp_Object key; |
3755 | 3755 |
3756 /* This field holds a pair. The cdr of this cons points to the next | 3756 /* This field holds a pair. The cdr of this cons points to the next |
3757 ephemeron in Vall_ephemerons. The car points to another pair | 3757 ephemeron in Vall_ephemerons. The car points to another pair |
3772 int continue_marking_ephemerons(void); | 3772 int continue_marking_ephemerons(void); |
3773 int finish_marking_ephemerons(void); | 3773 int finish_marking_ephemerons(void); |
3774 Lisp_Object zap_finalize_list(void); | 3774 Lisp_Object zap_finalize_list(void); |
3775 Lisp_Object make_ephemeron(Lisp_Object key, Lisp_Object value, Lisp_Object finalizer); | 3775 Lisp_Object make_ephemeron(Lisp_Object key, Lisp_Object value, Lisp_Object finalizer); |
3776 | 3776 |
3777 DECLARE_LRECORD(ephemeron, struct ephemeron); | 3777 DECLARE_LISP_OBJECT(ephemeron, struct ephemeron); |
3778 #define XEPHEMERON(x) XRECORD (x, ephemeron, struct ephemeron) | 3778 #define XEPHEMERON(x) XRECORD (x, ephemeron, struct ephemeron) |
3779 #define XEPHEMERON_REF(x) (XEPHEMERON (x)->value) | 3779 #define XEPHEMERON_REF(x) (XEPHEMERON (x)->value) |
3780 #define XEPHEMERON_NEXT(x) (XCDR (XEPHEMERON(x)->cons_chain)) | 3780 #define XEPHEMERON_NEXT(x) (XCDR (XEPHEMERON(x)->cons_chain)) |
3781 #define XEPHEMERON_FINALIZER(x) (XCDR (XCAR (XEPHEMERON (x)->cons_chain))) | 3781 #define XEPHEMERON_FINALIZER(x) (XCDR (XCAR (XEPHEMERON (x)->cons_chain))) |
3782 #define XSET_EPHEMERON_NEXT(x, n) (XSETCDR (XEPHEMERON(x)->cons_chain, n)) | 3782 #define XSET_EPHEMERON_NEXT(x, n) (XSETCDR (XEPHEMERON(x)->cons_chain, n)) |
3806 WEAK_LIST_FULL_ASSOC | 3806 WEAK_LIST_FULL_ASSOC |
3807 }; | 3807 }; |
3808 | 3808 |
3809 struct weak_list | 3809 struct weak_list |
3810 { | 3810 { |
3811 struct LCRECORD_HEADER header; | 3811 NORMAL_LISP_OBJECT_HEADER header; |
3812 Lisp_Object list; /* don't mark through this! */ | 3812 Lisp_Object list; /* don't mark through this! */ |
3813 enum weak_list_type type; | 3813 enum weak_list_type type; |
3814 Lisp_Object next_weak; /* don't mark through this! */ | 3814 Lisp_Object next_weak; /* don't mark through this! */ |
3815 }; | 3815 }; |
3816 | 3816 |
3817 DECLARE_LRECORD (weak_list, struct weak_list); | 3817 DECLARE_LISP_OBJECT (weak_list, struct weak_list); |
3818 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list) | 3818 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list) |
3819 #define wrap_weak_list(p) wrap_record (p, weak_list) | 3819 #define wrap_weak_list(p) wrap_record (p, weak_list) |
3820 #define WEAK_LISTP(x) RECORDP (x, weak_list) | 3820 #define WEAK_LISTP(x) RECORDP (x, weak_list) |
3821 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list) | 3821 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list) |
3822 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list) | 3822 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list) |
4788 #ifndef NEW_GC | 4788 #ifndef NEW_GC |
4789 extern EMACS_INT gc_generation_number[1]; | 4789 extern EMACS_INT gc_generation_number[1]; |
4790 #endif /* not NEW_GC */ | 4790 #endif /* not NEW_GC */ |
4791 int c_readonly (Lisp_Object); | 4791 int c_readonly (Lisp_Object); |
4792 int lisp_readonly (Lisp_Object); | 4792 int lisp_readonly (Lisp_Object); |
4793 MODULE_API void copy_lisp_object (Lisp_Object dst, Lisp_Object src); | |
4794 MODULE_API Lisp_Object build_istring (const Ibyte *); | 4793 MODULE_API Lisp_Object build_istring (const Ibyte *); |
4795 MODULE_API Lisp_Object build_cistring (const CIbyte *); | 4794 MODULE_API Lisp_Object build_cistring (const CIbyte *); |
4796 MODULE_API Lisp_Object build_ascstring (const Ascbyte *); | 4795 MODULE_API Lisp_Object build_ascstring (const Ascbyte *); |
4797 MODULE_API Lisp_Object build_extstring (const Extbyte *, Lisp_Object); | 4796 MODULE_API Lisp_Object build_extstring (const Extbyte *, Lisp_Object); |
4798 MODULE_API Lisp_Object make_string (const Ibyte *, Bytecount); | 4797 MODULE_API Lisp_Object make_string (const Ibyte *, Bytecount); |
6050 extern int in_debug_print; | 6049 extern int in_debug_print; |
6051 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object, | 6050 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object, |
6052 Lisp_Object (*) (Lisp_Object), | 6051 Lisp_Object (*) (Lisp_Object), |
6053 Lisp_Object, Lisp_Object); | 6052 Lisp_Object, Lisp_Object); |
6054 void float_to_string (char *, double); | 6053 void float_to_string (char *, double); |
6055 void internal_object_printer (Lisp_Object, Lisp_Object, int); | 6054 void internal_object_printer (Lisp_Object obj, Lisp_Object printcharfun, |
6055 int UNUSED (escapeflag)); | |
6056 void external_object_printer (Lisp_Object obj, Lisp_Object printcharfun, | |
6057 int UNUSED (escapeflag)); | |
6056 MODULE_API DECLARE_DOESNT_RETURN (printing_unreadable_object (const CIbyte *, | 6058 MODULE_API DECLARE_DOESNT_RETURN (printing_unreadable_object (const CIbyte *, |
6057 ...)) | 6059 ...)) |
6058 PRINTF_ARGS (1, 2); | 6060 PRINTF_ARGS (1, 2); |
6059 DECLARE_DOESNT_RETURN (printing_unreadable_lcrecord (Lisp_Object obj, | 6061 DECLARE_DOESNT_RETURN (printing_unreadable_lcrecord (Lisp_Object obj, |
6060 const Ibyte *name)); | 6062 const Ibyte *name)); |