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