Simplify mark_object for pseudovectors

Suggested by Pip Cet (Bug#32405#14).
* src/alloc.c (mark_object): Remove unnecessary special cases for
PVEC_MARKER, PVEC_BOOL_VECTOR, PVEC_MISC_PTR, PVEC_USER_PTR, and
PVEC_FINALIZER.

change is to free up an enum Lisp_Type tag value, a scarce
This commit is contained in:
Paul Eggert 2018-08-09 00:35:47 -07:00 committed by Paul Eggert
parent d614e4a8cd
commit 6c12f4e63f
2 changed files with 5 additions and 19 deletions

View file

@ -6495,28 +6495,10 @@ mark_object (Lisp_Object arg)
mark_char_table (ptr, (enum pvec_type) pvectype);
break;
case PVEC_MARKER:
/* DO NOT mark thru the marker's chain.
The buffer's markers chain does not preserve markers from gc;
instead, markers are removed from the chain when freed by gc. */
case PVEC_BOOL_VECTOR:
case PVEC_MISC_PTR:
#ifdef HAVE_MODULES
case PVEC_USER_PTR:
#endif
/* No Lisp_Objects to mark in these. */
VECTOR_MARK (ptr);
break;
case PVEC_OVERLAY:
mark_overlay (XOVERLAY (obj));
break;
case PVEC_FINALIZER:
VECTOR_MARK (ptr);
mark_object (XFINALIZER (obj)->function);
break;
case PVEC_SUBR:
break;
@ -6524,6 +6506,8 @@ mark_object (Lisp_Object arg)
emacs_abort ();
default:
/* A regular vector, or a pseudovector needing no special
treatment. */
mark_vectorlike (ptr);
}
}

View file

@ -2264,7 +2264,9 @@ struct Lisp_Marker
does not point anywhere. */
/* For markers that point somewhere,
this is used to chain of all the markers in a given buffer. */
this is used to chain of all the markers in a given buffer.
The chain does not preserve markers from garbage collection;
instead, markers are removed from the chain when freed by GC. */
/* We could remove it and use an array in buffer_text instead.
That would also allow us to preserve it ordered. */
struct Lisp_Marker *next;