summaryrefslogtreecommitdiff
path: root/src/lisp.h
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2017-03-12 17:44:13 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2017-03-12 17:44:13 -0400
commit1b424533675341a2090b79a6ffc420ac6b179ce7 (patch)
treef963331e335e16d77169d1de4ea0f16f88143bc9 /src/lisp.h
parent995be66f0f0d26d1a96cbb8dfb429c3941157771 (diff)
downloademacs-1b424533675341a2090b79a6ffc420ac6b179ce7.tar.gz
Use switch on pseudovector types; plus cleanups along the way
* src/lisp.h (PSEUDOVECTOR_TYPE): New function, extracted from mark_object. (PSEUDOVECTOR_TYPEP): Change type of `code'. * src/alloc.c (sweep_vectors): Remove out-of-date assertion. (mark_object): Use PSEUDOVECTOR_TYPE. * src/data.c (Ftype_of): Use switch on pvec type. * src/print.c (print_object): Use switch on pvec type. * lisp/emacs-lisp/cl-generic.el (cl--generic-typeof-types): Add recently added types.
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 5cbb461a182..ab4db4cac02 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -874,7 +874,7 @@ enum pvec_type
PVEC_TERMINAL,
PVEC_WINDOW_CONFIGURATION,
PVEC_SUBR,
- PVEC_OTHER,
+ PVEC_OTHER, /* Should never be visible to Elisp code. */
PVEC_XWIDGET,
PVEC_XWIDGET_VIEW,
PVEC_THREAD,
@@ -1410,9 +1410,21 @@ CHECK_VECTOR (Lisp_Object x)
/* A pseudovector is like a vector, but has other non-Lisp components. */
+INLINE enum pvec_type
+PSEUDOVECTOR_TYPE (struct Lisp_Vector *v)
+{
+ ptrdiff_t size = v->header.size;
+ return (size & PSEUDOVECTOR_FLAG
+ ? (size & PVEC_TYPE_MASK) >> PSEUDOVECTOR_AREA_BITS
+ : PVEC_NORMAL_VECTOR);
+}
+
+/* Can't be used with PVEC_NORMAL_VECTOR. */
INLINE bool
-PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, int code)
+PSEUDOVECTOR_TYPEP (struct vectorlike_header *a, enum pvec_type code)
{
+ /* We don't use PSEUDOVECTOR_TYPE here so as to avoid a shift
+ * operation when `code' is known. */
return ((a->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK))
== (PSEUDOVECTOR_FLAG | (code << PSEUDOVECTOR_AREA_BITS)));
}