summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert <eggert@Penguin.CS.UCLA.EDU>2018-08-09 00:35:47 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2018-08-11 18:50:25 -0700
commit6c12f4e63f60eb280c5fc08dc76f11d097184dc7 (patch)
tree56ddc05ba736ca648844902f8532fac42aa50bfe /src
parentd614e4a8cd2d5fe37b38bb4d8191013a7d917731 (diff)
downloademacs-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.c20
-rw-r--r--src/lisp.h4
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;