diff options
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 53 |
1 files changed, 24 insertions, 29 deletions
diff --git a/src/alloc.c b/src/alloc.c index 948ce7b6f5c..c7936921a09 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -3685,10 +3685,17 @@ DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0, | |||
| 3685 | doc: /* Return a newly allocated marker which does not point at any place. */) | 3685 | doc: /* Return a newly allocated marker which does not point at any place. */) |
| 3686 | (void) | 3686 | (void) |
| 3687 | { | 3687 | { |
| 3688 | register Lisp_Object marker = allocate_misc (Lisp_Misc_Marker); | 3688 | register Lisp_Object val; |
| 3689 | register struct Lisp_Marker *p; | ||
| 3689 | 3690 | ||
| 3690 | init_marker (XMARKER (marker), NULL, 0, 0, 0); | 3691 | val = allocate_misc (Lisp_Misc_Marker); |
| 3691 | return marker; | 3692 | p = XMARKER (val); |
| 3693 | p->buffer = 0; | ||
| 3694 | p->bytepos = 0; | ||
| 3695 | p->charpos = 0; | ||
| 3696 | p->next = NULL; | ||
| 3697 | p->insertion_type = 0; | ||
| 3698 | return val; | ||
| 3692 | } | 3699 | } |
| 3693 | 3700 | ||
| 3694 | /* Return a newly allocated marker which points into BUF | 3701 | /* Return a newly allocated marker which points into BUF |
| @@ -3697,23 +3704,24 @@ DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0, | |||
| 3697 | Lisp_Object | 3704 | Lisp_Object |
| 3698 | build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos) | 3705 | build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos) |
| 3699 | { | 3706 | { |
| 3700 | register Lisp_Object marker = allocate_misc (Lisp_Misc_Marker); | 3707 | Lisp_Object obj; |
| 3701 | 3708 | struct Lisp_Marker *m; | |
| 3702 | /* Use Fmake_marker to create marker points to nowhere. */ | ||
| 3703 | eassert (buf != NULL); | ||
| 3704 | 3709 | ||
| 3705 | /* No dead buffers here. */ | 3710 | /* No dead buffers here. */ |
| 3706 | eassert (!NILP (BVAR (buf, name))); | 3711 | eassert (!NILP (BVAR (buf, name))); |
| 3707 | 3712 | ||
| 3708 | /* In a single-byte buffer, two positions must be equal. | 3713 | /* Every character is at least one byte. */ |
| 3709 | Otherwise, every character is at least one byte. */ | 3714 | eassert (charpos <= bytepos); |
| 3710 | if (BUF_Z (buf) == BUF_Z_BYTE (buf)) | 3715 | |
| 3711 | eassert (charpos == bytepos); | 3716 | obj = allocate_misc (Lisp_Misc_Marker); |
| 3712 | else | 3717 | m = XMARKER (obj); |
| 3713 | eassert (charpos <= bytepos); | 3718 | m->buffer = buf; |
| 3714 | 3719 | m->charpos = charpos; | |
| 3715 | init_marker (XMARKER (marker), buf, charpos, bytepos, 0); | 3720 | m->bytepos = bytepos; |
| 3716 | return marker; | 3721 | m->insertion_type = 0; |
| 3722 | m->next = BUF_MARKERS (buf); | ||
| 3723 | BUF_MARKERS (buf) = m; | ||
| 3724 | return obj; | ||
| 3717 | } | 3725 | } |
| 3718 | 3726 | ||
| 3719 | /* Put MARKER back on the free list after using it temporarily. */ | 3727 | /* Put MARKER back on the free list after using it temporarily. */ |
| @@ -6081,19 +6089,6 @@ mark_object (Lisp_Object arg) | |||
| 6081 | case PVEC_SUBR: | 6089 | case PVEC_SUBR: |
| 6082 | break; | 6090 | break; |
| 6083 | 6091 | ||
| 6084 | case PVEC_EXCURSION: | ||
| 6085 | { | ||
| 6086 | struct Lisp_Excursion *e = (struct Lisp_Excursion *) ptr; | ||
| 6087 | /* No Lisp_Objects but two special pointers to mark here. */ | ||
| 6088 | eassert (e->buffer != NULL); | ||
| 6089 | eassert (e->window != NULL); | ||
| 6090 | if (!VECTOR_MARKED_P (e->buffer)) | ||
| 6091 | mark_buffer (e->buffer); | ||
| 6092 | if (!VECTOR_MARKED_P (e->window)) | ||
| 6093 | mark_vectorlike ((struct Lisp_Vector *) e->window); | ||
| 6094 | } | ||
| 6095 | break; | ||
| 6096 | |||
| 6097 | case PVEC_FREE: | 6092 | case PVEC_FREE: |
| 6098 | abort (); | 6093 | abort (); |
| 6099 | 6094 | ||