From d7370693eb76477be79888f759d28a1affbd7e81 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 9 Aug 2018 00:35:47 -0700 Subject: [PATCH] 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 --- src/alloc.c | 20 ++------------------ src/lisp.h | 4 +++- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/alloc.c b/src/alloc.c index dcf11825bc..be00c30521 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -6375,28 +6375,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; @@ -6404,6 +6386,8 @@ mark_object (Lisp_Object arg) emacs_abort (); default: + /* A regular vector, or a pseudovector needing no special + treatment. */ mark_vectorlike (ptr); } } diff --git a/src/lisp.h b/src/lisp.h index c559377288..cfed2cf2d6 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2256,7 +2256,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; -- 2.17.1