diff options
author | Paul Eggert <eggert@Penguin.CS.UCLA.EDU> | 2018-08-09 00:35:47 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2018-08-11 18:50:25 -0700 |
commit | 6c12f4e63f60eb280c5fc08dc76f11d097184dc7 (patch) | |
tree | 56ddc05ba736ca648844902f8532fac42aa50bfe /src | |
parent | d614e4a8cd2d5fe37b38bb4d8191013a7d917731 (diff) | |
download | emacs-6c12f4e63f60eb280c5fc08dc76f11d097184dc7.tar.gz |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/alloc.c | 20 | ||||
-rw-r--r-- | src/lisp.h | 4 |
2 files changed, 5 insertions, 19 deletions
diff --git a/src/alloc.c b/src/alloc.c index fea0cec383b..337668f9c31 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -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); } } diff --git a/src/lisp.h b/src/lisp.h index c080cc6b146..dcc157e0b96 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -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; |