emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/lread.c


From: Richard M. Stallman
Subject: [Emacs-diffs] Changes to emacs/src/lread.c
Date: Fri, 30 Dec 2005 04:54:57 +0000

Index: emacs/src/lread.c
diff -u emacs/src/lread.c:1.345 emacs/src/lread.c:1.346
--- emacs/src/lread.c:1.345     Wed Dec 28 03:44:28 2005
+++ emacs/src/lread.c   Fri Dec 30 04:54:57 2005
@@ -1318,7 +1318,18 @@
   int count = SPECPDL_INDEX ();
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   struct buffer *b = 0;
+  int bpos;
   int continue_reading_p;
+  /* Nonzero if reading an entire buffer.  */
+  int whole_buffer = 0;
+  /* 1 on the first time around.  */
+  int first_sexp = 1;
+
+  if (MARKERP (readcharfun))
+    {
+      if (NILP (start))
+       start = readcharfun;    
+    }
 
   if (BUFFERP (readcharfun))
     b = XBUFFER (readcharfun);
@@ -1344,7 +1355,6 @@
       if (b != 0 && NILP (b->name))
        error ("Reading from killed buffer");
 
-
       if (!NILP (start))
        {
          /* Switch to the buffer we are reading from.  */
@@ -1359,9 +1369,20 @@
 
          /* Set point and ZV around stuff to be read.  */
          Fgoto_char (start);
-         Fnarrow_to_region (make_number (BEGV), end);
+         if (!NILP (end))
+           Fnarrow_to_region (make_number (BEGV), end);
+
+         /* Just for cleanliness, convert END to a marker
+            if it is an integer.  */
+         if (INTEGERP (end))
+           end = Fpoint_max_marker ();
        }
 
+      /* On the first cycle, we can easily test here
+        whether we are reading the whole buffer.  */
+      if (b && first_sexp)
+       whole_buffer = (PT == BEG && ZV == Z);
+
       instream = stream;
     read_next:
       c = READCHAR;
@@ -1411,8 +1432,11 @@
 
       if (!NILP (start) && continue_reading_p)
        start = Fpoint_marker ();
+
+      /* Restore saved point and BEGV.  */
       unbind_to (count1, Qnil);
 
+      /* Now eval what we just read.  */
       val = (*evalfun) (val);
 
       if (printflag)
@@ -1423,11 +1447,12 @@
          else
            Fprint (val, Qnil);
        }
+
+      first_sexp = 0;
     }
 
   build_load_history (sourcename, 
-                     stream || (INTEGERP (start) && INTEGERP (end)
-                                && XINT (start) == BEG && XINT (end) == Z));
+                     stream || whole_buffer);
 
   UNGCPRO;
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]