Mercurial > hg > xemacs-beta
comparison src/alloc.c @ 185:3d6bfa290dbd r20-3b19
Import from CVS: tag r20-3b19
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:55:28 +0200 |
parents | e121b013d1f0 |
children | a2f645c6b9f8 |
comparison
equal
deleted
inserted
replaced
184:bcd2674570bf | 185:3d6bfa290dbd |
---|---|
367 #ifdef xmalloc | 367 #ifdef xmalloc |
368 #undef xmalloc | 368 #undef xmalloc |
369 #endif | 369 #endif |
370 | 370 |
371 void * | 371 void * |
372 xmalloc (int size) | 372 xmalloc (size_t size) |
373 { | 373 { |
374 void *val; | 374 void *val = (void *) malloc (size); |
375 | |
376 val = (void *) malloc (size); | |
377 | 375 |
378 if (!val && (size != 0)) memory_full (); | 376 if (!val && (size != 0)) memory_full (); |
379 return val; | 377 return val; |
380 } | 378 } |
381 | 379 |
382 void * | 380 void * |
383 xmalloc_and_zero (int size) | 381 xmalloc_and_zero (size_t size) |
384 { | 382 { |
385 void *val = xmalloc (size); | 383 void *val = xmalloc (size); |
386 memset (val, 0, size); | 384 memset (val, 0, size); |
387 return val; | 385 return val; |
388 } | 386 } |
390 #ifdef xrealloc | 388 #ifdef xrealloc |
391 #undef xrealloc | 389 #undef xrealloc |
392 #endif | 390 #endif |
393 | 391 |
394 void * | 392 void * |
395 xrealloc (void *block, int size) | 393 xrealloc (void *block, size_t size) |
396 { | 394 { |
397 void *val; | |
398 | |
399 /* We must call malloc explicitly when BLOCK is 0, since some | 395 /* We must call malloc explicitly when BLOCK is 0, since some |
400 reallocs don't do this. */ | 396 reallocs don't do this. */ |
401 if (! block) | 397 void *val = (void *) (block ? realloc (block, size) : malloc (size)); |
402 val = (void *) malloc (size); | |
403 else | |
404 val = (void *) realloc (block, size); | |
405 | 398 |
406 if (!val && (size != 0)) memory_full (); | 399 if (!val && (size != 0)) memory_full (); |
407 return val; | 400 return val; |
408 } | 401 } |
409 | 402 |
467 #endif | 460 #endif |
468 | 461 |
469 char * | 462 char * |
470 xstrdup (CONST char *str) | 463 xstrdup (CONST char *str) |
471 { | 464 { |
472 char *val; | |
473 int len = strlen (str) + 1; /* for stupid terminating 0 */ | 465 int len = strlen (str) + 1; /* for stupid terminating 0 */ |
474 | 466 |
475 val = xmalloc (len); | 467 void *val = xmalloc (len); |
476 if (val == 0) return 0; | 468 if (val == 0) return 0; |
477 memcpy (val, str, len); | 469 memcpy (val, str, len); |
478 return val; | 470 return (char *) val; |
479 } | 471 } |
480 | 472 |
481 #ifdef NEED_STRDUP | 473 #ifdef NEED_STRDUP |
482 char * | 474 char * |
483 strdup (CONST char *s) | 475 strdup (CONST char *s) |
532 abort (); | 524 abort (); |
533 } | 525 } |
534 else if (implementation->static_size != size) | 526 else if (implementation->static_size != size) |
535 abort (); | 527 abort (); |
536 | 528 |
537 lcheader = allocate_lisp_storage (size); | 529 lcheader = (struct lcrecord_header *) allocate_lisp_storage (size); |
538 lcheader->lheader.implementation = implementation; | 530 lcheader->lheader.implementation = implementation; |
539 lcheader->next = all_lcrecords; | 531 lcheader->next = all_lcrecords; |
540 #if 1 /* mly prefers to see small ID numbers */ | 532 #if 1 /* mly prefers to see small ID numbers */ |
541 lcheader->uid = lrecord_uid_counter++; | 533 lcheader->uid = lrecord_uid_counter++; |
542 #else /* jwz prefers to see real addrs */ | 534 #else /* jwz prefers to see real addrs */ |
624 | 616 |
625 /* XGCTYPE for records */ | 617 /* XGCTYPE for records */ |
626 int | 618 int |
627 gc_record_type_p (Lisp_Object frob, CONST struct lrecord_implementation *type) | 619 gc_record_type_p (Lisp_Object frob, CONST struct lrecord_implementation *type) |
628 { | 620 { |
629 return (XGCTYPE (frob) == Lisp_Record | 621 return (XGCTYPE (frob) == Lisp_Type_Record |
630 && (XRECORD_LHEADER (frob)->implementation == type | 622 && (XRECORD_LHEADER (frob)->implementation == type || |
631 || XRECORD_LHEADER (frob)->implementation == type + 1)); | 623 XRECORD_LHEADER (frob)->implementation == type + 1)); |
632 } | 624 } |
633 | 625 |
634 | 626 |
635 /**********************************************************************/ | 627 /**********************************************************************/ |
636 /* Fixed-size type macros */ | 628 /* Fixed-size type macros */ |
829 #define ALLOCATE_FIXED_TYPE_FROM_BLOCK(type, result) \ | 821 #define ALLOCATE_FIXED_TYPE_FROM_BLOCK(type, result) \ |
830 do { \ | 822 do { \ |
831 if (current_##type##_block_index \ | 823 if (current_##type##_block_index \ |
832 == countof (current_##type##_block->block)) \ | 824 == countof (current_##type##_block->block)) \ |
833 { \ | 825 { \ |
834 struct type##_block *__new__ \ | 826 struct type##_block *__new__ = (struct type##_block *) \ |
835 = allocate_lisp_storage (sizeof (struct type##_block)); \ | 827 allocate_lisp_storage (sizeof (struct type##_block)); \ |
836 __new__->prev = current_##type##_block; \ | 828 __new__->prev = current_##type##_block; \ |
837 current_##type##_block = __new__; \ | 829 current_##type##_block = __new__; \ |
838 current_##type##_block_index = 0; \ | 830 current_##type##_block_index = 0; \ |
839 } \ | 831 } \ |
840 (result) = \ | 832 (result) = \ |
1153 EMACS_INT sizem = (sizeof (struct Lisp_Vector) | 1145 EMACS_INT sizem = (sizeof (struct Lisp_Vector) |
1154 /* -1 because struct Lisp_Vector includes 1 slot, | 1146 /* -1 because struct Lisp_Vector includes 1 slot, |
1155 * +1 to account for vector_next */ | 1147 * +1 to account for vector_next */ |
1156 + (sizei - 1 + 1) * sizeof (Lisp_Object) | 1148 + (sizei - 1 + 1) * sizeof (Lisp_Object) |
1157 ); | 1149 ); |
1158 struct Lisp_Vector *p = allocate_lisp_storage (sizem); | 1150 struct Lisp_Vector *p = (struct Lisp_Vector *) allocate_lisp_storage (sizem); |
1159 #ifdef LRECORD_VECTOR | 1151 #ifdef LRECORD_VECTOR |
1160 set_lheader_implementation (&(p->lheader), lrecord_vector); | 1152 set_lheader_implementation (&(p->lheader), lrecord_vector); |
1161 #endif | 1153 #endif |
1162 | 1154 |
1163 INCREMENT_CONS_COUNTER (sizem, "vector"); | 1155 INCREMENT_CONS_COUNTER (sizem, "vector"); |
1340 make_bit_vector_internal (EMACS_INT sizei) | 1332 make_bit_vector_internal (EMACS_INT sizei) |
1341 { | 1333 { |
1342 EMACS_INT sizem = (sizeof (struct Lisp_Bit_Vector) + | 1334 EMACS_INT sizem = (sizeof (struct Lisp_Bit_Vector) + |
1343 /* -1 because struct Lisp_Bit_Vector includes 1 slot */ | 1335 /* -1 because struct Lisp_Bit_Vector includes 1 slot */ |
1344 sizeof (long) * (BIT_VECTOR_LONG_STORAGE (sizei) - 1)); | 1336 sizeof (long) * (BIT_VECTOR_LONG_STORAGE (sizei) - 1)); |
1345 struct Lisp_Bit_Vector *p = allocate_lisp_storage (sizem); | 1337 struct Lisp_Bit_Vector *p = |
1338 (struct Lisp_Bit_Vector *) allocate_lisp_storage (sizem); | |
1346 set_lheader_implementation (&(p->lheader), lrecord_bit_vector); | 1339 set_lheader_implementation (&(p->lheader), lrecord_bit_vector); |
1347 | 1340 |
1348 INCREMENT_CONS_COUNTER (sizem, "bit-vector"); | 1341 INCREMENT_CONS_COUNTER (sizem, "bit-vector"); |
1349 | 1342 |
1350 bit_vector_length (p) = sizei; | 1343 bit_vector_length (p) = sizei; |
1848 }; | 1841 }; |
1849 | 1842 |
1850 static void | 1843 static void |
1851 init_string_chars_alloc (void) | 1844 init_string_chars_alloc (void) |
1852 { | 1845 { |
1853 first_string_chars_block = | 1846 first_string_chars_block = xnew (struct string_chars_block); |
1854 (struct string_chars_block *) xmalloc (sizeof (struct string_chars_block)); | |
1855 first_string_chars_block->prev = 0; | 1847 first_string_chars_block->prev = 0; |
1856 first_string_chars_block->next = 0; | 1848 first_string_chars_block->next = 0; |
1857 first_string_chars_block->pos = 0; | 1849 first_string_chars_block->pos = 0; |
1858 current_string_chars_block = first_string_chars_block; | 1850 current_string_chars_block = first_string_chars_block; |
1859 } | 1851 } |
1880 current_string_chars_block->pos += fullsize; | 1872 current_string_chars_block->pos += fullsize; |
1881 } | 1873 } |
1882 else | 1874 else |
1883 { | 1875 { |
1884 /* Make a new current string chars block */ | 1876 /* Make a new current string chars block */ |
1885 struct string_chars_block *new | 1877 struct string_chars_block *new = xnew (struct string_chars_block); |
1886 = (struct string_chars_block *) | |
1887 xmalloc (sizeof (struct string_chars_block)); | |
1888 | 1878 |
1889 current_string_chars_block->next = new; | 1879 current_string_chars_block->next = new; |
1890 new->prev = current_string_chars_block; | 1880 new->prev = current_string_chars_block; |
1891 new->next = 0; | 1881 new->next = 0; |
1892 current_string_chars_block = new; | 1882 current_string_chars_block = new; |
2082 oldlen = charcount_to_bytecount (string_data (s) + bytoff, 1); | 2072 oldlen = charcount_to_bytecount (string_data (s) + bytoff, 1); |
2083 newlen = set_charptr_emchar (newstr, c); | 2073 newlen = set_charptr_emchar (newstr, c); |
2084 | 2074 |
2085 if (oldlen != newlen) | 2075 if (oldlen != newlen) |
2086 resize_string (s, bytoff, newlen - oldlen); | 2076 resize_string (s, bytoff, newlen - oldlen); |
2087 /* Remember, string_data (s) might have changed so we can't | 2077 /* Remember, string_data (s) might have changed so we can't cache it. */ |
2088 cache it. */ | |
2089 memcpy (string_data (s) + bytoff, newstr, newlen); | 2078 memcpy (string_data (s) + bytoff, newstr, newlen); |
2090 } | 2079 } |
2091 | 2080 |
2092 #endif /* MULE */ | 2081 #endif /* MULE */ |
2093 | 2082 |
2154 } | 2143 } |
2155 | 2144 |
2156 Lisp_Object | 2145 Lisp_Object |
2157 build_string (CONST char *str) | 2146 build_string (CONST char *str) |
2158 { | 2147 { |
2159 Bytecount length; | 2148 /* Some strlen's crash and burn if passed null. */ |
2160 | 2149 return make_string ((CONST Bufbyte *) str, (str ? strlen(str) : 0)); |
2161 /* Some strlen crash and burn if passed null. */ | |
2162 if (!str) | |
2163 length = 0; | |
2164 else | |
2165 length = strlen (str); | |
2166 | |
2167 return make_string ((CONST Bufbyte *) str, length); | |
2168 } | 2150 } |
2169 | 2151 |
2170 Lisp_Object | 2152 Lisp_Object |
2171 build_ext_string (CONST char *str, enum external_data_format fmt) | 2153 build_ext_string (CONST char *str, enum external_data_format fmt) |
2172 { | 2154 { |
2173 Bytecount length; | 2155 /* Some strlen's crash and burn if passed null. */ |
2174 | 2156 return make_ext_string ((Extbyte *) str, (str ? strlen(str) : 0), fmt); |
2175 /* Some strlen crash and burn if passed null. */ | |
2176 if (!str) | |
2177 length = 0; | |
2178 else | |
2179 length = strlen (str); | |
2180 | |
2181 return make_ext_string ((Extbyte *) str, length, fmt); | |
2182 } | 2157 } |
2183 | 2158 |
2184 Lisp_Object | 2159 Lisp_Object |
2185 build_translated_string (CONST char *str) | 2160 build_translated_string (CONST char *str) |
2186 { | 2161 { |
2263 | 2238 |
2264 Lisp_Object | 2239 Lisp_Object |
2265 make_lcrecord_list (int size, | 2240 make_lcrecord_list (int size, |
2266 CONST struct lrecord_implementation *implementation) | 2241 CONST struct lrecord_implementation *implementation) |
2267 { | 2242 { |
2268 struct lcrecord_list *p = alloc_lcrecord (sizeof (*p), | 2243 struct lcrecord_list *p = alloc_lcrecord_type (struct lcrecord_list, |
2269 lrecord_lcrecord_list); | 2244 lrecord_lcrecord_list); |
2270 Lisp_Object val = Qnil; | 2245 Lisp_Object val = Qnil; |
2271 | 2246 |
2272 p->implementation = implementation; | 2247 p->implementation = implementation; |
2273 p->size = size; | 2248 p->size = size; |
2274 p->free = Qnil; | 2249 p->free = Qnil; |
2308 free_header->lcheader.free = 0; | 2283 free_header->lcheader.free = 0; |
2309 return val; | 2284 return val; |
2310 } | 2285 } |
2311 else | 2286 else |
2312 { | 2287 { |
2313 Lisp_Object foo = Qnil; | 2288 Lisp_Object val = Qnil; |
2314 | 2289 |
2315 XSETOBJ (foo, Lisp_Record, | 2290 XSETOBJ (val, Lisp_Type_Record, |
2316 alloc_lcrecord (list->size, list->implementation)); | 2291 alloc_lcrecord (list->size, list->implementation)); |
2317 return foo; | 2292 return val; |
2318 } | 2293 } |
2319 } | 2294 } |
2320 | 2295 |
2321 void | 2296 void |
2322 free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord) | 2297 free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord) |
2560 || PURIFIED (XPNTR (obj))) | 2535 || PURIFIED (XPNTR (obj))) |
2561 return obj; | 2536 return obj; |
2562 | 2537 |
2563 switch (XTYPE (obj)) | 2538 switch (XTYPE (obj)) |
2564 { | 2539 { |
2565 case Lisp_Cons: | 2540 case Lisp_Type_Cons: |
2566 return pure_cons (XCAR (obj), XCDR (obj)); | 2541 return pure_cons (XCAR (obj), XCDR (obj)); |
2567 | 2542 |
2568 case Lisp_String: | 2543 case Lisp_Type_String: |
2569 return make_pure_string (XSTRING_DATA (obj), | 2544 return make_pure_string (XSTRING_DATA (obj), |
2570 XSTRING_LENGTH (obj), | 2545 XSTRING_LENGTH (obj), |
2571 XSTRING (obj)->plist, | 2546 XSTRING (obj)->plist, |
2572 0); | 2547 0); |
2573 | 2548 |
2574 case Lisp_Vector: | 2549 #ifndef LRECORD_VECTOR |
2550 case Lisp_Type_Vector: | |
2575 { | 2551 { |
2576 struct Lisp_Vector *o = XVECTOR (obj); | 2552 struct Lisp_Vector *o = XVECTOR (obj); |
2577 Lisp_Object new = make_pure_vector (vector_length (o), Qnil); | 2553 Lisp_Object new = make_pure_vector (vector_length (o), Qnil); |
2578 for (i = 0; i < vector_length (o); i++) | 2554 for (i = 0; i < vector_length (o); i++) |
2579 XVECTOR_DATA (new)[i] = Fpurecopy (o->contents[i]); | 2555 XVECTOR_DATA (new)[i] = Fpurecopy (o->contents[i]); |
2580 return new; | 2556 return new; |
2581 } | 2557 } |
2558 #endif /* !LRECORD_VECTOR */ | |
2582 | 2559 |
2583 default: | 2560 default: |
2584 { | 2561 { |
2585 if (COMPILED_FUNCTIONP (obj)) | 2562 if (COMPILED_FUNCTIONP (obj)) |
2586 { | 2563 { |
2801 return; | 2778 return; |
2802 if (PURIFIED (XPNTR (obj))) | 2779 if (PURIFIED (XPNTR (obj))) |
2803 return; | 2780 return; |
2804 switch (XGCTYPE (obj)) | 2781 switch (XGCTYPE (obj)) |
2805 { | 2782 { |
2806 case Lisp_Cons: | 2783 case Lisp_Type_Cons: |
2807 { | 2784 { |
2808 struct Lisp_Cons *ptr = XCONS (obj); | 2785 struct Lisp_Cons *ptr = XCONS (obj); |
2809 if (CONS_MARKED_P (ptr)) | 2786 if (CONS_MARKED_P (ptr)) |
2810 break; | 2787 break; |
2811 MARK_CONS (ptr); | 2788 MARK_CONS (ptr); |
2820 obj = ptr->cdr; | 2797 obj = ptr->cdr; |
2821 } | 2798 } |
2822 goto tail_recurse; | 2799 goto tail_recurse; |
2823 } | 2800 } |
2824 | 2801 |
2825 case Lisp_Record: | 2802 case Lisp_Type_Record: |
2826 /* case Lisp_Symbol_Value_Magic: */ | 2803 /* case Lisp_Symbol_Value_Magic: */ |
2827 { | 2804 { |
2828 struct lrecord_header *lheader = XRECORD_LHEADER (obj); | 2805 struct lrecord_header *lheader = XRECORD_LHEADER (obj); |
2829 CONST struct lrecord_implementation *implementation | 2806 CONST struct lrecord_implementation *implementation |
2830 = lheader->implementation; | 2807 = lheader->implementation; |
2844 } | 2821 } |
2845 } | 2822 } |
2846 } | 2823 } |
2847 break; | 2824 break; |
2848 | 2825 |
2849 case Lisp_String: | 2826 case Lisp_Type_String: |
2850 { | 2827 { |
2851 struct Lisp_String *ptr = XSTRING (obj); | 2828 struct Lisp_String *ptr = XSTRING (obj); |
2852 | 2829 |
2853 if (!XMARKBIT (ptr->plist)) | 2830 if (!XMARKBIT (ptr->plist)) |
2854 { | 2831 { |
2860 goto tail_recurse; | 2837 goto tail_recurse; |
2861 } | 2838 } |
2862 } | 2839 } |
2863 break; | 2840 break; |
2864 | 2841 |
2865 case Lisp_Vector: | 2842 #ifndef LRECORD_VECTOR |
2843 case Lisp_Type_Vector: | |
2866 { | 2844 { |
2867 struct Lisp_Vector *ptr = XVECTOR (obj); | 2845 struct Lisp_Vector *ptr = XVECTOR (obj); |
2868 int len = vector_length (ptr); | 2846 int len = vector_length (ptr); |
2869 int i; | 2847 int i; |
2870 | 2848 |
2878 obj = ptr->contents[len - 1]; | 2856 obj = ptr->contents[len - 1]; |
2879 goto tail_recurse; | 2857 goto tail_recurse; |
2880 } | 2858 } |
2881 } | 2859 } |
2882 break; | 2860 break; |
2861 #endif /* !LRECORD_VECTOR */ | |
2883 | 2862 |
2884 #ifndef LRECORD_SYMBOL | 2863 #ifndef LRECORD_SYMBOL |
2885 case Lisp_Symbol: | 2864 case Lisp_Type_Symbol: |
2886 { | 2865 { |
2887 struct Lisp_Symbol *sym = XSYMBOL (obj); | 2866 struct Lisp_Symbol *sym = XSYMBOL (obj); |
2888 | 2867 |
2889 while (!XMARKBIT (sym->plist)) | 2868 while (!XMARKBIT (sym->plist)) |
2890 { | 2869 { |
2970 if (SYMBOLP (obj)) | 2949 if (SYMBOLP (obj)) |
2971 return total; | 2950 return total; |
2972 | 2951 |
2973 switch (XTYPE (obj)) | 2952 switch (XTYPE (obj)) |
2974 { | 2953 { |
2975 case Lisp_String: | 2954 case Lisp_Type_String: |
2976 { | 2955 { |
2977 struct Lisp_String *ptr = XSTRING (obj); | 2956 struct Lisp_String *ptr = XSTRING (obj); |
2978 int size = string_length (ptr); | 2957 int size = string_length (ptr); |
2979 | 2958 |
2980 if (string_data (ptr) != | 2959 if (string_data (ptr) != |
2991 } | 2970 } |
2992 total += size; | 2971 total += size; |
2993 } | 2972 } |
2994 break; | 2973 break; |
2995 | 2974 |
2996 case Lisp_Vector: | 2975 #ifndef LRECORD_VECTOR |
2976 case Lisp_Type_Vector: | |
2997 { | 2977 { |
2998 struct Lisp_Vector *ptr = XVECTOR (obj); | 2978 struct Lisp_Vector *ptr = XVECTOR (obj); |
2999 int len = vector_length (ptr); | 2979 int len = vector_length (ptr); |
3000 | 2980 |
3001 total += (sizeof (struct Lisp_Vector) | 2981 total += (sizeof (struct Lisp_Vector) |
3014 goto tail_recurse; | 2994 goto tail_recurse; |
3015 } | 2995 } |
3016 #endif /* unused */ | 2996 #endif /* unused */ |
3017 } | 2997 } |
3018 break; | 2998 break; |
3019 | 2999 #endif /* !LRECORD_SYMBOL */ |
3020 case Lisp_Record: | 3000 |
3001 case Lisp_Type_Record: | |
3021 { | 3002 { |
3022 struct lrecord_header *lheader = XRECORD_LHEADER (obj); | 3003 struct lrecord_header *lheader = XRECORD_LHEADER (obj); |
3023 CONST struct lrecord_implementation *implementation | 3004 CONST struct lrecord_implementation *implementation |
3024 = lheader->implementation; | 3005 = lheader->implementation; |
3025 | 3006 |
3045 } | 3026 } |
3046 #endif /* unused */ | 3027 #endif /* unused */ |
3047 } | 3028 } |
3048 break; | 3029 break; |
3049 | 3030 |
3050 case Lisp_Cons: | 3031 case Lisp_Type_Cons: |
3051 { | 3032 { |
3052 struct Lisp_Cons *ptr = XCONS (obj); | 3033 struct Lisp_Cons *ptr = XCONS (obj); |
3053 total += sizeof (*ptr); | 3034 total += sizeof (*ptr); |
3054 #if 0 /* unused */ | 3035 #if 0 /* unused */ |
3055 if (!recurse) | 3036 if (!recurse) |
3807 { | 3788 { |
3808 if (!POINTER_TYPE_P (XGCTYPE (obj))) return 1; | 3789 if (!POINTER_TYPE_P (XGCTYPE (obj))) return 1; |
3809 if (PURIFIED (XPNTR (obj))) return 1; | 3790 if (PURIFIED (XPNTR (obj))) return 1; |
3810 switch (XGCTYPE (obj)) | 3791 switch (XGCTYPE (obj)) |
3811 { | 3792 { |
3812 case Lisp_Cons: | 3793 case Lisp_Type_Cons: |
3813 return XMARKBIT (XCAR (obj)); | 3794 return XMARKBIT (XCAR (obj)); |
3814 case Lisp_Record: | 3795 case Lisp_Type_Record: |
3815 return MARKED_RECORD_HEADER_P (XRECORD_LHEADER (obj)); | 3796 return MARKED_RECORD_HEADER_P (XRECORD_LHEADER (obj)); |
3816 case Lisp_String: | 3797 case Lisp_Type_String: |
3817 return XMARKBIT (XSTRING (obj)->plist); | 3798 return XMARKBIT (XSTRING (obj)->plist); |
3818 case Lisp_Vector: | 3799 #ifndef LRECORD_VECTOR |
3800 case Lisp_Type_Vector: | |
3819 return XVECTOR_LENGTH (obj) < 0; | 3801 return XVECTOR_LENGTH (obj) < 0; |
3802 #endif /* !LRECORD_VECTOR */ | |
3820 #ifndef LRECORD_SYMBOL | 3803 #ifndef LRECORD_SYMBOL |
3821 case Lisp_Symbol: | 3804 case Lisp_Type_Symbol: |
3822 return XMARKBIT (XSYMBOL (obj)->plist); | 3805 return XMARKBIT (XSYMBOL (obj)->plist); |
3823 #endif | 3806 #endif |
3824 default: | 3807 default: |
3825 abort (); | 3808 abort (); |
3826 } | 3809 } |