comparison src/marker.c @ 380:8626e4521993 r21-2-5

Import from CVS: tag r21-2-5
author cvs
date Mon, 13 Aug 2007 11:07:10 +0200
parents 6240c7796c7a
children 74fd4e045ea6
comparison
equal deleted inserted replaced
379:76b7d63099ad 380:8626e4521993
73 sprintf (buf, " 0x%lx>", (long) marker); 73 sprintf (buf, " 0x%lx>", (long) marker);
74 write_c_string (buf, printcharfun); 74 write_c_string (buf, printcharfun);
75 } 75 }
76 76
77 static int 77 static int
78 marker_equal (Lisp_Object o1, Lisp_Object o2, int depth) 78 marker_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
79 { 79 {
80 struct buffer *b1 = XMARKER (o1)->buffer; 80 struct Lisp_Marker *marker1 = XMARKER (obj1);
81 if (b1 != XMARKER (o2)->buffer) 81 struct Lisp_Marker *marker2 = XMARKER (obj2);
82 return (0); 82
83 else if (!b1) 83 return ((marker1->buffer == marker2->buffer) &&
84 /* All markers pointing nowhere are equal */ 84 (marker1->memind == marker2->memind ||
85 return (1); 85 /* All markers pointing nowhere are equal */
86 else 86 !marker1->buffer));
87 return ((XMARKER (o1)->memind == XMARKER (o2)->memind));
88 } 87 }
89 88
90 static unsigned long 89 static unsigned long
91 marker_hash (Lisp_Object obj, int depth) 90 marker_hash (Lisp_Object obj, int depth)
92 { 91 {
178 make this marker point nowhere. */ 177 make this marker point nowhere. */
179 if (NILP (pos) || 178 if (NILP (pos) ||
180 (MARKERP (pos) && !XMARKER (pos)->buffer)) 179 (MARKERP (pos) && !XMARKER (pos)->buffer))
181 { 180 {
182 if (point_p) 181 if (point_p)
183 signal_simple_error ("can't make point-marker point nowhere", 182 signal_simple_error ("Can't make point-marker point nowhere",
184 marker); 183 marker);
185 if (XMARKER (marker)->buffer) 184 if (XMARKER (marker)->buffer)
186 unchain_marker (marker); 185 unchain_marker (marker);
187 return marker; 186 return marker;
188 } 187 }
197 /* If buffer is dead, set marker to point nowhere. */ 196 /* If buffer is dead, set marker to point nowhere. */
198 if (!BUFFER_LIVE_P (XBUFFER (buffer))) 197 if (!BUFFER_LIVE_P (XBUFFER (buffer)))
199 { 198 {
200 if (point_p) 199 if (point_p)
201 signal_simple_error 200 signal_simple_error
202 ("can't move point-marker in a killed buffer", marker); 201 ("Can't move point-marker in a killed buffer", marker);
203 if (XMARKER (marker)->buffer) 202 if (XMARKER (marker)->buffer)
204 unchain_marker (marker); 203 unchain_marker (marker);
205 return marker; 204 return marker;
206 } 205 }
207 } 206 }
235 } 234 }
236 235
237 if (m->buffer != b) 236 if (m->buffer != b)
238 { 237 {
239 if (point_p) 238 if (point_p)
240 signal_simple_error ("can't change buffer of point-marker", marker); 239 signal_simple_error ("Can't change buffer of point-marker", marker);
241 if (m->buffer != 0) 240 if (m->buffer != 0)
242 unchain_marker (marker); 241 unchain_marker (marker);
243 m->buffer = b; 242 m->buffer = b;
244 marker_next (m) = BUF_MARKERS (b); 243 marker_next (m) = BUF_MARKERS (b);
245 marker_prev (m) = 0; 244 marker_prev (m) = 0;