* doc/emacs/regs.texi (Bookmarks): Document `bookmark-default-file'.
[emacs.git] / src / lread.c
bloba6181b0cb8505ff88baff148b62e18b19c386ee0
1 /* Lisp parsing and input streams.
3 Copyright (C) 1985-1989, 1993-1995, 1997-2013 Free Software Foundation, Inc.
5 This file is part of GNU Emacs.
7 GNU Emacs is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
12 GNU Emacs is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
21 #include <config.h>
22 #include "sysstdio.h"
23 #include <sys/types.h>
24 #include <sys/stat.h>
25 #include <sys/file.h>
26 #include <errno.h>
27 #include <limits.h> /* For CHAR_BIT. */
28 #include <stat-time.h>
29 #include "lisp.h"
30 #include "intervals.h"
31 #include "character.h"
32 #include "buffer.h"
33 #include "charset.h"
34 #include "coding.h"
35 #include <epaths.h>
36 #include "commands.h"
37 #include "keyboard.h"
38 #include "frame.h"
39 #include "termhooks.h"
40 #include "blockinput.h"
42 #ifdef MSDOS
43 #include "msdos.h"
44 #endif
46 #ifdef HAVE_NS
47 #include "nsterm.h"
48 #endif
50 #include <unistd.h>
52 #ifdef HAVE_SETLOCALE
53 #include <locale.h>
54 #endif /* HAVE_SETLOCALE */
56 #include <fcntl.h>
58 #ifdef HAVE_FSEEKO
59 #define file_offset off_t
60 #define file_tell ftello
61 #else
62 #define file_offset long
63 #define file_tell ftell
64 #endif
66 /* Hash table read constants. */
67 static Lisp_Object Qhash_table, Qdata;
68 static Lisp_Object Qtest, Qsize;
69 static Lisp_Object Qweakness;
70 static Lisp_Object Qrehash_size;
71 static Lisp_Object Qrehash_threshold;
73 static Lisp_Object Qread_char, Qget_file_char, Qcurrent_load_list;
74 Lisp_Object Qstandard_input;
75 Lisp_Object Qvariable_documentation;
76 static Lisp_Object Qascii_character, Qload, Qload_file_name;
77 Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
78 static Lisp_Object Qinhibit_file_name_operation;
79 static Lisp_Object Qeval_buffer_list;
80 Lisp_Object Qlexical_binding;
81 static Lisp_Object Qfile_truename, Qdo_after_load_evaluation; /* ACM 2006/5/16 */
83 /* Used instead of Qget_file_char while loading *.elc files compiled
84 by Emacs 21 or older. */
85 static Lisp_Object Qget_emacs_mule_file_char;
87 static Lisp_Object Qload_force_doc_strings;
89 static Lisp_Object Qload_in_progress;
91 /* The association list of objects read with the #n=object form.
92 Each member of the list has the form (n . object), and is used to
93 look up the object for the corresponding #n# construct.
94 It must be set to nil before all top-level calls to read0. */
95 static Lisp_Object read_objects;
97 /* File for get_file_char to read from. Use by load. */
98 static FILE *instream;
100 /* For use within read-from-string (this reader is non-reentrant!!) */
101 static ptrdiff_t read_from_string_index;
102 static ptrdiff_t read_from_string_index_byte;
103 static ptrdiff_t read_from_string_limit;
105 /* Number of characters read in the current call to Fread or
106 Fread_from_string. */
107 static EMACS_INT readchar_count;
109 /* This contains the last string skipped with #@. */
110 static char *saved_doc_string;
111 /* Length of buffer allocated in saved_doc_string. */
112 static ptrdiff_t saved_doc_string_size;
113 /* Length of actual data in saved_doc_string. */
114 static ptrdiff_t saved_doc_string_length;
115 /* This is the file position that string came from. */
116 static file_offset saved_doc_string_position;
118 /* This contains the previous string skipped with #@.
119 We copy it from saved_doc_string when a new string
120 is put in saved_doc_string. */
121 static char *prev_saved_doc_string;
122 /* Length of buffer allocated in prev_saved_doc_string. */
123 static ptrdiff_t prev_saved_doc_string_size;
124 /* Length of actual data in prev_saved_doc_string. */
125 static ptrdiff_t prev_saved_doc_string_length;
126 /* This is the file position that string came from. */
127 static file_offset prev_saved_doc_string_position;
129 /* True means inside a new-style backquote
130 with no surrounding parentheses.
131 Fread initializes this to false, so we need not specbind it
132 or worry about what happens to it when there is an error. */
133 static bool new_backquote_flag;
134 static Lisp_Object Qold_style_backquotes;
136 /* A list of file names for files being loaded in Fload. Used to
137 check for recursive loads. */
139 static Lisp_Object Vloads_in_progress;
141 static int read_emacs_mule_char (int, int (*) (int, Lisp_Object),
142 Lisp_Object);
144 static void readevalloop (Lisp_Object, FILE *, Lisp_Object, bool,
145 Lisp_Object, Lisp_Object,
146 Lisp_Object, Lisp_Object);
148 /* Functions that read one byte from the current source READCHARFUN
149 or unreads one byte. If the integer argument C is -1, it returns
150 one read byte, or -1 when there's no more byte in the source. If C
151 is 0 or positive, it unreads C, and the return value is not
152 interesting. */
154 static int readbyte_for_lambda (int, Lisp_Object);
155 static int readbyte_from_file (int, Lisp_Object);
156 static int readbyte_from_string (int, Lisp_Object);
158 /* Handle unreading and rereading of characters.
159 Write READCHAR to read a character,
160 UNREAD(c) to unread c to be read again.
162 These macros correctly read/unread multibyte characters. */
164 #define READCHAR readchar (readcharfun, NULL)
165 #define UNREAD(c) unreadchar (readcharfun, c)
167 /* Same as READCHAR but set *MULTIBYTE to the multibyteness of the source. */
168 #define READCHAR_REPORT_MULTIBYTE(multibyte) readchar (readcharfun, multibyte)
170 /* When READCHARFUN is Qget_file_char, Qget_emacs_mule_file_char,
171 Qlambda, or a cons, we use this to keep an unread character because
172 a file stream can't handle multibyte-char unreading. The value -1
173 means that there's no unread character. */
174 static int unread_char;
176 static int
177 readchar (Lisp_Object readcharfun, bool *multibyte)
179 Lisp_Object tem;
180 register int c;
181 int (*readbyte) (int, Lisp_Object);
182 unsigned char buf[MAX_MULTIBYTE_LENGTH];
183 int i, len;
184 bool emacs_mule_encoding = 0;
186 if (multibyte)
187 *multibyte = 0;
189 readchar_count++;
191 if (BUFFERP (readcharfun))
193 register struct buffer *inbuffer = XBUFFER (readcharfun);
195 ptrdiff_t pt_byte = BUF_PT_BYTE (inbuffer);
197 if (! BUFFER_LIVE_P (inbuffer))
198 return -1;
200 if (pt_byte >= BUF_ZV_BYTE (inbuffer))
201 return -1;
203 if (! NILP (BVAR (inbuffer, enable_multibyte_characters)))
205 /* Fetch the character code from the buffer. */
206 unsigned char *p = BUF_BYTE_ADDRESS (inbuffer, pt_byte);
207 BUF_INC_POS (inbuffer, pt_byte);
208 c = STRING_CHAR (p);
209 if (multibyte)
210 *multibyte = 1;
212 else
214 c = BUF_FETCH_BYTE (inbuffer, pt_byte);
215 if (! ASCII_BYTE_P (c))
216 c = BYTE8_TO_CHAR (c);
217 pt_byte++;
219 SET_BUF_PT_BOTH (inbuffer, BUF_PT (inbuffer) + 1, pt_byte);
221 return c;
223 if (MARKERP (readcharfun))
225 register struct buffer *inbuffer = XMARKER (readcharfun)->buffer;
227 ptrdiff_t bytepos = marker_byte_position (readcharfun);
229 if (bytepos >= BUF_ZV_BYTE (inbuffer))
230 return -1;
232 if (! NILP (BVAR (inbuffer, enable_multibyte_characters)))
234 /* Fetch the character code from the buffer. */
235 unsigned char *p = BUF_BYTE_ADDRESS (inbuffer, bytepos);
236 BUF_INC_POS (inbuffer, bytepos);
237 c = STRING_CHAR (p);
238 if (multibyte)
239 *multibyte = 1;
241 else
243 c = BUF_FETCH_BYTE (inbuffer, bytepos);
244 if (! ASCII_BYTE_P (c))
245 c = BYTE8_TO_CHAR (c);
246 bytepos++;
249 XMARKER (readcharfun)->bytepos = bytepos;
250 XMARKER (readcharfun)->charpos++;
252 return c;
255 if (EQ (readcharfun, Qlambda))
257 readbyte = readbyte_for_lambda;
258 goto read_multibyte;
261 if (EQ (readcharfun, Qget_file_char))
263 readbyte = readbyte_from_file;
264 goto read_multibyte;
267 if (STRINGP (readcharfun))
269 if (read_from_string_index >= read_from_string_limit)
270 c = -1;
271 else if (STRING_MULTIBYTE (readcharfun))
273 if (multibyte)
274 *multibyte = 1;
275 FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, readcharfun,
276 read_from_string_index,
277 read_from_string_index_byte);
279 else
281 c = SREF (readcharfun, read_from_string_index_byte);
282 read_from_string_index++;
283 read_from_string_index_byte++;
285 return c;
288 if (CONSP (readcharfun))
290 /* This is the case that read_vector is reading from a unibyte
291 string that contains a byte sequence previously skipped
292 because of #@NUMBER. The car part of readcharfun is that
293 string, and the cdr part is a value of readcharfun given to
294 read_vector. */
295 readbyte = readbyte_from_string;
296 if (EQ (XCDR (readcharfun), Qget_emacs_mule_file_char))
297 emacs_mule_encoding = 1;
298 goto read_multibyte;
301 if (EQ (readcharfun, Qget_emacs_mule_file_char))
303 readbyte = readbyte_from_file;
304 emacs_mule_encoding = 1;
305 goto read_multibyte;
308 tem = call0 (readcharfun);
310 if (NILP (tem))
311 return -1;
312 return XINT (tem);
314 read_multibyte:
315 if (unread_char >= 0)
317 c = unread_char;
318 unread_char = -1;
319 return c;
321 c = (*readbyte) (-1, readcharfun);
322 if (c < 0)
323 return c;
324 if (multibyte)
325 *multibyte = 1;
326 if (ASCII_BYTE_P (c))
327 return c;
328 if (emacs_mule_encoding)
329 return read_emacs_mule_char (c, readbyte, readcharfun);
330 i = 0;
331 buf[i++] = c;
332 len = BYTES_BY_CHAR_HEAD (c);
333 while (i < len)
335 c = (*readbyte) (-1, readcharfun);
336 if (c < 0 || ! TRAILING_CODE_P (c))
338 while (--i > 1)
339 (*readbyte) (buf[i], readcharfun);
340 return BYTE8_TO_CHAR (buf[0]);
342 buf[i++] = c;
344 return STRING_CHAR (buf);
347 #define FROM_FILE_P(readcharfun) \
348 (EQ (readcharfun, Qget_file_char) \
349 || EQ (readcharfun, Qget_emacs_mule_file_char))
351 static void
352 skip_dyn_bytes (Lisp_Object readcharfun, ptrdiff_t n)
354 if (FROM_FILE_P (readcharfun))
356 block_input (); /* FIXME: Not sure if it's needed. */
357 fseek (instream, n, SEEK_CUR);
358 unblock_input ();
360 else
361 { /* We're not reading directly from a file. In that case, it's difficult
362 to reliably count bytes, since these are usually meant for the file's
363 encoding, whereas we're now typically in the internal encoding.
364 But luckily, skip_dyn_bytes is used to skip over a single
365 dynamic-docstring (or dynamic byte-code) which is always quoted such
366 that \037 is the final char. */
367 int c;
368 do {
369 c = READCHAR;
370 } while (c >= 0 && c != '\037');
374 static void
375 skip_dyn_eof (Lisp_Object readcharfun)
377 if (FROM_FILE_P (readcharfun))
379 block_input (); /* FIXME: Not sure if it's needed. */
380 fseek (instream, 0, SEEK_END);
381 unblock_input ();
383 else
384 while (READCHAR >= 0);
387 /* Unread the character C in the way appropriate for the stream READCHARFUN.
388 If the stream is a user function, call it with the char as argument. */
390 static void
391 unreadchar (Lisp_Object readcharfun, int c)
393 readchar_count--;
394 if (c == -1)
395 /* Don't back up the pointer if we're unreading the end-of-input mark,
396 since readchar didn't advance it when we read it. */
398 else if (BUFFERP (readcharfun))
400 struct buffer *b = XBUFFER (readcharfun);
401 ptrdiff_t charpos = BUF_PT (b);
402 ptrdiff_t bytepos = BUF_PT_BYTE (b);
404 if (! NILP (BVAR (b, enable_multibyte_characters)))
405 BUF_DEC_POS (b, bytepos);
406 else
407 bytepos--;
409 SET_BUF_PT_BOTH (b, charpos - 1, bytepos);
411 else if (MARKERP (readcharfun))
413 struct buffer *b = XMARKER (readcharfun)->buffer;
414 ptrdiff_t bytepos = XMARKER (readcharfun)->bytepos;
416 XMARKER (readcharfun)->charpos--;
417 if (! NILP (BVAR (b, enable_multibyte_characters)))
418 BUF_DEC_POS (b, bytepos);
419 else
420 bytepos--;
422 XMARKER (readcharfun)->bytepos = bytepos;
424 else if (STRINGP (readcharfun))
426 read_from_string_index--;
427 read_from_string_index_byte
428 = string_char_to_byte (readcharfun, read_from_string_index);
430 else if (CONSP (readcharfun))
432 unread_char = c;
434 else if (EQ (readcharfun, Qlambda))
436 unread_char = c;
438 else if (FROM_FILE_P (readcharfun))
440 unread_char = c;
442 else
443 call1 (readcharfun, make_number (c));
446 static int
447 readbyte_for_lambda (int c, Lisp_Object readcharfun)
449 return read_bytecode_char (c >= 0);
453 static int
454 readbyte_from_file (int c, Lisp_Object readcharfun)
456 if (c >= 0)
458 block_input ();
459 ungetc (c, instream);
460 unblock_input ();
461 return 0;
464 block_input ();
465 c = getc (instream);
467 /* Interrupted reads have been observed while reading over the network. */
468 while (c == EOF && ferror (instream) && errno == EINTR)
470 unblock_input ();
471 QUIT;
472 block_input ();
473 clearerr (instream);
474 c = getc (instream);
477 unblock_input ();
479 return (c == EOF ? -1 : c);
482 static int
483 readbyte_from_string (int c, Lisp_Object readcharfun)
485 Lisp_Object string = XCAR (readcharfun);
487 if (c >= 0)
489 read_from_string_index--;
490 read_from_string_index_byte
491 = string_char_to_byte (string, read_from_string_index);
494 if (read_from_string_index >= read_from_string_limit)
495 c = -1;
496 else
497 FETCH_STRING_CHAR_ADVANCE (c, string,
498 read_from_string_index,
499 read_from_string_index_byte);
500 return c;
504 /* Read one non-ASCII character from INSTREAM. The character is
505 encoded in `emacs-mule' and the first byte is already read in
506 C. */
508 static int
509 read_emacs_mule_char (int c, int (*readbyte) (int, Lisp_Object), Lisp_Object readcharfun)
511 /* Emacs-mule coding uses at most 4-byte for one character. */
512 unsigned char buf[4];
513 int len = emacs_mule_bytes[c];
514 struct charset *charset;
515 int i;
516 unsigned code;
518 if (len == 1)
519 /* C is not a valid leading-code of `emacs-mule'. */
520 return BYTE8_TO_CHAR (c);
522 i = 0;
523 buf[i++] = c;
524 while (i < len)
526 c = (*readbyte) (-1, readcharfun);
527 if (c < 0xA0)
529 while (--i > 1)
530 (*readbyte) (buf[i], readcharfun);
531 return BYTE8_TO_CHAR (buf[0]);
533 buf[i++] = c;
536 if (len == 2)
538 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
539 code = buf[1] & 0x7F;
541 else if (len == 3)
543 if (buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_11
544 || buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_12)
546 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
547 code = buf[2] & 0x7F;
549 else
551 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
552 code = ((buf[1] << 8) | buf[2]) & 0x7F7F;
555 else
557 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
558 code = ((buf[2] << 8) | buf[3]) & 0x7F7F;
560 c = DECODE_CHAR (charset, code);
561 if (c < 0)
562 Fsignal (Qinvalid_read_syntax,
563 list1 (build_string ("invalid multibyte form")));
564 return c;
568 static Lisp_Object read_internal_start (Lisp_Object, Lisp_Object,
569 Lisp_Object);
570 static Lisp_Object read0 (Lisp_Object);
571 static Lisp_Object read1 (Lisp_Object, int *, bool);
573 static Lisp_Object read_list (bool, Lisp_Object);
574 static Lisp_Object read_vector (Lisp_Object, bool);
576 static Lisp_Object substitute_object_recurse (Lisp_Object, Lisp_Object,
577 Lisp_Object);
578 static void substitute_object_in_subtree (Lisp_Object,
579 Lisp_Object);
580 static void substitute_in_interval (INTERVAL, Lisp_Object);
583 /* Get a character from the tty. */
585 /* Read input events until we get one that's acceptable for our purposes.
587 If NO_SWITCH_FRAME, switch-frame events are stashed
588 until we get a character we like, and then stuffed into
589 unread_switch_frame.
591 If ASCII_REQUIRED, check function key events to see
592 if the unmodified version of the symbol has a Qascii_character
593 property, and use that character, if present.
595 If ERROR_NONASCII, signal an error if the input we
596 get isn't an ASCII character with modifiers. If it's false but
597 ASCII_REQUIRED is true, just re-read until we get an ASCII
598 character.
600 If INPUT_METHOD, invoke the current input method
601 if the character warrants that.
603 If SECONDS is a number, wait that many seconds for input, and
604 return Qnil if no input arrives within that time. */
606 static Lisp_Object
607 read_filtered_event (bool no_switch_frame, bool ascii_required,
608 bool error_nonascii, bool input_method, Lisp_Object seconds)
610 Lisp_Object val, delayed_switch_frame;
611 struct timespec end_time;
613 #ifdef HAVE_WINDOW_SYSTEM
614 if (display_hourglass_p)
615 cancel_hourglass ();
616 #endif
618 delayed_switch_frame = Qnil;
620 /* Compute timeout. */
621 if (NUMBERP (seconds))
623 double duration = extract_float (seconds);
624 struct timespec wait_time = dtotimespec (duration);
625 end_time = timespec_add (current_timespec (), wait_time);
628 /* Read until we get an acceptable event. */
629 retry:
631 val = read_char (0, Qnil, (input_method ? Qnil : Qt), 0,
632 NUMBERP (seconds) ? &end_time : NULL);
633 while (INTEGERP (val) && XINT (val) == -2); /* wrong_kboard_jmpbuf */
635 if (BUFFERP (val))
636 goto retry;
638 /* `switch-frame' events are put off until after the next ASCII
639 character. This is better than signaling an error just because
640 the last characters were typed to a separate minibuffer frame,
641 for example. Eventually, some code which can deal with
642 switch-frame events will read it and process it. */
643 if (no_switch_frame
644 && EVENT_HAS_PARAMETERS (val)
645 && EQ (EVENT_HEAD_KIND (EVENT_HEAD (val)), Qswitch_frame))
647 delayed_switch_frame = val;
648 goto retry;
651 if (ascii_required && !(NUMBERP (seconds) && NILP (val)))
653 /* Convert certain symbols to their ASCII equivalents. */
654 if (SYMBOLP (val))
656 Lisp_Object tem, tem1;
657 tem = Fget (val, Qevent_symbol_element_mask);
658 if (!NILP (tem))
660 tem1 = Fget (Fcar (tem), Qascii_character);
661 /* Merge this symbol's modifier bits
662 with the ASCII equivalent of its basic code. */
663 if (!NILP (tem1))
664 XSETFASTINT (val, XINT (tem1) | XINT (Fcar (Fcdr (tem))));
668 /* If we don't have a character now, deal with it appropriately. */
669 if (!INTEGERP (val))
671 if (error_nonascii)
673 Vunread_command_events = list1 (val);
674 error ("Non-character input-event");
676 else
677 goto retry;
681 if (! NILP (delayed_switch_frame))
682 unread_switch_frame = delayed_switch_frame;
684 #if 0
686 #ifdef HAVE_WINDOW_SYSTEM
687 if (display_hourglass_p)
688 start_hourglass ();
689 #endif
691 #endif
693 return val;
696 DEFUN ("read-char", Fread_char, Sread_char, 0, 3, 0,
697 doc: /* Read a character from the command input (keyboard or macro).
698 It is returned as a number.
699 If the character has modifiers, they are resolved and reflected to the
700 character code if possible (e.g. C-SPC -> 0).
702 If the user generates an event which is not a character (i.e. a mouse
703 click or function key event), `read-char' signals an error. As an
704 exception, switch-frame events are put off until non-character events
705 can be read.
706 If you want to read non-character events, or ignore them, call
707 `read-event' or `read-char-exclusive' instead.
709 If the optional argument PROMPT is non-nil, display that as a prompt.
710 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
711 input method is turned on in the current buffer, that input method
712 is used for reading a character.
713 If the optional argument SECONDS is non-nil, it should be a number
714 specifying the maximum number of seconds to wait for input. If no
715 input arrives in that time, return nil. SECONDS may be a
716 floating-point value. */)
717 (Lisp_Object prompt, Lisp_Object inherit_input_method, Lisp_Object seconds)
719 Lisp_Object val;
721 if (! NILP (prompt))
722 message_with_string ("%s", prompt, 0);
723 val = read_filtered_event (1, 1, 1, ! NILP (inherit_input_method), seconds);
725 return (NILP (val) ? Qnil
726 : make_number (char_resolve_modifier_mask (XINT (val))));
729 DEFUN ("read-event", Fread_event, Sread_event, 0, 3, 0,
730 doc: /* Read an event object from the input stream.
731 If the optional argument PROMPT is non-nil, display that as a prompt.
732 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
733 input method is turned on in the current buffer, that input method
734 is used for reading a character.
735 If the optional argument SECONDS is non-nil, it should be a number
736 specifying the maximum number of seconds to wait for input. If no
737 input arrives in that time, return nil. SECONDS may be a
738 floating-point value. */)
739 (Lisp_Object prompt, Lisp_Object inherit_input_method, Lisp_Object seconds)
741 if (! NILP (prompt))
742 message_with_string ("%s", prompt, 0);
743 return read_filtered_event (0, 0, 0, ! NILP (inherit_input_method), seconds);
746 DEFUN ("read-char-exclusive", Fread_char_exclusive, Sread_char_exclusive, 0, 3, 0,
747 doc: /* Read a character from the command input (keyboard or macro).
748 It is returned as a number. Non-character events are ignored.
749 If the character has modifiers, they are resolved and reflected to the
750 character code if possible (e.g. C-SPC -> 0).
752 If the optional argument PROMPT is non-nil, display that as a prompt.
753 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
754 input method is turned on in the current buffer, that input method
755 is used for reading a character.
756 If the optional argument SECONDS is non-nil, it should be a number
757 specifying the maximum number of seconds to wait for input. If no
758 input arrives in that time, return nil. SECONDS may be a
759 floating-point value. */)
760 (Lisp_Object prompt, Lisp_Object inherit_input_method, Lisp_Object seconds)
762 Lisp_Object val;
764 if (! NILP (prompt))
765 message_with_string ("%s", prompt, 0);
767 val = read_filtered_event (1, 1, 0, ! NILP (inherit_input_method), seconds);
769 return (NILP (val) ? Qnil
770 : make_number (char_resolve_modifier_mask (XINT (val))));
773 DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0,
774 doc: /* Don't use this yourself. */)
775 (void)
777 register Lisp_Object val;
778 block_input ();
779 XSETINT (val, getc (instream));
780 unblock_input ();
781 return val;
787 /* Return true if the lisp code read using READCHARFUN defines a non-nil
788 `lexical-binding' file variable. After returning, the stream is
789 positioned following the first line, if it is a comment or #! line,
790 otherwise nothing is read. */
792 static bool
793 lisp_file_lexically_bound_p (Lisp_Object readcharfun)
795 int ch = READCHAR;
797 if (ch == '#')
799 ch = READCHAR;
800 if (ch != '!')
802 UNREAD (ch);
803 UNREAD ('#');
804 return 0;
806 while (ch != '\n' && ch != EOF)
807 ch = READCHAR;
808 if (ch == '\n') ch = READCHAR;
809 /* It is OK to leave the position after a #! line, since
810 that is what read1 does. */
813 if (ch != ';')
814 /* The first line isn't a comment, just give up. */
816 UNREAD (ch);
817 return 0;
819 else
820 /* Look for an appropriate file-variable in the first line. */
822 bool rv = 0;
823 enum {
824 NOMINAL, AFTER_FIRST_DASH, AFTER_ASTERIX
825 } beg_end_state = NOMINAL;
826 bool in_file_vars = 0;
828 #define UPDATE_BEG_END_STATE(ch) \
829 if (beg_end_state == NOMINAL) \
830 beg_end_state = (ch == '-' ? AFTER_FIRST_DASH : NOMINAL); \
831 else if (beg_end_state == AFTER_FIRST_DASH) \
832 beg_end_state = (ch == '*' ? AFTER_ASTERIX : NOMINAL); \
833 else if (beg_end_state == AFTER_ASTERIX) \
835 if (ch == '-') \
836 in_file_vars = !in_file_vars; \
837 beg_end_state = NOMINAL; \
840 /* Skip until we get to the file vars, if any. */
843 ch = READCHAR;
844 UPDATE_BEG_END_STATE (ch);
846 while (!in_file_vars && ch != '\n' && ch != EOF);
848 while (in_file_vars)
850 char var[100], val[100];
851 unsigned i;
853 ch = READCHAR;
855 /* Read a variable name. */
856 while (ch == ' ' || ch == '\t')
857 ch = READCHAR;
859 i = 0;
860 while (ch != ':' && ch != '\n' && ch != EOF && in_file_vars)
862 if (i < sizeof var - 1)
863 var[i++] = ch;
864 UPDATE_BEG_END_STATE (ch);
865 ch = READCHAR;
868 /* Stop scanning if no colon was found before end marker. */
869 if (!in_file_vars || ch == '\n' || ch == EOF)
870 break;
872 while (i > 0 && (var[i - 1] == ' ' || var[i - 1] == '\t'))
873 i--;
874 var[i] = '\0';
876 if (ch == ':')
878 /* Read a variable value. */
879 ch = READCHAR;
881 while (ch == ' ' || ch == '\t')
882 ch = READCHAR;
884 i = 0;
885 while (ch != ';' && ch != '\n' && ch != EOF && in_file_vars)
887 if (i < sizeof val - 1)
888 val[i++] = ch;
889 UPDATE_BEG_END_STATE (ch);
890 ch = READCHAR;
892 if (! in_file_vars)
893 /* The value was terminated by an end-marker, which remove. */
894 i -= 3;
895 while (i > 0 && (val[i - 1] == ' ' || val[i - 1] == '\t'))
896 i--;
897 val[i] = '\0';
899 if (strcmp (var, "lexical-binding") == 0)
900 /* This is it... */
902 rv = (strcmp (val, "nil") != 0);
903 break;
908 while (ch != '\n' && ch != EOF)
909 ch = READCHAR;
911 return rv;
915 /* Value is a version number of byte compiled code if the file
916 associated with file descriptor FD is a compiled Lisp file that's
917 safe to load. Only files compiled with Emacs are safe to load.
918 Files compiled with XEmacs can lead to a crash in Fbyte_code
919 because of an incompatible change in the byte compiler. */
921 static int
922 safe_to_load_version (int fd)
924 char buf[512];
925 int nbytes, i;
926 int version = 1;
928 /* Read the first few bytes from the file, and look for a line
929 specifying the byte compiler version used. */
930 nbytes = emacs_read (fd, buf, sizeof buf);
931 if (nbytes > 0)
933 /* Skip to the next newline, skipping over the initial `ELC'
934 with NUL bytes following it, but note the version. */
935 for (i = 0; i < nbytes && buf[i] != '\n'; ++i)
936 if (i == 4)
937 version = buf[i];
939 if (i >= nbytes
940 || fast_c_string_match_ignore_case (Vbytecomp_version_regexp,
941 buf + i, nbytes - i) < 0)
942 version = 0;
945 lseek (fd, 0, SEEK_SET);
946 return version;
950 /* Callback for record_unwind_protect. Restore the old load list OLD,
951 after loading a file successfully. */
953 static void
954 record_load_unwind (Lisp_Object old)
956 Vloads_in_progress = old;
959 /* This handler function is used via internal_condition_case_1. */
961 static Lisp_Object
962 load_error_handler (Lisp_Object data)
964 return Qnil;
967 static void
968 load_warn_old_style_backquotes (Lisp_Object file)
970 if (!NILP (Vold_style_backquotes))
972 Lisp_Object args[2];
973 args[0] = build_string ("Loading `%s': old-style backquotes detected!");
974 args[1] = file;
975 Fmessage (2, args);
979 DEFUN ("get-load-suffixes", Fget_load_suffixes, Sget_load_suffixes, 0, 0, 0,
980 doc: /* Return the suffixes that `load' should try if a suffix is \
981 required.
982 This uses the variables `load-suffixes' and `load-file-rep-suffixes'. */)
983 (void)
985 Lisp_Object lst = Qnil, suffixes = Vload_suffixes, suffix, ext;
986 while (CONSP (suffixes))
988 Lisp_Object exts = Vload_file_rep_suffixes;
989 suffix = XCAR (suffixes);
990 suffixes = XCDR (suffixes);
991 while (CONSP (exts))
993 ext = XCAR (exts);
994 exts = XCDR (exts);
995 lst = Fcons (concat2 (suffix, ext), lst);
998 return Fnreverse (lst);
1001 DEFUN ("load", Fload, Sload, 1, 5, 0,
1002 doc: /* Execute a file of Lisp code named FILE.
1003 First try FILE with `.elc' appended, then try with `.el',
1004 then try FILE unmodified (the exact suffixes in the exact order are
1005 determined by `load-suffixes'). Environment variable references in
1006 FILE are replaced with their values by calling `substitute-in-file-name'.
1007 This function searches the directories in `load-path'.
1009 If optional second arg NOERROR is non-nil,
1010 report no error if FILE doesn't exist.
1011 Print messages at start and end of loading unless
1012 optional third arg NOMESSAGE is non-nil (but `force-load-messages'
1013 overrides that).
1014 If optional fourth arg NOSUFFIX is non-nil, don't try adding
1015 suffixes `.elc' or `.el' to the specified name FILE.
1016 If optional fifth arg MUST-SUFFIX is non-nil, insist on
1017 the suffix `.elc' or `.el'; don't accept just FILE unless
1018 it ends in one of those suffixes or includes a directory name.
1020 If NOSUFFIX is nil, then if a file could not be found, try looking for
1021 a different representation of the file by adding non-empty suffixes to
1022 its name, before trying another file. Emacs uses this feature to find
1023 compressed versions of files when Auto Compression mode is enabled.
1024 If NOSUFFIX is non-nil, disable this feature.
1026 The suffixes that this function tries out, when NOSUFFIX is nil, are
1027 given by the return value of `get-load-suffixes' and the values listed
1028 in `load-file-rep-suffixes'. If MUST-SUFFIX is non-nil, only the
1029 return value of `get-load-suffixes' is used, i.e. the file name is
1030 required to have a non-empty suffix.
1032 When searching suffixes, this function normally stops at the first
1033 one that exists. If the option `load-prefer-newer' is non-nil,
1034 however, it tries all suffixes, and uses whichever file is the newest.
1036 Loading a file records its definitions, and its `provide' and
1037 `require' calls, in an element of `load-history' whose
1038 car is the file name loaded. See `load-history'.
1040 While the file is in the process of being loaded, the variable
1041 `load-in-progress' is non-nil and the variable `load-file-name'
1042 is bound to the file's name.
1044 Return t if the file exists and loads successfully. */)
1045 (Lisp_Object file, Lisp_Object noerror, Lisp_Object nomessage,
1046 Lisp_Object nosuffix, Lisp_Object must_suffix)
1048 FILE *stream;
1049 int fd;
1050 int fd_index;
1051 ptrdiff_t count = SPECPDL_INDEX ();
1052 struct gcpro gcpro1, gcpro2, gcpro3;
1053 Lisp_Object found, efound, hist_file_name;
1054 /* True means we printed the ".el is newer" message. */
1055 bool newer = 0;
1056 /* True means we are loading a compiled file. */
1057 bool compiled = 0;
1058 Lisp_Object handler;
1059 bool safe_p = 1;
1060 const char *fmode = "r";
1061 int version;
1063 #ifdef DOS_NT
1064 fmode = "rt";
1065 #endif /* DOS_NT */
1067 CHECK_STRING (file);
1069 /* If file name is magic, call the handler. */
1070 /* This shouldn't be necessary any more now that `openp' handles it right.
1071 handler = Ffind_file_name_handler (file, Qload);
1072 if (!NILP (handler))
1073 return call5 (handler, Qload, file, noerror, nomessage, nosuffix); */
1075 /* Do this after the handler to avoid
1076 the need to gcpro noerror, nomessage and nosuffix.
1077 (Below here, we care only whether they are nil or not.)
1078 The presence of this call is the result of a historical accident:
1079 it used to be in every file-operation and when it got removed
1080 everywhere, it accidentally stayed here. Since then, enough people
1081 supposedly have things like (load "$PROJECT/foo.el") in their .emacs
1082 that it seemed risky to remove. */
1083 if (! NILP (noerror))
1085 file = internal_condition_case_1 (Fsubstitute_in_file_name, file,
1086 Qt, load_error_handler);
1087 if (NILP (file))
1088 return Qnil;
1090 else
1091 file = Fsubstitute_in_file_name (file);
1093 /* Avoid weird lossage with null string as arg,
1094 since it would try to load a directory as a Lisp file. */
1095 if (SCHARS (file) == 0)
1097 fd = -1;
1098 errno = ENOENT;
1100 else
1102 Lisp_Object suffixes;
1103 found = Qnil;
1104 GCPRO2 (file, found);
1106 if (! NILP (must_suffix))
1108 /* Don't insist on adding a suffix if FILE already ends with one. */
1109 ptrdiff_t size = SBYTES (file);
1110 if (size > 3
1111 && !strcmp (SSDATA (file) + size - 3, ".el"))
1112 must_suffix = Qnil;
1113 else if (size > 4
1114 && !strcmp (SSDATA (file) + size - 4, ".elc"))
1115 must_suffix = Qnil;
1116 /* Don't insist on adding a suffix
1117 if the argument includes a directory name. */
1118 else if (! NILP (Ffile_name_directory (file)))
1119 must_suffix = Qnil;
1122 if (!NILP (nosuffix))
1123 suffixes = Qnil;
1124 else
1126 suffixes = Fget_load_suffixes ();
1127 if (NILP (must_suffix))
1129 Lisp_Object arg[2];
1130 arg[0] = suffixes;
1131 arg[1] = Vload_file_rep_suffixes;
1132 suffixes = Fappend (2, arg);
1136 fd = openp (Vload_path, file, suffixes, &found, Qnil, load_prefer_newer);
1137 UNGCPRO;
1140 if (fd == -1)
1142 if (NILP (noerror))
1143 report_file_error ("Cannot open load file", file);
1144 return Qnil;
1147 /* Tell startup.el whether or not we found the user's init file. */
1148 if (EQ (Qt, Vuser_init_file))
1149 Vuser_init_file = found;
1151 /* If FD is -2, that means openp found a magic file. */
1152 if (fd == -2)
1154 if (NILP (Fequal (found, file)))
1155 /* If FOUND is a different file name from FILE,
1156 find its handler even if we have already inhibited
1157 the `load' operation on FILE. */
1158 handler = Ffind_file_name_handler (found, Qt);
1159 else
1160 handler = Ffind_file_name_handler (found, Qload);
1161 if (! NILP (handler))
1162 return call5 (handler, Qload, found, noerror, nomessage, Qt);
1163 #ifdef DOS_NT
1164 /* Tramp has to deal with semi-broken packages that prepend
1165 drive letters to remote files. For that reason, Tramp
1166 catches file operations that test for file existence, which
1167 makes openp think X:/foo.elc files are remote. However,
1168 Tramp does not catch `load' operations for such files, so we
1169 end up with a nil as the `load' handler above. If we would
1170 continue with fd = -2, we will behave wrongly, and in
1171 particular try reading a .elc file in the "rt" mode instead
1172 of "rb". See bug #9311 for the results. To work around
1173 this, we try to open the file locally, and go with that if it
1174 succeeds. */
1175 fd = emacs_open (SSDATA (ENCODE_FILE (found)), O_RDONLY, 0);
1176 if (fd == -1)
1177 fd = -2;
1178 #endif
1181 if (fd < 0)
1183 /* Pacify older GCC with --enable-gcc-warnings. */
1184 IF_LINT (fd_index = 0);
1186 else
1188 fd_index = SPECPDL_INDEX ();
1189 record_unwind_protect_int (close_file_unwind, fd);
1192 /* Check if we're stuck in a recursive load cycle.
1194 2000-09-21: It's not possible to just check for the file loaded
1195 being a member of Vloads_in_progress. This fails because of the
1196 way the byte compiler currently works; `provide's are not
1197 evaluated, see font-lock.el/jit-lock.el as an example. This
1198 leads to a certain amount of ``normal'' recursion.
1200 Also, just loading a file recursively is not always an error in
1201 the general case; the second load may do something different. */
1203 int load_count = 0;
1204 Lisp_Object tem;
1205 for (tem = Vloads_in_progress; CONSP (tem); tem = XCDR (tem))
1206 if (!NILP (Fequal (found, XCAR (tem))) && (++load_count > 3))
1207 signal_error ("Recursive load", Fcons (found, Vloads_in_progress));
1208 record_unwind_protect (record_load_unwind, Vloads_in_progress);
1209 Vloads_in_progress = Fcons (found, Vloads_in_progress);
1212 /* All loads are by default dynamic, unless the file itself specifies
1213 otherwise using a file-variable in the first line. This is bound here
1214 so that it takes effect whether or not we use
1215 Vload_source_file_function. */
1216 specbind (Qlexical_binding, Qnil);
1218 /* Get the name for load-history. */
1219 hist_file_name = (! NILP (Vpurify_flag)
1220 ? concat2 (Ffile_name_directory (file),
1221 Ffile_name_nondirectory (found))
1222 : found) ;
1224 version = -1;
1226 /* Check for the presence of old-style quotes and warn about them. */
1227 specbind (Qold_style_backquotes, Qnil);
1228 record_unwind_protect (load_warn_old_style_backquotes, file);
1230 if (!memcmp (SDATA (found) + SBYTES (found) - 4, ".elc", 4)
1231 || (fd >= 0 && (version = safe_to_load_version (fd)) > 0))
1232 /* Load .elc files directly, but not when they are
1233 remote and have no handler! */
1235 if (fd != -2)
1237 struct stat s1, s2;
1238 int result;
1240 GCPRO3 (file, found, hist_file_name);
1242 if (version < 0
1243 && ! (version = safe_to_load_version (fd)))
1245 safe_p = 0;
1246 if (!load_dangerous_libraries)
1247 error ("File `%s' was not compiled in Emacs", SDATA (found));
1248 else if (!NILP (nomessage) && !force_load_messages)
1249 message_with_string ("File `%s' not compiled in Emacs", found, 1);
1252 compiled = 1;
1254 efound = ENCODE_FILE (found);
1256 #ifdef DOS_NT
1257 fmode = "rb";
1258 #endif /* DOS_NT */
1260 /* openp already checked for newness, no point doing it again.
1261 FIXME would be nice to get a message when openp
1262 ignores suffix order due to load_prefer_newer. */
1263 if (!load_prefer_newer)
1265 result = stat (SSDATA (efound), &s1);
1266 if (result == 0)
1268 SSET (efound, SBYTES (efound) - 1, 0);
1269 result = stat (SSDATA (efound), &s2);
1270 SSET (efound, SBYTES (efound) - 1, 'c');
1273 if (result == 0
1274 && timespec_cmp (get_stat_mtime (&s1), get_stat_mtime (&s2)) < 0)
1276 /* Make the progress messages mention that source is newer. */
1277 newer = 1;
1279 /* If we won't print another message, mention this anyway. */
1280 if (!NILP (nomessage) && !force_load_messages)
1282 Lisp_Object msg_file;
1283 msg_file = Fsubstring (found, make_number (0), make_number (-1));
1284 message_with_string ("Source file `%s' newer than byte-compiled file",
1285 msg_file, 1);
1288 } /* !load_prefer_newer */
1289 UNGCPRO;
1292 else
1294 /* We are loading a source file (*.el). */
1295 if (!NILP (Vload_source_file_function))
1297 Lisp_Object val;
1299 if (fd >= 0)
1301 emacs_close (fd);
1302 clear_unwind_protect (fd_index);
1304 val = call4 (Vload_source_file_function, found, hist_file_name,
1305 NILP (noerror) ? Qnil : Qt,
1306 (NILP (nomessage) || force_load_messages) ? Qnil : Qt);
1307 return unbind_to (count, val);
1311 GCPRO3 (file, found, hist_file_name);
1313 if (fd < 0)
1315 /* We somehow got here with fd == -2, meaning the file is deemed
1316 to be remote. Don't even try to reopen the file locally;
1317 just force a failure. */
1318 stream = NULL;
1319 errno = EINVAL;
1321 else
1323 #ifdef WINDOWSNT
1324 emacs_close (fd);
1325 clear_unwind_protect (fd_index);
1326 efound = ENCODE_FILE (found);
1327 stream = emacs_fopen (SSDATA (efound), fmode);
1328 #else
1329 stream = fdopen (fd, fmode);
1330 #endif
1332 if (! stream)
1333 report_file_error ("Opening stdio stream", file);
1334 set_unwind_protect_ptr (fd_index, fclose_unwind, stream);
1336 if (! NILP (Vpurify_flag))
1337 Vpreloaded_file_list = Fcons (Fpurecopy (file), Vpreloaded_file_list);
1339 if (NILP (nomessage) || force_load_messages)
1341 if (!safe_p)
1342 message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...",
1343 file, 1);
1344 else if (!compiled)
1345 message_with_string ("Loading %s (source)...", file, 1);
1346 else if (newer)
1347 message_with_string ("Loading %s (compiled; note, source file is newer)...",
1348 file, 1);
1349 else /* The typical case; compiled file newer than source file. */
1350 message_with_string ("Loading %s...", file, 1);
1353 specbind (Qload_file_name, found);
1354 specbind (Qinhibit_file_name_operation, Qnil);
1355 specbind (Qload_in_progress, Qt);
1357 instream = stream;
1358 if (lisp_file_lexically_bound_p (Qget_file_char))
1359 Fset (Qlexical_binding, Qt);
1361 if (! version || version >= 22)
1362 readevalloop (Qget_file_char, stream, hist_file_name,
1363 0, Qnil, Qnil, Qnil, Qnil);
1364 else
1366 /* We can't handle a file which was compiled with
1367 byte-compile-dynamic by older version of Emacs. */
1368 specbind (Qload_force_doc_strings, Qt);
1369 readevalloop (Qget_emacs_mule_file_char, stream, hist_file_name,
1370 0, Qnil, Qnil, Qnil, Qnil);
1372 unbind_to (count, Qnil);
1374 /* Run any eval-after-load forms for this file. */
1375 if (!NILP (Ffboundp (Qdo_after_load_evaluation)))
1376 call1 (Qdo_after_load_evaluation, hist_file_name) ;
1378 UNGCPRO;
1380 xfree (saved_doc_string);
1381 saved_doc_string = 0;
1382 saved_doc_string_size = 0;
1384 xfree (prev_saved_doc_string);
1385 prev_saved_doc_string = 0;
1386 prev_saved_doc_string_size = 0;
1388 if (!noninteractive && (NILP (nomessage) || force_load_messages))
1390 if (!safe_p)
1391 message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...done",
1392 file, 1);
1393 else if (!compiled)
1394 message_with_string ("Loading %s (source)...done", file, 1);
1395 else if (newer)
1396 message_with_string ("Loading %s (compiled; note, source file is newer)...done",
1397 file, 1);
1398 else /* The typical case; compiled file newer than source file. */
1399 message_with_string ("Loading %s...done", file, 1);
1402 return Qt;
1405 static bool
1406 complete_filename_p (Lisp_Object pathname)
1408 const unsigned char *s = SDATA (pathname);
1409 return (IS_DIRECTORY_SEP (s[0])
1410 || (SCHARS (pathname) > 2
1411 && IS_DEVICE_SEP (s[1]) && IS_DIRECTORY_SEP (s[2])));
1414 DEFUN ("locate-file-internal", Flocate_file_internal, Slocate_file_internal, 2, 4, 0,
1415 doc: /* Search for FILENAME through PATH.
1416 Returns the file's name in absolute form, or nil if not found.
1417 If SUFFIXES is non-nil, it should be a list of suffixes to append to
1418 file name when searching.
1419 If non-nil, PREDICATE is used instead of `file-readable-p'.
1420 PREDICATE can also be an integer to pass to the faccessat(2) function,
1421 in which case file-name-handlers are ignored.
1422 This function will normally skip directories, so if you want it to find
1423 directories, make sure the PREDICATE function returns `dir-ok' for them. */)
1424 (Lisp_Object filename, Lisp_Object path, Lisp_Object suffixes, Lisp_Object predicate)
1426 Lisp_Object file;
1427 int fd = openp (path, filename, suffixes, &file, predicate, false);
1428 if (NILP (predicate) && fd >= 0)
1429 emacs_close (fd);
1430 return file;
1433 static Lisp_Object Qdir_ok;
1435 /* Search for a file whose name is STR, looking in directories
1436 in the Lisp list PATH, and trying suffixes from SUFFIX.
1437 On success, return a file descriptor (or 1 or -2 as described below).
1438 On failure, return -1 and set errno.
1440 SUFFIXES is a list of strings containing possible suffixes.
1441 The empty suffix is automatically added if the list is empty.
1443 PREDICATE non-nil means don't open the files,
1444 just look for one that satisfies the predicate. In this case,
1445 return 1 on success. The predicate can be a lisp function or
1446 an integer to pass to `access' (in which case file-name-handlers
1447 are ignored).
1449 If STOREPTR is nonzero, it points to a slot where the name of
1450 the file actually found should be stored as a Lisp string.
1451 nil is stored there on failure.
1453 If the file we find is remote, return -2
1454 but store the found remote file name in *STOREPTR.
1456 If NEWER is true, try all SUFFIXes and return the result for the
1457 newest file that exists. Does not apply to remote files,
1458 or if PREDICATE is specified. */
1461 openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes,
1462 Lisp_Object *storeptr, Lisp_Object predicate, bool newer)
1464 ptrdiff_t fn_size = 100;
1465 char buf[100];
1466 char *fn = buf;
1467 bool absolute;
1468 ptrdiff_t want_length;
1469 Lisp_Object filename;
1470 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6, gcpro7;
1471 Lisp_Object string, tail, encoded_fn, save_string;
1472 ptrdiff_t max_suffix_len = 0;
1473 int last_errno = ENOENT;
1474 int save_fd = -1;
1476 /* The last-modified time of the newest matching file found.
1477 Initialize it to something less than all valid timestamps. */
1478 struct timespec save_mtime = make_timespec (TYPE_MINIMUM (time_t), -1);
1480 CHECK_STRING (str);
1482 for (tail = suffixes; CONSP (tail); tail = XCDR (tail))
1484 CHECK_STRING_CAR (tail);
1485 max_suffix_len = max (max_suffix_len,
1486 SBYTES (XCAR (tail)));
1489 string = filename = encoded_fn = save_string = Qnil;
1490 GCPRO7 (str, string, save_string, filename, path, suffixes, encoded_fn);
1492 if (storeptr)
1493 *storeptr = Qnil;
1495 absolute = complete_filename_p (str);
1497 for (; CONSP (path); path = XCDR (path))
1499 filename = Fexpand_file_name (str, XCAR (path));
1500 if (!complete_filename_p (filename))
1501 /* If there are non-absolute elts in PATH (eg "."). */
1502 /* Of course, this could conceivably lose if luser sets
1503 default-directory to be something non-absolute... */
1505 filename = Fexpand_file_name (filename, BVAR (current_buffer, directory));
1506 if (!complete_filename_p (filename))
1507 /* Give up on this path element! */
1508 continue;
1511 /* Calculate maximum length of any filename made from
1512 this path element/specified file name and any possible suffix. */
1513 want_length = max_suffix_len + SBYTES (filename);
1514 if (fn_size <= want_length)
1515 fn = alloca (fn_size = 100 + want_length);
1517 /* Loop over suffixes. */
1518 for (tail = NILP (suffixes) ? list1 (empty_unibyte_string) : suffixes;
1519 CONSP (tail); tail = XCDR (tail))
1521 Lisp_Object suffix = XCAR (tail);
1522 ptrdiff_t fnlen, lsuffix = SBYTES (suffix);
1523 Lisp_Object handler;
1525 /* Concatenate path element/specified name with the suffix.
1526 If the directory starts with /:, remove that. */
1527 int prefixlen = ((SCHARS (filename) > 2
1528 && SREF (filename, 0) == '/'
1529 && SREF (filename, 1) == ':')
1530 ? 2 : 0);
1531 fnlen = SBYTES (filename) - prefixlen;
1532 memcpy (fn, SDATA (filename) + prefixlen, fnlen);
1533 memcpy (fn + fnlen, SDATA (suffix), lsuffix + 1);
1534 fnlen += lsuffix;
1535 /* Check that the file exists and is not a directory. */
1536 /* We used to only check for handlers on non-absolute file names:
1537 if (absolute)
1538 handler = Qnil;
1539 else
1540 handler = Ffind_file_name_handler (filename, Qfile_exists_p);
1541 It's not clear why that was the case and it breaks things like
1542 (load "/bar.el") where the file is actually "/bar.el.gz". */
1543 /* make_string has its own ideas on when to return a unibyte
1544 string and when a multibyte string, but we know better.
1545 We must have a unibyte string when dumping, since
1546 file-name encoding is shaky at best at that time, and in
1547 particular default-file-name-coding-system is reset
1548 several times during loadup. We therefore don't want to
1549 encode the file before passing it to file I/O library
1550 functions. */
1551 if (!STRING_MULTIBYTE (filename) && !STRING_MULTIBYTE (suffix))
1552 string = make_unibyte_string (fn, fnlen);
1553 else
1554 string = make_string (fn, fnlen);
1555 handler = Ffind_file_name_handler (string, Qfile_exists_p);
1556 if ((!NILP (handler) || !NILP (predicate)) && !NATNUMP (predicate))
1558 bool exists;
1559 if (NILP (predicate))
1560 exists = !NILP (Ffile_readable_p (string));
1561 else
1563 Lisp_Object tmp = call1 (predicate, string);
1564 if (NILP (tmp))
1565 exists = false;
1566 else if (EQ (tmp, Qdir_ok)
1567 || NILP (Ffile_directory_p (string)))
1568 exists = true;
1569 else
1571 exists = false;
1572 last_errno = EISDIR;
1576 if (exists)
1578 /* We succeeded; return this descriptor and filename. */
1579 if (storeptr)
1580 *storeptr = string;
1581 UNGCPRO;
1582 return -2;
1585 else
1587 int fd;
1588 const char *pfn;
1589 struct stat st;
1591 encoded_fn = ENCODE_FILE (string);
1592 pfn = SSDATA (encoded_fn);
1594 /* Check that we can access or open it. */
1595 if (NATNUMP (predicate))
1597 fd = -1;
1598 if (INT_MAX < XFASTINT (predicate))
1599 last_errno = EINVAL;
1600 else if (faccessat (AT_FDCWD, pfn, XFASTINT (predicate),
1601 AT_EACCESS)
1602 == 0)
1604 if (file_directory_p (pfn))
1605 last_errno = EISDIR;
1606 else
1607 fd = 1;
1610 else
1612 fd = emacs_open (pfn, O_RDONLY, 0);
1613 if (fd < 0)
1615 if (errno != ENOENT)
1616 last_errno = errno;
1618 else
1620 int err = (fstat (fd, &st) != 0 ? errno
1621 : S_ISDIR (st.st_mode) ? EISDIR : 0);
1622 if (err)
1624 last_errno = err;
1625 emacs_close (fd);
1626 fd = -1;
1631 if (fd >= 0)
1633 if (newer && !NATNUMP (predicate))
1635 struct timespec mtime = get_stat_mtime (&st);
1637 if (timespec_cmp (mtime, save_mtime) <= 0)
1638 emacs_close (fd);
1639 else
1641 if (0 <= save_fd)
1642 emacs_close (save_fd);
1643 save_fd = fd;
1644 save_mtime = mtime;
1645 save_string = string;
1648 else
1650 /* We succeeded; return this descriptor and filename. */
1651 if (storeptr)
1652 *storeptr = string;
1653 UNGCPRO;
1654 return fd;
1658 /* No more suffixes. Return the newest. */
1659 if (0 <= save_fd && ! CONSP (XCDR (tail)))
1661 if (storeptr)
1662 *storeptr = save_string;
1663 UNGCPRO;
1664 return save_fd;
1668 if (absolute)
1669 break;
1672 UNGCPRO;
1673 errno = last_errno;
1674 return -1;
1678 /* Merge the list we've accumulated of globals from the current input source
1679 into the load_history variable. The details depend on whether
1680 the source has an associated file name or not.
1682 FILENAME is the file name that we are loading from.
1684 ENTIRE is true if loading that entire file, false if evaluating
1685 part of it. */
1687 static void
1688 build_load_history (Lisp_Object filename, bool entire)
1690 Lisp_Object tail, prev, newelt;
1691 Lisp_Object tem, tem2;
1692 bool foundit = 0;
1694 tail = Vload_history;
1695 prev = Qnil;
1697 while (CONSP (tail))
1699 tem = XCAR (tail);
1701 /* Find the feature's previous assoc list... */
1702 if (!NILP (Fequal (filename, Fcar (tem))))
1704 foundit = 1;
1706 /* If we're loading the entire file, remove old data. */
1707 if (entire)
1709 if (NILP (prev))
1710 Vload_history = XCDR (tail);
1711 else
1712 Fsetcdr (prev, XCDR (tail));
1715 /* Otherwise, cons on new symbols that are not already members. */
1716 else
1718 tem2 = Vcurrent_load_list;
1720 while (CONSP (tem2))
1722 newelt = XCAR (tem2);
1724 if (NILP (Fmember (newelt, tem)))
1725 Fsetcar (tail, Fcons (XCAR (tem),
1726 Fcons (newelt, XCDR (tem))));
1728 tem2 = XCDR (tem2);
1729 QUIT;
1733 else
1734 prev = tail;
1735 tail = XCDR (tail);
1736 QUIT;
1739 /* If we're loading an entire file, cons the new assoc onto the
1740 front of load-history, the most-recently-loaded position. Also
1741 do this if we didn't find an existing member for the file. */
1742 if (entire || !foundit)
1743 Vload_history = Fcons (Fnreverse (Vcurrent_load_list),
1744 Vload_history);
1747 static void
1748 readevalloop_1 (int old)
1750 load_convert_to_unibyte = old;
1753 /* Signal an `end-of-file' error, if possible with file name
1754 information. */
1756 static _Noreturn void
1757 end_of_file_error (void)
1759 if (STRINGP (Vload_file_name))
1760 xsignal1 (Qend_of_file, Vload_file_name);
1762 xsignal0 (Qend_of_file);
1765 /* UNIBYTE specifies how to set load_convert_to_unibyte
1766 for this invocation.
1767 READFUN, if non-nil, is used instead of `read'.
1769 START, END specify region to read in current buffer (from eval-region).
1770 If the input is not from a buffer, they must be nil. */
1772 static void
1773 readevalloop (Lisp_Object readcharfun,
1774 FILE *stream,
1775 Lisp_Object sourcename,
1776 bool printflag,
1777 Lisp_Object unibyte, Lisp_Object readfun,
1778 Lisp_Object start, Lisp_Object end)
1780 register int c;
1781 register Lisp_Object val;
1782 ptrdiff_t count = SPECPDL_INDEX ();
1783 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1784 struct buffer *b = 0;
1785 bool continue_reading_p;
1786 Lisp_Object lex_bound;
1787 /* True if reading an entire buffer. */
1788 bool whole_buffer = 0;
1789 /* True on the first time around. */
1790 bool first_sexp = 1;
1791 Lisp_Object macroexpand = intern ("internal-macroexpand-for-load");
1793 if (NILP (Ffboundp (macroexpand))
1794 /* Don't macroexpand in .elc files, since it should have been done
1795 already. We actually don't know whether we're in a .elc file or not,
1796 so we use circumstantial evidence: .el files normally go through
1797 Vload_source_file_function -> load-with-code-conversion
1798 -> eval-buffer. */
1799 || EQ (readcharfun, Qget_file_char)
1800 || EQ (readcharfun, Qget_emacs_mule_file_char))
1801 macroexpand = Qnil;
1803 if (MARKERP (readcharfun))
1805 if (NILP (start))
1806 start = readcharfun;
1809 if (BUFFERP (readcharfun))
1810 b = XBUFFER (readcharfun);
1811 else if (MARKERP (readcharfun))
1812 b = XMARKER (readcharfun)->buffer;
1814 /* We assume START is nil when input is not from a buffer. */
1815 if (! NILP (start) && !b)
1816 emacs_abort ();
1818 specbind (Qstandard_input, readcharfun); /* GCPROs readcharfun. */
1819 specbind (Qcurrent_load_list, Qnil);
1820 record_unwind_protect_int (readevalloop_1, load_convert_to_unibyte);
1821 load_convert_to_unibyte = !NILP (unibyte);
1823 /* If lexical binding is active (either because it was specified in
1824 the file's header, or via a buffer-local variable), create an empty
1825 lexical environment, otherwise, turn off lexical binding. */
1826 lex_bound = find_symbol_value (Qlexical_binding);
1827 specbind (Qinternal_interpreter_environment,
1828 (NILP (lex_bound) || EQ (lex_bound, Qunbound)
1829 ? Qnil : list1 (Qt)));
1831 GCPRO4 (sourcename, readfun, start, end);
1833 /* Try to ensure sourcename is a truename, except whilst preloading. */
1834 if (NILP (Vpurify_flag)
1835 && !NILP (sourcename) && !NILP (Ffile_name_absolute_p (sourcename))
1836 && !NILP (Ffboundp (Qfile_truename)))
1837 sourcename = call1 (Qfile_truename, sourcename) ;
1839 LOADHIST_ATTACH (sourcename);
1841 continue_reading_p = 1;
1842 while (continue_reading_p)
1844 ptrdiff_t count1 = SPECPDL_INDEX ();
1846 if (b != 0 && !BUFFER_LIVE_P (b))
1847 error ("Reading from killed buffer");
1849 if (!NILP (start))
1851 /* Switch to the buffer we are reading from. */
1852 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1853 set_buffer_internal (b);
1855 /* Save point in it. */
1856 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1857 /* Save ZV in it. */
1858 record_unwind_protect (save_restriction_restore, save_restriction_save ());
1859 /* Those get unbound after we read one expression. */
1861 /* Set point and ZV around stuff to be read. */
1862 Fgoto_char (start);
1863 if (!NILP (end))
1864 Fnarrow_to_region (make_number (BEGV), end);
1866 /* Just for cleanliness, convert END to a marker
1867 if it is an integer. */
1868 if (INTEGERP (end))
1869 end = Fpoint_max_marker ();
1872 /* On the first cycle, we can easily test here
1873 whether we are reading the whole buffer. */
1874 if (b && first_sexp)
1875 whole_buffer = (PT == BEG && ZV == Z);
1877 instream = stream;
1878 read_next:
1879 c = READCHAR;
1880 if (c == ';')
1882 while ((c = READCHAR) != '\n' && c != -1);
1883 goto read_next;
1885 if (c < 0)
1887 unbind_to (count1, Qnil);
1888 break;
1891 /* Ignore whitespace here, so we can detect eof. */
1892 if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r'
1893 || c == 0xa0) /* NBSP */
1894 goto read_next;
1896 if (!NILP (Vpurify_flag) && c == '(')
1898 val = read_list (0, readcharfun);
1900 else
1902 UNREAD (c);
1903 read_objects = Qnil;
1904 if (!NILP (readfun))
1906 val = call1 (readfun, readcharfun);
1908 /* If READCHARFUN has set point to ZV, we should
1909 stop reading, even if the form read sets point
1910 to a different value when evaluated. */
1911 if (BUFFERP (readcharfun))
1913 struct buffer *buf = XBUFFER (readcharfun);
1914 if (BUF_PT (buf) == BUF_ZV (buf))
1915 continue_reading_p = 0;
1918 else if (! NILP (Vload_read_function))
1919 val = call1 (Vload_read_function, readcharfun);
1920 else
1921 val = read_internal_start (readcharfun, Qnil, Qnil);
1924 if (!NILP (start) && continue_reading_p)
1925 start = Fpoint_marker ();
1927 /* Restore saved point and BEGV. */
1928 unbind_to (count1, Qnil);
1930 /* Now eval what we just read. */
1931 if (!NILP (macroexpand))
1932 val = call1 (macroexpand, val);
1933 val = eval_sub (val);
1935 if (printflag)
1937 Vvalues = Fcons (val, Vvalues);
1938 if (EQ (Vstandard_output, Qt))
1939 Fprin1 (val, Qnil);
1940 else
1941 Fprint (val, Qnil);
1944 first_sexp = 0;
1947 build_load_history (sourcename,
1948 stream || whole_buffer);
1950 UNGCPRO;
1952 unbind_to (count, Qnil);
1955 DEFUN ("eval-buffer", Feval_buffer, Seval_buffer, 0, 5, "",
1956 doc: /* Execute the current buffer as Lisp code.
1957 When called from a Lisp program (i.e., not interactively), this
1958 function accepts up to five optional arguments:
1959 BUFFER is the buffer to evaluate (nil means use current buffer).
1960 PRINTFLAG controls printing of output:
1961 A value of nil means discard it; anything else is stream for print.
1962 FILENAME specifies the file name to use for `load-history'.
1963 UNIBYTE, if non-nil, specifies `load-convert-to-unibyte' for this
1964 invocation.
1965 DO-ALLOW-PRINT, if non-nil, specifies that `print' and related
1966 functions should work normally even if PRINTFLAG is nil.
1968 This function preserves the position of point. */)
1969 (Lisp_Object buffer, Lisp_Object printflag, Lisp_Object filename, Lisp_Object unibyte, Lisp_Object do_allow_print)
1971 ptrdiff_t count = SPECPDL_INDEX ();
1972 Lisp_Object tem, buf;
1974 if (NILP (buffer))
1975 buf = Fcurrent_buffer ();
1976 else
1977 buf = Fget_buffer (buffer);
1978 if (NILP (buf))
1979 error ("No such buffer");
1981 if (NILP (printflag) && NILP (do_allow_print))
1982 tem = Qsymbolp;
1983 else
1984 tem = printflag;
1986 if (NILP (filename))
1987 filename = BVAR (XBUFFER (buf), filename);
1989 specbind (Qeval_buffer_list, Fcons (buf, Veval_buffer_list));
1990 specbind (Qstandard_output, tem);
1991 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1992 BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
1993 specbind (Qlexical_binding, lisp_file_lexically_bound_p (buf) ? Qt : Qnil);
1994 readevalloop (buf, 0, filename,
1995 !NILP (printflag), unibyte, Qnil, Qnil, Qnil);
1996 unbind_to (count, Qnil);
1998 return Qnil;
2001 DEFUN ("eval-region", Feval_region, Seval_region, 2, 4, "r",
2002 doc: /* Execute the region as Lisp code.
2003 When called from programs, expects two arguments,
2004 giving starting and ending indices in the current buffer
2005 of the text to be executed.
2006 Programs can pass third argument PRINTFLAG which controls output:
2007 A value of nil means discard it; anything else is stream for printing it.
2008 Also the fourth argument READ-FUNCTION, if non-nil, is used
2009 instead of `read' to read each expression. It gets one argument
2010 which is the input stream for reading characters.
2012 This function does not move point. */)
2013 (Lisp_Object start, Lisp_Object end, Lisp_Object printflag, Lisp_Object read_function)
2015 /* FIXME: Do the eval-sexp-add-defvars dance! */
2016 ptrdiff_t count = SPECPDL_INDEX ();
2017 Lisp_Object tem, cbuf;
2019 cbuf = Fcurrent_buffer ();
2021 if (NILP (printflag))
2022 tem = Qsymbolp;
2023 else
2024 tem = printflag;
2025 specbind (Qstandard_output, tem);
2026 specbind (Qeval_buffer_list, Fcons (cbuf, Veval_buffer_list));
2028 /* `readevalloop' calls functions which check the type of start and end. */
2029 readevalloop (cbuf, 0, BVAR (XBUFFER (cbuf), filename),
2030 !NILP (printflag), Qnil, read_function,
2031 start, end);
2033 return unbind_to (count, Qnil);
2037 DEFUN ("read", Fread, Sread, 0, 1, 0,
2038 doc: /* Read one Lisp expression as text from STREAM, return as Lisp object.
2039 If STREAM is nil, use the value of `standard-input' (which see).
2040 STREAM or the value of `standard-input' may be:
2041 a buffer (read from point and advance it)
2042 a marker (read from where it points and advance it)
2043 a function (call it with no arguments for each character,
2044 call it with a char as argument to push a char back)
2045 a string (takes text from string, starting at the beginning)
2046 t (read text line using minibuffer and use it, or read from
2047 standard input in batch mode). */)
2048 (Lisp_Object stream)
2050 if (NILP (stream))
2051 stream = Vstandard_input;
2052 if (EQ (stream, Qt))
2053 stream = Qread_char;
2054 if (EQ (stream, Qread_char))
2055 /* FIXME: ¿¡ When is this used !? */
2056 return call1 (intern ("read-minibuffer"),
2057 build_string ("Lisp expression: "));
2059 return read_internal_start (stream, Qnil, Qnil);
2062 DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0,
2063 doc: /* Read one Lisp expression which is represented as text by STRING.
2064 Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
2065 FINAL-STRING-INDEX is an integer giving the position of the next
2066 remaining character in STRING.
2067 START and END optionally delimit a substring of STRING from which to read;
2068 they default to 0 and (length STRING) respectively. */)
2069 (Lisp_Object string, Lisp_Object start, Lisp_Object end)
2071 Lisp_Object ret;
2072 CHECK_STRING (string);
2073 /* `read_internal_start' sets `read_from_string_index'. */
2074 ret = read_internal_start (string, start, end);
2075 return Fcons (ret, make_number (read_from_string_index));
2078 /* Function to set up the global context we need in toplevel read
2079 calls. */
2080 static Lisp_Object
2081 read_internal_start (Lisp_Object stream, Lisp_Object start, Lisp_Object end)
2082 /* `start', `end' only used when stream is a string. */
2084 Lisp_Object retval;
2086 readchar_count = 0;
2087 new_backquote_flag = 0;
2088 read_objects = Qnil;
2089 if (EQ (Vread_with_symbol_positions, Qt)
2090 || EQ (Vread_with_symbol_positions, stream))
2091 Vread_symbol_positions_list = Qnil;
2093 if (STRINGP (stream)
2094 || ((CONSP (stream) && STRINGP (XCAR (stream)))))
2096 ptrdiff_t startval, endval;
2097 Lisp_Object string;
2099 if (STRINGP (stream))
2100 string = stream;
2101 else
2102 string = XCAR (stream);
2104 if (NILP (end))
2105 endval = SCHARS (string);
2106 else
2108 CHECK_NUMBER (end);
2109 if (! (0 <= XINT (end) && XINT (end) <= SCHARS (string)))
2110 args_out_of_range (string, end);
2111 endval = XINT (end);
2114 if (NILP (start))
2115 startval = 0;
2116 else
2118 CHECK_NUMBER (start);
2119 if (! (0 <= XINT (start) && XINT (start) <= endval))
2120 args_out_of_range (string, start);
2121 startval = XINT (start);
2123 read_from_string_index = startval;
2124 read_from_string_index_byte = string_char_to_byte (string, startval);
2125 read_from_string_limit = endval;
2128 retval = read0 (stream);
2129 if (EQ (Vread_with_symbol_positions, Qt)
2130 || EQ (Vread_with_symbol_positions, stream))
2131 Vread_symbol_positions_list = Fnreverse (Vread_symbol_positions_list);
2132 return retval;
2136 /* Signal Qinvalid_read_syntax error.
2137 S is error string of length N (if > 0) */
2139 static _Noreturn void
2140 invalid_syntax (const char *s)
2142 xsignal1 (Qinvalid_read_syntax, build_string (s));
2146 /* Use this for recursive reads, in contexts where internal tokens
2147 are not allowed. */
2149 static Lisp_Object
2150 read0 (Lisp_Object readcharfun)
2152 register Lisp_Object val;
2153 int c;
2155 val = read1 (readcharfun, &c, 0);
2156 if (!c)
2157 return val;
2159 xsignal1 (Qinvalid_read_syntax,
2160 Fmake_string (make_number (1), make_number (c)));
2163 static ptrdiff_t read_buffer_size;
2164 static char *read_buffer;
2166 /* Read a \-escape sequence, assuming we already read the `\'.
2167 If the escape sequence forces unibyte, return eight-bit char. */
2169 static int
2170 read_escape (Lisp_Object readcharfun, bool stringp)
2172 int c = READCHAR;
2173 /* \u allows up to four hex digits, \U up to eight. Default to the
2174 behavior for \u, and change this value in the case that \U is seen. */
2175 int unicode_hex_count = 4;
2177 switch (c)
2179 case -1:
2180 end_of_file_error ();
2182 case 'a':
2183 return '\007';
2184 case 'b':
2185 return '\b';
2186 case 'd':
2187 return 0177;
2188 case 'e':
2189 return 033;
2190 case 'f':
2191 return '\f';
2192 case 'n':
2193 return '\n';
2194 case 'r':
2195 return '\r';
2196 case 't':
2197 return '\t';
2198 case 'v':
2199 return '\v';
2200 case '\n':
2201 return -1;
2202 case ' ':
2203 if (stringp)
2204 return -1;
2205 return ' ';
2207 case 'M':
2208 c = READCHAR;
2209 if (c != '-')
2210 error ("Invalid escape character syntax");
2211 c = READCHAR;
2212 if (c == '\\')
2213 c = read_escape (readcharfun, 0);
2214 return c | meta_modifier;
2216 case 'S':
2217 c = READCHAR;
2218 if (c != '-')
2219 error ("Invalid escape character syntax");
2220 c = READCHAR;
2221 if (c == '\\')
2222 c = read_escape (readcharfun, 0);
2223 return c | shift_modifier;
2225 case 'H':
2226 c = READCHAR;
2227 if (c != '-')
2228 error ("Invalid escape character syntax");
2229 c = READCHAR;
2230 if (c == '\\')
2231 c = read_escape (readcharfun, 0);
2232 return c | hyper_modifier;
2234 case 'A':
2235 c = READCHAR;
2236 if (c != '-')
2237 error ("Invalid escape character syntax");
2238 c = READCHAR;
2239 if (c == '\\')
2240 c = read_escape (readcharfun, 0);
2241 return c | alt_modifier;
2243 case 's':
2244 c = READCHAR;
2245 if (stringp || c != '-')
2247 UNREAD (c);
2248 return ' ';
2250 c = READCHAR;
2251 if (c == '\\')
2252 c = read_escape (readcharfun, 0);
2253 return c | super_modifier;
2255 case 'C':
2256 c = READCHAR;
2257 if (c != '-')
2258 error ("Invalid escape character syntax");
2259 case '^':
2260 c = READCHAR;
2261 if (c == '\\')
2262 c = read_escape (readcharfun, 0);
2263 if ((c & ~CHAR_MODIFIER_MASK) == '?')
2264 return 0177 | (c & CHAR_MODIFIER_MASK);
2265 else if (! SINGLE_BYTE_CHAR_P ((c & ~CHAR_MODIFIER_MASK)))
2266 return c | ctrl_modifier;
2267 /* ASCII control chars are made from letters (both cases),
2268 as well as the non-letters within 0100...0137. */
2269 else if ((c & 0137) >= 0101 && (c & 0137) <= 0132)
2270 return (c & (037 | ~0177));
2271 else if ((c & 0177) >= 0100 && (c & 0177) <= 0137)
2272 return (c & (037 | ~0177));
2273 else
2274 return c | ctrl_modifier;
2276 case '0':
2277 case '1':
2278 case '2':
2279 case '3':
2280 case '4':
2281 case '5':
2282 case '6':
2283 case '7':
2284 /* An octal escape, as in ANSI C. */
2286 register int i = c - '0';
2287 register int count = 0;
2288 while (++count < 3)
2290 if ((c = READCHAR) >= '0' && c <= '7')
2292 i *= 8;
2293 i += c - '0';
2295 else
2297 UNREAD (c);
2298 break;
2302 if (i >= 0x80 && i < 0x100)
2303 i = BYTE8_TO_CHAR (i);
2304 return i;
2307 case 'x':
2308 /* A hex escape, as in ANSI C. */
2310 unsigned int i = 0;
2311 int count = 0;
2312 while (1)
2314 c = READCHAR;
2315 if (c >= '0' && c <= '9')
2317 i *= 16;
2318 i += c - '0';
2320 else if ((c >= 'a' && c <= 'f')
2321 || (c >= 'A' && c <= 'F'))
2323 i *= 16;
2324 if (c >= 'a' && c <= 'f')
2325 i += c - 'a' + 10;
2326 else
2327 i += c - 'A' + 10;
2329 else
2331 UNREAD (c);
2332 break;
2334 /* Allow hex escapes as large as ?\xfffffff, because some
2335 packages use them to denote characters with modifiers. */
2336 if ((CHAR_META | (CHAR_META - 1)) < i)
2337 error ("Hex character out of range: \\x%x...", i);
2338 count += count < 3;
2341 if (count < 3 && i >= 0x80)
2342 return BYTE8_TO_CHAR (i);
2343 return i;
2346 case 'U':
2347 /* Post-Unicode-2.0: Up to eight hex chars. */
2348 unicode_hex_count = 8;
2349 case 'u':
2351 /* A Unicode escape. We only permit them in strings and characters,
2352 not arbitrarily in the source code, as in some other languages. */
2354 unsigned int i = 0;
2355 int count = 0;
2357 while (++count <= unicode_hex_count)
2359 c = READCHAR;
2360 /* `isdigit' and `isalpha' may be locale-specific, which we don't
2361 want. */
2362 if (c >= '0' && c <= '9') i = (i << 4) + (c - '0');
2363 else if (c >= 'a' && c <= 'f') i = (i << 4) + (c - 'a') + 10;
2364 else if (c >= 'A' && c <= 'F') i = (i << 4) + (c - 'A') + 10;
2365 else
2366 error ("Non-hex digit used for Unicode escape");
2368 if (i > 0x10FFFF)
2369 error ("Non-Unicode character: 0x%x", i);
2370 return i;
2373 default:
2374 return c;
2378 /* Return the digit that CHARACTER stands for in the given BASE.
2379 Return -1 if CHARACTER is out of range for BASE,
2380 and -2 if CHARACTER is not valid for any supported BASE. */
2381 static int
2382 digit_to_number (int character, int base)
2384 int digit;
2386 if ('0' <= character && character <= '9')
2387 digit = character - '0';
2388 else if ('a' <= character && character <= 'z')
2389 digit = character - 'a' + 10;
2390 else if ('A' <= character && character <= 'Z')
2391 digit = character - 'A' + 10;
2392 else
2393 return -2;
2395 return digit < base ? digit : -1;
2398 /* Read an integer in radix RADIX using READCHARFUN to read
2399 characters. RADIX must be in the interval [2..36]; if it isn't, a
2400 read error is signaled . Value is the integer read. Signals an
2401 error if encountering invalid read syntax or if RADIX is out of
2402 range. */
2404 static Lisp_Object
2405 read_integer (Lisp_Object readcharfun, EMACS_INT radix)
2407 /* Room for sign, leading 0, other digits, trailing null byte.
2408 Also, room for invalid syntax diagnostic. */
2409 char buf[max (1 + 1 + sizeof (uintmax_t) * CHAR_BIT + 1,
2410 sizeof "integer, radix " + INT_STRLEN_BOUND (EMACS_INT))];
2412 int valid = -1; /* 1 if valid, 0 if not, -1 if incomplete. */
2414 if (radix < 2 || radix > 36)
2415 valid = 0;
2416 else
2418 char *p = buf;
2419 int c, digit;
2421 c = READCHAR;
2422 if (c == '-' || c == '+')
2424 *p++ = c;
2425 c = READCHAR;
2428 if (c == '0')
2430 *p++ = c;
2431 valid = 1;
2433 /* Ignore redundant leading zeros, so the buffer doesn't
2434 fill up with them. */
2436 c = READCHAR;
2437 while (c == '0');
2440 while ((digit = digit_to_number (c, radix)) >= -1)
2442 if (digit == -1)
2443 valid = 0;
2444 if (valid < 0)
2445 valid = 1;
2447 if (p < buf + sizeof buf - 1)
2448 *p++ = c;
2449 else
2450 valid = 0;
2452 c = READCHAR;
2455 UNREAD (c);
2456 *p = '\0';
2459 if (! valid)
2461 sprintf (buf, "integer, radix %"pI"d", radix);
2462 invalid_syntax (buf);
2465 return string_to_number (buf, radix, 0);
2469 /* If the next token is ')' or ']' or '.', we store that character
2470 in *PCH and the return value is not interesting. Else, we store
2471 zero in *PCH and we read and return one lisp object.
2473 FIRST_IN_LIST is true if this is the first element of a list. */
2475 static Lisp_Object
2476 read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
2478 int c;
2479 bool uninterned_symbol = 0;
2480 bool multibyte;
2482 *pch = 0;
2484 retry:
2486 c = READCHAR_REPORT_MULTIBYTE (&multibyte);
2487 if (c < 0)
2488 end_of_file_error ();
2490 switch (c)
2492 case '(':
2493 return read_list (0, readcharfun);
2495 case '[':
2496 return read_vector (readcharfun, 0);
2498 case ')':
2499 case ']':
2501 *pch = c;
2502 return Qnil;
2505 case '#':
2506 c = READCHAR;
2507 if (c == 's')
2509 c = READCHAR;
2510 if (c == '(')
2512 /* Accept extended format for hashtables (extensible to
2513 other types), e.g.
2514 #s(hash-table size 2 test equal data (k1 v1 k2 v2)) */
2515 Lisp_Object tmp = read_list (0, readcharfun);
2516 Lisp_Object head = CAR_SAFE (tmp);
2517 Lisp_Object data = Qnil;
2518 Lisp_Object val = Qnil;
2519 /* The size is 2 * number of allowed keywords to
2520 make-hash-table. */
2521 Lisp_Object params[10];
2522 Lisp_Object ht;
2523 Lisp_Object key = Qnil;
2524 int param_count = 0;
2526 if (!EQ (head, Qhash_table))
2527 error ("Invalid extended read marker at head of #s list "
2528 "(only hash-table allowed)");
2530 tmp = CDR_SAFE (tmp);
2532 /* This is repetitive but fast and simple. */
2533 params[param_count] = QCsize;
2534 params[param_count + 1] = Fplist_get (tmp, Qsize);
2535 if (!NILP (params[param_count + 1]))
2536 param_count += 2;
2538 params[param_count] = QCtest;
2539 params[param_count + 1] = Fplist_get (tmp, Qtest);
2540 if (!NILP (params[param_count + 1]))
2541 param_count += 2;
2543 params[param_count] = QCweakness;
2544 params[param_count + 1] = Fplist_get (tmp, Qweakness);
2545 if (!NILP (params[param_count + 1]))
2546 param_count += 2;
2548 params[param_count] = QCrehash_size;
2549 params[param_count + 1] = Fplist_get (tmp, Qrehash_size);
2550 if (!NILP (params[param_count + 1]))
2551 param_count += 2;
2553 params[param_count] = QCrehash_threshold;
2554 params[param_count + 1] = Fplist_get (tmp, Qrehash_threshold);
2555 if (!NILP (params[param_count + 1]))
2556 param_count += 2;
2558 /* This is the hashtable data. */
2559 data = Fplist_get (tmp, Qdata);
2561 /* Now use params to make a new hashtable and fill it. */
2562 ht = Fmake_hash_table (param_count, params);
2564 while (CONSP (data))
2566 key = XCAR (data);
2567 data = XCDR (data);
2568 if (!CONSP (data))
2569 error ("Odd number of elements in hashtable data");
2570 val = XCAR (data);
2571 data = XCDR (data);
2572 Fputhash (key, val, ht);
2575 return ht;
2577 UNREAD (c);
2578 invalid_syntax ("#");
2580 if (c == '^')
2582 c = READCHAR;
2583 if (c == '[')
2585 Lisp_Object tmp;
2586 tmp = read_vector (readcharfun, 0);
2587 if (ASIZE (tmp) < CHAR_TABLE_STANDARD_SLOTS)
2588 error ("Invalid size char-table");
2589 XSETPVECTYPE (XVECTOR (tmp), PVEC_CHAR_TABLE);
2590 return tmp;
2592 else if (c == '^')
2594 c = READCHAR;
2595 if (c == '[')
2597 Lisp_Object tmp;
2598 int depth;
2599 ptrdiff_t size;
2601 tmp = read_vector (readcharfun, 0);
2602 size = ASIZE (tmp);
2603 if (size == 0)
2604 error ("Invalid size char-table");
2605 if (! RANGED_INTEGERP (1, AREF (tmp, 0), 3))
2606 error ("Invalid depth in char-table");
2607 depth = XINT (AREF (tmp, 0));
2608 if (chartab_size[depth] != size - 2)
2609 error ("Invalid size char-table");
2610 XSETPVECTYPE (XVECTOR (tmp), PVEC_SUB_CHAR_TABLE);
2611 return tmp;
2613 invalid_syntax ("#^^");
2615 invalid_syntax ("#^");
2617 if (c == '&')
2619 Lisp_Object length;
2620 length = read1 (readcharfun, pch, first_in_list);
2621 c = READCHAR;
2622 if (c == '"')
2624 Lisp_Object tmp, val;
2625 EMACS_INT size_in_chars = bool_vector_bytes (XFASTINT (length));
2626 unsigned char *data;
2628 UNREAD (c);
2629 tmp = read1 (readcharfun, pch, first_in_list);
2630 if (STRING_MULTIBYTE (tmp)
2631 || (size_in_chars != SCHARS (tmp)
2632 /* We used to print 1 char too many
2633 when the number of bits was a multiple of 8.
2634 Accept such input in case it came from an old
2635 version. */
2636 && ! (XFASTINT (length)
2637 == (SCHARS (tmp) - 1) * BOOL_VECTOR_BITS_PER_CHAR)))
2638 invalid_syntax ("#&...");
2640 val = make_uninit_bool_vector (XFASTINT (length));
2641 data = bool_vector_uchar_data (val);
2642 memcpy (data, SDATA (tmp), size_in_chars);
2643 /* Clear the extraneous bits in the last byte. */
2644 if (XINT (length) != size_in_chars * BOOL_VECTOR_BITS_PER_CHAR)
2645 data[size_in_chars - 1]
2646 &= (1 << (XINT (length) % BOOL_VECTOR_BITS_PER_CHAR)) - 1;
2647 return val;
2649 invalid_syntax ("#&...");
2651 if (c == '[')
2653 /* Accept compiled functions at read-time so that we don't have to
2654 build them using function calls. */
2655 Lisp_Object tmp;
2656 tmp = read_vector (readcharfun, 1);
2657 struct Lisp_Vector* vec = XVECTOR (tmp);
2658 if (vec->header.size==0)
2659 invalid_syntax ("Empty byte-code object");
2660 make_byte_code (vec);
2661 return tmp;
2663 if (c == '(')
2665 Lisp_Object tmp;
2666 struct gcpro gcpro1;
2667 int ch;
2669 /* Read the string itself. */
2670 tmp = read1 (readcharfun, &ch, 0);
2671 if (ch != 0 || !STRINGP (tmp))
2672 invalid_syntax ("#");
2673 GCPRO1 (tmp);
2674 /* Read the intervals and their properties. */
2675 while (1)
2677 Lisp_Object beg, end, plist;
2679 beg = read1 (readcharfun, &ch, 0);
2680 end = plist = Qnil;
2681 if (ch == ')')
2682 break;
2683 if (ch == 0)
2684 end = read1 (readcharfun, &ch, 0);
2685 if (ch == 0)
2686 plist = read1 (readcharfun, &ch, 0);
2687 if (ch)
2688 invalid_syntax ("Invalid string property list");
2689 Fset_text_properties (beg, end, plist, tmp);
2691 UNGCPRO;
2692 return tmp;
2695 /* #@NUMBER is used to skip NUMBER following bytes.
2696 That's used in .elc files to skip over doc strings
2697 and function definitions. */
2698 if (c == '@')
2700 enum { extra = 100 };
2701 ptrdiff_t i, nskip = 0, digits = 0;
2703 /* Read a decimal integer. */
2704 while ((c = READCHAR) >= 0
2705 && c >= '0' && c <= '9')
2707 if ((STRING_BYTES_BOUND - extra) / 10 <= nskip)
2708 string_overflow ();
2709 digits++;
2710 nskip *= 10;
2711 nskip += c - '0';
2712 if (digits == 2 && nskip == 0)
2713 { /* We've just seen #@00, which means "skip to end". */
2714 skip_dyn_eof (readcharfun);
2715 return Qnil;
2718 if (nskip > 0)
2719 /* We can't use UNREAD here, because in the code below we side-step
2720 READCHAR. Instead, assume the first char after #@NNN occupies
2721 a single byte, which is the case normally since it's just
2722 a space. */
2723 nskip--;
2724 else
2725 UNREAD (c);
2727 if (load_force_doc_strings
2728 && (FROM_FILE_P (readcharfun)))
2730 /* If we are supposed to force doc strings into core right now,
2731 record the last string that we skipped,
2732 and record where in the file it comes from. */
2734 /* But first exchange saved_doc_string
2735 with prev_saved_doc_string, so we save two strings. */
2737 char *temp = saved_doc_string;
2738 ptrdiff_t temp_size = saved_doc_string_size;
2739 file_offset temp_pos = saved_doc_string_position;
2740 ptrdiff_t temp_len = saved_doc_string_length;
2742 saved_doc_string = prev_saved_doc_string;
2743 saved_doc_string_size = prev_saved_doc_string_size;
2744 saved_doc_string_position = prev_saved_doc_string_position;
2745 saved_doc_string_length = prev_saved_doc_string_length;
2747 prev_saved_doc_string = temp;
2748 prev_saved_doc_string_size = temp_size;
2749 prev_saved_doc_string_position = temp_pos;
2750 prev_saved_doc_string_length = temp_len;
2753 if (saved_doc_string_size == 0)
2755 saved_doc_string = xmalloc (nskip + extra);
2756 saved_doc_string_size = nskip + extra;
2758 if (nskip > saved_doc_string_size)
2760 saved_doc_string = xrealloc (saved_doc_string, nskip + extra);
2761 saved_doc_string_size = nskip + extra;
2764 saved_doc_string_position = file_tell (instream);
2766 /* Copy that many characters into saved_doc_string. */
2767 block_input ();
2768 for (i = 0; i < nskip && c >= 0; i++)
2769 saved_doc_string[i] = c = getc (instream);
2770 unblock_input ();
2772 saved_doc_string_length = i;
2774 else
2775 /* Skip that many bytes. */
2776 skip_dyn_bytes (readcharfun, nskip);
2778 goto retry;
2780 if (c == '!')
2782 /* #! appears at the beginning of an executable file.
2783 Skip the first line. */
2784 while (c != '\n' && c >= 0)
2785 c = READCHAR;
2786 goto retry;
2788 if (c == '$')
2789 return Vload_file_name;
2790 if (c == '\'')
2791 return list2 (Qfunction, read0 (readcharfun));
2792 /* #:foo is the uninterned symbol named foo. */
2793 if (c == ':')
2795 uninterned_symbol = 1;
2796 c = READCHAR;
2797 if (!(c > 040
2798 && c != 0xa0 /* NBSP */
2799 && (c >= 0200
2800 || strchr ("\"';()[]#`,", c) == NULL)))
2802 /* No symbol character follows, this is the empty
2803 symbol. */
2804 UNREAD (c);
2805 return Fmake_symbol (empty_unibyte_string);
2807 goto read_symbol;
2809 /* ## is the empty symbol. */
2810 if (c == '#')
2811 return Fintern (empty_unibyte_string, Qnil);
2812 /* Reader forms that can reuse previously read objects. */
2813 if (c >= '0' && c <= '9')
2815 EMACS_INT n = 0;
2816 Lisp_Object tem;
2818 /* Read a non-negative integer. */
2819 while (c >= '0' && c <= '9')
2821 if (MOST_POSITIVE_FIXNUM / 10 < n
2822 || MOST_POSITIVE_FIXNUM < n * 10 + c - '0')
2823 n = MOST_POSITIVE_FIXNUM + 1;
2824 else
2825 n = n * 10 + c - '0';
2826 c = READCHAR;
2829 if (n <= MOST_POSITIVE_FIXNUM)
2831 if (c == 'r' || c == 'R')
2832 return read_integer (readcharfun, n);
2834 if (! NILP (Vread_circle))
2836 /* #n=object returns object, but associates it with
2837 n for #n#. */
2838 if (c == '=')
2840 /* Make a placeholder for #n# to use temporarily. */
2841 Lisp_Object placeholder;
2842 Lisp_Object cell;
2844 placeholder = Fcons (Qnil, Qnil);
2845 cell = Fcons (make_number (n), placeholder);
2846 read_objects = Fcons (cell, read_objects);
2848 /* Read the object itself. */
2849 tem = read0 (readcharfun);
2851 /* Now put it everywhere the placeholder was... */
2852 substitute_object_in_subtree (tem, placeholder);
2854 /* ...and #n# will use the real value from now on. */
2855 Fsetcdr (cell, tem);
2857 return tem;
2860 /* #n# returns a previously read object. */
2861 if (c == '#')
2863 tem = Fassq (make_number (n), read_objects);
2864 if (CONSP (tem))
2865 return XCDR (tem);
2869 /* Fall through to error message. */
2871 else if (c == 'x' || c == 'X')
2872 return read_integer (readcharfun, 16);
2873 else if (c == 'o' || c == 'O')
2874 return read_integer (readcharfun, 8);
2875 else if (c == 'b' || c == 'B')
2876 return read_integer (readcharfun, 2);
2878 UNREAD (c);
2879 invalid_syntax ("#");
2881 case ';':
2882 while ((c = READCHAR) >= 0 && c != '\n');
2883 goto retry;
2885 case '\'':
2886 return list2 (Qquote, read0 (readcharfun));
2888 case '`':
2890 int next_char = READCHAR;
2891 UNREAD (next_char);
2892 /* Transition from old-style to new-style:
2893 If we see "(`" it used to mean old-style, which usually works
2894 fine because ` should almost never appear in such a position
2895 for new-style. But occasionally we need "(`" to mean new
2896 style, so we try to distinguish the two by the fact that we
2897 can either write "( `foo" or "(` foo", where the first
2898 intends to use new-style whereas the second intends to use
2899 old-style. For Emacs-25, we should completely remove this
2900 first_in_list exception (old-style can still be obtained via
2901 "(\`" anyway). */
2902 if (!new_backquote_flag && first_in_list && next_char == ' ')
2904 Vold_style_backquotes = Qt;
2905 goto default_label;
2907 else
2909 Lisp_Object value;
2910 bool saved_new_backquote_flag = new_backquote_flag;
2912 new_backquote_flag = 1;
2913 value = read0 (readcharfun);
2914 new_backquote_flag = saved_new_backquote_flag;
2916 return list2 (Qbackquote, value);
2919 case ',':
2921 int next_char = READCHAR;
2922 UNREAD (next_char);
2923 /* Transition from old-style to new-style:
2924 It used to be impossible to have a new-style , other than within
2925 a new-style `. This is sufficient when ` and , are used in the
2926 normal way, but ` and , can also appear in args to macros that
2927 will not interpret them in the usual way, in which case , may be
2928 used without any ` anywhere near.
2929 So we now use the same heuristic as for backquote: old-style
2930 unquotes are only recognized when first on a list, and when
2931 followed by a space.
2932 Because it's more difficult to peek 2 chars ahead, a new-style
2933 ,@ can still not be used outside of a `, unless it's in the middle
2934 of a list. */
2935 if (new_backquote_flag
2936 || !first_in_list
2937 || (next_char != ' ' && next_char != '@'))
2939 Lisp_Object comma_type = Qnil;
2940 Lisp_Object value;
2941 int ch = READCHAR;
2943 if (ch == '@')
2944 comma_type = Qcomma_at;
2945 else if (ch == '.')
2946 comma_type = Qcomma_dot;
2947 else
2949 if (ch >= 0) UNREAD (ch);
2950 comma_type = Qcomma;
2953 value = read0 (readcharfun);
2954 return list2 (comma_type, value);
2956 else
2958 Vold_style_backquotes = Qt;
2959 goto default_label;
2962 case '?':
2964 int modifiers;
2965 int next_char;
2966 bool ok;
2968 c = READCHAR;
2969 if (c < 0)
2970 end_of_file_error ();
2972 /* Accept `single space' syntax like (list ? x) where the
2973 whitespace character is SPC or TAB.
2974 Other literal whitespace like NL, CR, and FF are not accepted,
2975 as there are well-established escape sequences for these. */
2976 if (c == ' ' || c == '\t')
2977 return make_number (c);
2979 if (c == '\\')
2980 c = read_escape (readcharfun, 0);
2981 modifiers = c & CHAR_MODIFIER_MASK;
2982 c &= ~CHAR_MODIFIER_MASK;
2983 if (CHAR_BYTE8_P (c))
2984 c = CHAR_TO_BYTE8 (c);
2985 c |= modifiers;
2987 next_char = READCHAR;
2988 ok = (next_char <= 040
2989 || (next_char < 0200
2990 && strchr ("\"';()[]#?`,.", next_char) != NULL));
2991 UNREAD (next_char);
2992 if (ok)
2993 return make_number (c);
2995 invalid_syntax ("?");
2998 case '"':
3000 char *p = read_buffer;
3001 char *end = read_buffer + read_buffer_size;
3002 int ch;
3003 /* True if we saw an escape sequence specifying
3004 a multibyte character. */
3005 bool force_multibyte = 0;
3006 /* True if we saw an escape sequence specifying
3007 a single-byte character. */
3008 bool force_singlebyte = 0;
3009 bool cancel = 0;
3010 ptrdiff_t nchars = 0;
3012 while ((ch = READCHAR) >= 0
3013 && ch != '\"')
3015 if (end - p < MAX_MULTIBYTE_LENGTH)
3017 ptrdiff_t offset = p - read_buffer;
3018 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3019 memory_full (SIZE_MAX);
3020 read_buffer = xrealloc (read_buffer, read_buffer_size * 2);
3021 read_buffer_size *= 2;
3022 p = read_buffer + offset;
3023 end = read_buffer + read_buffer_size;
3026 if (ch == '\\')
3028 int modifiers;
3030 ch = read_escape (readcharfun, 1);
3032 /* CH is -1 if \ newline has just been seen. */
3033 if (ch == -1)
3035 if (p == read_buffer)
3036 cancel = 1;
3037 continue;
3040 modifiers = ch & CHAR_MODIFIER_MASK;
3041 ch = ch & ~CHAR_MODIFIER_MASK;
3043 if (CHAR_BYTE8_P (ch))
3044 force_singlebyte = 1;
3045 else if (! ASCII_CHAR_P (ch))
3046 force_multibyte = 1;
3047 else /* I.e. ASCII_CHAR_P (ch). */
3049 /* Allow `\C- ' and `\C-?'. */
3050 if (modifiers == CHAR_CTL)
3052 if (ch == ' ')
3053 ch = 0, modifiers = 0;
3054 else if (ch == '?')
3055 ch = 127, modifiers = 0;
3057 if (modifiers & CHAR_SHIFT)
3059 /* Shift modifier is valid only with [A-Za-z]. */
3060 if (ch >= 'A' && ch <= 'Z')
3061 modifiers &= ~CHAR_SHIFT;
3062 else if (ch >= 'a' && ch <= 'z')
3063 ch -= ('a' - 'A'), modifiers &= ~CHAR_SHIFT;
3066 if (modifiers & CHAR_META)
3068 /* Move the meta bit to the right place for a
3069 string. */
3070 modifiers &= ~CHAR_META;
3071 ch = BYTE8_TO_CHAR (ch | 0x80);
3072 force_singlebyte = 1;
3076 /* Any modifiers remaining are invalid. */
3077 if (modifiers)
3078 error ("Invalid modifier in string");
3079 p += CHAR_STRING (ch, (unsigned char *) p);
3081 else
3083 p += CHAR_STRING (ch, (unsigned char *) p);
3084 if (CHAR_BYTE8_P (ch))
3085 force_singlebyte = 1;
3086 else if (! ASCII_CHAR_P (ch))
3087 force_multibyte = 1;
3089 nchars++;
3092 if (ch < 0)
3093 end_of_file_error ();
3095 /* If purifying, and string starts with \ newline,
3096 return zero instead. This is for doc strings
3097 that we are really going to find in etc/DOC.nn.nn. */
3098 if (!NILP (Vpurify_flag) && NILP (Vdoc_file_name) && cancel)
3099 return make_number (0);
3101 if (! force_multibyte && force_singlebyte)
3103 /* READ_BUFFER contains raw 8-bit bytes and no multibyte
3104 forms. Convert it to unibyte. */
3105 nchars = str_as_unibyte ((unsigned char *) read_buffer,
3106 p - read_buffer);
3107 p = read_buffer + nchars;
3110 return make_specified_string (read_buffer, nchars, p - read_buffer,
3111 (force_multibyte
3112 || (p - read_buffer != nchars)));
3115 case '.':
3117 int next_char = READCHAR;
3118 UNREAD (next_char);
3120 if (next_char <= 040
3121 || (next_char < 0200
3122 && strchr ("\"';([#?`,", next_char) != NULL))
3124 *pch = c;
3125 return Qnil;
3128 /* Otherwise, we fall through! Note that the atom-reading loop
3129 below will now loop at least once, assuring that we will not
3130 try to UNREAD two characters in a row. */
3132 default:
3133 default_label:
3134 if (c <= 040) goto retry;
3135 if (c == 0xa0) /* NBSP */
3136 goto retry;
3138 read_symbol:
3140 char *p = read_buffer;
3141 bool quoted = 0;
3142 EMACS_INT start_position = readchar_count - 1;
3145 char *end = read_buffer + read_buffer_size;
3149 if (end - p < MAX_MULTIBYTE_LENGTH)
3151 ptrdiff_t offset = p - read_buffer;
3152 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3153 memory_full (SIZE_MAX);
3154 read_buffer = xrealloc (read_buffer, read_buffer_size * 2);
3155 read_buffer_size *= 2;
3156 p = read_buffer + offset;
3157 end = read_buffer + read_buffer_size;
3160 if (c == '\\')
3162 c = READCHAR;
3163 if (c == -1)
3164 end_of_file_error ();
3165 quoted = 1;
3168 if (multibyte)
3169 p += CHAR_STRING (c, (unsigned char *) p);
3170 else
3171 *p++ = c;
3172 c = READCHAR;
3174 while (c > 040
3175 && c != 0xa0 /* NBSP */
3176 && (c >= 0200
3177 || strchr ("\"';()[]#`,", c) == NULL));
3179 if (p == end)
3181 ptrdiff_t offset = p - read_buffer;
3182 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3183 memory_full (SIZE_MAX);
3184 read_buffer = xrealloc (read_buffer, read_buffer_size * 2);
3185 read_buffer_size *= 2;
3186 p = read_buffer + offset;
3187 end = read_buffer + read_buffer_size;
3189 *p = 0;
3190 UNREAD (c);
3193 if (!quoted && !uninterned_symbol)
3195 Lisp_Object result = string_to_number (read_buffer, 10, 0);
3196 if (! NILP (result))
3197 return result;
3200 Lisp_Object name, result;
3201 ptrdiff_t nbytes = p - read_buffer;
3202 ptrdiff_t nchars
3203 = (multibyte
3204 ? multibyte_chars_in_text ((unsigned char *) read_buffer,
3205 nbytes)
3206 : nbytes);
3208 name = ((uninterned_symbol && ! NILP (Vpurify_flag)
3209 ? make_pure_string : make_specified_string)
3210 (read_buffer, nchars, nbytes, multibyte));
3211 result = (uninterned_symbol ? Fmake_symbol (name)
3212 : Fintern (name, Qnil));
3214 if (EQ (Vread_with_symbol_positions, Qt)
3215 || EQ (Vread_with_symbol_positions, readcharfun))
3216 Vread_symbol_positions_list
3217 = Fcons (Fcons (result, make_number (start_position)),
3218 Vread_symbol_positions_list);
3219 return result;
3226 /* List of nodes we've seen during substitute_object_in_subtree. */
3227 static Lisp_Object seen_list;
3229 static void
3230 substitute_object_in_subtree (Lisp_Object object, Lisp_Object placeholder)
3232 Lisp_Object check_object;
3234 /* We haven't seen any objects when we start. */
3235 seen_list = Qnil;
3237 /* Make all the substitutions. */
3238 check_object
3239 = substitute_object_recurse (object, placeholder, object);
3241 /* Clear seen_list because we're done with it. */
3242 seen_list = Qnil;
3244 /* The returned object here is expected to always eq the
3245 original. */
3246 if (!EQ (check_object, object))
3247 error ("Unexpected mutation error in reader");
3250 /* Feval doesn't get called from here, so no gc protection is needed. */
3251 #define SUBSTITUTE(get_val, set_val) \
3252 do { \
3253 Lisp_Object old_value = get_val; \
3254 Lisp_Object true_value \
3255 = substitute_object_recurse (object, placeholder, \
3256 old_value); \
3258 if (!EQ (old_value, true_value)) \
3260 set_val; \
3262 } while (0)
3264 static Lisp_Object
3265 substitute_object_recurse (Lisp_Object object, Lisp_Object placeholder, Lisp_Object subtree)
3267 /* If we find the placeholder, return the target object. */
3268 if (EQ (placeholder, subtree))
3269 return object;
3271 /* If we've been to this node before, don't explore it again. */
3272 if (!EQ (Qnil, Fmemq (subtree, seen_list)))
3273 return subtree;
3275 /* If this node can be the entry point to a cycle, remember that
3276 we've seen it. It can only be such an entry point if it was made
3277 by #n=, which means that we can find it as a value in
3278 read_objects. */
3279 if (!EQ (Qnil, Frassq (subtree, read_objects)))
3280 seen_list = Fcons (subtree, seen_list);
3282 /* Recurse according to subtree's type.
3283 Every branch must return a Lisp_Object. */
3284 switch (XTYPE (subtree))
3286 case Lisp_Vectorlike:
3288 ptrdiff_t i, length = 0;
3289 if (BOOL_VECTOR_P (subtree))
3290 return subtree; /* No sub-objects anyway. */
3291 else if (CHAR_TABLE_P (subtree) || SUB_CHAR_TABLE_P (subtree)
3292 || COMPILEDP (subtree) || HASH_TABLE_P (subtree))
3293 length = ASIZE (subtree) & PSEUDOVECTOR_SIZE_MASK;
3294 else if (VECTORP (subtree))
3295 length = ASIZE (subtree);
3296 else
3297 /* An unknown pseudovector may contain non-Lisp fields, so we
3298 can't just blindly traverse all its fields. We used to call
3299 `Flength' which signaled `sequencep', so I just preserved this
3300 behavior. */
3301 wrong_type_argument (Qsequencep, subtree);
3303 for (i = 0; i < length; i++)
3304 SUBSTITUTE (AREF (subtree, i),
3305 ASET (subtree, i, true_value));
3306 return subtree;
3309 case Lisp_Cons:
3311 SUBSTITUTE (XCAR (subtree),
3312 XSETCAR (subtree, true_value));
3313 SUBSTITUTE (XCDR (subtree),
3314 XSETCDR (subtree, true_value));
3315 return subtree;
3318 case Lisp_String:
3320 /* Check for text properties in each interval.
3321 substitute_in_interval contains part of the logic. */
3323 INTERVAL root_interval = string_intervals (subtree);
3324 Lisp_Object arg = Fcons (object, placeholder);
3326 traverse_intervals_noorder (root_interval,
3327 &substitute_in_interval, arg);
3329 return subtree;
3332 /* Other types don't recurse any further. */
3333 default:
3334 return subtree;
3338 /* Helper function for substitute_object_recurse. */
3339 static void
3340 substitute_in_interval (INTERVAL interval, Lisp_Object arg)
3342 Lisp_Object object = Fcar (arg);
3343 Lisp_Object placeholder = Fcdr (arg);
3345 SUBSTITUTE (interval->plist, set_interval_plist (interval, true_value));
3349 #define LEAD_INT 1
3350 #define DOT_CHAR 2
3351 #define TRAIL_INT 4
3352 #define E_EXP 16
3355 /* Convert STRING to a number, assuming base BASE. Return a fixnum if CP has
3356 integer syntax and fits in a fixnum, else return the nearest float if CP has
3357 either floating point or integer syntax and BASE is 10, else return nil. If
3358 IGNORE_TRAILING, consider just the longest prefix of CP that has
3359 valid floating point syntax. Signal an overflow if BASE is not 10 and the
3360 number has integer syntax but does not fit. */
3362 Lisp_Object
3363 string_to_number (char const *string, int base, bool ignore_trailing)
3365 int state;
3366 char const *cp = string;
3367 int leading_digit;
3368 bool float_syntax = 0;
3369 double value = 0;
3371 /* Compute NaN and infinities using a variable, to cope with compilers that
3372 think they are smarter than we are. */
3373 double zero = 0;
3375 /* Negate the value ourselves. This treats 0, NaNs, and infinity properly on
3376 IEEE floating point hosts, and works around a formerly-common bug where
3377 atof ("-0.0") drops the sign. */
3378 bool negative = *cp == '-';
3380 bool signedp = negative || *cp == '+';
3381 cp += signedp;
3383 state = 0;
3385 leading_digit = digit_to_number (*cp, base);
3386 if (leading_digit >= 0)
3388 state |= LEAD_INT;
3390 ++cp;
3391 while (digit_to_number (*cp, base) >= 0);
3393 if (*cp == '.')
3395 state |= DOT_CHAR;
3396 cp++;
3399 if (base == 10)
3401 if ('0' <= *cp && *cp <= '9')
3403 state |= TRAIL_INT;
3405 cp++;
3406 while ('0' <= *cp && *cp <= '9');
3408 if (*cp == 'e' || *cp == 'E')
3410 char const *ecp = cp;
3411 cp++;
3412 if (*cp == '+' || *cp == '-')
3413 cp++;
3414 if ('0' <= *cp && *cp <= '9')
3416 state |= E_EXP;
3418 cp++;
3419 while ('0' <= *cp && *cp <= '9');
3421 else if (cp[-1] == '+'
3422 && cp[0] == 'I' && cp[1] == 'N' && cp[2] == 'F')
3424 state |= E_EXP;
3425 cp += 3;
3426 value = 1.0 / zero;
3428 else if (cp[-1] == '+'
3429 && cp[0] == 'N' && cp[1] == 'a' && cp[2] == 'N')
3431 state |= E_EXP;
3432 cp += 3;
3433 value = zero / zero;
3435 /* If that made a "negative" NaN, negate it. */
3437 int i;
3438 union { double d; char c[sizeof (double)]; }
3439 u_data, u_minus_zero;
3440 u_data.d = value;
3441 u_minus_zero.d = -0.0;
3442 for (i = 0; i < sizeof (double); i++)
3443 if (u_data.c[i] & u_minus_zero.c[i])
3445 value = -value;
3446 break;
3449 /* Now VALUE is a positive NaN. */
3451 else
3452 cp = ecp;
3455 float_syntax = ((state & (DOT_CHAR|TRAIL_INT)) == (DOT_CHAR|TRAIL_INT)
3456 || state == (LEAD_INT|E_EXP));
3459 /* Return nil if the number uses invalid syntax. If IGNORE_TRAILING, accept
3460 any prefix that matches. Otherwise, the entire string must match. */
3461 if (! (ignore_trailing
3462 ? ((state & LEAD_INT) != 0 || float_syntax)
3463 : (!*cp && ((state & ~DOT_CHAR) == LEAD_INT || float_syntax))))
3464 return Qnil;
3466 /* If the number uses integer and not float syntax, and is in C-language
3467 range, use its value, preferably as a fixnum. */
3468 if (leading_digit >= 0 && ! float_syntax)
3470 uintmax_t n;
3472 /* Fast special case for single-digit integers. This also avoids a
3473 glitch when BASE is 16 and IGNORE_TRAILING, because in that
3474 case some versions of strtoumax accept numbers like "0x1" that Emacs
3475 does not allow. */
3476 if (digit_to_number (string[signedp + 1], base) < 0)
3477 return make_number (negative ? -leading_digit : leading_digit);
3479 errno = 0;
3480 n = strtoumax (string + signedp, NULL, base);
3481 if (errno == ERANGE)
3483 /* Unfortunately there's no simple and accurate way to convert
3484 non-base-10 numbers that are out of C-language range. */
3485 if (base != 10)
3486 xsignal1 (Qoverflow_error, build_string (string));
3488 else if (n <= (negative ? -MOST_NEGATIVE_FIXNUM : MOST_POSITIVE_FIXNUM))
3490 EMACS_INT signed_n = n;
3491 return make_number (negative ? -signed_n : signed_n);
3493 else
3494 value = n;
3497 /* Either the number uses float syntax, or it does not fit into a fixnum.
3498 Convert it from string to floating point, unless the value is already
3499 known because it is an infinity, a NAN, or its absolute value fits in
3500 uintmax_t. */
3501 if (! value)
3502 value = atof (string + signedp);
3504 return make_float (negative ? -value : value);
3508 static Lisp_Object
3509 read_vector (Lisp_Object readcharfun, bool bytecodeflag)
3511 ptrdiff_t i, size;
3512 Lisp_Object *ptr;
3513 Lisp_Object tem, item, vector;
3514 struct Lisp_Cons *otem;
3515 Lisp_Object len;
3517 tem = read_list (1, readcharfun);
3518 len = Flength (tem);
3519 vector = Fmake_vector (len, Qnil);
3521 size = ASIZE (vector);
3522 ptr = XVECTOR (vector)->contents;
3523 for (i = 0; i < size; i++)
3525 item = Fcar (tem);
3526 /* If `load-force-doc-strings' is t when reading a lazily-loaded
3527 bytecode object, the docstring containing the bytecode and
3528 constants values must be treated as unibyte and passed to
3529 Fread, to get the actual bytecode string and constants vector. */
3530 if (bytecodeflag && load_force_doc_strings)
3532 if (i == COMPILED_BYTECODE)
3534 if (!STRINGP (item))
3535 error ("Invalid byte code");
3537 /* Delay handling the bytecode slot until we know whether
3538 it is lazily-loaded (we can tell by whether the
3539 constants slot is nil). */
3540 ASET (vector, COMPILED_CONSTANTS, item);
3541 item = Qnil;
3543 else if (i == COMPILED_CONSTANTS)
3545 Lisp_Object bytestr = ptr[COMPILED_CONSTANTS];
3547 if (NILP (item))
3549 /* Coerce string to unibyte (like string-as-unibyte,
3550 but without generating extra garbage and
3551 guaranteeing no change in the contents). */
3552 STRING_SET_CHARS (bytestr, SBYTES (bytestr));
3553 STRING_SET_UNIBYTE (bytestr);
3555 item = Fread (Fcons (bytestr, readcharfun));
3556 if (!CONSP (item))
3557 error ("Invalid byte code");
3559 otem = XCONS (item);
3560 bytestr = XCAR (item);
3561 item = XCDR (item);
3562 free_cons (otem);
3565 /* Now handle the bytecode slot. */
3566 ASET (vector, COMPILED_BYTECODE, bytestr);
3568 else if (i == COMPILED_DOC_STRING
3569 && STRINGP (item)
3570 && ! STRING_MULTIBYTE (item))
3572 if (EQ (readcharfun, Qget_emacs_mule_file_char))
3573 item = Fdecode_coding_string (item, Qemacs_mule, Qnil, Qnil);
3574 else
3575 item = Fstring_as_multibyte (item);
3578 ASET (vector, i, item);
3579 otem = XCONS (tem);
3580 tem = Fcdr (tem);
3581 free_cons (otem);
3583 return vector;
3586 /* FLAG means check for ']' to terminate rather than ')' and '.'. */
3588 static Lisp_Object
3589 read_list (bool flag, Lisp_Object readcharfun)
3591 Lisp_Object val, tail;
3592 Lisp_Object elt, tem;
3593 struct gcpro gcpro1, gcpro2;
3594 /* 0 is the normal case.
3595 1 means this list is a doc reference; replace it with the number 0.
3596 2 means this list is a doc reference; replace it with the doc string. */
3597 int doc_reference = 0;
3599 /* Initialize this to 1 if we are reading a list. */
3600 bool first_in_list = flag <= 0;
3602 val = Qnil;
3603 tail = Qnil;
3605 while (1)
3607 int ch;
3608 GCPRO2 (val, tail);
3609 elt = read1 (readcharfun, &ch, first_in_list);
3610 UNGCPRO;
3612 first_in_list = 0;
3614 /* While building, if the list starts with #$, treat it specially. */
3615 if (EQ (elt, Vload_file_name)
3616 && ! NILP (elt)
3617 && !NILP (Vpurify_flag))
3619 if (NILP (Vdoc_file_name))
3620 /* We have not yet called Snarf-documentation, so assume
3621 this file is described in the DOC file
3622 and Snarf-documentation will fill in the right value later.
3623 For now, replace the whole list with 0. */
3624 doc_reference = 1;
3625 else
3626 /* We have already called Snarf-documentation, so make a relative
3627 file name for this file, so it can be found properly
3628 in the installed Lisp directory.
3629 We don't use Fexpand_file_name because that would make
3630 the directory absolute now. */
3631 elt = concat2 (build_string ("../lisp/"),
3632 Ffile_name_nondirectory (elt));
3634 else if (EQ (elt, Vload_file_name)
3635 && ! NILP (elt)
3636 && load_force_doc_strings)
3637 doc_reference = 2;
3639 if (ch)
3641 if (flag > 0)
3643 if (ch == ']')
3644 return val;
3645 invalid_syntax (") or . in a vector");
3647 if (ch == ')')
3648 return val;
3649 if (ch == '.')
3651 GCPRO2 (val, tail);
3652 if (!NILP (tail))
3653 XSETCDR (tail, read0 (readcharfun));
3654 else
3655 val = read0 (readcharfun);
3656 read1 (readcharfun, &ch, 0);
3657 UNGCPRO;
3658 if (ch == ')')
3660 if (doc_reference == 1)
3661 return make_number (0);
3662 if (doc_reference == 2 && INTEGERP (XCDR (val)))
3664 char *saved = NULL;
3665 file_offset saved_position;
3666 /* Get a doc string from the file we are loading.
3667 If it's in saved_doc_string, get it from there.
3669 Here, we don't know if the string is a
3670 bytecode string or a doc string. As a
3671 bytecode string must be unibyte, we always
3672 return a unibyte string. If it is actually a
3673 doc string, caller must make it
3674 multibyte. */
3676 /* Position is negative for user variables. */
3677 EMACS_INT pos = eabs (XINT (XCDR (val)));
3678 if (pos >= saved_doc_string_position
3679 && pos < (saved_doc_string_position
3680 + saved_doc_string_length))
3682 saved = saved_doc_string;
3683 saved_position = saved_doc_string_position;
3685 /* Look in prev_saved_doc_string the same way. */
3686 else if (pos >= prev_saved_doc_string_position
3687 && pos < (prev_saved_doc_string_position
3688 + prev_saved_doc_string_length))
3690 saved = prev_saved_doc_string;
3691 saved_position = prev_saved_doc_string_position;
3693 if (saved)
3695 ptrdiff_t start = pos - saved_position;
3696 ptrdiff_t from, to;
3698 /* Process quoting with ^A,
3699 and find the end of the string,
3700 which is marked with ^_ (037). */
3701 for (from = start, to = start;
3702 saved[from] != 037;)
3704 int c = saved[from++];
3705 if (c == 1)
3707 c = saved[from++];
3708 saved[to++] = (c == 1 ? c
3709 : c == '0' ? 0
3710 : c == '_' ? 037
3711 : c);
3713 else
3714 saved[to++] = c;
3717 return make_unibyte_string (saved + start,
3718 to - start);
3720 else
3721 return get_doc_string (val, 1, 0);
3724 return val;
3726 invalid_syntax (". in wrong context");
3728 invalid_syntax ("] in a list");
3730 tem = list1 (elt);
3731 if (!NILP (tail))
3732 XSETCDR (tail, tem);
3733 else
3734 val = tem;
3735 tail = tem;
3739 static Lisp_Object initial_obarray;
3741 /* `oblookup' stores the bucket number here, for the sake of Funintern. */
3743 static size_t oblookup_last_bucket_number;
3745 /* Get an error if OBARRAY is not an obarray.
3746 If it is one, return it. */
3748 Lisp_Object
3749 check_obarray (Lisp_Object obarray)
3751 if (!VECTORP (obarray) || ASIZE (obarray) == 0)
3753 /* If Vobarray is now invalid, force it to be valid. */
3754 if (EQ (Vobarray, obarray)) Vobarray = initial_obarray;
3755 wrong_type_argument (Qvectorp, obarray);
3757 return obarray;
3760 /* Intern the C string STR: return a symbol with that name,
3761 interned in the current obarray. */
3763 Lisp_Object
3764 intern_1 (const char *str, ptrdiff_t len)
3766 Lisp_Object obarray = check_obarray (Vobarray);
3767 Lisp_Object tem = oblookup (obarray, str, len, len);
3769 return SYMBOLP (tem) ? tem : Fintern (make_string (str, len), obarray);
3772 Lisp_Object
3773 intern_c_string_1 (const char *str, ptrdiff_t len)
3775 Lisp_Object obarray = check_obarray (Vobarray);
3776 Lisp_Object tem = oblookup (obarray, str, len, len);
3778 if (SYMBOLP (tem))
3779 return tem;
3781 if (NILP (Vpurify_flag))
3782 /* Creating a non-pure string from a string literal not
3783 implemented yet. We could just use make_string here and live
3784 with the extra copy. */
3785 emacs_abort ();
3787 return Fintern (make_pure_c_string (str, len), obarray);
3790 DEFUN ("intern", Fintern, Sintern, 1, 2, 0,
3791 doc: /* Return the canonical symbol whose name is STRING.
3792 If there is none, one is created by this function and returned.
3793 A second optional argument specifies the obarray to use;
3794 it defaults to the value of `obarray'. */)
3795 (Lisp_Object string, Lisp_Object obarray)
3797 register Lisp_Object tem, sym, *ptr;
3799 if (NILP (obarray)) obarray = Vobarray;
3800 obarray = check_obarray (obarray);
3802 CHECK_STRING (string);
3804 tem = oblookup (obarray, SSDATA (string),
3805 SCHARS (string),
3806 SBYTES (string));
3807 if (!INTEGERP (tem))
3808 return tem;
3810 if (!NILP (Vpurify_flag))
3811 string = Fpurecopy (string);
3812 sym = Fmake_symbol (string);
3814 if (EQ (obarray, initial_obarray))
3815 XSYMBOL (sym)->interned = SYMBOL_INTERNED_IN_INITIAL_OBARRAY;
3816 else
3817 XSYMBOL (sym)->interned = SYMBOL_INTERNED;
3819 if ((SREF (string, 0) == ':')
3820 && EQ (obarray, initial_obarray))
3822 XSYMBOL (sym)->constant = 1;
3823 XSYMBOL (sym)->redirect = SYMBOL_PLAINVAL;
3824 SET_SYMBOL_VAL (XSYMBOL (sym), sym);
3827 ptr = aref_addr (obarray, XINT(tem));
3828 if (SYMBOLP (*ptr))
3829 set_symbol_next (sym, XSYMBOL (*ptr));
3830 else
3831 set_symbol_next (sym, NULL);
3832 *ptr = sym;
3833 return sym;
3836 DEFUN ("intern-soft", Fintern_soft, Sintern_soft, 1, 2, 0,
3837 doc: /* Return the canonical symbol named NAME, or nil if none exists.
3838 NAME may be a string or a symbol. If it is a symbol, that exact
3839 symbol is searched for.
3840 A second optional argument specifies the obarray to use;
3841 it defaults to the value of `obarray'. */)
3842 (Lisp_Object name, Lisp_Object obarray)
3844 register Lisp_Object tem, string;
3846 if (NILP (obarray)) obarray = Vobarray;
3847 obarray = check_obarray (obarray);
3849 if (!SYMBOLP (name))
3851 CHECK_STRING (name);
3852 string = name;
3854 else
3855 string = SYMBOL_NAME (name);
3857 tem = oblookup (obarray, SSDATA (string), SCHARS (string), SBYTES (string));
3858 if (INTEGERP (tem) || (SYMBOLP (name) && !EQ (name, tem)))
3859 return Qnil;
3860 else
3861 return tem;
3864 DEFUN ("unintern", Funintern, Sunintern, 1, 2, 0,
3865 doc: /* Delete the symbol named NAME, if any, from OBARRAY.
3866 The value is t if a symbol was found and deleted, nil otherwise.
3867 NAME may be a string or a symbol. If it is a symbol, that symbol
3868 is deleted, if it belongs to OBARRAY--no other symbol is deleted.
3869 OBARRAY defaults to the value of the variable `obarray'. */)
3870 (Lisp_Object name, Lisp_Object obarray)
3872 register Lisp_Object string, tem;
3873 size_t hash;
3875 if (NILP (obarray)) obarray = Vobarray;
3876 obarray = check_obarray (obarray);
3878 if (SYMBOLP (name))
3879 string = SYMBOL_NAME (name);
3880 else
3882 CHECK_STRING (name);
3883 string = name;
3886 tem = oblookup (obarray, SSDATA (string),
3887 SCHARS (string),
3888 SBYTES (string));
3889 if (INTEGERP (tem))
3890 return Qnil;
3891 /* If arg was a symbol, don't delete anything but that symbol itself. */
3892 if (SYMBOLP (name) && !EQ (name, tem))
3893 return Qnil;
3895 /* There are plenty of other symbols which will screw up the Emacs
3896 session if we unintern them, as well as even more ways to use
3897 `setq' or `fset' or whatnot to make the Emacs session
3898 unusable. Let's not go down this silly road. --Stef */
3899 /* if (EQ (tem, Qnil) || EQ (tem, Qt))
3900 error ("Attempt to unintern t or nil"); */
3902 XSYMBOL (tem)->interned = SYMBOL_UNINTERNED;
3904 hash = oblookup_last_bucket_number;
3906 if (EQ (AREF (obarray, hash), tem))
3908 if (XSYMBOL (tem)->next)
3910 Lisp_Object sym;
3911 XSETSYMBOL (sym, XSYMBOL (tem)->next);
3912 ASET (obarray, hash, sym);
3914 else
3915 ASET (obarray, hash, make_number (0));
3917 else
3919 Lisp_Object tail, following;
3921 for (tail = AREF (obarray, hash);
3922 XSYMBOL (tail)->next;
3923 tail = following)
3925 XSETSYMBOL (following, XSYMBOL (tail)->next);
3926 if (EQ (following, tem))
3928 set_symbol_next (tail, XSYMBOL (following)->next);
3929 break;
3934 return Qt;
3937 /* Return the symbol in OBARRAY whose names matches the string
3938 of SIZE characters (SIZE_BYTE bytes) at PTR.
3939 If there is no such symbol in OBARRAY, return nil.
3941 Also store the bucket number in oblookup_last_bucket_number. */
3943 Lisp_Object
3944 oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff_t size_byte)
3946 size_t hash;
3947 size_t obsize;
3948 register Lisp_Object tail;
3949 Lisp_Object bucket, tem;
3951 obarray = check_obarray (obarray);
3952 obsize = ASIZE (obarray);
3954 /* This is sometimes needed in the middle of GC. */
3955 obsize &= ~ARRAY_MARK_FLAG;
3956 hash = hash_string (ptr, size_byte) % obsize;
3957 bucket = AREF (obarray, hash);
3958 oblookup_last_bucket_number = hash;
3959 if (EQ (bucket, make_number (0)))
3961 else if (!SYMBOLP (bucket))
3962 error ("Bad data in guts of obarray"); /* Like CADR error message. */
3963 else
3964 for (tail = bucket; ; XSETSYMBOL (tail, XSYMBOL (tail)->next))
3966 if (SBYTES (SYMBOL_NAME (tail)) == size_byte
3967 && SCHARS (SYMBOL_NAME (tail)) == size
3968 && !memcmp (SDATA (SYMBOL_NAME (tail)), ptr, size_byte))
3969 return tail;
3970 else if (XSYMBOL (tail)->next == 0)
3971 break;
3973 XSETINT (tem, hash);
3974 return tem;
3977 void
3978 map_obarray (Lisp_Object obarray, void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg)
3980 ptrdiff_t i;
3981 register Lisp_Object tail;
3982 CHECK_VECTOR (obarray);
3983 for (i = ASIZE (obarray) - 1; i >= 0; i--)
3985 tail = AREF (obarray, i);
3986 if (SYMBOLP (tail))
3987 while (1)
3989 (*fn) (tail, arg);
3990 if (XSYMBOL (tail)->next == 0)
3991 break;
3992 XSETSYMBOL (tail, XSYMBOL (tail)->next);
3997 static void
3998 mapatoms_1 (Lisp_Object sym, Lisp_Object function)
4000 call1 (function, sym);
4003 DEFUN ("mapatoms", Fmapatoms, Smapatoms, 1, 2, 0,
4004 doc: /* Call FUNCTION on every symbol in OBARRAY.
4005 OBARRAY defaults to the value of `obarray'. */)
4006 (Lisp_Object function, Lisp_Object obarray)
4008 if (NILP (obarray)) obarray = Vobarray;
4009 obarray = check_obarray (obarray);
4011 map_obarray (obarray, mapatoms_1, function);
4012 return Qnil;
4015 #define OBARRAY_SIZE 1511
4017 void
4018 init_obarray (void)
4020 Lisp_Object oblength;
4021 ptrdiff_t size = 100 + MAX_MULTIBYTE_LENGTH;
4023 XSETFASTINT (oblength, OBARRAY_SIZE);
4025 Vobarray = Fmake_vector (oblength, make_number (0));
4026 initial_obarray = Vobarray;
4027 staticpro (&initial_obarray);
4029 Qunbound = Fmake_symbol (build_pure_c_string ("unbound"));
4030 /* Set temporary dummy values to Qnil and Vpurify_flag to satisfy the
4031 NILP (Vpurify_flag) check in intern_c_string. */
4032 Qnil = make_number (-1); Vpurify_flag = make_number (1);
4033 Qnil = intern_c_string ("nil");
4035 /* Fmake_symbol inits fields of new symbols with Qunbound and Qnil,
4036 so those two need to be fixed manually. */
4037 SET_SYMBOL_VAL (XSYMBOL (Qunbound), Qunbound);
4038 set_symbol_function (Qunbound, Qnil);
4039 set_symbol_plist (Qunbound, Qnil);
4040 SET_SYMBOL_VAL (XSYMBOL (Qnil), Qnil);
4041 XSYMBOL (Qnil)->constant = 1;
4042 XSYMBOL (Qnil)->declared_special = 1;
4043 set_symbol_plist (Qnil, Qnil);
4044 set_symbol_function (Qnil, Qnil);
4046 Qt = intern_c_string ("t");
4047 SET_SYMBOL_VAL (XSYMBOL (Qt), Qt);
4048 XSYMBOL (Qnil)->declared_special = 1;
4049 XSYMBOL (Qt)->constant = 1;
4051 /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */
4052 Vpurify_flag = Qt;
4054 DEFSYM (Qvariable_documentation, "variable-documentation");
4056 read_buffer = xmalloc (size);
4057 read_buffer_size = size;
4060 void
4061 defsubr (struct Lisp_Subr *sname)
4063 Lisp_Object sym, tem;
4064 sym = intern_c_string (sname->symbol_name);
4065 XSETPVECTYPE (sname, PVEC_SUBR);
4066 XSETSUBR (tem, sname);
4067 set_symbol_function (sym, tem);
4070 #ifdef NOTDEF /* Use fset in subr.el now! */
4071 void
4072 defalias (struct Lisp_Subr *sname, char *string)
4074 Lisp_Object sym;
4075 sym = intern (string);
4076 XSETSUBR (XSYMBOL (sym)->function, sname);
4078 #endif /* NOTDEF */
4080 /* Define an "integer variable"; a symbol whose value is forwarded to a
4081 C variable of type EMACS_INT. Sample call (with "xx" to fool make-docfile):
4082 DEFxxVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */
4083 void
4084 defvar_int (struct Lisp_Intfwd *i_fwd,
4085 const char *namestring, EMACS_INT *address)
4087 Lisp_Object sym;
4088 sym = intern_c_string (namestring);
4089 i_fwd->type = Lisp_Fwd_Int;
4090 i_fwd->intvar = address;
4091 XSYMBOL (sym)->declared_special = 1;
4092 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4093 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)i_fwd);
4096 /* Similar but define a variable whose value is t if address contains 1,
4097 nil if address contains 0. */
4098 void
4099 defvar_bool (struct Lisp_Boolfwd *b_fwd,
4100 const char *namestring, bool *address)
4102 Lisp_Object sym;
4103 sym = intern_c_string (namestring);
4104 b_fwd->type = Lisp_Fwd_Bool;
4105 b_fwd->boolvar = address;
4106 XSYMBOL (sym)->declared_special = 1;
4107 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4108 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)b_fwd);
4109 Vbyte_boolean_vars = Fcons (sym, Vbyte_boolean_vars);
4112 /* Similar but define a variable whose value is the Lisp Object stored
4113 at address. Two versions: with and without gc-marking of the C
4114 variable. The nopro version is used when that variable will be
4115 gc-marked for some other reason, since marking the same slot twice
4116 can cause trouble with strings. */
4117 void
4118 defvar_lisp_nopro (struct Lisp_Objfwd *o_fwd,
4119 const char *namestring, Lisp_Object *address)
4121 Lisp_Object sym;
4122 sym = intern_c_string (namestring);
4123 o_fwd->type = Lisp_Fwd_Obj;
4124 o_fwd->objvar = address;
4125 XSYMBOL (sym)->declared_special = 1;
4126 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4127 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)o_fwd);
4130 void
4131 defvar_lisp (struct Lisp_Objfwd *o_fwd,
4132 const char *namestring, Lisp_Object *address)
4134 defvar_lisp_nopro (o_fwd, namestring, address);
4135 staticpro (address);
4138 /* Similar but define a variable whose value is the Lisp Object stored
4139 at a particular offset in the current kboard object. */
4141 void
4142 defvar_kboard (struct Lisp_Kboard_Objfwd *ko_fwd,
4143 const char *namestring, int offset)
4145 Lisp_Object sym;
4146 sym = intern_c_string (namestring);
4147 ko_fwd->type = Lisp_Fwd_Kboard_Obj;
4148 ko_fwd->offset = offset;
4149 XSYMBOL (sym)->declared_special = 1;
4150 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4151 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)ko_fwd);
4154 /* Check that the elements of lpath exist. */
4156 static void
4157 load_path_check (Lisp_Object lpath)
4159 Lisp_Object path_tail;
4161 /* The only elements that might not exist are those from
4162 PATH_LOADSEARCH, EMACSLOADPATH. Anything else is only added if
4163 it exists. */
4164 for (path_tail = lpath; !NILP (path_tail); path_tail = XCDR (path_tail))
4166 Lisp_Object dirfile;
4167 dirfile = Fcar (path_tail);
4168 if (STRINGP (dirfile))
4170 dirfile = Fdirectory_file_name (dirfile);
4171 if (! file_accessible_directory_p (SSDATA (dirfile)))
4172 dir_warning ("Lisp directory", XCAR (path_tail));
4177 /* Return the default load-path, to be used if EMACSLOADPATH is unset.
4178 This does not include the standard site-lisp directories
4179 under the installation prefix (i.e., PATH_SITELOADSEARCH),
4180 but it does (unless no_site_lisp is set) include site-lisp
4181 directories in the source/build directories if those exist and we
4182 are running uninstalled.
4184 Uses the following logic:
4185 If CANNOT_DUMP: Use PATH_LOADSEARCH.
4186 The remainder is what happens when dumping works:
4187 If purify-flag (ie dumping) just use PATH_DUMPLOADSEARCH.
4188 Otherwise use PATH_LOADSEARCH.
4190 If !initialized, then just return PATH_DUMPLOADSEARCH.
4191 If initialized:
4192 If Vinstallation_directory is not nil (ie, running uninstalled):
4193 If installation-dir/lisp exists and not already a member,
4194 we must be running uninstalled. Reset the load-path
4195 to just installation-dir/lisp. (The default PATH_LOADSEARCH
4196 refers to the eventual installation directories. Since we
4197 are not yet installed, we should not use them, even if they exist.)
4198 If installation-dir/lisp does not exist, just add
4199 PATH_DUMPLOADSEARCH at the end instead.
4200 Add installation-dir/site-lisp (if !no_site_lisp, and exists
4201 and not already a member) at the front.
4202 If installation-dir != source-dir (ie running an uninstalled,
4203 out-of-tree build) AND install-dir/src/Makefile exists BUT
4204 install-dir/src/Makefile.in does NOT exist (this is a sanity
4205 check), then repeat the above steps for source-dir/lisp, site-lisp. */
4207 static Lisp_Object
4208 load_path_default (void)
4210 Lisp_Object lpath = Qnil;
4211 const char *normal;
4213 #ifdef CANNOT_DUMP
4214 #ifdef HAVE_NS
4215 const char *loadpath = ns_load_path ();
4216 #endif
4218 normal = PATH_LOADSEARCH;
4219 #ifdef HAVE_NS
4220 lpath = decode_env_path (0, loadpath ? loadpath : normal, 0);
4221 #else
4222 lpath = decode_env_path (0, normal, 0);
4223 #endif
4225 #else /* !CANNOT_DUMP */
4227 normal = NILP (Vpurify_flag) ? PATH_LOADSEARCH : PATH_DUMPLOADSEARCH;
4229 if (initialized)
4231 #ifdef HAVE_NS
4232 const char *loadpath = ns_load_path ();
4233 lpath = decode_env_path (0, loadpath ? loadpath : normal, 0);
4234 #else
4235 lpath = decode_env_path (0, normal, 0);
4236 #endif
4237 if (!NILP (Vinstallation_directory))
4239 Lisp_Object tem, tem1;
4241 /* Add to the path the lisp subdir of the installation
4242 dir, if it is accessible. Note: in out-of-tree builds,
4243 this directory is empty save for Makefile. */
4244 tem = Fexpand_file_name (build_string ("lisp"),
4245 Vinstallation_directory);
4246 tem1 = Ffile_accessible_directory_p (tem);
4247 if (!NILP (tem1))
4249 if (NILP (Fmember (tem, lpath)))
4251 /* We are running uninstalled. The default load-path
4252 points to the eventual installed lisp directories.
4253 We should not use those now, even if they exist,
4254 so start over from a clean slate. */
4255 lpath = list1 (tem);
4258 else
4259 /* That dir doesn't exist, so add the build-time
4260 Lisp dirs instead. */
4262 Lisp_Object dump_path =
4263 decode_env_path (0, PATH_DUMPLOADSEARCH, 0);
4264 lpath = nconc2 (lpath, dump_path);
4267 /* Add site-lisp under the installation dir, if it exists. */
4268 if (!no_site_lisp)
4270 tem = Fexpand_file_name (build_string ("site-lisp"),
4271 Vinstallation_directory);
4272 tem1 = Ffile_accessible_directory_p (tem);
4273 if (!NILP (tem1))
4275 if (NILP (Fmember (tem, lpath)))
4276 lpath = Fcons (tem, lpath);
4280 /* If Emacs was not built in the source directory,
4281 and it is run from where it was built, add to load-path
4282 the lisp and site-lisp dirs under that directory. */
4284 if (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
4286 Lisp_Object tem2;
4288 tem = Fexpand_file_name (build_string ("src/Makefile"),
4289 Vinstallation_directory);
4290 tem1 = Ffile_exists_p (tem);
4292 /* Don't be fooled if they moved the entire source tree
4293 AFTER dumping Emacs. If the build directory is indeed
4294 different from the source dir, src/Makefile.in and
4295 src/Makefile will not be found together. */
4296 tem = Fexpand_file_name (build_string ("src/Makefile.in"),
4297 Vinstallation_directory);
4298 tem2 = Ffile_exists_p (tem);
4299 if (!NILP (tem1) && NILP (tem2))
4301 tem = Fexpand_file_name (build_string ("lisp"),
4302 Vsource_directory);
4304 if (NILP (Fmember (tem, lpath)))
4305 lpath = Fcons (tem, lpath);
4307 if (!no_site_lisp)
4309 tem = Fexpand_file_name (build_string ("site-lisp"),
4310 Vsource_directory);
4311 tem1 = Ffile_accessible_directory_p (tem);
4312 if (!NILP (tem1))
4314 if (NILP (Fmember (tem, lpath)))
4315 lpath = Fcons (tem, lpath);
4319 } /* Vinstallation_directory != Vsource_directory */
4321 } /* if Vinstallation_directory */
4323 else /* !initialized */
4325 /* NORMAL refers to PATH_DUMPLOADSEARCH, ie the lisp dir in the
4326 source directory. We used to add ../lisp (ie the lisp dir in
4327 the build directory) at the front here, but that should not
4328 be necessary, since in out of tree builds lisp/ is empty, save
4329 for Makefile. */
4330 lpath = decode_env_path (0, normal, 0);
4332 #endif /* !CANNOT_DUMP */
4334 return lpath;
4337 void
4338 init_lread (void)
4340 /* First, set Vload_path. */
4342 /* Ignore EMACSLOADPATH when dumping. */
4343 #ifdef CANNOT_DUMP
4344 bool use_loadpath = true;
4345 #else
4346 bool use_loadpath = !NILP (Vpurify_flag);
4347 #endif
4349 if (use_loadpath && egetenv ("EMACSLOADPATH"))
4351 Vload_path = decode_env_path ("EMACSLOADPATH", 0, 1);
4353 /* Check (non-nil) user-supplied elements. */
4354 load_path_check (Vload_path);
4356 /* If no nils in the environment variable, use as-is.
4357 Otherwise, replace any nils with the default. */
4358 if (! NILP (Fmemq (Qnil, Vload_path)))
4360 Lisp_Object elem, elpath = Vload_path;
4361 Lisp_Object default_lpath = load_path_default ();
4363 /* Check defaults, before adding site-lisp. */
4364 load_path_check (default_lpath);
4366 /* Add the site-lisp directories to the front of the default. */
4367 if (!no_site_lisp)
4369 Lisp_Object sitelisp;
4370 sitelisp = decode_env_path (0, PATH_SITELOADSEARCH, 0);
4371 if (! NILP (sitelisp))
4372 default_lpath = nconc2 (sitelisp, default_lpath);
4375 Vload_path = Qnil;
4377 /* Replace nils from EMACSLOADPATH by default. */
4378 while (CONSP (elpath))
4380 Lisp_Object arg[2];
4381 elem = XCAR (elpath);
4382 elpath = XCDR (elpath);
4383 arg[0] = Vload_path;
4384 arg[1] = NILP (elem) ? default_lpath : Fcons (elem, Qnil);
4385 Vload_path = Fappend (2, arg);
4387 } /* Fmemq (Qnil, Vload_path) */
4389 else /* Vpurify_flag || !EMACSLOADPATH */
4391 Vload_path = load_path_default ();
4393 /* Check before adding site-lisp directories.
4394 The install should have created them, but they are not
4395 required, so no need to warn if they are absent.
4396 Or we might be running before installation. */
4397 load_path_check (Vload_path);
4399 /* Add the site-lisp directories at the front. */
4400 if (initialized && !no_site_lisp)
4402 Lisp_Object sitelisp;
4403 sitelisp = decode_env_path (0, PATH_SITELOADSEARCH, 0);
4404 if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
4406 } /* !Vpurify_flag && EMACSLOADPATH */
4408 Vvalues = Qnil;
4410 load_in_progress = 0;
4411 Vload_file_name = Qnil;
4412 Vstandard_input = Qt;
4413 Vloads_in_progress = Qnil;
4416 /* Print a warning that directory intended for use USE and with name
4417 DIRNAME cannot be accessed. On entry, errno should correspond to
4418 the access failure. Print the warning on stderr and put it in
4419 *Messages*. */
4421 void
4422 dir_warning (char const *use, Lisp_Object dirname)
4424 static char const format[] = "Warning: %s `%s': %s\n";
4425 int access_errno = errno;
4426 fprintf (stderr, format, use, SSDATA (dirname), strerror (access_errno));
4428 /* Don't log the warning before we've initialized!! */
4429 if (initialized)
4431 char const *diagnostic = emacs_strerror (access_errno);
4432 USE_SAFE_ALLOCA;
4433 char *buffer = SAFE_ALLOCA (sizeof format - 3 * (sizeof "%s" - 1)
4434 + strlen (use) + SBYTES (dirname)
4435 + strlen (diagnostic));
4436 ptrdiff_t message_len = esprintf (buffer, format, use, SSDATA (dirname),
4437 diagnostic);
4438 message_dolog (buffer, message_len, 0, STRING_MULTIBYTE (dirname));
4439 SAFE_FREE ();
4443 void
4444 syms_of_lread (void)
4446 defsubr (&Sread);
4447 defsubr (&Sread_from_string);
4448 defsubr (&Sintern);
4449 defsubr (&Sintern_soft);
4450 defsubr (&Sunintern);
4451 defsubr (&Sget_load_suffixes);
4452 defsubr (&Sload);
4453 defsubr (&Seval_buffer);
4454 defsubr (&Seval_region);
4455 defsubr (&Sread_char);
4456 defsubr (&Sread_char_exclusive);
4457 defsubr (&Sread_event);
4458 defsubr (&Sget_file_char);
4459 defsubr (&Smapatoms);
4460 defsubr (&Slocate_file_internal);
4462 DEFVAR_LISP ("obarray", Vobarray,
4463 doc: /* Symbol table for use by `intern' and `read'.
4464 It is a vector whose length ought to be prime for best results.
4465 The vector's contents don't make sense if examined from Lisp programs;
4466 to find all the symbols in an obarray, use `mapatoms'. */);
4468 DEFVAR_LISP ("values", Vvalues,
4469 doc: /* List of values of all expressions which were read, evaluated and printed.
4470 Order is reverse chronological. */);
4471 XSYMBOL (intern ("values"))->declared_special = 0;
4473 DEFVAR_LISP ("standard-input", Vstandard_input,
4474 doc: /* Stream for read to get input from.
4475 See documentation of `read' for possible values. */);
4476 Vstandard_input = Qt;
4478 DEFVAR_LISP ("read-with-symbol-positions", Vread_with_symbol_positions,
4479 doc: /* If non-nil, add position of read symbols to `read-symbol-positions-list'.
4481 If this variable is a buffer, then only forms read from that buffer
4482 will be added to `read-symbol-positions-list'.
4483 If this variable is t, then all read forms will be added.
4484 The effect of all other values other than nil are not currently
4485 defined, although they may be in the future.
4487 The positions are relative to the last call to `read' or
4488 `read-from-string'. It is probably a bad idea to set this variable at
4489 the toplevel; bind it instead. */);
4490 Vread_with_symbol_positions = Qnil;
4492 DEFVAR_LISP ("read-symbol-positions-list", Vread_symbol_positions_list,
4493 doc: /* A list mapping read symbols to their positions.
4494 This variable is modified during calls to `read' or
4495 `read-from-string', but only when `read-with-symbol-positions' is
4496 non-nil.
4498 Each element of the list looks like (SYMBOL . CHAR-POSITION), where
4499 CHAR-POSITION is an integer giving the offset of that occurrence of the
4500 symbol from the position where `read' or `read-from-string' started.
4502 Note that a symbol will appear multiple times in this list, if it was
4503 read multiple times. The list is in the same order as the symbols
4504 were read in. */);
4505 Vread_symbol_positions_list = Qnil;
4507 DEFVAR_LISP ("read-circle", Vread_circle,
4508 doc: /* Non-nil means read recursive structures using #N= and #N# syntax. */);
4509 Vread_circle = Qt;
4511 DEFVAR_LISP ("load-path", Vload_path,
4512 doc: /* List of directories to search for files to load.
4513 Each element is a string (directory name) or nil (meaning `default-directory').
4514 Initialized during startup as described in Info node `(elisp)Library Search'. */);
4516 DEFVAR_LISP ("load-suffixes", Vload_suffixes,
4517 doc: /* List of suffixes for (compiled or source) Emacs Lisp files.
4518 This list should not include the empty string.
4519 `load' and related functions try to append these suffixes, in order,
4520 to the specified file name if a Lisp suffix is allowed or required. */);
4521 Vload_suffixes = list2 (build_pure_c_string (".elc"),
4522 build_pure_c_string (".el"));
4523 DEFVAR_LISP ("load-file-rep-suffixes", Vload_file_rep_suffixes,
4524 doc: /* List of suffixes that indicate representations of \
4525 the same file.
4526 This list should normally start with the empty string.
4528 Enabling Auto Compression mode appends the suffixes in
4529 `jka-compr-load-suffixes' to this list and disabling Auto Compression
4530 mode removes them again. `load' and related functions use this list to
4531 determine whether they should look for compressed versions of a file
4532 and, if so, which suffixes they should try to append to the file name
4533 in order to do so. However, if you want to customize which suffixes
4534 the loading functions recognize as compression suffixes, you should
4535 customize `jka-compr-load-suffixes' rather than the present variable. */);
4536 Vload_file_rep_suffixes = list1 (empty_unibyte_string);
4538 DEFVAR_BOOL ("load-in-progress", load_in_progress,
4539 doc: /* Non-nil if inside of `load'. */);
4540 DEFSYM (Qload_in_progress, "load-in-progress");
4542 DEFVAR_LISP ("after-load-alist", Vafter_load_alist,
4543 doc: /* An alist of functions to be evalled when particular files are loaded.
4544 Each element looks like (REGEXP-OR-FEATURE FUNCS...).
4546 REGEXP-OR-FEATURE is either a regular expression to match file names, or
4547 a symbol \(a feature name).
4549 When `load' is run and the file-name argument matches an element's
4550 REGEXP-OR-FEATURE, or when `provide' is run and provides the symbol
4551 REGEXP-OR-FEATURE, the FUNCS in the element are called.
4553 An error in FORMS does not undo the load, but does prevent execution of
4554 the rest of the FORMS. */);
4555 Vafter_load_alist = Qnil;
4557 DEFVAR_LISP ("load-history", Vload_history,
4558 doc: /* Alist mapping loaded file names to symbols and features.
4559 Each alist element should be a list (FILE-NAME ENTRIES...), where
4560 FILE-NAME is the name of a file that has been loaded into Emacs.
4561 The file name is absolute and true (i.e. it doesn't contain symlinks).
4562 As an exception, one of the alist elements may have FILE-NAME nil,
4563 for symbols and features not associated with any file.
4565 The remaining ENTRIES in the alist element describe the functions and
4566 variables defined in that file, the features provided, and the
4567 features required. Each entry has the form `(provide . FEATURE)',
4568 `(require . FEATURE)', `(defun . FUNCTION)', `(autoload . SYMBOL)',
4569 `(defface . SYMBOL)', or `(t . SYMBOL)'. Entries like `(t . SYMBOL)'
4570 may precede a `(defun . FUNCTION)' entry, and means that SYMBOL was an
4571 autoload before this file redefined it as a function. In addition,
4572 entries may also be single symbols, which means that SYMBOL was
4573 defined by `defvar' or `defconst'.
4575 During preloading, the file name recorded is relative to the main Lisp
4576 directory. These file names are converted to absolute at startup. */);
4577 Vload_history = Qnil;
4579 DEFVAR_LISP ("load-file-name", Vload_file_name,
4580 doc: /* Full name of file being loaded by `load'. */);
4581 Vload_file_name = Qnil;
4583 DEFVAR_LISP ("user-init-file", Vuser_init_file,
4584 doc: /* File name, including directory, of user's initialization file.
4585 If the file loaded had extension `.elc', and the corresponding source file
4586 exists, this variable contains the name of source file, suitable for use
4587 by functions like `custom-save-all' which edit the init file.
4588 While Emacs loads and evaluates the init file, value is the real name
4589 of the file, regardless of whether or not it has the `.elc' extension. */);
4590 Vuser_init_file = Qnil;
4592 DEFVAR_LISP ("current-load-list", Vcurrent_load_list,
4593 doc: /* Used for internal purposes by `load'. */);
4594 Vcurrent_load_list = Qnil;
4596 DEFVAR_LISP ("load-read-function", Vload_read_function,
4597 doc: /* Function used by `load' and `eval-region' for reading expressions.
4598 The default is nil, which means use the function `read'. */);
4599 Vload_read_function = Qnil;
4601 DEFVAR_LISP ("load-source-file-function", Vload_source_file_function,
4602 doc: /* Function called in `load' to load an Emacs Lisp source file.
4603 The value should be a function for doing code conversion before
4604 reading a source file. It can also be nil, in which case loading is
4605 done without any code conversion.
4607 If the value is a function, it is called with four arguments,
4608 FULLNAME, FILE, NOERROR, NOMESSAGE. FULLNAME is the absolute name of
4609 the file to load, FILE is the non-absolute name (for messages etc.),
4610 and NOERROR and NOMESSAGE are the corresponding arguments passed to
4611 `load'. The function should return t if the file was loaded. */);
4612 Vload_source_file_function = Qnil;
4614 DEFVAR_BOOL ("load-force-doc-strings", load_force_doc_strings,
4615 doc: /* Non-nil means `load' should force-load all dynamic doc strings.
4616 This is useful when the file being loaded is a temporary copy. */);
4617 load_force_doc_strings = 0;
4619 DEFVAR_BOOL ("load-convert-to-unibyte", load_convert_to_unibyte,
4620 doc: /* Non-nil means `read' converts strings to unibyte whenever possible.
4621 This is normally bound by `load' and `eval-buffer' to control `read',
4622 and is not meant for users to change. */);
4623 load_convert_to_unibyte = 0;
4625 DEFVAR_LISP ("source-directory", Vsource_directory,
4626 doc: /* Directory in which Emacs sources were found when Emacs was built.
4627 You cannot count on them to still be there! */);
4628 Vsource_directory
4629 = Fexpand_file_name (build_string ("../"),
4630 Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH, 0)));
4632 DEFVAR_LISP ("preloaded-file-list", Vpreloaded_file_list,
4633 doc: /* List of files that were preloaded (when dumping Emacs). */);
4634 Vpreloaded_file_list = Qnil;
4636 DEFVAR_LISP ("byte-boolean-vars", Vbyte_boolean_vars,
4637 doc: /* List of all DEFVAR_BOOL variables, used by the byte code optimizer. */);
4638 Vbyte_boolean_vars = Qnil;
4640 DEFVAR_BOOL ("load-dangerous-libraries", load_dangerous_libraries,
4641 doc: /* Non-nil means load dangerous compiled Lisp files.
4642 Some versions of XEmacs use different byte codes than Emacs. These
4643 incompatible byte codes can make Emacs crash when it tries to execute
4644 them. */);
4645 load_dangerous_libraries = 0;
4647 DEFVAR_BOOL ("force-load-messages", force_load_messages,
4648 doc: /* Non-nil means force printing messages when loading Lisp files.
4649 This overrides the value of the NOMESSAGE argument to `load'. */);
4650 force_load_messages = 0;
4652 DEFVAR_LISP ("bytecomp-version-regexp", Vbytecomp_version_regexp,
4653 doc: /* Regular expression matching safe to load compiled Lisp files.
4654 When Emacs loads a compiled Lisp file, it reads the first 512 bytes
4655 from the file, and matches them against this regular expression.
4656 When the regular expression matches, the file is considered to be safe
4657 to load. See also `load-dangerous-libraries'. */);
4658 Vbytecomp_version_regexp
4659 = build_pure_c_string ("^;;;.\\(in Emacs version\\|bytecomp version FSF\\)");
4661 DEFSYM (Qlexical_binding, "lexical-binding");
4662 DEFVAR_LISP ("lexical-binding", Vlexical_binding,
4663 doc: /* Whether to use lexical binding when evaluating code.
4664 Non-nil means that the code in the current buffer should be evaluated
4665 with lexical binding.
4666 This variable is automatically set from the file variables of an
4667 interpreted Lisp file read using `load'. Unlike other file local
4668 variables, this must be set in the first line of a file. */);
4669 Vlexical_binding = Qnil;
4670 Fmake_variable_buffer_local (Qlexical_binding);
4672 DEFVAR_LISP ("eval-buffer-list", Veval_buffer_list,
4673 doc: /* List of buffers being read from by calls to `eval-buffer' and `eval-region'. */);
4674 Veval_buffer_list = Qnil;
4676 DEFVAR_LISP ("old-style-backquotes", Vold_style_backquotes,
4677 doc: /* Set to non-nil when `read' encounters an old-style backquote. */);
4678 Vold_style_backquotes = Qnil;
4679 DEFSYM (Qold_style_backquotes, "old-style-backquotes");
4681 DEFVAR_BOOL ("load-prefer-newer", load_prefer_newer,
4682 doc: /* Non-nil means `load' prefers the newest version of a file.
4683 This applies when a filename suffix is not explicitly specified and
4684 `load' is trying various possible suffixes (see `load-suffixes' and
4685 `load-file-rep-suffixes'). Normally, it stops at the first file
4686 that exists unless you explicitly specify one or the other. If this
4687 option is non-nil, it checks all suffixes and uses whichever file is
4688 newest.
4689 Note that if you customize this, obviously it will not affect files
4690 that are loaded before your customizations are read! */);
4691 load_prefer_newer = 0;
4693 /* Vsource_directory was initialized in init_lread. */
4695 DEFSYM (Qcurrent_load_list, "current-load-list");
4696 DEFSYM (Qstandard_input, "standard-input");
4697 DEFSYM (Qread_char, "read-char");
4698 DEFSYM (Qget_file_char, "get-file-char");
4699 DEFSYM (Qget_emacs_mule_file_char, "get-emacs-mule-file-char");
4700 DEFSYM (Qload_force_doc_strings, "load-force-doc-strings");
4702 DEFSYM (Qbackquote, "`");
4703 DEFSYM (Qcomma, ",");
4704 DEFSYM (Qcomma_at, ",@");
4705 DEFSYM (Qcomma_dot, ",.");
4707 DEFSYM (Qinhibit_file_name_operation, "inhibit-file-name-operation");
4708 DEFSYM (Qascii_character, "ascii-character");
4709 DEFSYM (Qfunction, "function");
4710 DEFSYM (Qload, "load");
4711 DEFSYM (Qload_file_name, "load-file-name");
4712 DEFSYM (Qeval_buffer_list, "eval-buffer-list");
4713 DEFSYM (Qfile_truename, "file-truename");
4714 DEFSYM (Qdir_ok, "dir-ok");
4715 DEFSYM (Qdo_after_load_evaluation, "do-after-load-evaluation");
4717 staticpro (&read_objects);
4718 read_objects = Qnil;
4719 staticpro (&seen_list);
4720 seen_list = Qnil;
4722 Vloads_in_progress = Qnil;
4723 staticpro (&Vloads_in_progress);
4725 DEFSYM (Qhash_table, "hash-table");
4726 DEFSYM (Qdata, "data");
4727 DEFSYM (Qtest, "test");
4728 DEFSYM (Qsize, "size");
4729 DEFSYM (Qweakness, "weakness");
4730 DEFSYM (Qrehash_size, "rehash-size");
4731 DEFSYM (Qrehash_threshold, "rehash-threshold");