Mercurial > emacs
comparison src/alloc.c @ 90288:7432ca837c8d
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-9
Merge from emacs--devo--0
Patches applied:
* emacs--devo--0 (patch 16-33)
- Update from CVS
- Install ERC.
- Fix ERC compiler warnings.
- Use utf-8 encoding in ERC ChangeLogs.
- Merge ERC-related Viper hacks into Viper.
- Merge from erc--main--0
- Merge from gnus--rel--5.10
* gnus--rel--5.10 (patch 8-13)
- Merge from emacs--devo--0
- Update from CVS
| author | Miles Bader <miles@gnu.org> |
|---|---|
| date | Wed, 01 Feb 2006 10:07:17 +0000 |
| parents | 5b7d410e31f9 47782d80f30b |
| children | 4b3d39451150 |
comparison
equal
deleted
inserted
replaced
| 90287:3cd97358d81a | 90288:7432ca837c8d |
|---|---|
| 1420 INTERVAL | 1420 INTERVAL |
| 1421 make_interval () | 1421 make_interval () |
| 1422 { | 1422 { |
| 1423 INTERVAL val; | 1423 INTERVAL val; |
| 1424 | 1424 |
| 1425 eassert (!handling_signal); | 1425 /* eassert (!handling_signal); */ |
| 1426 | |
| 1427 #ifndef SYNC_INPUT | |
| 1428 BLOCK_INPUT; | |
| 1429 #endif | |
| 1426 | 1430 |
| 1427 if (interval_free_list) | 1431 if (interval_free_list) |
| 1428 { | 1432 { |
| 1429 val = interval_free_list; | 1433 val = interval_free_list; |
| 1430 interval_free_list = INTERVAL_PARENT (interval_free_list); | 1434 interval_free_list = INTERVAL_PARENT (interval_free_list); |
| 1443 interval_block_index = 0; | 1447 interval_block_index = 0; |
| 1444 n_interval_blocks++; | 1448 n_interval_blocks++; |
| 1445 } | 1449 } |
| 1446 val = &interval_block->intervals[interval_block_index++]; | 1450 val = &interval_block->intervals[interval_block_index++]; |
| 1447 } | 1451 } |
| 1452 | |
| 1453 #ifndef SYNC_INPUT | |
| 1454 UNBLOCK_INPUT; | |
| 1455 #endif | |
| 1456 | |
| 1448 consing_since_gc += sizeof (struct interval); | 1457 consing_since_gc += sizeof (struct interval); |
| 1449 intervals_consed++; | 1458 intervals_consed++; |
| 1450 RESET_INTERVAL (val); | 1459 RESET_INTERVAL (val); |
| 1451 val->gcmarkbit = 0; | 1460 val->gcmarkbit = 0; |
| 1452 return val; | 1461 return val; |
| 1840 static struct Lisp_String * | 1849 static struct Lisp_String * |
| 1841 allocate_string () | 1850 allocate_string () |
| 1842 { | 1851 { |
| 1843 struct Lisp_String *s; | 1852 struct Lisp_String *s; |
| 1844 | 1853 |
| 1845 eassert (!handling_signal); | 1854 /* eassert (!handling_signal); */ |
| 1855 | |
| 1856 #ifndef SYNC_INPUT | |
| 1857 BLOCK_INPUT; | |
| 1858 #endif | |
| 1846 | 1859 |
| 1847 /* If the free-list is empty, allocate a new string_block, and | 1860 /* If the free-list is empty, allocate a new string_block, and |
| 1848 add all the Lisp_Strings in it to the free-list. */ | 1861 add all the Lisp_Strings in it to the free-list. */ |
| 1849 if (string_free_list == NULL) | 1862 if (string_free_list == NULL) |
| 1850 { | 1863 { |
| 1870 check_string_free_list (); | 1883 check_string_free_list (); |
| 1871 | 1884 |
| 1872 /* Pop a Lisp_String off the free-list. */ | 1885 /* Pop a Lisp_String off the free-list. */ |
| 1873 s = string_free_list; | 1886 s = string_free_list; |
| 1874 string_free_list = NEXT_FREE_LISP_STRING (s); | 1887 string_free_list = NEXT_FREE_LISP_STRING (s); |
| 1888 | |
| 1889 #ifndef SYNC_INPUT | |
| 1890 UNBLOCK_INPUT; | |
| 1891 #endif | |
| 1875 | 1892 |
| 1876 /* Probably not strictly necessary, but play it safe. */ | 1893 /* Probably not strictly necessary, but play it safe. */ |
| 1877 bzero (s, sizeof *s); | 1894 bzero (s, sizeof *s); |
| 1878 | 1895 |
| 1879 --total_free_strings; | 1896 --total_free_strings; |
| 1918 int needed, old_nbytes; | 1935 int needed, old_nbytes; |
| 1919 | 1936 |
| 1920 /* Determine the number of bytes needed to store NBYTES bytes | 1937 /* Determine the number of bytes needed to store NBYTES bytes |
| 1921 of string data. */ | 1938 of string data. */ |
| 1922 needed = SDATA_SIZE (nbytes); | 1939 needed = SDATA_SIZE (nbytes); |
| 1940 old_data = s->data ? SDATA_OF_STRING (s) : NULL; | |
| 1941 old_nbytes = GC_STRING_BYTES (s); | |
| 1942 | |
| 1943 #ifndef SYNC_INPUT | |
| 1944 BLOCK_INPUT; | |
| 1945 #endif | |
| 1923 | 1946 |
| 1924 if (nbytes > LARGE_STRING_BYTES) | 1947 if (nbytes > LARGE_STRING_BYTES) |
| 1925 { | 1948 { |
| 1926 size_t size = sizeof *b - sizeof (struct sdata) + needed; | 1949 size_t size = sizeof *b - sizeof (struct sdata) + needed; |
| 1927 | 1950 |
| 1972 current_sblock = b; | 1995 current_sblock = b; |
| 1973 } | 1996 } |
| 1974 else | 1997 else |
| 1975 b = current_sblock; | 1998 b = current_sblock; |
| 1976 | 1999 |
| 1977 old_data = s->data ? SDATA_OF_STRING (s) : NULL; | |
| 1978 old_nbytes = GC_STRING_BYTES (s); | |
| 1979 | |
| 1980 data = b->next_free; | 2000 data = b->next_free; |
| 1981 b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA); | 2001 b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA); |
| 2002 | |
| 2003 #ifndef SYNC_INPUT | |
| 2004 UNBLOCK_INPUT; | |
| 2005 #endif | |
| 1982 | 2006 |
| 1983 data->string = s; | 2007 data->string = s; |
| 1984 s->data = SDATA_DATA (data); | 2008 s->data = SDATA_DATA (data); |
| 1985 #ifdef GC_CHECK_STRING_BYTES | 2009 #ifdef GC_CHECK_STRING_BYTES |
| 1986 SDATA_NBYTES (data) = nbytes; | 2010 SDATA_NBYTES (data) = nbytes; |
| 2558 make_float (float_value) | 2582 make_float (float_value) |
| 2559 double float_value; | 2583 double float_value; |
| 2560 { | 2584 { |
| 2561 register Lisp_Object val; | 2585 register Lisp_Object val; |
| 2562 | 2586 |
| 2563 eassert (!handling_signal); | 2587 /* eassert (!handling_signal); */ |
| 2588 | |
| 2589 #ifndef SYNC_INPUT | |
| 2590 BLOCK_INPUT; | |
| 2591 #endif | |
| 2564 | 2592 |
| 2565 if (float_free_list) | 2593 if (float_free_list) |
| 2566 { | 2594 { |
| 2567 /* We use the data field for chaining the free list | 2595 /* We use the data field for chaining the free list |
| 2568 so that we won't use the same field that has the mark bit. */ | 2596 so that we won't use the same field that has the mark bit. */ |
| 2585 } | 2613 } |
| 2586 XSETFLOAT (val, &float_block->floats[float_block_index]); | 2614 XSETFLOAT (val, &float_block->floats[float_block_index]); |
| 2587 float_block_index++; | 2615 float_block_index++; |
| 2588 } | 2616 } |
| 2589 | 2617 |
| 2618 #ifndef SYNC_INPUT | |
| 2619 UNBLOCK_INPUT; | |
| 2620 #endif | |
| 2621 | |
| 2590 XFLOAT_DATA (val) = float_value; | 2622 XFLOAT_DATA (val) = float_value; |
| 2591 eassert (!FLOAT_MARKED_P (XFLOAT (val))); | 2623 eassert (!FLOAT_MARKED_P (XFLOAT (val))); |
| 2592 consing_since_gc += sizeof (struct Lisp_Float); | 2624 consing_since_gc += sizeof (struct Lisp_Float); |
| 2593 floats_consed++; | 2625 floats_consed++; |
| 2594 return val; | 2626 return val; |
| 2679 (car, cdr) | 2711 (car, cdr) |
| 2680 Lisp_Object car, cdr; | 2712 Lisp_Object car, cdr; |
| 2681 { | 2713 { |
| 2682 register Lisp_Object val; | 2714 register Lisp_Object val; |
| 2683 | 2715 |
| 2684 eassert (!handling_signal); | 2716 /* eassert (!handling_signal); */ |
| 2717 | |
| 2718 #ifndef SYNC_INPUT | |
| 2719 BLOCK_INPUT; | |
| 2720 #endif | |
| 2685 | 2721 |
| 2686 if (cons_free_list) | 2722 if (cons_free_list) |
| 2687 { | 2723 { |
| 2688 /* We use the cdr for chaining the free list | 2724 /* We use the cdr for chaining the free list |
| 2689 so that we won't use the same field that has the mark bit. */ | 2725 so that we won't use the same field that has the mark bit. */ |
| 2705 } | 2741 } |
| 2706 XSETCONS (val, &cons_block->conses[cons_block_index]); | 2742 XSETCONS (val, &cons_block->conses[cons_block_index]); |
| 2707 cons_block_index++; | 2743 cons_block_index++; |
| 2708 } | 2744 } |
| 2709 | 2745 |
| 2746 #ifndef SYNC_INPUT | |
| 2747 UNBLOCK_INPUT; | |
| 2748 #endif | |
| 2749 | |
| 2710 XSETCAR (val, car); | 2750 XSETCAR (val, car); |
| 2711 XSETCDR (val, cdr); | 2751 XSETCDR (val, cdr); |
| 2712 eassert (!CONS_MARKED_P (XCONS (val))); | 2752 eassert (!CONS_MARKED_P (XCONS (val))); |
| 2713 consing_since_gc += sizeof (struct Lisp_Cons); | 2753 consing_since_gc += sizeof (struct Lisp_Cons); |
| 2714 cons_cells_consed++; | 2754 cons_cells_consed++; |
| 2878 #endif | 2918 #endif |
| 2879 | 2919 |
| 2880 consing_since_gc += nbytes; | 2920 consing_since_gc += nbytes; |
| 2881 vector_cells_consed += len; | 2921 vector_cells_consed += len; |
| 2882 | 2922 |
| 2923 #ifndef SYNC_INPUT | |
| 2924 BLOCK_INPUT; | |
| 2925 #endif | |
| 2926 | |
| 2883 p->next = all_vectors; | 2927 p->next = all_vectors; |
| 2884 all_vectors = p; | 2928 all_vectors = p; |
| 2929 | |
| 2930 #ifndef SYNC_INPUT | |
| 2931 UNBLOCK_INPUT; | |
| 2932 #endif | |
| 2933 | |
| 2885 ++n_vectors; | 2934 ++n_vectors; |
| 2886 return p; | 2935 return p; |
| 2887 } | 2936 } |
| 2888 | 2937 |
| 2889 | 2938 |
| 3116 register struct Lisp_Symbol *p; | 3165 register struct Lisp_Symbol *p; |
| 3117 | 3166 |
| 3118 CHECK_STRING (name); | 3167 CHECK_STRING (name); |
| 3119 | 3168 |
| 3120 eassert (!handling_signal); | 3169 eassert (!handling_signal); |
| 3170 | |
| 3171 #ifndef SYNC_INPUT | |
| 3172 BLOCK_INPUT; | |
| 3173 #endif | |
| 3121 | 3174 |
| 3122 if (symbol_free_list) | 3175 if (symbol_free_list) |
| 3123 { | 3176 { |
| 3124 XSETSYMBOL (val, symbol_free_list); | 3177 XSETSYMBOL (val, symbol_free_list); |
| 3125 symbol_free_list = symbol_free_list->next; | 3178 symbol_free_list = symbol_free_list->next; |
| 3137 n_symbol_blocks++; | 3190 n_symbol_blocks++; |
| 3138 } | 3191 } |
| 3139 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index]); | 3192 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index]); |
| 3140 symbol_block_index++; | 3193 symbol_block_index++; |
| 3141 } | 3194 } |
| 3195 | |
| 3196 #ifndef SYNC_INPUT | |
| 3197 UNBLOCK_INPUT; | |
| 3198 #endif | |
| 3142 | 3199 |
| 3143 p = XSYMBOL (val); | 3200 p = XSYMBOL (val); |
| 3144 p->xname = name; | 3201 p->xname = name; |
| 3145 p->plist = Qnil; | 3202 p->plist = Qnil; |
| 3146 p->value = Qunbound; | 3203 p->value = Qunbound; |
| 3197 Lisp_Object | 3254 Lisp_Object |
| 3198 allocate_misc () | 3255 allocate_misc () |
| 3199 { | 3256 { |
| 3200 Lisp_Object val; | 3257 Lisp_Object val; |
| 3201 | 3258 |
| 3202 eassert (!handling_signal); | 3259 /* eassert (!handling_signal); */ |
| 3260 | |
| 3261 #ifndef SYNC_INPUT | |
| 3262 BLOCK_INPUT; | |
| 3263 #endif | |
| 3203 | 3264 |
| 3204 if (marker_free_list) | 3265 if (marker_free_list) |
| 3205 { | 3266 { |
| 3206 XSETMISC (val, marker_free_list); | 3267 XSETMISC (val, marker_free_list); |
| 3207 marker_free_list = marker_free_list->u_free.chain; | 3268 marker_free_list = marker_free_list->u_free.chain; |
| 3220 total_free_markers += MARKER_BLOCK_SIZE; | 3281 total_free_markers += MARKER_BLOCK_SIZE; |
| 3221 } | 3282 } |
| 3222 XSETMISC (val, &marker_block->markers[marker_block_index]); | 3283 XSETMISC (val, &marker_block->markers[marker_block_index]); |
| 3223 marker_block_index++; | 3284 marker_block_index++; |
| 3224 } | 3285 } |
| 3286 | |
| 3287 #ifndef SYNC_INPUT | |
| 3288 UNBLOCK_INPUT; | |
| 3289 #endif | |
| 3225 | 3290 |
| 3226 --total_free_markers; | 3291 --total_free_markers; |
| 3227 consing_since_gc += sizeof (union Lisp_Misc); | 3292 consing_since_gc += sizeof (union Lisp_Misc); |
| 3228 misc_objects_consed++; | 3293 misc_objects_consed++; |
| 3229 XMARKER (val)->gcmarkbit = 0; | 3294 XMARKER (val)->gcmarkbit = 0; |
| 4614 | 4679 |
| 4615 void | 4680 void |
| 4616 check_pure_size () | 4681 check_pure_size () |
| 4617 { | 4682 { |
| 4618 if (pure_bytes_used_before_overflow) | 4683 if (pure_bytes_used_before_overflow) |
| 4619 message ("Pure Lisp storage overflow (approx. %d bytes needed)", | 4684 message ("emacs:0:Pure Lisp storage overflow (approx. %d bytes needed)", |
| 4620 (int) (pure_bytes_used + pure_bytes_used_before_overflow)); | 4685 (int) (pure_bytes_used + pure_bytes_used_before_overflow)); |
| 4621 } | 4686 } |
| 4622 | 4687 |
| 4623 | 4688 |
| 4624 /* Return a string allocated in pure space. DATA is a buffer holding | 4689 /* Return a string allocated in pure space. DATA is a buffer holding |
