From d7a7fda3cc130edb8bc10af96d322d263afbb44a Mon Sep 17 00:00:00 2001 From: Dmitry Antipov Date: Mon, 23 Jul 2012 15:15:43 +0400 Subject: [PATCH] Cleanup miscellaneous objects allocation and initialization. * alloc.c (allocate_misc): Change to static. Add argument to specify the subtype. Adjust comment and users. (build_overlay): New function. * buffer.c (copy_overlays, Fmake_overlay): Use it. * lisp.h (struct Lisp_Overlay): Remove obsolete comment. (allocate_misc): Remove prototype. (build_overlay): Add prototype. --- src/ChangeLog | 13 ++++++++++++- src/alloc.c | 31 ++++++++++++++++++++++--------- src/buffer.c | 15 +++------------ src/lisp.h | 12 +----------- 4 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index bc486a99bd4..fb25d8dc937 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,4 +1,15 @@ -2012-07-22 Dmitry Antipov +2012-07-23 Dmitry Antipov + + Cleanup miscellaneous objects allocation and initialization. + * alloc.c (allocate_misc): Change to static. Add argument to + specify the subtype. Adjust comment and users. + (build_overlay): New function. + * buffer.c (copy_overlays, Fmake_overlay): Use it. + * lisp.h (struct Lisp_Overlay): Remove obsolete comment. + (allocate_misc): Remove prototype. + (build_overlay): Add prototype. + +2012-07-23 Dmitry Antipov Swap buffer text indirection counters in Fbuffer_swap_text. * buffer.c (Fbuffer_swap_text): Swap indirections too. diff --git a/src/alloc.c b/src/alloc.c index 9f3c2a2ed4b..d9c56b5c7c8 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -3564,10 +3564,10 @@ static int marker_block_index = MARKER_BLOCK_SIZE; static union Lisp_Misc *marker_free_list; -/* Return a newly allocated Lisp_Misc object, with no substructure. */ +/* Return a newly allocated Lisp_Misc object of specified TYPE. */ -Lisp_Object -allocate_misc (void) +static Lisp_Object +allocate_misc (enum Lisp_Misc_Type type) { Lisp_Object val; @@ -3599,6 +3599,7 @@ allocate_misc (void) --total_free_markers; consing_since_gc += sizeof (union Lisp_Misc); misc_objects_consed++; + XMISCTYPE (val) = type; XMISCANY (val)->gcmarkbit = 0; return val; } @@ -3625,8 +3626,7 @@ make_save_value (void *pointer, ptrdiff_t integer) register Lisp_Object val; register struct Lisp_Save_Value *p; - val = allocate_misc (); - XMISCTYPE (val) = Lisp_Misc_Save_Value; + val = allocate_misc (Lisp_Misc_Save_Value); p = XSAVE_VALUE (val); p->pointer = pointer; p->integer = integer; @@ -3634,6 +3634,21 @@ make_save_value (void *pointer, ptrdiff_t integer) return val; } +/* Return a Lisp_Misc_Overlay object with specified START, END and PLIST. */ + +Lisp_Object +build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist) +{ + register Lisp_Object overlay; + + overlay = allocate_misc (Lisp_Misc_Overlay); + OVERLAY_START (overlay) = start; + OVERLAY_END (overlay) = end; + OVERLAY_PLIST (overlay) = plist; + XOVERLAY (overlay)->next = NULL; + return overlay; +} + DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0, doc: /* Return a newly allocated marker which does not point at any place. */) (void) @@ -3641,8 +3656,7 @@ DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0, register Lisp_Object val; register struct Lisp_Marker *p; - val = allocate_misc (); - XMISCTYPE (val) = Lisp_Misc_Marker; + val = allocate_misc (Lisp_Misc_Marker); p = XMARKER (val); p->buffer = 0; p->bytepos = 0; @@ -3667,8 +3681,7 @@ build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos) /* Every character is at least one byte. */ eassert (charpos <= bytepos); - obj = allocate_misc (); - XMISCTYPE (obj) = Lisp_Misc_Marker; + obj = allocate_misc (Lisp_Misc_Marker); m = XMARKER (obj); m->buffer = buf; m->charpos = charpos; diff --git a/src/buffer.c b/src/buffer.c index 68208d17abe..734ddb5a1c1 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -433,12 +433,8 @@ copy_overlays (struct buffer *b, struct Lisp_Overlay *list) XMARKER (end)->insertion_type = XMARKER (OVERLAY_END (old_overlay))->insertion_type; - overlay = allocate_misc (); - XMISCTYPE (overlay) = Lisp_Misc_Overlay; - OVERLAY_START (overlay) = start; - OVERLAY_END (overlay) = end; - OVERLAY_PLIST (overlay) = Fcopy_sequence (OVERLAY_PLIST (old_overlay)); - XOVERLAY (overlay)->next = NULL; + overlay = build_overlay + (start, end, Fcopy_sequence (OVERLAY_PLIST (old_overlay))); if (tail) tail = tail->next = XOVERLAY (overlay); @@ -3640,12 +3636,7 @@ for the rear of the overlay advance when text is inserted there if (!NILP (rear_advance)) XMARKER (end)->insertion_type = 1; - overlay = allocate_misc (); - XMISCTYPE (overlay) = Lisp_Misc_Overlay; - XOVERLAY (overlay)->start = beg; - XOVERLAY (overlay)->end = end; - XOVERLAY (overlay)->plist = Qnil; - XOVERLAY (overlay)->next = NULL; + overlay = build_overlay (beg, end, Qnil); /* Put the new overlay on the wrong list. */ end = OVERLAY_END (overlay); diff --git a/src/lisp.h b/src/lisp.h index 2f426c38fc5..e34a66af0c8 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1286,16 +1286,6 @@ struct Lisp_Marker /* START and END are markers in the overlay's buffer, and PLIST is the overlay's property list. */ struct Lisp_Overlay -/* An overlay's real data content is: - - plist - - buffer - - insertion type of both ends - - start & start_byte - - end & end_byte - - next (singly linked list of overlays). - - start_next and end_next (singly linked list of markers). - I.e. 9words plus 2 bits, 3words of which are for external linked lists. -*/ { ENUM_BF (Lisp_Misc_Type) type : 16; /* = Lisp_Misc_Overlay */ unsigned gcmarkbit : 1; @@ -2605,7 +2595,6 @@ extern Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object); extern Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); extern Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object); -extern Lisp_Object allocate_misc (void); extern _Noreturn void string_overflow (void); extern Lisp_Object make_string (const char *, ptrdiff_t); extern Lisp_Object make_formatted_string (char *, const char *, ...) @@ -2667,6 +2656,7 @@ extern Lisp_Object make_float (double); extern void display_malloc_warning (void); extern ptrdiff_t inhibit_garbage_collection (void); extern Lisp_Object make_save_value (void *, ptrdiff_t); +extern Lisp_Object build_overlay (Lisp_Object, Lisp_Object, Lisp_Object); extern void free_marker (Lisp_Object); extern void free_cons (struct Lisp_Cons *); extern void init_alloc_once (void); -- 2.11.4.GIT