aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorStefan Monnier2017-03-12 17:44:13 -0400
committerStefan Monnier2017-03-12 17:44:13 -0400
commit1b424533675341a2090b79a6ffc420ac6b179ce7 (patch)
treef963331e335e16d77169d1de4ea0f16f88143bc9 /src/alloc.c
parent995be66f0f0d26d1a96cbb8dfb429c3941157771 (diff)
downloademacs-1b424533675341a2090b79a6ffc420ac6b179ce7.tar.gz
emacs-1b424533675341a2090b79a6ffc420ac6b179ce7.zip
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/alloc.c')
-rw-r--r--src/alloc.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/src/alloc.c b/src/alloc.c
index b44b90e558a..ae3e1519c04 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3276,13 +3276,7 @@ sweep_vectors (void)
3276 VECTOR_UNMARK (vector); 3276 VECTOR_UNMARK (vector);
3277 total_vectors++; 3277 total_vectors++;
3278 if (vector->header.size & PSEUDOVECTOR_FLAG) 3278 if (vector->header.size & PSEUDOVECTOR_FLAG)
3279 { 3279 total_vector_slots += vector_nbytes (vector) / word_size;
3280 /* All non-bool pseudovectors are small enough to be allocated
3281 from vector blocks. This code should be redesigned if some
3282 pseudovector type grows beyond VBLOCK_BYTES_MAX. */
3283 eassert (PSEUDOVECTOR_TYPEP (&vector->header, PVEC_BOOL_VECTOR));
3284 total_vector_slots += vector_nbytes (vector) / word_size;
3285 }
3286 else 3280 else
3287 total_vector_slots 3281 total_vector_slots
3288 += header_size / word_size + vector->header.size; 3282 += header_size / word_size + vector->header.size;
@@ -4648,7 +4642,7 @@ live_vector_p (struct mem_node *m, void *p)
4648 && vector <= (struct Lisp_Vector *) p) 4642 && vector <= (struct Lisp_Vector *) p)
4649 { 4643 {
4650 if (!PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE) && vector == p) 4644 if (!PSEUDOVECTOR_TYPEP (&vector->header, PVEC_FREE) && vector == p)
4651 return 1; 4645 return true;
4652 else 4646 else
4653 vector = ADVANCE (vector, vector_nbytes (vector)); 4647 vector = ADVANCE (vector, vector_nbytes (vector));
4654 } 4648 }
@@ -6385,7 +6379,6 @@ mark_object (Lisp_Object arg)
6385 case Lisp_Vectorlike: 6379 case Lisp_Vectorlike:
6386 { 6380 {
6387 register struct Lisp_Vector *ptr = XVECTOR (obj); 6381 register struct Lisp_Vector *ptr = XVECTOR (obj);
6388 register ptrdiff_t pvectype;
6389 6382
6390 if (VECTOR_MARKED_P (ptr)) 6383 if (VECTOR_MARKED_P (ptr))
6391 break; 6384 break;
@@ -6396,11 +6389,8 @@ mark_object (Lisp_Object arg)
6396 emacs_abort (); 6389 emacs_abort ();
6397#endif /* GC_CHECK_MARKED_OBJECTS */ 6390#endif /* GC_CHECK_MARKED_OBJECTS */
6398 6391
6399 if (ptr->header.size & PSEUDOVECTOR_FLAG) 6392 enum pvec_type pvectype
6400 pvectype = ((ptr->header.size & PVEC_TYPE_MASK) 6393 = PSEUDOVECTOR_TYPE (ptr);
6401 >> PSEUDOVECTOR_AREA_BITS);
6402 else
6403 pvectype = PVEC_NORMAL_VECTOR;
6404 6394
6405 if (pvectype != PVEC_SUBR 6395 if (pvectype != PVEC_SUBR
6406 && pvectype != PVEC_BUFFER 6396 && pvectype != PVEC_BUFFER