aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c53
1 files changed, 29 insertions, 24 deletions
diff --git a/src/alloc.c b/src/alloc.c
index ac6cb861c4d..5377b27e329 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3653,17 +3653,10 @@ DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3653 doc: /* Return a newly allocated marker which does not point at any place. */) 3653 doc: /* Return a newly allocated marker which does not point at any place. */)
3654 (void) 3654 (void)
3655{ 3655{
3656 register Lisp_Object val; 3656 register Lisp_Object marker = allocate_misc (Lisp_Misc_Marker);
3657 register struct Lisp_Marker *p;
3658 3657
3659 val = allocate_misc (Lisp_Misc_Marker); 3658 init_marker (XMARKER (marker), NULL, 0, 0, 0);
3660 p = XMARKER (val); 3659 return marker;
3661 p->buffer = 0;
3662 p->bytepos = 0;
3663 p->charpos = 0;
3664 p->next = NULL;
3665 p->insertion_type = 0;
3666 return val;
3667} 3660}
3668 3661
3669/* Return a newly allocated marker which points into BUF 3662/* Return a newly allocated marker which points into BUF
@@ -3672,24 +3665,23 @@ DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3672Lisp_Object 3665Lisp_Object
3673build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos) 3666build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos)
3674{ 3667{
3675 Lisp_Object obj; 3668 register Lisp_Object marker = allocate_misc (Lisp_Misc_Marker);
3676 struct Lisp_Marker *m; 3669
3670 /* Use Fmake_marker to create marker points to nowhere. */
3671 eassert (buf != NULL);
3677 3672
3678 /* No dead buffers here. */ 3673 /* No dead buffers here. */
3679 eassert (!NILP (BVAR (buf, name))); 3674 eassert (!NILP (BVAR (buf, name)));
3680 3675
3681 /* Every character is at least one byte. */ 3676 /* In a single-byte buffer, two positions must be equal.
3682 eassert (charpos <= bytepos); 3677 Otherwise, every character is at least one byte. */
3683 3678 if (BUF_Z (buf) == BUF_Z_BYTE (buf))
3684 obj = allocate_misc (Lisp_Misc_Marker); 3679 eassert (charpos == bytepos);
3685 m = XMARKER (obj); 3680 else
3686 m->buffer = buf; 3681 eassert (charpos <= bytepos);
3687 m->charpos = charpos; 3682
3688 m->bytepos = bytepos; 3683 init_marker (XMARKER (marker), buf, charpos, bytepos, 0);
3689 m->insertion_type = 0; 3684 return marker;
3690 m->next = BUF_MARKERS (buf);
3691 BUF_MARKERS (buf) = m;
3692 return obj;
3693} 3685}
3694 3686
3695/* Put MARKER back on the free list after using it temporarily. */ 3687/* Put MARKER back on the free list after using it temporarily. */
@@ -6057,6 +6049,19 @@ mark_object (Lisp_Object arg)
6057 case PVEC_SUBR: 6049 case PVEC_SUBR:
6058 break; 6050 break;
6059 6051
6052 case PVEC_EXCURSION:
6053 {
6054 struct Lisp_Excursion *e = (struct Lisp_Excursion *) ptr;
6055 /* No Lisp_Objects but two special pointers to mark here. */
6056 eassert (e->buffer != NULL);
6057 eassert (e->window != NULL);
6058 if (!VECTOR_MARKED_P (e->buffer))
6059 mark_buffer (e->buffer);
6060 if (!VECTOR_MARKED_P (e->window))
6061 mark_vectorlike ((struct Lisp_Vector *) e->window);
6062 }
6063 break;
6064
6060 case PVEC_FREE: 6065 case PVEC_FREE:
6061 abort (); 6066 abort ();
6062 6067