comparison src/alloc.c @ 85328:d0d527210b0c

* lisp.h (enum Lisp_Misc_Type): Del Lisp_Misc_Some_Buffer_Local_Value. (XMISCANY): New macro. (XMISCTYPE): Use it. (struct Lisp_Misc_Any): New type. (union Lisp_Misc): Use it. (struct Lisp_Buffer_Local_Value): Add `local_if_set' bit. * data.c (Fboundp, store_symval_forwarding, swap_in_global_binding) (find_symbol_value, set_internal, default_value, Fset_default) (Fmake_variable_buffer_local, Fmake_local_variable) (Fkill_local_variable, Fmake_variable_frame_local, Flocal_variable_p) (Flocal_variable_if_set_p, Fvariable_binding_locus): The SOME_BUFFER_LOCAL_VALUEP distinction is replaced by local_if_set. * alloc.c (allocate_buffer): Set the size and tag. (allocate_misc, mark_maybe_object, mark_object, survives_gc_p): Use XMISCANY. (die): Follow the GNU convention for error messages. * print.c (print_object): SOME_BUFFER_LOCAL_VALUEP -> local_if_set. * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Don't set the tag any more. (set_buffer_internal_1): * frame.c (store_frame_param): * eval.c (specbind): * xdisp.c (select_frame_for_redisplay): Drop SOME_BUFFER_LOCAL_VALUEP.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 16 Oct 2007 15:42:58 +0000
parents 0161d8024935
children ad9922c079e4
comparison
equal deleted inserted replaced
85327:84eaa97c1d65 85328:d0d527210b0c
1151 allocate_buffer () 1151 allocate_buffer ()
1152 { 1152 {
1153 struct buffer *b 1153 struct buffer *b
1154 = (struct buffer *) lisp_malloc (sizeof (struct buffer), 1154 = (struct buffer *) lisp_malloc (sizeof (struct buffer),
1155 MEM_TYPE_BUFFER); 1155 MEM_TYPE_BUFFER);
1156 b->size = sizeof (struct buffer) / sizeof (EMACS_INT);
1157 XSETPVECTYPE (b, PVEC_BUFFER);
1156 return b; 1158 return b;
1157 } 1159 }
1158 1160
1159 1161
1160 #ifndef SYSTEM_MALLOC 1162 #ifndef SYSTEM_MALLOC
3350 MALLOC_UNBLOCK_INPUT; 3352 MALLOC_UNBLOCK_INPUT;
3351 3353
3352 --total_free_markers; 3354 --total_free_markers;
3353 consing_since_gc += sizeof (union Lisp_Misc); 3355 consing_since_gc += sizeof (union Lisp_Misc);
3354 misc_objects_consed++; 3356 misc_objects_consed++;
3355 XMARKER (val)->gcmarkbit = 0; 3357 XMISCANY (val)->gcmarkbit = 0;
3356 return val; 3358 return val;
3357 } 3359 }
3358 3360
3359 /* Free a Lisp_Misc object */ 3361 /* Free a Lisp_Misc object */
3360 3362
4207 else if (live_buffer_p (m, po)) 4209 else if (live_buffer_p (m, po))
4208 mark_p = GC_BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj)); 4210 mark_p = GC_BUFFERP (obj) && !VECTOR_MARKED_P (XBUFFER (obj));
4209 break; 4211 break;
4210 4212
4211 case Lisp_Misc: 4213 case Lisp_Misc:
4212 mark_p = (live_misc_p (m, po) && !XMARKER (obj)->gcmarkbit); 4214 mark_p = (live_misc_p (m, po) && !XMISCANY (obj)->gcmarkbit);
4213 break; 4215 break;
4214 4216
4215 case Lisp_Int: 4217 case Lisp_Int:
4216 case Lisp_Type_Limit: 4218 case Lisp_Type_Limit:
4217 break; 4219 break;
5652 } 5654 }
5653 break; 5655 break;
5654 5656
5655 case Lisp_Misc: 5657 case Lisp_Misc:
5656 CHECK_ALLOCATED_AND_LIVE (live_misc_p); 5658 CHECK_ALLOCATED_AND_LIVE (live_misc_p);
5657 if (XMARKER (obj)->gcmarkbit) 5659 if (XMISCANY (obj)->gcmarkbit)
5658 break; 5660 break;
5659 XMARKER (obj)->gcmarkbit = 1; 5661 XMISCANY (obj)->gcmarkbit = 1;
5660 5662
5661 switch (XMISCTYPE (obj)) 5663 switch (XMISCTYPE (obj))
5662 { 5664 {
5663 case Lisp_Misc_Buffer_Local_Value: 5665 case Lisp_Misc_Buffer_Local_Value:
5664 case Lisp_Misc_Some_Buffer_Local_Value:
5665 { 5666 {
5666 register struct Lisp_Buffer_Local_Value *ptr 5667 register struct Lisp_Buffer_Local_Value *ptr
5667 = XBUFFER_LOCAL_VALUE (obj); 5668 = XBUFFER_LOCAL_VALUE (obj);
5668 /* If the cdr is nil, avoid recursion for the car. */ 5669 /* If the cdr is nil, avoid recursion for the car. */
5669 if (EQ (ptr->cdr, Qnil)) 5670 if (EQ (ptr->cdr, Qnil))
5845 case Lisp_Symbol: 5846 case Lisp_Symbol:
5846 survives_p = XSYMBOL (obj)->gcmarkbit; 5847 survives_p = XSYMBOL (obj)->gcmarkbit;
5847 break; 5848 break;
5848 5849
5849 case Lisp_Misc: 5850 case Lisp_Misc:
5850 survives_p = XMARKER (obj)->gcmarkbit; 5851 survives_p = XMISCANY (obj)->gcmarkbit;
5851 break; 5852 break;
5852 5853
5853 case Lisp_String: 5854 case Lisp_String:
5854 survives_p = STRING_MARKED_P (XSTRING (obj)); 5855 survives_p = STRING_MARKED_P (XSTRING (obj));
5855 break; 5856 break;
6295 die (msg, file, line) 6296 die (msg, file, line)
6296 const char *msg; 6297 const char *msg;
6297 const char *file; 6298 const char *file;
6298 int line; 6299 int line;
6299 { 6300 {
6300 fprintf (stderr, "\r\nEmacs fatal error: %s:%d: %s\r\n", 6301 fprintf (stderr, "\r\n%s:%d: Emacs fatal error: %s\r\n",
6301 file, line, msg); 6302 file, line, msg);
6302 abort (); 6303 abort ();
6303 } 6304 }
6304 6305
6305 /* Initialization */ 6306 /* Initialization */