diff options
| author | Stefan Monnier | 2017-03-12 17:44:13 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2017-03-12 17:44:13 -0400 |
| commit | 1b424533675341a2090b79a6ffc420ac6b179ce7 (patch) | |
| tree | f963331e335e16d77169d1de4ea0f16f88143bc9 /src/alloc.c | |
| parent | 995be66f0f0d26d1a96cbb8dfb429c3941157771 (diff) | |
| download | emacs-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.c | 18 |
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 |