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, 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,
3697Lisp_Object 3704Lisp_Object
3698build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos) 3705build_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