(Fclrhash): Return TABLE.
[bpt/emacs.git] / src / marker.c
index d6029c7..4aa44ac 100644 (file)
@@ -1,11 +1,12 @@
 /* Markers: examining, setting and deleting.
-   Copyright (C) 1985, 1997, 1998, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1997, 1998, 2001, 2002, 2003, 2004,
+                 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
+the Free Software Foundation; either version 3, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -255,6 +256,7 @@ buf_charpos_to_bytepos (b, charpos)
 
 int
 verify_bytepos (charpos)
+     int charpos;
 {
   int below = 1;
   int below_byte = 1;
@@ -450,15 +452,19 @@ Returns nil if MARKER points into a dead buffer.  */)
   if (XMARKER (marker)->buffer)
     {
       XSETBUFFER (buf, XMARKER (marker)->buffer);
-      /* Return marker's buffer only if it is not dead.  */
-      if (!NILP (XBUFFER (buf)->name))
-       return buf;
+      /* If the buffer is dead, we're in trouble: the buffer pointer here
+        does not preserve the buffer from being GC'd (it's weak), so
+        markers have to be unlinked from their buffer as soon as the buffer
+        is killed.  */
+      eassert (!NILP (XBUFFER (buf)->name));
+      return buf;
     }
   return Qnil;
 }
 
 DEFUN ("marker-position", Fmarker_position, Smarker_position, 1, 1, 0,
-       doc: /* Return the position MARKER points at, as a character number.  */)
+       doc: /* Return the position MARKER points at, as a character number.
+Returns nil if MARKER points nowhere.  */)
      (marker)
      Lisp_Object marker;
 {
@@ -833,8 +839,7 @@ see `marker-insertion-type'.  */)
 {
   register Lisp_Object new;
 
-  if (! (INTEGERP (marker) || MARKERP (marker)))
-    marker = wrong_type_argument (Qinteger_or_marker_p, marker);
+  CHECK_TYPE (INTEGERP (marker) || MARKERP (marker), Qinteger_or_marker_p, marker);
 
   new = Fmake_marker ();
   Fset_marker (new, marker,
@@ -846,7 +851,7 @@ see `marker-insertion-type'.  */)
 DEFUN ("marker-insertion-type", Fmarker_insertion_type,
        Smarker_insertion_type, 1, 1, 0,
        doc: /* Return insertion type of MARKER: t if it stays after inserted text.
-nil means the marker stays before text inserted there.  */)
+The value nil means the marker stays before text inserted there.  */)
      (marker)
      register Lisp_Object marker;
 {