[Top][All Lists]
[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;