* src/lread.c: Minor cleanup.
[emacs.git] / src / lread.c
blobf8ab03af218c00e00a7be9f414b8d2fae980d3fc
1 /* Lisp parsing and input streams.
3 Copyright (C) 1985-1989, 1993-1995, 1997-2013 Free Software Foundation,
4 Inc.
6 This file is part of GNU Emacs.
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
22 #include <config.h>
23 #include <stdio.h>
24 #include <sys/types.h>
25 #include <sys/stat.h>
26 #include <sys/file.h>
27 #include <errno.h>
28 #include <limits.h> /* For CHAR_BIT. */
29 #include <stat-time.h>
30 #include "lisp.h"
31 #include "intervals.h"
32 #include "character.h"
33 #include "buffer.h"
34 #include "charset.h"
35 #include "coding.h"
36 #include <epaths.h>
37 #include "commands.h"
38 #include "keyboard.h"
39 #include "frame.h"
40 #include "termhooks.h"
41 #include "coding.h"
42 #include "blockinput.h"
44 #ifdef MSDOS
45 #include "msdos.h"
46 #endif
48 #ifdef HAVE_NS
49 #include "nsterm.h"
50 #endif
52 #include <unistd.h>
54 #ifdef HAVE_SETLOCALE
55 #include <locale.h>
56 #endif /* HAVE_SETLOCALE */
58 #include <fcntl.h>
60 #ifdef HAVE_FSEEKO
61 #define file_offset off_t
62 #define file_tell ftello
63 #else
64 #define file_offset long
65 #define file_tell ftell
66 #endif
68 /* Hash table read constants. */
69 static Lisp_Object Qhash_table, Qdata;
70 static Lisp_Object Qtest, Qsize;
71 static Lisp_Object Qweakness;
72 static Lisp_Object Qrehash_size;
73 static Lisp_Object Qrehash_threshold;
75 static Lisp_Object Qread_char, Qget_file_char, Qcurrent_load_list;
76 Lisp_Object Qstandard_input;
77 Lisp_Object Qvariable_documentation;
78 static Lisp_Object Qascii_character, Qload, Qload_file_name;
79 Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
80 static Lisp_Object Qinhibit_file_name_operation;
81 static Lisp_Object Qeval_buffer_list;
82 Lisp_Object Qlexical_binding;
83 static Lisp_Object Qfile_truename, Qdo_after_load_evaluation; /* ACM 2006/5/16 */
85 /* Used instead of Qget_file_char while loading *.elc files compiled
86 by Emacs 21 or older. */
87 static Lisp_Object Qget_emacs_mule_file_char;
89 static Lisp_Object Qload_force_doc_strings;
91 static Lisp_Object Qload_in_progress;
93 /* The association list of objects read with the #n=object form.
94 Each member of the list has the form (n . object), and is used to
95 look up the object for the corresponding #n# construct.
96 It must be set to nil before all top-level calls to read0. */
97 static Lisp_Object read_objects;
99 /* List of descriptors now open for Fload. */
100 static Lisp_Object load_descriptor_list;
102 /* File for get_file_char to read from. Use by load. */
103 static FILE *instream;
105 /* For use within read-from-string (this reader is non-reentrant!!) */
106 static ptrdiff_t read_from_string_index;
107 static ptrdiff_t read_from_string_index_byte;
108 static ptrdiff_t read_from_string_limit;
110 /* Number of characters read in the current call to Fread or
111 Fread_from_string. */
112 static EMACS_INT readchar_count;
114 /* This contains the last string skipped with #@. */
115 static char *saved_doc_string;
116 /* Length of buffer allocated in saved_doc_string. */
117 static ptrdiff_t saved_doc_string_size;
118 /* Length of actual data in saved_doc_string. */
119 static ptrdiff_t saved_doc_string_length;
120 /* This is the file position that string came from. */
121 static file_offset saved_doc_string_position;
123 /* This contains the previous string skipped with #@.
124 We copy it from saved_doc_string when a new string
125 is put in saved_doc_string. */
126 static char *prev_saved_doc_string;
127 /* Length of buffer allocated in prev_saved_doc_string. */
128 static ptrdiff_t prev_saved_doc_string_size;
129 /* Length of actual data in prev_saved_doc_string. */
130 static ptrdiff_t prev_saved_doc_string_length;
131 /* This is the file position that string came from. */
132 static file_offset prev_saved_doc_string_position;
134 /* True means inside a new-style backquote
135 with no surrounding parentheses.
136 Fread initializes this to false, so we need not specbind it
137 or worry about what happens to it when there is an error. */
138 static bool new_backquote_flag;
139 static Lisp_Object Qold_style_backquotes;
141 /* A list of file names for files being loaded in Fload. Used to
142 check for recursive loads. */
144 static Lisp_Object Vloads_in_progress;
146 static int read_emacs_mule_char (int, int (*) (int, Lisp_Object),
147 Lisp_Object);
149 static void readevalloop (Lisp_Object, FILE *, Lisp_Object, bool,
150 Lisp_Object, Lisp_Object,
151 Lisp_Object, Lisp_Object);
152 static Lisp_Object load_unwind (Lisp_Object);
153 static Lisp_Object load_descriptor_unwind (Lisp_Object);
155 /* Functions that read one byte from the current source READCHARFUN
156 or unreads one byte. If the integer argument C is -1, it returns
157 one read byte, or -1 when there's no more byte in the source. If C
158 is 0 or positive, it unreads C, and the return value is not
159 interesting. */
161 static int readbyte_for_lambda (int, Lisp_Object);
162 static int readbyte_from_file (int, Lisp_Object);
163 static int readbyte_from_string (int, Lisp_Object);
165 /* Handle unreading and rereading of characters.
166 Write READCHAR to read a character,
167 UNREAD(c) to unread c to be read again.
169 These macros correctly read/unread multibyte characters. */
171 #define READCHAR readchar (readcharfun, NULL)
172 #define UNREAD(c) unreadchar (readcharfun, c)
174 /* Same as READCHAR but set *MULTIBYTE to the multibyteness of the source. */
175 #define READCHAR_REPORT_MULTIBYTE(multibyte) readchar (readcharfun, multibyte)
177 /* When READCHARFUN is Qget_file_char, Qget_emacs_mule_file_char,
178 Qlambda, or a cons, we use this to keep an unread character because
179 a file stream can't handle multibyte-char unreading. The value -1
180 means that there's no unread character. */
181 static int unread_char;
183 static int
184 readchar (Lisp_Object readcharfun, bool *multibyte)
186 Lisp_Object tem;
187 register int c;
188 int (*readbyte) (int, Lisp_Object);
189 unsigned char buf[MAX_MULTIBYTE_LENGTH];
190 int i, len;
191 bool emacs_mule_encoding = 0;
193 if (multibyte)
194 *multibyte = 0;
196 readchar_count++;
198 if (BUFFERP (readcharfun))
200 register struct buffer *inbuffer = XBUFFER (readcharfun);
202 ptrdiff_t pt_byte = BUF_PT_BYTE (inbuffer);
204 if (pt_byte >= BUF_ZV_BYTE (inbuffer))
205 return -1;
207 if (! NILP (BVAR (inbuffer, enable_multibyte_characters)))
209 /* Fetch the character code from the buffer. */
210 unsigned char *p = BUF_BYTE_ADDRESS (inbuffer, pt_byte);
211 BUF_INC_POS (inbuffer, pt_byte);
212 c = STRING_CHAR (p);
213 if (multibyte)
214 *multibyte = 1;
216 else
218 c = BUF_FETCH_BYTE (inbuffer, pt_byte);
219 if (! ASCII_BYTE_P (c))
220 c = BYTE8_TO_CHAR (c);
221 pt_byte++;
223 SET_BUF_PT_BOTH (inbuffer, BUF_PT (inbuffer) + 1, pt_byte);
225 return c;
227 if (MARKERP (readcharfun))
229 register struct buffer *inbuffer = XMARKER (readcharfun)->buffer;
231 ptrdiff_t bytepos = marker_byte_position (readcharfun);
233 if (bytepos >= BUF_ZV_BYTE (inbuffer))
234 return -1;
236 if (! NILP (BVAR (inbuffer, enable_multibyte_characters)))
238 /* Fetch the character code from the buffer. */
239 unsigned char *p = BUF_BYTE_ADDRESS (inbuffer, bytepos);
240 BUF_INC_POS (inbuffer, bytepos);
241 c = STRING_CHAR (p);
242 if (multibyte)
243 *multibyte = 1;
245 else
247 c = BUF_FETCH_BYTE (inbuffer, bytepos);
248 if (! ASCII_BYTE_P (c))
249 c = BYTE8_TO_CHAR (c);
250 bytepos++;
253 XMARKER (readcharfun)->bytepos = bytepos;
254 XMARKER (readcharfun)->charpos++;
256 return c;
259 if (EQ (readcharfun, Qlambda))
261 readbyte = readbyte_for_lambda;
262 goto read_multibyte;
265 if (EQ (readcharfun, Qget_file_char))
267 readbyte = readbyte_from_file;
268 goto read_multibyte;
271 if (STRINGP (readcharfun))
273 if (read_from_string_index >= read_from_string_limit)
274 c = -1;
275 else if (STRING_MULTIBYTE (readcharfun))
277 if (multibyte)
278 *multibyte = 1;
279 FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c, readcharfun,
280 read_from_string_index,
281 read_from_string_index_byte);
283 else
285 c = SREF (readcharfun, read_from_string_index_byte);
286 read_from_string_index++;
287 read_from_string_index_byte++;
289 return c;
292 if (CONSP (readcharfun))
294 /* This is the case that read_vector is reading from a unibyte
295 string that contains a byte sequence previously skipped
296 because of #@NUMBER. The car part of readcharfun is that
297 string, and the cdr part is a value of readcharfun given to
298 read_vector. */
299 readbyte = readbyte_from_string;
300 if (EQ (XCDR (readcharfun), Qget_emacs_mule_file_char))
301 emacs_mule_encoding = 1;
302 goto read_multibyte;
305 if (EQ (readcharfun, Qget_emacs_mule_file_char))
307 readbyte = readbyte_from_file;
308 emacs_mule_encoding = 1;
309 goto read_multibyte;
312 tem = call0 (readcharfun);
314 if (NILP (tem))
315 return -1;
316 return XINT (tem);
318 read_multibyte:
319 if (unread_char >= 0)
321 c = unread_char;
322 unread_char = -1;
323 return c;
325 c = (*readbyte) (-1, readcharfun);
326 if (c < 0)
327 return c;
328 if (multibyte)
329 *multibyte = 1;
330 if (ASCII_BYTE_P (c))
331 return c;
332 if (emacs_mule_encoding)
333 return read_emacs_mule_char (c, readbyte, readcharfun);
334 i = 0;
335 buf[i++] = c;
336 len = BYTES_BY_CHAR_HEAD (c);
337 while (i < len)
339 c = (*readbyte) (-1, readcharfun);
340 if (c < 0 || ! TRAILING_CODE_P (c))
342 while (--i > 1)
343 (*readbyte) (buf[i], readcharfun);
344 return BYTE8_TO_CHAR (buf[0]);
346 buf[i++] = c;
348 return STRING_CHAR (buf);
351 #define FROM_FILE_P(readcharfun) \
352 (EQ (readcharfun, Qget_file_char) \
353 || EQ (readcharfun, Qget_emacs_mule_file_char))
355 static void
356 skip_dyn_bytes (Lisp_Object readcharfun, ptrdiff_t n)
358 if (FROM_FILE_P (readcharfun))
360 block_input (); /* FIXME: Not sure if it's needed. */
361 fseek (instream, n, SEEK_CUR);
362 unblock_input ();
364 else
365 { /* We're not reading directly from a file. In that case, it's difficult
366 to reliably count bytes, since these are usually meant for the file's
367 encoding, whereas we're now typically in the internal encoding.
368 But luckily, skip_dyn_bytes is used to skip over a single
369 dynamic-docstring (or dynamic byte-code) which is always quoted such
370 that \037 is the final char. */
371 int c;
372 do {
373 c = READCHAR;
374 } while (c >= 0 && c != '\037');
378 /* Unread the character C in the way appropriate for the stream READCHARFUN.
379 If the stream is a user function, call it with the char as argument. */
381 static void
382 unreadchar (Lisp_Object readcharfun, int c)
384 readchar_count--;
385 if (c == -1)
386 /* Don't back up the pointer if we're unreading the end-of-input mark,
387 since readchar didn't advance it when we read it. */
389 else if (BUFFERP (readcharfun))
391 struct buffer *b = XBUFFER (readcharfun);
392 ptrdiff_t charpos = BUF_PT (b);
393 ptrdiff_t bytepos = BUF_PT_BYTE (b);
395 if (! NILP (BVAR (b, enable_multibyte_characters)))
396 BUF_DEC_POS (b, bytepos);
397 else
398 bytepos--;
400 SET_BUF_PT_BOTH (b, charpos - 1, bytepos);
402 else if (MARKERP (readcharfun))
404 struct buffer *b = XMARKER (readcharfun)->buffer;
405 ptrdiff_t bytepos = XMARKER (readcharfun)->bytepos;
407 XMARKER (readcharfun)->charpos--;
408 if (! NILP (BVAR (b, enable_multibyte_characters)))
409 BUF_DEC_POS (b, bytepos);
410 else
411 bytepos--;
413 XMARKER (readcharfun)->bytepos = bytepos;
415 else if (STRINGP (readcharfun))
417 read_from_string_index--;
418 read_from_string_index_byte
419 = string_char_to_byte (readcharfun, read_from_string_index);
421 else if (CONSP (readcharfun))
423 unread_char = c;
425 else if (EQ (readcharfun, Qlambda))
427 unread_char = c;
429 else if (FROM_FILE_P (readcharfun))
431 unread_char = c;
433 else
434 call1 (readcharfun, make_number (c));
437 static int
438 readbyte_for_lambda (int c, Lisp_Object readcharfun)
440 return read_bytecode_char (c >= 0);
444 static int
445 readbyte_from_file (int c, Lisp_Object readcharfun)
447 if (c >= 0)
449 block_input ();
450 ungetc (c, instream);
451 unblock_input ();
452 return 0;
455 block_input ();
456 c = getc (instream);
458 /* Interrupted reads have been observed while reading over the network. */
459 while (c == EOF && ferror (instream) && errno == EINTR)
461 unblock_input ();
462 QUIT;
463 block_input ();
464 clearerr (instream);
465 c = getc (instream);
468 unblock_input ();
470 return (c == EOF ? -1 : c);
473 static int
474 readbyte_from_string (int c, Lisp_Object readcharfun)
476 Lisp_Object string = XCAR (readcharfun);
478 if (c >= 0)
480 read_from_string_index--;
481 read_from_string_index_byte
482 = string_char_to_byte (string, read_from_string_index);
485 if (read_from_string_index >= read_from_string_limit)
486 c = -1;
487 else
488 FETCH_STRING_CHAR_ADVANCE (c, string,
489 read_from_string_index,
490 read_from_string_index_byte);
491 return c;
495 /* Read one non-ASCII character from INSTREAM. The character is
496 encoded in `emacs-mule' and the first byte is already read in
497 C. */
499 static int
500 read_emacs_mule_char (int c, int (*readbyte) (int, Lisp_Object), Lisp_Object readcharfun)
502 /* Emacs-mule coding uses at most 4-byte for one character. */
503 unsigned char buf[4];
504 int len = emacs_mule_bytes[c];
505 struct charset *charset;
506 int i;
507 unsigned code;
509 if (len == 1)
510 /* C is not a valid leading-code of `emacs-mule'. */
511 return BYTE8_TO_CHAR (c);
513 i = 0;
514 buf[i++] = c;
515 while (i < len)
517 c = (*readbyte) (-1, readcharfun);
518 if (c < 0xA0)
520 while (--i > 1)
521 (*readbyte) (buf[i], readcharfun);
522 return BYTE8_TO_CHAR (buf[0]);
524 buf[i++] = c;
527 if (len == 2)
529 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
530 code = buf[1] & 0x7F;
532 else if (len == 3)
534 if (buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_11
535 || buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_12)
537 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
538 code = buf[2] & 0x7F;
540 else
542 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
543 code = ((buf[1] << 8) | buf[2]) & 0x7F7F;
546 else
548 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
549 code = ((buf[2] << 8) | buf[3]) & 0x7F7F;
551 c = DECODE_CHAR (charset, code);
552 if (c < 0)
553 Fsignal (Qinvalid_read_syntax,
554 Fcons (build_string ("invalid multibyte form"), Qnil));
555 return c;
559 static Lisp_Object read_internal_start (Lisp_Object, Lisp_Object,
560 Lisp_Object);
561 static Lisp_Object read0 (Lisp_Object);
562 static Lisp_Object read1 (Lisp_Object, int *, bool);
564 static Lisp_Object read_list (bool, Lisp_Object);
565 static Lisp_Object read_vector (Lisp_Object, bool);
567 static Lisp_Object substitute_object_recurse (Lisp_Object, Lisp_Object,
568 Lisp_Object);
569 static void substitute_object_in_subtree (Lisp_Object,
570 Lisp_Object);
571 static void substitute_in_interval (INTERVAL, Lisp_Object);
574 /* Get a character from the tty. */
576 /* Read input events until we get one that's acceptable for our purposes.
578 If NO_SWITCH_FRAME, switch-frame events are stashed
579 until we get a character we like, and then stuffed into
580 unread_switch_frame.
582 If ASCII_REQUIRED, check function key events to see
583 if the unmodified version of the symbol has a Qascii_character
584 property, and use that character, if present.
586 If ERROR_NONASCII, signal an error if the input we
587 get isn't an ASCII character with modifiers. If it's false but
588 ASCII_REQUIRED is true, just re-read until we get an ASCII
589 character.
591 If INPUT_METHOD, invoke the current input method
592 if the character warrants that.
594 If SECONDS is a number, wait that many seconds for input, and
595 return Qnil if no input arrives within that time. */
597 static Lisp_Object
598 read_filtered_event (bool no_switch_frame, bool ascii_required,
599 bool error_nonascii, bool input_method, Lisp_Object seconds)
601 Lisp_Object val, delayed_switch_frame;
602 EMACS_TIME end_time;
604 #ifdef HAVE_WINDOW_SYSTEM
605 if (display_hourglass_p)
606 cancel_hourglass ();
607 #endif
609 delayed_switch_frame = Qnil;
611 /* Compute timeout. */
612 if (NUMBERP (seconds))
614 double duration = extract_float (seconds);
615 EMACS_TIME wait_time = EMACS_TIME_FROM_DOUBLE (duration);
616 end_time = add_emacs_time (current_emacs_time (), wait_time);
619 /* Read until we get an acceptable event. */
620 retry:
622 val = read_char (0, Qnil, (input_method ? Qnil : Qt), 0,
623 NUMBERP (seconds) ? &end_time : NULL);
624 while (INTEGERP (val) && XINT (val) == -2); /* wrong_kboard_jmpbuf */
626 if (BUFFERP (val))
627 goto retry;
629 /* `switch-frame' events are put off until after the next ASCII
630 character. This is better than signaling an error just because
631 the last characters were typed to a separate minibuffer frame,
632 for example. Eventually, some code which can deal with
633 switch-frame events will read it and process it. */
634 if (no_switch_frame
635 && EVENT_HAS_PARAMETERS (val)
636 && EQ (EVENT_HEAD_KIND (EVENT_HEAD (val)), Qswitch_frame))
638 delayed_switch_frame = val;
639 goto retry;
642 if (ascii_required && !(NUMBERP (seconds) && NILP (val)))
644 /* Convert certain symbols to their ASCII equivalents. */
645 if (SYMBOLP (val))
647 Lisp_Object tem, tem1;
648 tem = Fget (val, Qevent_symbol_element_mask);
649 if (!NILP (tem))
651 tem1 = Fget (Fcar (tem), Qascii_character);
652 /* Merge this symbol's modifier bits
653 with the ASCII equivalent of its basic code. */
654 if (!NILP (tem1))
655 XSETFASTINT (val, XINT (tem1) | XINT (Fcar (Fcdr (tem))));
659 /* If we don't have a character now, deal with it appropriately. */
660 if (!INTEGERP (val))
662 if (error_nonascii)
664 Vunread_command_events = Fcons (val, Qnil);
665 error ("Non-character input-event");
667 else
668 goto retry;
672 if (! NILP (delayed_switch_frame))
673 unread_switch_frame = delayed_switch_frame;
675 #if 0
677 #ifdef HAVE_WINDOW_SYSTEM
678 if (display_hourglass_p)
679 start_hourglass ();
680 #endif
682 #endif
684 return val;
687 DEFUN ("read-char", Fread_char, Sread_char, 0, 3, 0,
688 doc: /* Read a character from the command input (keyboard or macro).
689 It is returned as a number.
690 If the character has modifiers, they are resolved and reflected to the
691 character code if possible (e.g. C-SPC -> 0).
693 If the user generates an event which is not a character (i.e. a mouse
694 click or function key event), `read-char' signals an error. As an
695 exception, switch-frame events are put off until non-character events
696 can be read.
697 If you want to read non-character events, or ignore them, call
698 `read-event' or `read-char-exclusive' instead.
700 If the optional argument PROMPT is non-nil, display that as a prompt.
701 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
702 input method is turned on in the current buffer, that input method
703 is used for reading a character.
704 If the optional argument SECONDS is non-nil, it should be a number
705 specifying the maximum number of seconds to wait for input. If no
706 input arrives in that time, return nil. SECONDS may be a
707 floating-point value. */)
708 (Lisp_Object prompt, Lisp_Object inherit_input_method, Lisp_Object seconds)
710 Lisp_Object val;
712 if (! NILP (prompt))
713 message_with_string ("%s", prompt, 0);
714 val = read_filtered_event (1, 1, 1, ! NILP (inherit_input_method), seconds);
716 return (NILP (val) ? Qnil
717 : make_number (char_resolve_modifier_mask (XINT (val))));
720 DEFUN ("read-event", Fread_event, Sread_event, 0, 3, 0,
721 doc: /* Read an event object from the input stream.
722 If the optional argument PROMPT is non-nil, display that as a prompt.
723 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
724 input method is turned on in the current buffer, that input method
725 is used for reading a character.
726 If the optional argument SECONDS is non-nil, it should be a number
727 specifying the maximum number of seconds to wait for input. If no
728 input arrives in that time, return nil. SECONDS may be a
729 floating-point value. */)
730 (Lisp_Object prompt, Lisp_Object inherit_input_method, Lisp_Object seconds)
732 if (! NILP (prompt))
733 message_with_string ("%s", prompt, 0);
734 return read_filtered_event (0, 0, 0, ! NILP (inherit_input_method), seconds);
737 DEFUN ("read-char-exclusive", Fread_char_exclusive, Sread_char_exclusive, 0, 3, 0,
738 doc: /* Read a character from the command input (keyboard or macro).
739 It is returned as a number. Non-character events are ignored.
740 If the character has modifiers, they are resolved and reflected to the
741 character code if possible (e.g. C-SPC -> 0).
743 If the optional argument PROMPT is non-nil, display that as a prompt.
744 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
745 input method is turned on in the current buffer, that input method
746 is used for reading a character.
747 If the optional argument SECONDS is non-nil, it should be a number
748 specifying the maximum number of seconds to wait for input. If no
749 input arrives in that time, return nil. SECONDS may be a
750 floating-point value. */)
751 (Lisp_Object prompt, Lisp_Object inherit_input_method, Lisp_Object seconds)
753 Lisp_Object val;
755 if (! NILP (prompt))
756 message_with_string ("%s", prompt, 0);
758 val = read_filtered_event (1, 1, 0, ! NILP (inherit_input_method), seconds);
760 return (NILP (val) ? Qnil
761 : make_number (char_resolve_modifier_mask (XINT (val))));
764 DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0,
765 doc: /* Don't use this yourself. */)
766 (void)
768 register Lisp_Object val;
769 block_input ();
770 XSETINT (val, getc (instream));
771 unblock_input ();
772 return val;
778 /* Return true if the lisp code read using READCHARFUN defines a non-nil
779 `lexical-binding' file variable. After returning, the stream is
780 positioned following the first line, if it is a comment or #! line,
781 otherwise nothing is read. */
783 static bool
784 lisp_file_lexically_bound_p (Lisp_Object readcharfun)
786 int ch = READCHAR;
788 if (ch == '#')
790 ch = READCHAR;
791 if (ch != '!')
793 UNREAD (ch);
794 UNREAD ('#');
795 return 0;
797 while (ch != '\n' && ch != EOF)
798 ch = READCHAR;
799 if (ch == '\n') ch = READCHAR;
800 /* It is OK to leave the position after a #! line, since
801 that is what read1 does. */
804 if (ch != ';')
805 /* The first line isn't a comment, just give up. */
807 UNREAD (ch);
808 return 0;
810 else
811 /* Look for an appropriate file-variable in the first line. */
813 bool rv = 0;
814 enum {
815 NOMINAL, AFTER_FIRST_DASH, AFTER_ASTERIX,
816 } beg_end_state = NOMINAL;
817 bool in_file_vars = 0;
819 #define UPDATE_BEG_END_STATE(ch) \
820 if (beg_end_state == NOMINAL) \
821 beg_end_state = (ch == '-' ? AFTER_FIRST_DASH : NOMINAL); \
822 else if (beg_end_state == AFTER_FIRST_DASH) \
823 beg_end_state = (ch == '*' ? AFTER_ASTERIX : NOMINAL); \
824 else if (beg_end_state == AFTER_ASTERIX) \
826 if (ch == '-') \
827 in_file_vars = !in_file_vars; \
828 beg_end_state = NOMINAL; \
831 /* Skip until we get to the file vars, if any. */
834 ch = READCHAR;
835 UPDATE_BEG_END_STATE (ch);
837 while (!in_file_vars && ch != '\n' && ch != EOF);
839 while (in_file_vars)
841 char var[100], val[100];
842 unsigned i;
844 ch = READCHAR;
846 /* Read a variable name. */
847 while (ch == ' ' || ch == '\t')
848 ch = READCHAR;
850 i = 0;
851 while (ch != ':' && ch != '\n' && ch != EOF && in_file_vars)
853 if (i < sizeof var - 1)
854 var[i++] = ch;
855 UPDATE_BEG_END_STATE (ch);
856 ch = READCHAR;
859 /* Stop scanning if no colon was found before end marker. */
860 if (!in_file_vars || ch == '\n' || ch == EOF)
861 break;
863 while (i > 0 && (var[i - 1] == ' ' || var[i - 1] == '\t'))
864 i--;
865 var[i] = '\0';
867 if (ch == ':')
869 /* Read a variable value. */
870 ch = READCHAR;
872 while (ch == ' ' || ch == '\t')
873 ch = READCHAR;
875 i = 0;
876 while (ch != ';' && ch != '\n' && ch != EOF && in_file_vars)
878 if (i < sizeof val - 1)
879 val[i++] = ch;
880 UPDATE_BEG_END_STATE (ch);
881 ch = READCHAR;
883 if (! in_file_vars)
884 /* The value was terminated by an end-marker, which remove. */
885 i -= 3;
886 while (i > 0 && (val[i - 1] == ' ' || val[i - 1] == '\t'))
887 i--;
888 val[i] = '\0';
890 if (strcmp (var, "lexical-binding") == 0)
891 /* This is it... */
893 rv = (strcmp (val, "nil") != 0);
894 break;
899 while (ch != '\n' && ch != EOF)
900 ch = READCHAR;
902 return rv;
906 /* Value is a version number of byte compiled code if the file
907 associated with file descriptor FD is a compiled Lisp file that's
908 safe to load. Only files compiled with Emacs are safe to load.
909 Files compiled with XEmacs can lead to a crash in Fbyte_code
910 because of an incompatible change in the byte compiler. */
912 static int
913 safe_to_load_version (int fd)
915 char buf[512];
916 int nbytes, i;
917 int version = 1;
919 /* Read the first few bytes from the file, and look for a line
920 specifying the byte compiler version used. */
921 nbytes = emacs_read (fd, buf, sizeof buf);
922 if (nbytes > 0)
924 /* Skip to the next newline, skipping over the initial `ELC'
925 with NUL bytes following it, but note the version. */
926 for (i = 0; i < nbytes && buf[i] != '\n'; ++i)
927 if (i == 4)
928 version = buf[i];
930 if (i >= nbytes
931 || fast_c_string_match_ignore_case (Vbytecomp_version_regexp,
932 buf + i, nbytes - i) < 0)
933 version = 0;
936 lseek (fd, 0, SEEK_SET);
937 return version;
941 /* Callback for record_unwind_protect. Restore the old load list OLD,
942 after loading a file successfully. */
944 static Lisp_Object
945 record_load_unwind (Lisp_Object old)
947 return Vloads_in_progress = old;
950 /* This handler function is used via internal_condition_case_1. */
952 static Lisp_Object
953 load_error_handler (Lisp_Object data)
955 return Qnil;
958 static Lisp_Object
959 load_warn_old_style_backquotes (Lisp_Object file)
961 if (!NILP (Vold_style_backquotes))
963 Lisp_Object args[2];
964 args[0] = build_string ("Loading `%s': old-style backquotes detected!");
965 args[1] = file;
966 Fmessage (2, args);
968 return Qnil;
971 DEFUN ("get-load-suffixes", Fget_load_suffixes, Sget_load_suffixes, 0, 0, 0,
972 doc: /* Return the suffixes that `load' should try if a suffix is \
973 required.
974 This uses the variables `load-suffixes' and `load-file-rep-suffixes'. */)
975 (void)
977 Lisp_Object lst = Qnil, suffixes = Vload_suffixes, suffix, ext;
978 while (CONSP (suffixes))
980 Lisp_Object exts = Vload_file_rep_suffixes;
981 suffix = XCAR (suffixes);
982 suffixes = XCDR (suffixes);
983 while (CONSP (exts))
985 ext = XCAR (exts);
986 exts = XCDR (exts);
987 lst = Fcons (concat2 (suffix, ext), lst);
990 return Fnreverse (lst);
993 DEFUN ("load", Fload, Sload, 1, 5, 0,
994 doc: /* Execute a file of Lisp code named FILE.
995 First try FILE with `.elc' appended, then try with `.el',
996 then try FILE unmodified (the exact suffixes in the exact order are
997 determined by `load-suffixes'). Environment variable references in
998 FILE are replaced with their values by calling `substitute-in-file-name'.
999 This function searches the directories in `load-path'.
1001 If optional second arg NOERROR is non-nil,
1002 report no error if FILE doesn't exist.
1003 Print messages at start and end of loading unless
1004 optional third arg NOMESSAGE is non-nil (but `force-load-messages'
1005 overrides that).
1006 If optional fourth arg NOSUFFIX is non-nil, don't try adding
1007 suffixes `.elc' or `.el' to the specified name FILE.
1008 If optional fifth arg MUST-SUFFIX is non-nil, insist on
1009 the suffix `.elc' or `.el'; don't accept just FILE unless
1010 it ends in one of those suffixes or includes a directory name.
1012 If NOSUFFIX is nil, then if a file could not be found, try looking for
1013 a different representation of the file by adding non-empty suffixes to
1014 its name, before trying another file. Emacs uses this feature to find
1015 compressed versions of files when Auto Compression mode is enabled.
1016 If NOSUFFIX is non-nil, disable this feature.
1018 The suffixes that this function tries out, when NOSUFFIX is nil, are
1019 given by the return value of `get-load-suffixes' and the values listed
1020 in `load-file-rep-suffixes'. If MUST-SUFFIX is non-nil, only the
1021 return value of `get-load-suffixes' is used, i.e. the file name is
1022 required to have a non-empty suffix.
1024 Loading a file records its definitions, and its `provide' and
1025 `require' calls, in an element of `load-history' whose
1026 car is the file name loaded. See `load-history'.
1028 While the file is in the process of being loaded, the variable
1029 `load-in-progress' is non-nil and the variable `load-file-name'
1030 is bound to the file's name.
1032 Return t if the file exists and loads successfully. */)
1033 (Lisp_Object file, Lisp_Object noerror, Lisp_Object nomessage, Lisp_Object nosuffix, Lisp_Object must_suffix)
1035 register FILE *stream;
1036 register int fd = -1;
1037 ptrdiff_t count = SPECPDL_INDEX ();
1038 struct gcpro gcpro1, gcpro2, gcpro3;
1039 Lisp_Object found, efound, hist_file_name;
1040 /* True means we printed the ".el is newer" message. */
1041 bool newer = 0;
1042 /* True means we are loading a compiled file. */
1043 bool compiled = 0;
1044 Lisp_Object handler;
1045 bool safe_p = 1;
1046 const char *fmode = "r";
1047 Lisp_Object tmp[2];
1048 int version;
1050 #ifdef DOS_NT
1051 fmode = "rt";
1052 #endif /* DOS_NT */
1054 CHECK_STRING (file);
1056 /* If file name is magic, call the handler. */
1057 /* This shouldn't be necessary any more now that `openp' handles it right.
1058 handler = Ffind_file_name_handler (file, Qload);
1059 if (!NILP (handler))
1060 return call5 (handler, Qload, file, noerror, nomessage, nosuffix); */
1062 /* Do this after the handler to avoid
1063 the need to gcpro noerror, nomessage and nosuffix.
1064 (Below here, we care only whether they are nil or not.)
1065 The presence of this call is the result of a historical accident:
1066 it used to be in every file-operation and when it got removed
1067 everywhere, it accidentally stayed here. Since then, enough people
1068 supposedly have things like (load "$PROJECT/foo.el") in their .emacs
1069 that it seemed risky to remove. */
1070 if (! NILP (noerror))
1072 file = internal_condition_case_1 (Fsubstitute_in_file_name, file,
1073 Qt, load_error_handler);
1074 if (NILP (file))
1075 return Qnil;
1077 else
1078 file = Fsubstitute_in_file_name (file);
1081 /* Avoid weird lossage with null string as arg,
1082 since it would try to load a directory as a Lisp file. */
1083 if (SBYTES (file) > 0)
1085 ptrdiff_t size = SBYTES (file);
1087 found = Qnil;
1088 GCPRO2 (file, found);
1090 if (! NILP (must_suffix))
1092 /* Don't insist on adding a suffix if FILE already ends with one. */
1093 if (size > 3
1094 && !strcmp (SSDATA (file) + size - 3, ".el"))
1095 must_suffix = Qnil;
1096 else if (size > 4
1097 && !strcmp (SSDATA (file) + size - 4, ".elc"))
1098 must_suffix = Qnil;
1099 /* Don't insist on adding a suffix
1100 if the argument includes a directory name. */
1101 else if (! NILP (Ffile_name_directory (file)))
1102 must_suffix = Qnil;
1105 fd = openp (Vload_path, file,
1106 (!NILP (nosuffix) ? Qnil
1107 : !NILP (must_suffix) ? Fget_load_suffixes ()
1108 : Fappend (2, (tmp[0] = Fget_load_suffixes (),
1109 tmp[1] = Vload_file_rep_suffixes,
1110 tmp))),
1111 &found, Qnil);
1112 UNGCPRO;
1115 if (fd == -1)
1117 if (NILP (noerror))
1118 xsignal2 (Qfile_error, build_string ("Cannot open load file"), file);
1119 return Qnil;
1122 /* Tell startup.el whether or not we found the user's init file. */
1123 if (EQ (Qt, Vuser_init_file))
1124 Vuser_init_file = found;
1126 /* If FD is -2, that means openp found a magic file. */
1127 if (fd == -2)
1129 if (NILP (Fequal (found, file)))
1130 /* If FOUND is a different file name from FILE,
1131 find its handler even if we have already inhibited
1132 the `load' operation on FILE. */
1133 handler = Ffind_file_name_handler (found, Qt);
1134 else
1135 handler = Ffind_file_name_handler (found, Qload);
1136 if (! NILP (handler))
1137 return call5 (handler, Qload, found, noerror, nomessage, Qt);
1138 #ifdef DOS_NT
1139 /* Tramp has to deal with semi-broken packages that prepend
1140 drive letters to remote files. For that reason, Tramp
1141 catches file operations that test for file existence, which
1142 makes openp think X:/foo.elc files are remote. However,
1143 Tramp does not catch `load' operations for such files, so we
1144 end up with a nil as the `load' handler above. If we would
1145 continue with fd = -2, we will behave wrongly, and in
1146 particular try reading a .elc file in the "rt" mode instead
1147 of "rb". See bug #9311 for the results. To work around
1148 this, we try to open the file locally, and go with that if it
1149 succeeds. */
1150 fd = emacs_open (SSDATA (ENCODE_FILE (found)), O_RDONLY, 0);
1151 if (fd == -1)
1152 fd = -2;
1153 #endif
1156 /* Check if we're stuck in a recursive load cycle.
1158 2000-09-21: It's not possible to just check for the file loaded
1159 being a member of Vloads_in_progress. This fails because of the
1160 way the byte compiler currently works; `provide's are not
1161 evaluated, see font-lock.el/jit-lock.el as an example. This
1162 leads to a certain amount of ``normal'' recursion.
1164 Also, just loading a file recursively is not always an error in
1165 the general case; the second load may do something different. */
1167 int load_count = 0;
1168 Lisp_Object tem;
1169 for (tem = Vloads_in_progress; CONSP (tem); tem = XCDR (tem))
1170 if (!NILP (Fequal (found, XCAR (tem))) && (++load_count > 3))
1172 if (fd >= 0)
1173 emacs_close (fd);
1174 signal_error ("Recursive load", Fcons (found, Vloads_in_progress));
1176 record_unwind_protect (record_load_unwind, Vloads_in_progress);
1177 Vloads_in_progress = Fcons (found, Vloads_in_progress);
1180 /* All loads are by default dynamic, unless the file itself specifies
1181 otherwise using a file-variable in the first line. This is bound here
1182 so that it takes effect whether or not we use
1183 Vload_source_file_function. */
1184 specbind (Qlexical_binding, Qnil);
1186 /* Get the name for load-history. */
1187 hist_file_name = (! NILP (Vpurify_flag)
1188 ? Fconcat (2, (tmp[0] = Ffile_name_directory (file),
1189 tmp[1] = Ffile_name_nondirectory (found),
1190 tmp))
1191 : found) ;
1193 version = -1;
1195 /* Check for the presence of old-style quotes and warn about them. */
1196 specbind (Qold_style_backquotes, Qnil);
1197 record_unwind_protect (load_warn_old_style_backquotes, file);
1199 if (!memcmp (SDATA (found) + SBYTES (found) - 4, ".elc", 4)
1200 || (fd >= 0 && (version = safe_to_load_version (fd)) > 0))
1201 /* Load .elc files directly, but not when they are
1202 remote and have no handler! */
1204 if (fd != -2)
1206 struct stat s1, s2;
1207 int result;
1209 GCPRO3 (file, found, hist_file_name);
1211 if (version < 0
1212 && ! (version = safe_to_load_version (fd)))
1214 safe_p = 0;
1215 if (!load_dangerous_libraries)
1217 if (fd >= 0)
1218 emacs_close (fd);
1219 error ("File `%s' was not compiled in Emacs",
1220 SDATA (found));
1222 else if (!NILP (nomessage) && !force_load_messages)
1223 message_with_string ("File `%s' not compiled in Emacs", found, 1);
1226 compiled = 1;
1228 efound = ENCODE_FILE (found);
1230 #ifdef DOS_NT
1231 fmode = "rb";
1232 #endif /* DOS_NT */
1233 result = stat (SSDATA (efound), &s1);
1234 if (result == 0)
1236 SSET (efound, SBYTES (efound) - 1, 0);
1237 result = stat (SSDATA (efound), &s2);
1238 SSET (efound, SBYTES (efound) - 1, 'c');
1241 if (result == 0
1242 && EMACS_TIME_LT (get_stat_mtime (&s1), get_stat_mtime (&s2)))
1244 /* Make the progress messages mention that source is newer. */
1245 newer = 1;
1247 /* If we won't print another message, mention this anyway. */
1248 if (!NILP (nomessage) && !force_load_messages)
1250 Lisp_Object msg_file;
1251 msg_file = Fsubstring (found, make_number (0), make_number (-1));
1252 message_with_string ("Source file `%s' newer than byte-compiled file",
1253 msg_file, 1);
1256 UNGCPRO;
1259 else
1261 /* We are loading a source file (*.el). */
1262 if (!NILP (Vload_source_file_function))
1264 Lisp_Object val;
1266 if (fd >= 0)
1267 emacs_close (fd);
1268 val = call4 (Vload_source_file_function, found, hist_file_name,
1269 NILP (noerror) ? Qnil : Qt,
1270 (NILP (nomessage) || force_load_messages) ? Qnil : Qt);
1271 return unbind_to (count, val);
1275 GCPRO3 (file, found, hist_file_name);
1277 #ifdef WINDOWSNT
1278 efound = ENCODE_FILE (found);
1279 /* If we somehow got here with fd == -2, meaning the file is deemed
1280 to be remote, don't even try to reopen the file locally; just
1281 force a failure instead. */
1282 if (fd >= 0)
1284 emacs_close (fd);
1285 stream = fopen (SSDATA (efound), fmode);
1287 else
1288 stream = NULL;
1289 #else /* not WINDOWSNT */
1290 stream = fdopen (fd, fmode);
1291 #endif /* not WINDOWSNT */
1292 if (stream == 0)
1294 emacs_close (fd);
1295 error ("Failure to create stdio stream for %s", SDATA (file));
1298 if (! NILP (Vpurify_flag))
1299 Vpreloaded_file_list = Fcons (Fpurecopy (file), Vpreloaded_file_list);
1301 if (NILP (nomessage) || force_load_messages)
1303 if (!safe_p)
1304 message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...",
1305 file, 1);
1306 else if (!compiled)
1307 message_with_string ("Loading %s (source)...", file, 1);
1308 else if (newer)
1309 message_with_string ("Loading %s (compiled; note, source file is newer)...",
1310 file, 1);
1311 else /* The typical case; compiled file newer than source file. */
1312 message_with_string ("Loading %s...", file, 1);
1315 record_unwind_protect (load_unwind, make_save_pointer (stream));
1316 record_unwind_protect (load_descriptor_unwind, load_descriptor_list);
1317 specbind (Qload_file_name, found);
1318 specbind (Qinhibit_file_name_operation, Qnil);
1319 load_descriptor_list
1320 = Fcons (make_number (fileno (stream)), load_descriptor_list);
1321 specbind (Qload_in_progress, Qt);
1323 instream = stream;
1324 if (lisp_file_lexically_bound_p (Qget_file_char))
1325 Fset (Qlexical_binding, Qt);
1327 if (! version || version >= 22)
1328 readevalloop (Qget_file_char, stream, hist_file_name,
1329 0, Qnil, Qnil, Qnil, Qnil);
1330 else
1332 /* We can't handle a file which was compiled with
1333 byte-compile-dynamic by older version of Emacs. */
1334 specbind (Qload_force_doc_strings, Qt);
1335 readevalloop (Qget_emacs_mule_file_char, stream, hist_file_name,
1336 0, Qnil, Qnil, Qnil, Qnil);
1338 unbind_to (count, Qnil);
1340 /* Run any eval-after-load forms for this file. */
1341 if (!NILP (Ffboundp (Qdo_after_load_evaluation)))
1342 call1 (Qdo_after_load_evaluation, hist_file_name) ;
1344 UNGCPRO;
1346 xfree (saved_doc_string);
1347 saved_doc_string = 0;
1348 saved_doc_string_size = 0;
1350 xfree (prev_saved_doc_string);
1351 prev_saved_doc_string = 0;
1352 prev_saved_doc_string_size = 0;
1354 if (!noninteractive && (NILP (nomessage) || force_load_messages))
1356 if (!safe_p)
1357 message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...done",
1358 file, 1);
1359 else if (!compiled)
1360 message_with_string ("Loading %s (source)...done", file, 1);
1361 else if (newer)
1362 message_with_string ("Loading %s (compiled; note, source file is newer)...done",
1363 file, 1);
1364 else /* The typical case; compiled file newer than source file. */
1365 message_with_string ("Loading %s...done", file, 1);
1368 return Qt;
1371 static Lisp_Object
1372 load_unwind (Lisp_Object arg) /* Used as unwind-protect function in load. */
1374 FILE *stream = XSAVE_POINTER (arg, 0);
1375 if (stream != NULL)
1377 block_input ();
1378 fclose (stream);
1379 unblock_input ();
1381 return Qnil;
1384 static Lisp_Object
1385 load_descriptor_unwind (Lisp_Object oldlist)
1387 load_descriptor_list = oldlist;
1388 return Qnil;
1391 /* Close all descriptors in use for Floads.
1392 This is used when starting a subprocess. */
1394 void
1395 close_load_descs (void)
1397 #ifndef WINDOWSNT
1398 Lisp_Object tail;
1399 for (tail = load_descriptor_list; CONSP (tail); tail = XCDR (tail))
1400 emacs_close (XFASTINT (XCAR (tail)));
1401 #endif
1404 static bool
1405 complete_filename_p (Lisp_Object pathname)
1407 const unsigned char *s = SDATA (pathname);
1408 return (IS_DIRECTORY_SEP (s[0])
1409 || (SCHARS (pathname) > 2
1410 && IS_DEVICE_SEP (s[1]) && IS_DIRECTORY_SEP (s[2])));
1413 DEFUN ("locate-file-internal", Flocate_file_internal, Slocate_file_internal, 2, 4, 0,
1414 doc: /* Search for FILENAME through PATH.
1415 Returns the file's name in absolute form, or nil if not found.
1416 If SUFFIXES is non-nil, it should be a list of suffixes to append to
1417 file name when searching.
1418 If non-nil, PREDICATE is used instead of `file-readable-p'.
1419 PREDICATE can also be an integer to pass to the faccessat(2) function,
1420 in which case file-name-handlers are ignored.
1421 This function will normally skip directories, so if you want it to find
1422 directories, make sure the PREDICATE function returns `dir-ok' for them. */)
1423 (Lisp_Object filename, Lisp_Object path, Lisp_Object suffixes, Lisp_Object predicate)
1425 Lisp_Object file;
1426 int fd = openp (path, filename, suffixes, &file, predicate);
1427 if (NILP (predicate) && fd > 0)
1428 close (fd);
1429 return file;
1432 static Lisp_Object Qdir_ok;
1434 /* Search for a file whose name is STR, looking in directories
1435 in the Lisp list PATH, and trying suffixes from SUFFIX.
1436 On success, returns a file descriptor. On failure, returns -1.
1438 SUFFIXES is a list of strings containing possible suffixes.
1439 The empty suffix is automatically added if the list is empty.
1441 PREDICATE non-nil means don't open the files,
1442 just look for one that satisfies the predicate. In this case,
1443 returns 1 on success. The predicate can be a lisp function or
1444 an integer to pass to `access' (in which case file-name-handlers
1445 are ignored).
1447 If STOREPTR is nonzero, it points to a slot where the name of
1448 the file actually found should be stored as a Lisp string.
1449 nil is stored there on failure.
1451 If the file we find is remote, return -2
1452 but store the found remote file name in *STOREPTR. */
1455 openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes, Lisp_Object *storeptr, Lisp_Object predicate)
1457 ptrdiff_t fn_size = 100;
1458 char buf[100];
1459 char *fn = buf;
1460 bool absolute = 0;
1461 ptrdiff_t want_length;
1462 Lisp_Object filename;
1463 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
1464 Lisp_Object string, tail, encoded_fn;
1465 ptrdiff_t max_suffix_len = 0;
1467 CHECK_STRING (str);
1469 for (tail = suffixes; CONSP (tail); tail = XCDR (tail))
1471 CHECK_STRING_CAR (tail);
1472 max_suffix_len = max (max_suffix_len,
1473 SBYTES (XCAR (tail)));
1476 string = filename = encoded_fn = Qnil;
1477 GCPRO6 (str, string, filename, path, suffixes, encoded_fn);
1479 if (storeptr)
1480 *storeptr = Qnil;
1482 if (complete_filename_p (str))
1483 absolute = 1;
1485 for (; CONSP (path); path = XCDR (path))
1487 filename = Fexpand_file_name (str, XCAR (path));
1488 if (!complete_filename_p (filename))
1489 /* If there are non-absolute elts in PATH (eg "."). */
1490 /* Of course, this could conceivably lose if luser sets
1491 default-directory to be something non-absolute... */
1493 filename = Fexpand_file_name (filename, BVAR (current_buffer, directory));
1494 if (!complete_filename_p (filename))
1495 /* Give up on this path element! */
1496 continue;
1499 /* Calculate maximum length of any filename made from
1500 this path element/specified file name and any possible suffix. */
1501 want_length = max_suffix_len + SBYTES (filename);
1502 if (fn_size <= want_length)
1503 fn = alloca (fn_size = 100 + want_length);
1505 /* Loop over suffixes. */
1506 for (tail = NILP (suffixes) ? Fcons (empty_unibyte_string, Qnil) : suffixes;
1507 CONSP (tail); tail = XCDR (tail))
1509 ptrdiff_t fnlen, lsuffix = SBYTES (XCAR (tail));
1510 Lisp_Object handler;
1512 /* Concatenate path element/specified name with the suffix.
1513 If the directory starts with /:, remove that. */
1514 int prefixlen = ((SCHARS (filename) > 2
1515 && SREF (filename, 0) == '/'
1516 && SREF (filename, 1) == ':')
1517 ? 2 : 0);
1518 fnlen = SBYTES (filename) - prefixlen;
1519 memcpy (fn, SDATA (filename) + prefixlen, fnlen);
1520 memcpy (fn + fnlen, SDATA (XCAR (tail)), lsuffix + 1);
1521 fnlen += lsuffix;
1522 /* Check that the file exists and is not a directory. */
1523 /* We used to only check for handlers on non-absolute file names:
1524 if (absolute)
1525 handler = Qnil;
1526 else
1527 handler = Ffind_file_name_handler (filename, Qfile_exists_p);
1528 It's not clear why that was the case and it breaks things like
1529 (load "/bar.el") where the file is actually "/bar.el.gz". */
1530 string = make_string (fn, fnlen);
1531 handler = Ffind_file_name_handler (string, Qfile_exists_p);
1532 if ((!NILP (handler) || !NILP (predicate)) && !NATNUMP (predicate))
1534 bool exists;
1535 if (NILP (predicate))
1536 exists = !NILP (Ffile_readable_p (string));
1537 else
1539 Lisp_Object tmp = call1 (predicate, string);
1540 exists = !NILP (tmp)
1541 && (EQ (tmp, Qdir_ok)
1542 || NILP (Ffile_directory_p (string)));
1545 if (exists)
1547 /* We succeeded; return this descriptor and filename. */
1548 if (storeptr)
1549 *storeptr = string;
1550 UNGCPRO;
1551 return -2;
1554 else
1556 int fd;
1557 const char *pfn;
1559 encoded_fn = ENCODE_FILE (string);
1560 pfn = SSDATA (encoded_fn);
1562 /* Check that we can access or open it. */
1563 if (NATNUMP (predicate))
1564 fd = (((XFASTINT (predicate) & ~INT_MAX) == 0
1565 && (faccessat (AT_FDCWD, pfn, XFASTINT (predicate),
1566 AT_EACCESS)
1567 == 0)
1568 && ! file_directory_p (pfn))
1569 ? 1 : -1);
1570 else
1572 struct stat st;
1573 fd = emacs_open (pfn, O_RDONLY, 0);
1574 if (0 <= fd
1575 && (fstat (fd, &st) != 0 || S_ISDIR (st.st_mode)))
1577 emacs_close (fd);
1578 fd = -1;
1582 if (fd >= 0)
1584 /* We succeeded; return this descriptor and filename. */
1585 if (storeptr)
1586 *storeptr = string;
1587 UNGCPRO;
1588 return fd;
1592 if (absolute)
1593 break;
1596 UNGCPRO;
1597 return -1;
1601 /* Merge the list we've accumulated of globals from the current input source
1602 into the load_history variable. The details depend on whether
1603 the source has an associated file name or not.
1605 FILENAME is the file name that we are loading from.
1607 ENTIRE is true if loading that entire file, false if evaluating
1608 part of it. */
1610 static void
1611 build_load_history (Lisp_Object filename, bool entire)
1613 Lisp_Object tail, prev, newelt;
1614 Lisp_Object tem, tem2;
1615 bool foundit = 0;
1617 tail = Vload_history;
1618 prev = Qnil;
1620 while (CONSP (tail))
1622 tem = XCAR (tail);
1624 /* Find the feature's previous assoc list... */
1625 if (!NILP (Fequal (filename, Fcar (tem))))
1627 foundit = 1;
1629 /* If we're loading the entire file, remove old data. */
1630 if (entire)
1632 if (NILP (prev))
1633 Vload_history = XCDR (tail);
1634 else
1635 Fsetcdr (prev, XCDR (tail));
1638 /* Otherwise, cons on new symbols that are not already members. */
1639 else
1641 tem2 = Vcurrent_load_list;
1643 while (CONSP (tem2))
1645 newelt = XCAR (tem2);
1647 if (NILP (Fmember (newelt, tem)))
1648 Fsetcar (tail, Fcons (XCAR (tem),
1649 Fcons (newelt, XCDR (tem))));
1651 tem2 = XCDR (tem2);
1652 QUIT;
1656 else
1657 prev = tail;
1658 tail = XCDR (tail);
1659 QUIT;
1662 /* If we're loading an entire file, cons the new assoc onto the
1663 front of load-history, the most-recently-loaded position. Also
1664 do this if we didn't find an existing member for the file. */
1665 if (entire || !foundit)
1666 Vload_history = Fcons (Fnreverse (Vcurrent_load_list),
1667 Vload_history);
1670 static Lisp_Object
1671 readevalloop_1 (Lisp_Object old)
1673 load_convert_to_unibyte = ! NILP (old);
1674 return Qnil;
1677 /* Signal an `end-of-file' error, if possible with file name
1678 information. */
1680 static _Noreturn void
1681 end_of_file_error (void)
1683 if (STRINGP (Vload_file_name))
1684 xsignal1 (Qend_of_file, Vload_file_name);
1686 xsignal0 (Qend_of_file);
1689 /* UNIBYTE specifies how to set load_convert_to_unibyte
1690 for this invocation.
1691 READFUN, if non-nil, is used instead of `read'.
1693 START, END specify region to read in current buffer (from eval-region).
1694 If the input is not from a buffer, they must be nil. */
1696 static void
1697 readevalloop (Lisp_Object readcharfun,
1698 FILE *stream,
1699 Lisp_Object sourcename,
1700 bool printflag,
1701 Lisp_Object unibyte, Lisp_Object readfun,
1702 Lisp_Object start, Lisp_Object end)
1704 register int c;
1705 register Lisp_Object val;
1706 ptrdiff_t count = SPECPDL_INDEX ();
1707 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
1708 struct buffer *b = 0;
1709 bool continue_reading_p;
1710 Lisp_Object lex_bound;
1711 /* True if reading an entire buffer. */
1712 bool whole_buffer = 0;
1713 /* True on the first time around. */
1714 bool first_sexp = 1;
1715 Lisp_Object macroexpand = intern ("internal-macroexpand-for-load");
1717 if (NILP (Ffboundp (macroexpand))
1718 /* Don't macroexpand in .elc files, since it should have been done
1719 already. We actually don't know whether we're in a .elc file or not,
1720 so we use circumstantial evidence: .el files normally go through
1721 Vload_source_file_function -> load-with-code-conversion
1722 -> eval-buffer. */
1723 || EQ (readcharfun, Qget_file_char)
1724 || EQ (readcharfun, Qget_emacs_mule_file_char))
1725 macroexpand = Qnil;
1727 if (MARKERP (readcharfun))
1729 if (NILP (start))
1730 start = readcharfun;
1733 if (BUFFERP (readcharfun))
1734 b = XBUFFER (readcharfun);
1735 else if (MARKERP (readcharfun))
1736 b = XMARKER (readcharfun)->buffer;
1738 /* We assume START is nil when input is not from a buffer. */
1739 if (! NILP (start) && !b)
1740 emacs_abort ();
1742 specbind (Qstandard_input, readcharfun); /* GCPROs readcharfun. */
1743 specbind (Qcurrent_load_list, Qnil);
1744 record_unwind_protect (readevalloop_1, load_convert_to_unibyte ? Qt : Qnil);
1745 load_convert_to_unibyte = !NILP (unibyte);
1747 /* If lexical binding is active (either because it was specified in
1748 the file's header, or via a buffer-local variable), create an empty
1749 lexical environment, otherwise, turn off lexical binding. */
1750 lex_bound = find_symbol_value (Qlexical_binding);
1751 specbind (Qinternal_interpreter_environment,
1752 NILP (lex_bound) || EQ (lex_bound, Qunbound)
1753 ? Qnil : Fcons (Qt, Qnil));
1755 GCPRO4 (sourcename, readfun, start, end);
1757 /* Try to ensure sourcename is a truename, except whilst preloading. */
1758 if (NILP (Vpurify_flag)
1759 && !NILP (sourcename) && !NILP (Ffile_name_absolute_p (sourcename))
1760 && !NILP (Ffboundp (Qfile_truename)))
1761 sourcename = call1 (Qfile_truename, sourcename) ;
1763 LOADHIST_ATTACH (sourcename);
1765 continue_reading_p = 1;
1766 while (continue_reading_p)
1768 ptrdiff_t count1 = SPECPDL_INDEX ();
1770 if (b != 0 && !BUFFER_LIVE_P (b))
1771 error ("Reading from killed buffer");
1773 if (!NILP (start))
1775 /* Switch to the buffer we are reading from. */
1776 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1777 set_buffer_internal (b);
1779 /* Save point in it. */
1780 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1781 /* Save ZV in it. */
1782 record_unwind_protect (save_restriction_restore, save_restriction_save ());
1783 /* Those get unbound after we read one expression. */
1785 /* Set point and ZV around stuff to be read. */
1786 Fgoto_char (start);
1787 if (!NILP (end))
1788 Fnarrow_to_region (make_number (BEGV), end);
1790 /* Just for cleanliness, convert END to a marker
1791 if it is an integer. */
1792 if (INTEGERP (end))
1793 end = Fpoint_max_marker ();
1796 /* On the first cycle, we can easily test here
1797 whether we are reading the whole buffer. */
1798 if (b && first_sexp)
1799 whole_buffer = (PT == BEG && ZV == Z);
1801 instream = stream;
1802 read_next:
1803 c = READCHAR;
1804 if (c == ';')
1806 while ((c = READCHAR) != '\n' && c != -1);
1807 goto read_next;
1809 if (c < 0)
1811 unbind_to (count1, Qnil);
1812 break;
1815 /* Ignore whitespace here, so we can detect eof. */
1816 if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r'
1817 || c == 0xa0) /* NBSP */
1818 goto read_next;
1820 if (!NILP (Vpurify_flag) && c == '(')
1822 val = read_list (0, readcharfun);
1824 else
1826 UNREAD (c);
1827 read_objects = Qnil;
1828 if (!NILP (readfun))
1830 val = call1 (readfun, readcharfun);
1832 /* If READCHARFUN has set point to ZV, we should
1833 stop reading, even if the form read sets point
1834 to a different value when evaluated. */
1835 if (BUFFERP (readcharfun))
1837 struct buffer *buf = XBUFFER (readcharfun);
1838 if (BUF_PT (buf) == BUF_ZV (buf))
1839 continue_reading_p = 0;
1842 else if (! NILP (Vload_read_function))
1843 val = call1 (Vload_read_function, readcharfun);
1844 else
1845 val = read_internal_start (readcharfun, Qnil, Qnil);
1848 if (!NILP (start) && continue_reading_p)
1849 start = Fpoint_marker ();
1851 /* Restore saved point and BEGV. */
1852 unbind_to (count1, Qnil);
1854 /* Now eval what we just read. */
1855 if (!NILP (macroexpand))
1856 val = call1 (macroexpand, val);
1857 val = eval_sub (val);
1859 if (printflag)
1861 Vvalues = Fcons (val, Vvalues);
1862 if (EQ (Vstandard_output, Qt))
1863 Fprin1 (val, Qnil);
1864 else
1865 Fprint (val, Qnil);
1868 first_sexp = 0;
1871 build_load_history (sourcename,
1872 stream || whole_buffer);
1874 UNGCPRO;
1876 unbind_to (count, Qnil);
1879 DEFUN ("eval-buffer", Feval_buffer, Seval_buffer, 0, 5, "",
1880 doc: /* Execute the current buffer as Lisp code.
1881 When called from a Lisp program (i.e., not interactively), this
1882 function accepts up to five optional arguments:
1883 BUFFER is the buffer to evaluate (nil means use current buffer).
1884 PRINTFLAG controls printing of output:
1885 A value of nil means discard it; anything else is stream for print.
1886 FILENAME specifies the file name to use for `load-history'.
1887 UNIBYTE, if non-nil, specifies `load-convert-to-unibyte' for this
1888 invocation.
1889 DO-ALLOW-PRINT, if non-nil, specifies that `print' and related
1890 functions should work normally even if PRINTFLAG is nil.
1892 This function preserves the position of point. */)
1893 (Lisp_Object buffer, Lisp_Object printflag, Lisp_Object filename, Lisp_Object unibyte, Lisp_Object do_allow_print)
1895 ptrdiff_t count = SPECPDL_INDEX ();
1896 Lisp_Object tem, buf;
1898 if (NILP (buffer))
1899 buf = Fcurrent_buffer ();
1900 else
1901 buf = Fget_buffer (buffer);
1902 if (NILP (buf))
1903 error ("No such buffer");
1905 if (NILP (printflag) && NILP (do_allow_print))
1906 tem = Qsymbolp;
1907 else
1908 tem = printflag;
1910 if (NILP (filename))
1911 filename = BVAR (XBUFFER (buf), filename);
1913 specbind (Qeval_buffer_list, Fcons (buf, Veval_buffer_list));
1914 specbind (Qstandard_output, tem);
1915 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1916 BUF_TEMP_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
1917 specbind (Qlexical_binding, lisp_file_lexically_bound_p (buf) ? Qt : Qnil);
1918 readevalloop (buf, 0, filename,
1919 !NILP (printflag), unibyte, Qnil, Qnil, Qnil);
1920 unbind_to (count, Qnil);
1922 return Qnil;
1925 DEFUN ("eval-region", Feval_region, Seval_region, 2, 4, "r",
1926 doc: /* Execute the region as Lisp code.
1927 When called from programs, expects two arguments,
1928 giving starting and ending indices in the current buffer
1929 of the text to be executed.
1930 Programs can pass third argument PRINTFLAG which controls output:
1931 A value of nil means discard it; anything else is stream for printing it.
1932 Also the fourth argument READ-FUNCTION, if non-nil, is used
1933 instead of `read' to read each expression. It gets one argument
1934 which is the input stream for reading characters.
1936 This function does not move point. */)
1937 (Lisp_Object start, Lisp_Object end, Lisp_Object printflag, Lisp_Object read_function)
1939 /* FIXME: Do the eval-sexp-add-defvars dance! */
1940 ptrdiff_t count = SPECPDL_INDEX ();
1941 Lisp_Object tem, cbuf;
1943 cbuf = Fcurrent_buffer ();
1945 if (NILP (printflag))
1946 tem = Qsymbolp;
1947 else
1948 tem = printflag;
1949 specbind (Qstandard_output, tem);
1950 specbind (Qeval_buffer_list, Fcons (cbuf, Veval_buffer_list));
1952 /* `readevalloop' calls functions which check the type of start and end. */
1953 readevalloop (cbuf, 0, BVAR (XBUFFER (cbuf), filename),
1954 !NILP (printflag), Qnil, read_function,
1955 start, end);
1957 return unbind_to (count, Qnil);
1961 DEFUN ("read", Fread, Sread, 0, 1, 0,
1962 doc: /* Read one Lisp expression as text from STREAM, return as Lisp object.
1963 If STREAM is nil, use the value of `standard-input' (which see).
1964 STREAM or the value of `standard-input' may be:
1965 a buffer (read from point and advance it)
1966 a marker (read from where it points and advance it)
1967 a function (call it with no arguments for each character,
1968 call it with a char as argument to push a char back)
1969 a string (takes text from string, starting at the beginning)
1970 t (read text line using minibuffer and use it, or read from
1971 standard input in batch mode). */)
1972 (Lisp_Object stream)
1974 if (NILP (stream))
1975 stream = Vstandard_input;
1976 if (EQ (stream, Qt))
1977 stream = Qread_char;
1978 if (EQ (stream, Qread_char))
1979 return Fread_minibuffer (build_string ("Lisp expression: "), Qnil);
1981 return read_internal_start (stream, Qnil, Qnil);
1984 DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0,
1985 doc: /* Read one Lisp expression which is represented as text by STRING.
1986 Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
1987 FINAL-STRING-INDEX is an integer giving the position of the next
1988 remaining character in STRING.
1989 START and END optionally delimit a substring of STRING from which to read;
1990 they default to 0 and (length STRING) respectively. */)
1991 (Lisp_Object string, Lisp_Object start, Lisp_Object end)
1993 Lisp_Object ret;
1994 CHECK_STRING (string);
1995 /* `read_internal_start' sets `read_from_string_index'. */
1996 ret = read_internal_start (string, start, end);
1997 return Fcons (ret, make_number (read_from_string_index));
2000 /* Function to set up the global context we need in toplevel read
2001 calls. */
2002 static Lisp_Object
2003 read_internal_start (Lisp_Object stream, Lisp_Object start, Lisp_Object end)
2004 /* `start', `end' only used when stream is a string. */
2006 Lisp_Object retval;
2008 readchar_count = 0;
2009 new_backquote_flag = 0;
2010 read_objects = Qnil;
2011 if (EQ (Vread_with_symbol_positions, Qt)
2012 || EQ (Vread_with_symbol_positions, stream))
2013 Vread_symbol_positions_list = Qnil;
2015 if (STRINGP (stream)
2016 || ((CONSP (stream) && STRINGP (XCAR (stream)))))
2018 ptrdiff_t startval, endval;
2019 Lisp_Object string;
2021 if (STRINGP (stream))
2022 string = stream;
2023 else
2024 string = XCAR (stream);
2026 if (NILP (end))
2027 endval = SCHARS (string);
2028 else
2030 CHECK_NUMBER (end);
2031 if (! (0 <= XINT (end) && XINT (end) <= SCHARS (string)))
2032 args_out_of_range (string, end);
2033 endval = XINT (end);
2036 if (NILP (start))
2037 startval = 0;
2038 else
2040 CHECK_NUMBER (start);
2041 if (! (0 <= XINT (start) && XINT (start) <= endval))
2042 args_out_of_range (string, start);
2043 startval = XINT (start);
2045 read_from_string_index = startval;
2046 read_from_string_index_byte = string_char_to_byte (string, startval);
2047 read_from_string_limit = endval;
2050 retval = read0 (stream);
2051 if (EQ (Vread_with_symbol_positions, Qt)
2052 || EQ (Vread_with_symbol_positions, stream))
2053 Vread_symbol_positions_list = Fnreverse (Vread_symbol_positions_list);
2054 return retval;
2058 /* Signal Qinvalid_read_syntax error.
2059 S is error string of length N (if > 0) */
2061 static _Noreturn void
2062 invalid_syntax (const char *s)
2064 xsignal1 (Qinvalid_read_syntax, build_string (s));
2068 /* Use this for recursive reads, in contexts where internal tokens
2069 are not allowed. */
2071 static Lisp_Object
2072 read0 (Lisp_Object readcharfun)
2074 register Lisp_Object val;
2075 int c;
2077 val = read1 (readcharfun, &c, 0);
2078 if (!c)
2079 return val;
2081 xsignal1 (Qinvalid_read_syntax,
2082 Fmake_string (make_number (1), make_number (c)));
2085 static ptrdiff_t read_buffer_size;
2086 static char *read_buffer;
2088 /* Read a \-escape sequence, assuming we already read the `\'.
2089 If the escape sequence forces unibyte, return eight-bit char. */
2091 static int
2092 read_escape (Lisp_Object readcharfun, bool stringp)
2094 int c = READCHAR;
2095 /* \u allows up to four hex digits, \U up to eight. Default to the
2096 behavior for \u, and change this value in the case that \U is seen. */
2097 int unicode_hex_count = 4;
2099 switch (c)
2101 case -1:
2102 end_of_file_error ();
2104 case 'a':
2105 return '\007';
2106 case 'b':
2107 return '\b';
2108 case 'd':
2109 return 0177;
2110 case 'e':
2111 return 033;
2112 case 'f':
2113 return '\f';
2114 case 'n':
2115 return '\n';
2116 case 'r':
2117 return '\r';
2118 case 't':
2119 return '\t';
2120 case 'v':
2121 return '\v';
2122 case '\n':
2123 return -1;
2124 case ' ':
2125 if (stringp)
2126 return -1;
2127 return ' ';
2129 case 'M':
2130 c = READCHAR;
2131 if (c != '-')
2132 error ("Invalid escape character syntax");
2133 c = READCHAR;
2134 if (c == '\\')
2135 c = read_escape (readcharfun, 0);
2136 return c | meta_modifier;
2138 case 'S':
2139 c = READCHAR;
2140 if (c != '-')
2141 error ("Invalid escape character syntax");
2142 c = READCHAR;
2143 if (c == '\\')
2144 c = read_escape (readcharfun, 0);
2145 return c | shift_modifier;
2147 case 'H':
2148 c = READCHAR;
2149 if (c != '-')
2150 error ("Invalid escape character syntax");
2151 c = READCHAR;
2152 if (c == '\\')
2153 c = read_escape (readcharfun, 0);
2154 return c | hyper_modifier;
2156 case 'A':
2157 c = READCHAR;
2158 if (c != '-')
2159 error ("Invalid escape character syntax");
2160 c = READCHAR;
2161 if (c == '\\')
2162 c = read_escape (readcharfun, 0);
2163 return c | alt_modifier;
2165 case 's':
2166 c = READCHAR;
2167 if (stringp || c != '-')
2169 UNREAD (c);
2170 return ' ';
2172 c = READCHAR;
2173 if (c == '\\')
2174 c = read_escape (readcharfun, 0);
2175 return c | super_modifier;
2177 case 'C':
2178 c = READCHAR;
2179 if (c != '-')
2180 error ("Invalid escape character syntax");
2181 case '^':
2182 c = READCHAR;
2183 if (c == '\\')
2184 c = read_escape (readcharfun, 0);
2185 if ((c & ~CHAR_MODIFIER_MASK) == '?')
2186 return 0177 | (c & CHAR_MODIFIER_MASK);
2187 else if (! SINGLE_BYTE_CHAR_P ((c & ~CHAR_MODIFIER_MASK)))
2188 return c | ctrl_modifier;
2189 /* ASCII control chars are made from letters (both cases),
2190 as well as the non-letters within 0100...0137. */
2191 else if ((c & 0137) >= 0101 && (c & 0137) <= 0132)
2192 return (c & (037 | ~0177));
2193 else if ((c & 0177) >= 0100 && (c & 0177) <= 0137)
2194 return (c & (037 | ~0177));
2195 else
2196 return c | ctrl_modifier;
2198 case '0':
2199 case '1':
2200 case '2':
2201 case '3':
2202 case '4':
2203 case '5':
2204 case '6':
2205 case '7':
2206 /* An octal escape, as in ANSI C. */
2208 register int i = c - '0';
2209 register int count = 0;
2210 while (++count < 3)
2212 if ((c = READCHAR) >= '0' && c <= '7')
2214 i *= 8;
2215 i += c - '0';
2217 else
2219 UNREAD (c);
2220 break;
2224 if (i >= 0x80 && i < 0x100)
2225 i = BYTE8_TO_CHAR (i);
2226 return i;
2229 case 'x':
2230 /* A hex escape, as in ANSI C. */
2232 unsigned int i = 0;
2233 int count = 0;
2234 while (1)
2236 c = READCHAR;
2237 if (c >= '0' && c <= '9')
2239 i *= 16;
2240 i += c - '0';
2242 else if ((c >= 'a' && c <= 'f')
2243 || (c >= 'A' && c <= 'F'))
2245 i *= 16;
2246 if (c >= 'a' && c <= 'f')
2247 i += c - 'a' + 10;
2248 else
2249 i += c - 'A' + 10;
2251 else
2253 UNREAD (c);
2254 break;
2256 /* Allow hex escapes as large as ?\xfffffff, because some
2257 packages use them to denote characters with modifiers. */
2258 if ((CHAR_META | (CHAR_META - 1)) < i)
2259 error ("Hex character out of range: \\x%x...", i);
2260 count += count < 3;
2263 if (count < 3 && i >= 0x80)
2264 return BYTE8_TO_CHAR (i);
2265 return i;
2268 case 'U':
2269 /* Post-Unicode-2.0: Up to eight hex chars. */
2270 unicode_hex_count = 8;
2271 case 'u':
2273 /* A Unicode escape. We only permit them in strings and characters,
2274 not arbitrarily in the source code, as in some other languages. */
2276 unsigned int i = 0;
2277 int count = 0;
2279 while (++count <= unicode_hex_count)
2281 c = READCHAR;
2282 /* `isdigit' and `isalpha' may be locale-specific, which we don't
2283 want. */
2284 if (c >= '0' && c <= '9') i = (i << 4) + (c - '0');
2285 else if (c >= 'a' && c <= 'f') i = (i << 4) + (c - 'a') + 10;
2286 else if (c >= 'A' && c <= 'F') i = (i << 4) + (c - 'A') + 10;
2287 else
2288 error ("Non-hex digit used for Unicode escape");
2290 if (i > 0x10FFFF)
2291 error ("Non-Unicode character: 0x%x", i);
2292 return i;
2295 default:
2296 return c;
2300 /* Return the digit that CHARACTER stands for in the given BASE.
2301 Return -1 if CHARACTER is out of range for BASE,
2302 and -2 if CHARACTER is not valid for any supported BASE. */
2303 static int
2304 digit_to_number (int character, int base)
2306 int digit;
2308 if ('0' <= character && character <= '9')
2309 digit = character - '0';
2310 else if ('a' <= character && character <= 'z')
2311 digit = character - 'a' + 10;
2312 else if ('A' <= character && character <= 'Z')
2313 digit = character - 'A' + 10;
2314 else
2315 return -2;
2317 return digit < base ? digit : -1;
2320 /* Read an integer in radix RADIX using READCHARFUN to read
2321 characters. RADIX must be in the interval [2..36]; if it isn't, a
2322 read error is signaled . Value is the integer read. Signals an
2323 error if encountering invalid read syntax or if RADIX is out of
2324 range. */
2326 static Lisp_Object
2327 read_integer (Lisp_Object readcharfun, EMACS_INT radix)
2329 /* Room for sign, leading 0, other digits, trailing null byte.
2330 Also, room for invalid syntax diagnostic. */
2331 char buf[max (1 + 1 + sizeof (uintmax_t) * CHAR_BIT + 1,
2332 sizeof "integer, radix " + INT_STRLEN_BOUND (EMACS_INT))];
2334 int valid = -1; /* 1 if valid, 0 if not, -1 if incomplete. */
2336 if (radix < 2 || radix > 36)
2337 valid = 0;
2338 else
2340 char *p = buf;
2341 int c, digit;
2343 c = READCHAR;
2344 if (c == '-' || c == '+')
2346 *p++ = c;
2347 c = READCHAR;
2350 if (c == '0')
2352 *p++ = c;
2353 valid = 1;
2355 /* Ignore redundant leading zeros, so the buffer doesn't
2356 fill up with them. */
2358 c = READCHAR;
2359 while (c == '0');
2362 while (-1 <= (digit = digit_to_number (c, radix)))
2364 if (digit == -1)
2365 valid = 0;
2366 if (valid < 0)
2367 valid = 1;
2369 if (p < buf + sizeof buf - 1)
2370 *p++ = c;
2371 else
2372 valid = 0;
2374 c = READCHAR;
2377 UNREAD (c);
2378 *p = '\0';
2381 if (! valid)
2383 sprintf (buf, "integer, radix %"pI"d", radix);
2384 invalid_syntax (buf);
2387 return string_to_number (buf, radix, 0);
2391 /* If the next token is ')' or ']' or '.', we store that character
2392 in *PCH and the return value is not interesting. Else, we store
2393 zero in *PCH and we read and return one lisp object.
2395 FIRST_IN_LIST is true if this is the first element of a list. */
2397 static Lisp_Object
2398 read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
2400 int c;
2401 bool uninterned_symbol = 0;
2402 bool multibyte;
2404 *pch = 0;
2406 retry:
2408 c = READCHAR_REPORT_MULTIBYTE (&multibyte);
2409 if (c < 0)
2410 end_of_file_error ();
2412 switch (c)
2414 case '(':
2415 return read_list (0, readcharfun);
2417 case '[':
2418 return read_vector (readcharfun, 0);
2420 case ')':
2421 case ']':
2423 *pch = c;
2424 return Qnil;
2427 case '#':
2428 c = READCHAR;
2429 if (c == 's')
2431 c = READCHAR;
2432 if (c == '(')
2434 /* Accept extended format for hashtables (extensible to
2435 other types), e.g.
2436 #s(hash-table size 2 test equal data (k1 v1 k2 v2)) */
2437 Lisp_Object tmp = read_list (0, readcharfun);
2438 Lisp_Object head = CAR_SAFE (tmp);
2439 Lisp_Object data = Qnil;
2440 Lisp_Object val = Qnil;
2441 /* The size is 2 * number of allowed keywords to
2442 make-hash-table. */
2443 Lisp_Object params[10];
2444 Lisp_Object ht;
2445 Lisp_Object key = Qnil;
2446 int param_count = 0;
2448 if (!EQ (head, Qhash_table))
2449 error ("Invalid extended read marker at head of #s list "
2450 "(only hash-table allowed)");
2452 tmp = CDR_SAFE (tmp);
2454 /* This is repetitive but fast and simple. */
2455 params[param_count] = QCsize;
2456 params[param_count + 1] = Fplist_get (tmp, Qsize);
2457 if (!NILP (params[param_count + 1]))
2458 param_count += 2;
2460 params[param_count] = QCtest;
2461 params[param_count + 1] = Fplist_get (tmp, Qtest);
2462 if (!NILP (params[param_count + 1]))
2463 param_count += 2;
2465 params[param_count] = QCweakness;
2466 params[param_count + 1] = Fplist_get (tmp, Qweakness);
2467 if (!NILP (params[param_count + 1]))
2468 param_count += 2;
2470 params[param_count] = QCrehash_size;
2471 params[param_count + 1] = Fplist_get (tmp, Qrehash_size);
2472 if (!NILP (params[param_count + 1]))
2473 param_count += 2;
2475 params[param_count] = QCrehash_threshold;
2476 params[param_count + 1] = Fplist_get (tmp, Qrehash_threshold);
2477 if (!NILP (params[param_count + 1]))
2478 param_count += 2;
2480 /* This is the hashtable data. */
2481 data = Fplist_get (tmp, Qdata);
2483 /* Now use params to make a new hashtable and fill it. */
2484 ht = Fmake_hash_table (param_count, params);
2486 while (CONSP (data))
2488 key = XCAR (data);
2489 data = XCDR (data);
2490 if (!CONSP (data))
2491 error ("Odd number of elements in hashtable data");
2492 val = XCAR (data);
2493 data = XCDR (data);
2494 Fputhash (key, val, ht);
2497 return ht;
2499 UNREAD (c);
2500 invalid_syntax ("#");
2502 if (c == '^')
2504 c = READCHAR;
2505 if (c == '[')
2507 Lisp_Object tmp;
2508 tmp = read_vector (readcharfun, 0);
2509 if (ASIZE (tmp) < CHAR_TABLE_STANDARD_SLOTS)
2510 error ("Invalid size char-table");
2511 XSETPVECTYPE (XVECTOR (tmp), PVEC_CHAR_TABLE);
2512 return tmp;
2514 else if (c == '^')
2516 c = READCHAR;
2517 if (c == '[')
2519 Lisp_Object tmp;
2520 int depth;
2521 ptrdiff_t size;
2523 tmp = read_vector (readcharfun, 0);
2524 size = ASIZE (tmp);
2525 if (size == 0)
2526 error ("Invalid size char-table");
2527 if (! RANGED_INTEGERP (1, AREF (tmp, 0), 3))
2528 error ("Invalid depth in char-table");
2529 depth = XINT (AREF (tmp, 0));
2530 if (chartab_size[depth] != size - 2)
2531 error ("Invalid size char-table");
2532 XSETPVECTYPE (XVECTOR (tmp), PVEC_SUB_CHAR_TABLE);
2533 return tmp;
2535 invalid_syntax ("#^^");
2537 invalid_syntax ("#^");
2539 if (c == '&')
2541 Lisp_Object length;
2542 length = read1 (readcharfun, pch, first_in_list);
2543 c = READCHAR;
2544 if (c == '"')
2546 Lisp_Object tmp, val;
2547 EMACS_INT size_in_chars
2548 = ((XFASTINT (length) + BOOL_VECTOR_BITS_PER_CHAR - 1)
2549 / BOOL_VECTOR_BITS_PER_CHAR);
2551 UNREAD (c);
2552 tmp = read1 (readcharfun, pch, first_in_list);
2553 if (STRING_MULTIBYTE (tmp)
2554 || (size_in_chars != SCHARS (tmp)
2555 /* We used to print 1 char too many
2556 when the number of bits was a multiple of 8.
2557 Accept such input in case it came from an old
2558 version. */
2559 && ! (XFASTINT (length)
2560 == (SCHARS (tmp) - 1) * BOOL_VECTOR_BITS_PER_CHAR)))
2561 invalid_syntax ("#&...");
2563 val = Fmake_bool_vector (length, Qnil);
2564 memcpy (XBOOL_VECTOR (val)->data, SDATA (tmp), size_in_chars);
2565 /* Clear the extraneous bits in the last byte. */
2566 if (XINT (length) != size_in_chars * BOOL_VECTOR_BITS_PER_CHAR)
2567 XBOOL_VECTOR (val)->data[size_in_chars - 1]
2568 &= (1 << (XINT (length) % BOOL_VECTOR_BITS_PER_CHAR)) - 1;
2569 return val;
2571 invalid_syntax ("#&...");
2573 if (c == '[')
2575 /* Accept compiled functions at read-time so that we don't have to
2576 build them using function calls. */
2577 Lisp_Object tmp;
2578 tmp = read_vector (readcharfun, 1);
2579 make_byte_code (XVECTOR (tmp));
2580 return tmp;
2582 if (c == '(')
2584 Lisp_Object tmp;
2585 struct gcpro gcpro1;
2586 int ch;
2588 /* Read the string itself. */
2589 tmp = read1 (readcharfun, &ch, 0);
2590 if (ch != 0 || !STRINGP (tmp))
2591 invalid_syntax ("#");
2592 GCPRO1 (tmp);
2593 /* Read the intervals and their properties. */
2594 while (1)
2596 Lisp_Object beg, end, plist;
2598 beg = read1 (readcharfun, &ch, 0);
2599 end = plist = Qnil;
2600 if (ch == ')')
2601 break;
2602 if (ch == 0)
2603 end = read1 (readcharfun, &ch, 0);
2604 if (ch == 0)
2605 plist = read1 (readcharfun, &ch, 0);
2606 if (ch)
2607 invalid_syntax ("Invalid string property list");
2608 Fset_text_properties (beg, end, plist, tmp);
2610 UNGCPRO;
2611 return tmp;
2614 /* #@NUMBER is used to skip NUMBER following bytes.
2615 That's used in .elc files to skip over doc strings
2616 and function definitions. */
2617 if (c == '@')
2619 enum { extra = 100 };
2620 ptrdiff_t i, nskip = 0;
2622 /* Read a decimal integer. */
2623 while ((c = READCHAR) >= 0
2624 && c >= '0' && c <= '9')
2626 if ((STRING_BYTES_BOUND - extra) / 10 <= nskip)
2627 string_overflow ();
2628 nskip *= 10;
2629 nskip += c - '0';
2631 if (nskip > 0)
2632 /* We can't use UNREAD here, because in the code below we side-step
2633 READCHAR. Instead, assume the first char after #@NNN occupies
2634 a single byte, which is the case normally since it's just
2635 a space. */
2636 nskip--;
2637 else
2638 UNREAD (c);
2640 if (load_force_doc_strings
2641 && (FROM_FILE_P (readcharfun)))
2643 /* If we are supposed to force doc strings into core right now,
2644 record the last string that we skipped,
2645 and record where in the file it comes from. */
2647 /* But first exchange saved_doc_string
2648 with prev_saved_doc_string, so we save two strings. */
2650 char *temp = saved_doc_string;
2651 ptrdiff_t temp_size = saved_doc_string_size;
2652 file_offset temp_pos = saved_doc_string_position;
2653 ptrdiff_t temp_len = saved_doc_string_length;
2655 saved_doc_string = prev_saved_doc_string;
2656 saved_doc_string_size = prev_saved_doc_string_size;
2657 saved_doc_string_position = prev_saved_doc_string_position;
2658 saved_doc_string_length = prev_saved_doc_string_length;
2660 prev_saved_doc_string = temp;
2661 prev_saved_doc_string_size = temp_size;
2662 prev_saved_doc_string_position = temp_pos;
2663 prev_saved_doc_string_length = temp_len;
2666 if (saved_doc_string_size == 0)
2668 saved_doc_string = xmalloc (nskip + extra);
2669 saved_doc_string_size = nskip + extra;
2671 if (nskip > saved_doc_string_size)
2673 saved_doc_string = xrealloc (saved_doc_string, nskip + extra);
2674 saved_doc_string_size = nskip + extra;
2677 saved_doc_string_position = file_tell (instream);
2679 /* Copy that many characters into saved_doc_string. */
2680 block_input ();
2681 for (i = 0; i < nskip && c >= 0; i++)
2682 saved_doc_string[i] = c = getc (instream);
2683 unblock_input ();
2685 saved_doc_string_length = i;
2687 else
2688 /* Skip that many bytes. */
2689 skip_dyn_bytes (readcharfun, nskip);
2691 goto retry;
2693 if (c == '!')
2695 /* #! appears at the beginning of an executable file.
2696 Skip the first line. */
2697 while (c != '\n' && c >= 0)
2698 c = READCHAR;
2699 goto retry;
2701 if (c == '$')
2702 return Vload_file_name;
2703 if (c == '\'')
2704 return Fcons (Qfunction, Fcons (read0 (readcharfun), Qnil));
2705 /* #:foo is the uninterned symbol named foo. */
2706 if (c == ':')
2708 uninterned_symbol = 1;
2709 c = READCHAR;
2710 if (!(c > 040
2711 && c != 0xa0 /* NBSP */
2712 && (c >= 0200
2713 || strchr ("\"';()[]#`,", c) == NULL)))
2715 /* No symbol character follows, this is the empty
2716 symbol. */
2717 UNREAD (c);
2718 return Fmake_symbol (empty_unibyte_string);
2720 goto read_symbol;
2722 /* ## is the empty symbol. */
2723 if (c == '#')
2724 return Fintern (empty_unibyte_string, Qnil);
2725 /* Reader forms that can reuse previously read objects. */
2726 if (c >= '0' && c <= '9')
2728 EMACS_INT n = 0;
2729 Lisp_Object tem;
2731 /* Read a non-negative integer. */
2732 while (c >= '0' && c <= '9')
2734 if (MOST_POSITIVE_FIXNUM / 10 < n
2735 || MOST_POSITIVE_FIXNUM < n * 10 + c - '0')
2736 n = MOST_POSITIVE_FIXNUM + 1;
2737 else
2738 n = n * 10 + c - '0';
2739 c = READCHAR;
2742 if (n <= MOST_POSITIVE_FIXNUM)
2744 if (c == 'r' || c == 'R')
2745 return read_integer (readcharfun, n);
2747 if (! NILP (Vread_circle))
2749 /* #n=object returns object, but associates it with
2750 n for #n#. */
2751 if (c == '=')
2753 /* Make a placeholder for #n# to use temporarily. */
2754 Lisp_Object placeholder;
2755 Lisp_Object cell;
2757 placeholder = Fcons (Qnil, Qnil);
2758 cell = Fcons (make_number (n), placeholder);
2759 read_objects = Fcons (cell, read_objects);
2761 /* Read the object itself. */
2762 tem = read0 (readcharfun);
2764 /* Now put it everywhere the placeholder was... */
2765 substitute_object_in_subtree (tem, placeholder);
2767 /* ...and #n# will use the real value from now on. */
2768 Fsetcdr (cell, tem);
2770 return tem;
2773 /* #n# returns a previously read object. */
2774 if (c == '#')
2776 tem = Fassq (make_number (n), read_objects);
2777 if (CONSP (tem))
2778 return XCDR (tem);
2782 /* Fall through to error message. */
2784 else if (c == 'x' || c == 'X')
2785 return read_integer (readcharfun, 16);
2786 else if (c == 'o' || c == 'O')
2787 return read_integer (readcharfun, 8);
2788 else if (c == 'b' || c == 'B')
2789 return read_integer (readcharfun, 2);
2791 UNREAD (c);
2792 invalid_syntax ("#");
2794 case ';':
2795 while ((c = READCHAR) >= 0 && c != '\n');
2796 goto retry;
2798 case '\'':
2800 return Fcons (Qquote, Fcons (read0 (readcharfun), Qnil));
2803 case '`':
2805 int next_char = READCHAR;
2806 UNREAD (next_char);
2807 /* Transition from old-style to new-style:
2808 If we see "(`" it used to mean old-style, which usually works
2809 fine because ` should almost never appear in such a position
2810 for new-style. But occasionally we need "(`" to mean new
2811 style, so we try to distinguish the two by the fact that we
2812 can either write "( `foo" or "(` foo", where the first
2813 intends to use new-style whereas the second intends to use
2814 old-style. For Emacs-25, we should completely remove this
2815 first_in_list exception (old-style can still be obtained via
2816 "(\`" anyway). */
2817 if (!new_backquote_flag && first_in_list && next_char == ' ')
2819 Vold_style_backquotes = Qt;
2820 goto default_label;
2822 else
2824 Lisp_Object value;
2825 bool saved_new_backquote_flag = new_backquote_flag;
2827 new_backquote_flag = 1;
2828 value = read0 (readcharfun);
2829 new_backquote_flag = saved_new_backquote_flag;
2831 return Fcons (Qbackquote, Fcons (value, Qnil));
2834 case ',':
2836 int next_char = READCHAR;
2837 UNREAD (next_char);
2838 /* Transition from old-style to new-style:
2839 It used to be impossible to have a new-style , other than within
2840 a new-style `. This is sufficient when ` and , are used in the
2841 normal way, but ` and , can also appear in args to macros that
2842 will not interpret them in the usual way, in which case , may be
2843 used without any ` anywhere near.
2844 So we now use the same heuristic as for backquote: old-style
2845 unquotes are only recognized when first on a list, and when
2846 followed by a space.
2847 Because it's more difficult to peek 2 chars ahead, a new-style
2848 ,@ can still not be used outside of a `, unless it's in the middle
2849 of a list. */
2850 if (new_backquote_flag
2851 || !first_in_list
2852 || (next_char != ' ' && next_char != '@'))
2854 Lisp_Object comma_type = Qnil;
2855 Lisp_Object value;
2856 int ch = READCHAR;
2858 if (ch == '@')
2859 comma_type = Qcomma_at;
2860 else if (ch == '.')
2861 comma_type = Qcomma_dot;
2862 else
2864 if (ch >= 0) UNREAD (ch);
2865 comma_type = Qcomma;
2868 value = read0 (readcharfun);
2869 return Fcons (comma_type, Fcons (value, Qnil));
2871 else
2873 Vold_style_backquotes = Qt;
2874 goto default_label;
2877 case '?':
2879 int modifiers;
2880 int next_char;
2881 bool ok;
2883 c = READCHAR;
2884 if (c < 0)
2885 end_of_file_error ();
2887 /* Accept `single space' syntax like (list ? x) where the
2888 whitespace character is SPC or TAB.
2889 Other literal whitespace like NL, CR, and FF are not accepted,
2890 as there are well-established escape sequences for these. */
2891 if (c == ' ' || c == '\t')
2892 return make_number (c);
2894 if (c == '\\')
2895 c = read_escape (readcharfun, 0);
2896 modifiers = c & CHAR_MODIFIER_MASK;
2897 c &= ~CHAR_MODIFIER_MASK;
2898 if (CHAR_BYTE8_P (c))
2899 c = CHAR_TO_BYTE8 (c);
2900 c |= modifiers;
2902 next_char = READCHAR;
2903 ok = (next_char <= 040
2904 || (next_char < 0200
2905 && strchr ("\"';()[]#?`,.", next_char) != NULL));
2906 UNREAD (next_char);
2907 if (ok)
2908 return make_number (c);
2910 invalid_syntax ("?");
2913 case '"':
2915 char *p = read_buffer;
2916 char *end = read_buffer + read_buffer_size;
2917 int ch;
2918 /* True if we saw an escape sequence specifying
2919 a multibyte character. */
2920 bool force_multibyte = 0;
2921 /* True if we saw an escape sequence specifying
2922 a single-byte character. */
2923 bool force_singlebyte = 0;
2924 bool cancel = 0;
2925 ptrdiff_t nchars = 0;
2927 while ((ch = READCHAR) >= 0
2928 && ch != '\"')
2930 if (end - p < MAX_MULTIBYTE_LENGTH)
2932 ptrdiff_t offset = p - read_buffer;
2933 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
2934 memory_full (SIZE_MAX);
2935 read_buffer = xrealloc (read_buffer, read_buffer_size * 2);
2936 read_buffer_size *= 2;
2937 p = read_buffer + offset;
2938 end = read_buffer + read_buffer_size;
2941 if (ch == '\\')
2943 int modifiers;
2945 ch = read_escape (readcharfun, 1);
2947 /* CH is -1 if \ newline has just been seen. */
2948 if (ch == -1)
2950 if (p == read_buffer)
2951 cancel = 1;
2952 continue;
2955 modifiers = ch & CHAR_MODIFIER_MASK;
2956 ch = ch & ~CHAR_MODIFIER_MASK;
2958 if (CHAR_BYTE8_P (ch))
2959 force_singlebyte = 1;
2960 else if (! ASCII_CHAR_P (ch))
2961 force_multibyte = 1;
2962 else /* I.e. ASCII_CHAR_P (ch). */
2964 /* Allow `\C- ' and `\C-?'. */
2965 if (modifiers == CHAR_CTL)
2967 if (ch == ' ')
2968 ch = 0, modifiers = 0;
2969 else if (ch == '?')
2970 ch = 127, modifiers = 0;
2972 if (modifiers & CHAR_SHIFT)
2974 /* Shift modifier is valid only with [A-Za-z]. */
2975 if (ch >= 'A' && ch <= 'Z')
2976 modifiers &= ~CHAR_SHIFT;
2977 else if (ch >= 'a' && ch <= 'z')
2978 ch -= ('a' - 'A'), modifiers &= ~CHAR_SHIFT;
2981 if (modifiers & CHAR_META)
2983 /* Move the meta bit to the right place for a
2984 string. */
2985 modifiers &= ~CHAR_META;
2986 ch = BYTE8_TO_CHAR (ch | 0x80);
2987 force_singlebyte = 1;
2991 /* Any modifiers remaining are invalid. */
2992 if (modifiers)
2993 error ("Invalid modifier in string");
2994 p += CHAR_STRING (ch, (unsigned char *) p);
2996 else
2998 p += CHAR_STRING (ch, (unsigned char *) p);
2999 if (CHAR_BYTE8_P (ch))
3000 force_singlebyte = 1;
3001 else if (! ASCII_CHAR_P (ch))
3002 force_multibyte = 1;
3004 nchars++;
3007 if (ch < 0)
3008 end_of_file_error ();
3010 /* If purifying, and string starts with \ newline,
3011 return zero instead. This is for doc strings
3012 that we are really going to find in etc/DOC.nn.nn. */
3013 if (!NILP (Vpurify_flag) && NILP (Vdoc_file_name) && cancel)
3014 return make_number (0);
3016 if (! force_multibyte && force_singlebyte)
3018 /* READ_BUFFER contains raw 8-bit bytes and no multibyte
3019 forms. Convert it to unibyte. */
3020 nchars = str_as_unibyte ((unsigned char *) read_buffer,
3021 p - read_buffer);
3022 p = read_buffer + nchars;
3025 return make_specified_string (read_buffer, nchars, p - read_buffer,
3026 (force_multibyte
3027 || (p - read_buffer != nchars)));
3030 case '.':
3032 int next_char = READCHAR;
3033 UNREAD (next_char);
3035 if (next_char <= 040
3036 || (next_char < 0200
3037 && strchr ("\"';([#?`,", next_char) != NULL))
3039 *pch = c;
3040 return Qnil;
3043 /* Otherwise, we fall through! Note that the atom-reading loop
3044 below will now loop at least once, assuring that we will not
3045 try to UNREAD two characters in a row. */
3047 default:
3048 default_label:
3049 if (c <= 040) goto retry;
3050 if (c == 0xa0) /* NBSP */
3051 goto retry;
3053 read_symbol:
3055 char *p = read_buffer;
3056 bool quoted = 0;
3057 EMACS_INT start_position = readchar_count - 1;
3060 char *end = read_buffer + read_buffer_size;
3064 if (end - p < MAX_MULTIBYTE_LENGTH)
3066 ptrdiff_t offset = p - read_buffer;
3067 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3068 memory_full (SIZE_MAX);
3069 read_buffer = xrealloc (read_buffer, read_buffer_size * 2);
3070 read_buffer_size *= 2;
3071 p = read_buffer + offset;
3072 end = read_buffer + read_buffer_size;
3075 if (c == '\\')
3077 c = READCHAR;
3078 if (c == -1)
3079 end_of_file_error ();
3080 quoted = 1;
3083 if (multibyte)
3084 p += CHAR_STRING (c, (unsigned char *) p);
3085 else
3086 *p++ = c;
3087 c = READCHAR;
3089 while (c > 040
3090 && c != 0xa0 /* NBSP */
3091 && (c >= 0200
3092 || strchr ("\"';()[]#`,", c) == NULL));
3094 if (p == end)
3096 ptrdiff_t offset = p - read_buffer;
3097 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3098 memory_full (SIZE_MAX);
3099 read_buffer = xrealloc (read_buffer, read_buffer_size * 2);
3100 read_buffer_size *= 2;
3101 p = read_buffer + offset;
3102 end = read_buffer + read_buffer_size;
3104 *p = 0;
3105 UNREAD (c);
3108 if (!quoted && !uninterned_symbol)
3110 Lisp_Object result = string_to_number (read_buffer, 10, 0);
3111 if (! NILP (result))
3112 return result;
3115 Lisp_Object name, result;
3116 ptrdiff_t nbytes = p - read_buffer;
3117 ptrdiff_t nchars
3118 = (multibyte
3119 ? multibyte_chars_in_text ((unsigned char *) read_buffer,
3120 nbytes)
3121 : nbytes);
3123 name = ((uninterned_symbol && ! NILP (Vpurify_flag)
3124 ? make_pure_string : make_specified_string)
3125 (read_buffer, nchars, nbytes, multibyte));
3126 result = (uninterned_symbol ? Fmake_symbol (name)
3127 : Fintern (name, Qnil));
3129 if (EQ (Vread_with_symbol_positions, Qt)
3130 || EQ (Vread_with_symbol_positions, readcharfun))
3131 Vread_symbol_positions_list
3132 = Fcons (Fcons (result, make_number (start_position)),
3133 Vread_symbol_positions_list);
3134 return result;
3141 /* List of nodes we've seen during substitute_object_in_subtree. */
3142 static Lisp_Object seen_list;
3144 static void
3145 substitute_object_in_subtree (Lisp_Object object, Lisp_Object placeholder)
3147 Lisp_Object check_object;
3149 /* We haven't seen any objects when we start. */
3150 seen_list = Qnil;
3152 /* Make all the substitutions. */
3153 check_object
3154 = substitute_object_recurse (object, placeholder, object);
3156 /* Clear seen_list because we're done with it. */
3157 seen_list = Qnil;
3159 /* The returned object here is expected to always eq the
3160 original. */
3161 if (!EQ (check_object, object))
3162 error ("Unexpected mutation error in reader");
3165 /* Feval doesn't get called from here, so no gc protection is needed. */
3166 #define SUBSTITUTE(get_val, set_val) \
3167 do { \
3168 Lisp_Object old_value = get_val; \
3169 Lisp_Object true_value \
3170 = substitute_object_recurse (object, placeholder, \
3171 old_value); \
3173 if (!EQ (old_value, true_value)) \
3175 set_val; \
3177 } while (0)
3179 static Lisp_Object
3180 substitute_object_recurse (Lisp_Object object, Lisp_Object placeholder, Lisp_Object subtree)
3182 /* If we find the placeholder, return the target object. */
3183 if (EQ (placeholder, subtree))
3184 return object;
3186 /* If we've been to this node before, don't explore it again. */
3187 if (!EQ (Qnil, Fmemq (subtree, seen_list)))
3188 return subtree;
3190 /* If this node can be the entry point to a cycle, remember that
3191 we've seen it. It can only be such an entry point if it was made
3192 by #n=, which means that we can find it as a value in
3193 read_objects. */
3194 if (!EQ (Qnil, Frassq (subtree, read_objects)))
3195 seen_list = Fcons (subtree, seen_list);
3197 /* Recurse according to subtree's type.
3198 Every branch must return a Lisp_Object. */
3199 switch (XTYPE (subtree))
3201 case Lisp_Vectorlike:
3203 ptrdiff_t i, length = 0;
3204 if (BOOL_VECTOR_P (subtree))
3205 return subtree; /* No sub-objects anyway. */
3206 else if (CHAR_TABLE_P (subtree) || SUB_CHAR_TABLE_P (subtree)
3207 || COMPILEDP (subtree))
3208 length = ASIZE (subtree) & PSEUDOVECTOR_SIZE_MASK;
3209 else if (VECTORP (subtree))
3210 length = ASIZE (subtree);
3211 else
3212 /* An unknown pseudovector may contain non-Lisp fields, so we
3213 can't just blindly traverse all its fields. We used to call
3214 `Flength' which signaled `sequencep', so I just preserved this
3215 behavior. */
3216 wrong_type_argument (Qsequencep, subtree);
3218 for (i = 0; i < length; i++)
3219 SUBSTITUTE (AREF (subtree, i),
3220 ASET (subtree, i, true_value));
3221 return subtree;
3224 case Lisp_Cons:
3226 SUBSTITUTE (XCAR (subtree),
3227 XSETCAR (subtree, true_value));
3228 SUBSTITUTE (XCDR (subtree),
3229 XSETCDR (subtree, true_value));
3230 return subtree;
3233 case Lisp_String:
3235 /* Check for text properties in each interval.
3236 substitute_in_interval contains part of the logic. */
3238 INTERVAL root_interval = string_intervals (subtree);
3239 Lisp_Object arg = Fcons (object, placeholder);
3241 traverse_intervals_noorder (root_interval,
3242 &substitute_in_interval, arg);
3244 return subtree;
3247 /* Other types don't recurse any further. */
3248 default:
3249 return subtree;
3253 /* Helper function for substitute_object_recurse. */
3254 static void
3255 substitute_in_interval (INTERVAL interval, Lisp_Object arg)
3257 Lisp_Object object = Fcar (arg);
3258 Lisp_Object placeholder = Fcdr (arg);
3260 SUBSTITUTE (interval->plist, set_interval_plist (interval, true_value));
3264 #define LEAD_INT 1
3265 #define DOT_CHAR 2
3266 #define TRAIL_INT 4
3267 #define E_EXP 16
3270 /* Convert STRING to a number, assuming base BASE. Return a fixnum if CP has
3271 integer syntax and fits in a fixnum, else return the nearest float if CP has
3272 either floating point or integer syntax and BASE is 10, else return nil. If
3273 IGNORE_TRAILING, consider just the longest prefix of CP that has
3274 valid floating point syntax. Signal an overflow if BASE is not 10 and the
3275 number has integer syntax but does not fit. */
3277 Lisp_Object
3278 string_to_number (char const *string, int base, bool ignore_trailing)
3280 int state;
3281 char const *cp = string;
3282 int leading_digit;
3283 bool float_syntax = 0;
3284 double value = 0;
3286 /* Compute NaN and infinities using a variable, to cope with compilers that
3287 think they are smarter than we are. */
3288 double zero = 0;
3290 /* Negate the value ourselves. This treats 0, NaNs, and infinity properly on
3291 IEEE floating point hosts, and works around a formerly-common bug where
3292 atof ("-0.0") drops the sign. */
3293 bool negative = *cp == '-';
3295 bool signedp = negative || *cp == '+';
3296 cp += signedp;
3298 state = 0;
3300 leading_digit = digit_to_number (*cp, base);
3301 if (0 <= leading_digit)
3303 state |= LEAD_INT;
3305 ++cp;
3306 while (0 <= digit_to_number (*cp, base));
3308 if (*cp == '.')
3310 state |= DOT_CHAR;
3311 cp++;
3314 if (base == 10)
3316 if ('0' <= *cp && *cp <= '9')
3318 state |= TRAIL_INT;
3320 cp++;
3321 while ('0' <= *cp && *cp <= '9');
3323 if (*cp == 'e' || *cp == 'E')
3325 char const *ecp = cp;
3326 cp++;
3327 if (*cp == '+' || *cp == '-')
3328 cp++;
3329 if ('0' <= *cp && *cp <= '9')
3331 state |= E_EXP;
3333 cp++;
3334 while ('0' <= *cp && *cp <= '9');
3336 else if (cp[-1] == '+'
3337 && cp[0] == 'I' && cp[1] == 'N' && cp[2] == 'F')
3339 state |= E_EXP;
3340 cp += 3;
3341 value = 1.0 / zero;
3343 else if (cp[-1] == '+'
3344 && cp[0] == 'N' && cp[1] == 'a' && cp[2] == 'N')
3346 state |= E_EXP;
3347 cp += 3;
3348 value = zero / zero;
3350 /* If that made a "negative" NaN, negate it. */
3352 int i;
3353 union { double d; char c[sizeof (double)]; }
3354 u_data, u_minus_zero;
3355 u_data.d = value;
3356 u_minus_zero.d = -0.0;
3357 for (i = 0; i < sizeof (double); i++)
3358 if (u_data.c[i] & u_minus_zero.c[i])
3360 value = -value;
3361 break;
3364 /* Now VALUE is a positive NaN. */
3366 else
3367 cp = ecp;
3370 float_syntax = ((state & (DOT_CHAR|TRAIL_INT)) == (DOT_CHAR|TRAIL_INT)
3371 || state == (LEAD_INT|E_EXP));
3374 /* Return nil if the number uses invalid syntax. If IGNORE_TRAILING, accept
3375 any prefix that matches. Otherwise, the entire string must match. */
3376 if (! (ignore_trailing
3377 ? ((state & LEAD_INT) != 0 || float_syntax)
3378 : (!*cp && ((state & ~DOT_CHAR) == LEAD_INT || float_syntax))))
3379 return Qnil;
3381 /* If the number uses integer and not float syntax, and is in C-language
3382 range, use its value, preferably as a fixnum. */
3383 if (0 <= leading_digit && ! float_syntax)
3385 uintmax_t n;
3387 /* Fast special case for single-digit integers. This also avoids a
3388 glitch when BASE is 16 and IGNORE_TRAILING, because in that
3389 case some versions of strtoumax accept numbers like "0x1" that Emacs
3390 does not allow. */
3391 if (digit_to_number (string[signedp + 1], base) < 0)
3392 return make_number (negative ? -leading_digit : leading_digit);
3394 errno = 0;
3395 n = strtoumax (string + signedp, NULL, base);
3396 if (errno == ERANGE)
3398 /* Unfortunately there's no simple and accurate way to convert
3399 non-base-10 numbers that are out of C-language range. */
3400 if (base != 10)
3401 xsignal1 (Qoverflow_error, build_string (string));
3403 else if (n <= (negative ? -MOST_NEGATIVE_FIXNUM : MOST_POSITIVE_FIXNUM))
3405 EMACS_INT signed_n = n;
3406 return make_number (negative ? -signed_n : signed_n);
3408 else
3409 value = n;
3412 /* Either the number uses float syntax, or it does not fit into a fixnum.
3413 Convert it from string to floating point, unless the value is already
3414 known because it is an infinity, a NAN, or its absolute value fits in
3415 uintmax_t. */
3416 if (! value)
3417 value = atof (string + signedp);
3419 return make_float (negative ? -value : value);
3423 static Lisp_Object
3424 read_vector (Lisp_Object readcharfun, bool bytecodeflag)
3426 ptrdiff_t i, size;
3427 Lisp_Object *ptr;
3428 Lisp_Object tem, item, vector;
3429 struct Lisp_Cons *otem;
3430 Lisp_Object len;
3432 tem = read_list (1, readcharfun);
3433 len = Flength (tem);
3434 vector = Fmake_vector (len, Qnil);
3436 size = ASIZE (vector);
3437 ptr = XVECTOR (vector)->contents;
3438 for (i = 0; i < size; i++)
3440 item = Fcar (tem);
3441 /* If `load-force-doc-strings' is t when reading a lazily-loaded
3442 bytecode object, the docstring containing the bytecode and
3443 constants values must be treated as unibyte and passed to
3444 Fread, to get the actual bytecode string and constants vector. */
3445 if (bytecodeflag && load_force_doc_strings)
3447 if (i == COMPILED_BYTECODE)
3449 if (!STRINGP (item))
3450 error ("Invalid byte code");
3452 /* Delay handling the bytecode slot until we know whether
3453 it is lazily-loaded (we can tell by whether the
3454 constants slot is nil). */
3455 ASET (vector, COMPILED_CONSTANTS, item);
3456 item = Qnil;
3458 else if (i == COMPILED_CONSTANTS)
3460 Lisp_Object bytestr = ptr[COMPILED_CONSTANTS];
3462 if (NILP (item))
3464 /* Coerce string to unibyte (like string-as-unibyte,
3465 but without generating extra garbage and
3466 guaranteeing no change in the contents). */
3467 STRING_SET_CHARS (bytestr, SBYTES (bytestr));
3468 STRING_SET_UNIBYTE (bytestr);
3470 item = Fread (Fcons (bytestr, readcharfun));
3471 if (!CONSP (item))
3472 error ("Invalid byte code");
3474 otem = XCONS (item);
3475 bytestr = XCAR (item);
3476 item = XCDR (item);
3477 free_cons (otem);
3480 /* Now handle the bytecode slot. */
3481 ASET (vector, COMPILED_BYTECODE, bytestr);
3483 else if (i == COMPILED_DOC_STRING
3484 && STRINGP (item)
3485 && ! STRING_MULTIBYTE (item))
3487 if (EQ (readcharfun, Qget_emacs_mule_file_char))
3488 item = Fdecode_coding_string (item, Qemacs_mule, Qnil, Qnil);
3489 else
3490 item = Fstring_as_multibyte (item);
3493 ASET (vector, i, item);
3494 otem = XCONS (tem);
3495 tem = Fcdr (tem);
3496 free_cons (otem);
3498 return vector;
3501 /* FLAG means check for ] to terminate rather than ) and . */
3503 static Lisp_Object
3504 read_list (bool flag, Lisp_Object readcharfun)
3506 Lisp_Object val, tail;
3507 Lisp_Object elt, tem;
3508 struct gcpro gcpro1, gcpro2;
3509 /* 0 is the normal case.
3510 1 means this list is a doc reference; replace it with the number 0.
3511 2 means this list is a doc reference; replace it with the doc string. */
3512 int doc_reference = 0;
3514 /* Initialize this to 1 if we are reading a list. */
3515 bool first_in_list = flag <= 0;
3517 val = Qnil;
3518 tail = Qnil;
3520 while (1)
3522 int ch;
3523 GCPRO2 (val, tail);
3524 elt = read1 (readcharfun, &ch, first_in_list);
3525 UNGCPRO;
3527 first_in_list = 0;
3529 /* While building, if the list starts with #$, treat it specially. */
3530 if (EQ (elt, Vload_file_name)
3531 && ! NILP (elt)
3532 && !NILP (Vpurify_flag))
3534 if (NILP (Vdoc_file_name))
3535 /* We have not yet called Snarf-documentation, so assume
3536 this file is described in the DOC-MM.NN file
3537 and Snarf-documentation will fill in the right value later.
3538 For now, replace the whole list with 0. */
3539 doc_reference = 1;
3540 else
3541 /* We have already called Snarf-documentation, so make a relative
3542 file name for this file, so it can be found properly
3543 in the installed Lisp directory.
3544 We don't use Fexpand_file_name because that would make
3545 the directory absolute now. */
3546 elt = concat2 (build_string ("../lisp/"),
3547 Ffile_name_nondirectory (elt));
3549 else if (EQ (elt, Vload_file_name)
3550 && ! NILP (elt)
3551 && load_force_doc_strings)
3552 doc_reference = 2;
3554 if (ch)
3556 if (flag > 0)
3558 if (ch == ']')
3559 return val;
3560 invalid_syntax (") or . in a vector");
3562 if (ch == ')')
3563 return val;
3564 if (ch == '.')
3566 GCPRO2 (val, tail);
3567 if (!NILP (tail))
3568 XSETCDR (tail, read0 (readcharfun));
3569 else
3570 val = read0 (readcharfun);
3571 read1 (readcharfun, &ch, 0);
3572 UNGCPRO;
3573 if (ch == ')')
3575 if (doc_reference == 1)
3576 return make_number (0);
3577 if (doc_reference == 2 && INTEGERP (XCDR (val)))
3579 char *saved = NULL;
3580 file_offset saved_position;
3581 /* Get a doc string from the file we are loading.
3582 If it's in saved_doc_string, get it from there.
3584 Here, we don't know if the string is a
3585 bytecode string or a doc string. As a
3586 bytecode string must be unibyte, we always
3587 return a unibyte string. If it is actually a
3588 doc string, caller must make it
3589 multibyte. */
3591 /* Position is negative for user variables. */
3592 EMACS_INT pos = eabs (XINT (XCDR (val)));
3593 if (pos >= saved_doc_string_position
3594 && pos < (saved_doc_string_position
3595 + saved_doc_string_length))
3597 saved = saved_doc_string;
3598 saved_position = saved_doc_string_position;
3600 /* Look in prev_saved_doc_string the same way. */
3601 else if (pos >= prev_saved_doc_string_position
3602 && pos < (prev_saved_doc_string_position
3603 + prev_saved_doc_string_length))
3605 saved = prev_saved_doc_string;
3606 saved_position = prev_saved_doc_string_position;
3608 if (saved)
3610 ptrdiff_t start = pos - saved_position;
3611 ptrdiff_t from, to;
3613 /* Process quoting with ^A,
3614 and find the end of the string,
3615 which is marked with ^_ (037). */
3616 for (from = start, to = start;
3617 saved[from] != 037;)
3619 int c = saved[from++];
3620 if (c == 1)
3622 c = saved[from++];
3623 saved[to++] = (c == 1 ? c
3624 : c == '0' ? 0
3625 : c == '_' ? 037
3626 : c);
3628 else
3629 saved[to++] = c;
3632 return make_unibyte_string (saved + start,
3633 to - start);
3635 else
3636 return get_doc_string (val, 1, 0);
3639 return val;
3641 invalid_syntax (". in wrong context");
3643 invalid_syntax ("] in a list");
3645 tem = Fcons (elt, Qnil);
3646 if (!NILP (tail))
3647 XSETCDR (tail, tem);
3648 else
3649 val = tem;
3650 tail = tem;
3654 static Lisp_Object initial_obarray;
3656 /* `oblookup' stores the bucket number here, for the sake of Funintern. */
3658 static size_t oblookup_last_bucket_number;
3660 /* Get an error if OBARRAY is not an obarray.
3661 If it is one, return it. */
3663 Lisp_Object
3664 check_obarray (Lisp_Object obarray)
3666 if (!VECTORP (obarray) || ASIZE (obarray) == 0)
3668 /* If Vobarray is now invalid, force it to be valid. */
3669 if (EQ (Vobarray, obarray)) Vobarray = initial_obarray;
3670 wrong_type_argument (Qvectorp, obarray);
3672 return obarray;
3675 /* Intern the C string STR: return a symbol with that name,
3676 interned in the current obarray. */
3678 Lisp_Object
3679 intern_1 (const char *str, ptrdiff_t len)
3681 Lisp_Object obarray = check_obarray (Vobarray);
3682 Lisp_Object tem = oblookup (obarray, str, len, len);
3684 return SYMBOLP (tem) ? tem : Fintern (make_string (str, len), obarray);
3687 Lisp_Object
3688 intern_c_string_1 (const char *str, ptrdiff_t len)
3690 Lisp_Object obarray = check_obarray (Vobarray);
3691 Lisp_Object tem = oblookup (obarray, str, len, len);
3693 if (SYMBOLP (tem))
3694 return tem;
3696 if (NILP (Vpurify_flag))
3697 /* Creating a non-pure string from a string literal not
3698 implemented yet. We could just use make_string here and live
3699 with the extra copy. */
3700 emacs_abort ();
3702 return Fintern (make_pure_c_string (str, len), obarray);
3705 DEFUN ("intern", Fintern, Sintern, 1, 2, 0,
3706 doc: /* Return the canonical symbol whose name is STRING.
3707 If there is none, one is created by this function and returned.
3708 A second optional argument specifies the obarray to use;
3709 it defaults to the value of `obarray'. */)
3710 (Lisp_Object string, Lisp_Object obarray)
3712 register Lisp_Object tem, sym, *ptr;
3714 if (NILP (obarray)) obarray = Vobarray;
3715 obarray = check_obarray (obarray);
3717 CHECK_STRING (string);
3719 tem = oblookup (obarray, SSDATA (string),
3720 SCHARS (string),
3721 SBYTES (string));
3722 if (!INTEGERP (tem))
3723 return tem;
3725 if (!NILP (Vpurify_flag))
3726 string = Fpurecopy (string);
3727 sym = Fmake_symbol (string);
3729 if (EQ (obarray, initial_obarray))
3730 XSYMBOL (sym)->interned = SYMBOL_INTERNED_IN_INITIAL_OBARRAY;
3731 else
3732 XSYMBOL (sym)->interned = SYMBOL_INTERNED;
3734 if ((SREF (string, 0) == ':')
3735 && EQ (obarray, initial_obarray))
3737 XSYMBOL (sym)->constant = 1;
3738 XSYMBOL (sym)->redirect = SYMBOL_PLAINVAL;
3739 SET_SYMBOL_VAL (XSYMBOL (sym), sym);
3742 ptr = aref_addr (obarray, XINT(tem));
3743 if (SYMBOLP (*ptr))
3744 set_symbol_next (sym, XSYMBOL (*ptr));
3745 else
3746 set_symbol_next (sym, NULL);
3747 *ptr = sym;
3748 return sym;
3751 DEFUN ("intern-soft", Fintern_soft, Sintern_soft, 1, 2, 0,
3752 doc: /* Return the canonical symbol named NAME, or nil if none exists.
3753 NAME may be a string or a symbol. If it is a symbol, that exact
3754 symbol is searched for.
3755 A second optional argument specifies the obarray to use;
3756 it defaults to the value of `obarray'. */)
3757 (Lisp_Object name, Lisp_Object obarray)
3759 register Lisp_Object tem, string;
3761 if (NILP (obarray)) obarray = Vobarray;
3762 obarray = check_obarray (obarray);
3764 if (!SYMBOLP (name))
3766 CHECK_STRING (name);
3767 string = name;
3769 else
3770 string = SYMBOL_NAME (name);
3772 tem = oblookup (obarray, SSDATA (string), SCHARS (string), SBYTES (string));
3773 if (INTEGERP (tem) || (SYMBOLP (name) && !EQ (name, tem)))
3774 return Qnil;
3775 else
3776 return tem;
3779 DEFUN ("unintern", Funintern, Sunintern, 1, 2, 0,
3780 doc: /* Delete the symbol named NAME, if any, from OBARRAY.
3781 The value is t if a symbol was found and deleted, nil otherwise.
3782 NAME may be a string or a symbol. If it is a symbol, that symbol
3783 is deleted, if it belongs to OBARRAY--no other symbol is deleted.
3784 OBARRAY defaults to the value of the variable `obarray'. */)
3785 (Lisp_Object name, Lisp_Object obarray)
3787 register Lisp_Object string, tem;
3788 size_t hash;
3790 if (NILP (obarray)) obarray = Vobarray;
3791 obarray = check_obarray (obarray);
3793 if (SYMBOLP (name))
3794 string = SYMBOL_NAME (name);
3795 else
3797 CHECK_STRING (name);
3798 string = name;
3801 tem = oblookup (obarray, SSDATA (string),
3802 SCHARS (string),
3803 SBYTES (string));
3804 if (INTEGERP (tem))
3805 return Qnil;
3806 /* If arg was a symbol, don't delete anything but that symbol itself. */
3807 if (SYMBOLP (name) && !EQ (name, tem))
3808 return Qnil;
3810 /* There are plenty of other symbols which will screw up the Emacs
3811 session if we unintern them, as well as even more ways to use
3812 `setq' or `fset' or whatnot to make the Emacs session
3813 unusable. Let's not go down this silly road. --Stef */
3814 /* if (EQ (tem, Qnil) || EQ (tem, Qt))
3815 error ("Attempt to unintern t or nil"); */
3817 XSYMBOL (tem)->interned = SYMBOL_UNINTERNED;
3819 hash = oblookup_last_bucket_number;
3821 if (EQ (AREF (obarray, hash), tem))
3823 if (XSYMBOL (tem)->next)
3825 Lisp_Object sym;
3826 XSETSYMBOL (sym, XSYMBOL (tem)->next);
3827 ASET (obarray, hash, sym);
3829 else
3830 ASET (obarray, hash, make_number (0));
3832 else
3834 Lisp_Object tail, following;
3836 for (tail = AREF (obarray, hash);
3837 XSYMBOL (tail)->next;
3838 tail = following)
3840 XSETSYMBOL (following, XSYMBOL (tail)->next);
3841 if (EQ (following, tem))
3843 set_symbol_next (tail, XSYMBOL (following)->next);
3844 break;
3849 return Qt;
3852 /* Return the symbol in OBARRAY whose names matches the string
3853 of SIZE characters (SIZE_BYTE bytes) at PTR.
3854 If there is no such symbol in OBARRAY, return nil.
3856 Also store the bucket number in oblookup_last_bucket_number. */
3858 Lisp_Object
3859 oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff_t size_byte)
3861 size_t hash;
3862 size_t obsize;
3863 register Lisp_Object tail;
3864 Lisp_Object bucket, tem;
3866 obarray = check_obarray (obarray);
3867 obsize = ASIZE (obarray);
3869 /* This is sometimes needed in the middle of GC. */
3870 obsize &= ~ARRAY_MARK_FLAG;
3871 hash = hash_string (ptr, size_byte) % obsize;
3872 bucket = AREF (obarray, hash);
3873 oblookup_last_bucket_number = hash;
3874 if (EQ (bucket, make_number (0)))
3876 else if (!SYMBOLP (bucket))
3877 error ("Bad data in guts of obarray"); /* Like CADR error message. */
3878 else
3879 for (tail = bucket; ; XSETSYMBOL (tail, XSYMBOL (tail)->next))
3881 if (SBYTES (SYMBOL_NAME (tail)) == size_byte
3882 && SCHARS (SYMBOL_NAME (tail)) == size
3883 && !memcmp (SDATA (SYMBOL_NAME (tail)), ptr, size_byte))
3884 return tail;
3885 else if (XSYMBOL (tail)->next == 0)
3886 break;
3888 XSETINT (tem, hash);
3889 return tem;
3892 void
3893 map_obarray (Lisp_Object obarray, void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg)
3895 ptrdiff_t i;
3896 register Lisp_Object tail;
3897 CHECK_VECTOR (obarray);
3898 for (i = ASIZE (obarray) - 1; i >= 0; i--)
3900 tail = AREF (obarray, i);
3901 if (SYMBOLP (tail))
3902 while (1)
3904 (*fn) (tail, arg);
3905 if (XSYMBOL (tail)->next == 0)
3906 break;
3907 XSETSYMBOL (tail, XSYMBOL (tail)->next);
3912 static void
3913 mapatoms_1 (Lisp_Object sym, Lisp_Object function)
3915 call1 (function, sym);
3918 DEFUN ("mapatoms", Fmapatoms, Smapatoms, 1, 2, 0,
3919 doc: /* Call FUNCTION on every symbol in OBARRAY.
3920 OBARRAY defaults to the value of `obarray'. */)
3921 (Lisp_Object function, Lisp_Object obarray)
3923 if (NILP (obarray)) obarray = Vobarray;
3924 obarray = check_obarray (obarray);
3926 map_obarray (obarray, mapatoms_1, function);
3927 return Qnil;
3930 #define OBARRAY_SIZE 1511
3932 void
3933 init_obarray (void)
3935 Lisp_Object oblength;
3936 ptrdiff_t size = 100 + MAX_MULTIBYTE_LENGTH;
3938 XSETFASTINT (oblength, OBARRAY_SIZE);
3940 Vobarray = Fmake_vector (oblength, make_number (0));
3941 initial_obarray = Vobarray;
3942 staticpro (&initial_obarray);
3944 Qunbound = Fmake_symbol (build_pure_c_string ("unbound"));
3945 /* Set temporary dummy values to Qnil and Vpurify_flag to satisfy the
3946 NILP (Vpurify_flag) check in intern_c_string. */
3947 Qnil = make_number (-1); Vpurify_flag = make_number (1);
3948 Qnil = intern_c_string ("nil");
3950 /* Fmake_symbol inits fields of new symbols with Qunbound and Qnil,
3951 so those two need to be fixed manually. */
3952 SET_SYMBOL_VAL (XSYMBOL (Qunbound), Qunbound);
3953 set_symbol_function (Qunbound, Qnil);
3954 set_symbol_plist (Qunbound, Qnil);
3955 SET_SYMBOL_VAL (XSYMBOL (Qnil), Qnil);
3956 XSYMBOL (Qnil)->constant = 1;
3957 XSYMBOL (Qnil)->declared_special = 1;
3958 set_symbol_plist (Qnil, Qnil);
3959 set_symbol_function (Qnil, Qnil);
3961 Qt = intern_c_string ("t");
3962 SET_SYMBOL_VAL (XSYMBOL (Qt), Qt);
3963 XSYMBOL (Qnil)->declared_special = 1;
3964 XSYMBOL (Qt)->constant = 1;
3966 /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */
3967 Vpurify_flag = Qt;
3969 DEFSYM (Qvariable_documentation, "variable-documentation");
3971 read_buffer = xmalloc (size);
3972 read_buffer_size = size;
3975 void
3976 defsubr (struct Lisp_Subr *sname)
3978 Lisp_Object sym, tem;
3979 sym = intern_c_string (sname->symbol_name);
3980 XSETPVECTYPE (sname, PVEC_SUBR);
3981 XSETSUBR (tem, sname);
3982 set_symbol_function (sym, tem);
3985 #ifdef NOTDEF /* Use fset in subr.el now! */
3986 void
3987 defalias (struct Lisp_Subr *sname, char *string)
3989 Lisp_Object sym;
3990 sym = intern (string);
3991 XSETSUBR (XSYMBOL (sym)->function, sname);
3993 #endif /* NOTDEF */
3995 /* Define an "integer variable"; a symbol whose value is forwarded to a
3996 C variable of type EMACS_INT. Sample call (with "xx" to fool make-docfile):
3997 DEFxxVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */
3998 void
3999 defvar_int (struct Lisp_Intfwd *i_fwd,
4000 const char *namestring, EMACS_INT *address)
4002 Lisp_Object sym;
4003 sym = intern_c_string (namestring);
4004 i_fwd->type = Lisp_Fwd_Int;
4005 i_fwd->intvar = address;
4006 XSYMBOL (sym)->declared_special = 1;
4007 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4008 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)i_fwd);
4011 /* Similar but define a variable whose value is t if address contains 1,
4012 nil if address contains 0. */
4013 void
4014 defvar_bool (struct Lisp_Boolfwd *b_fwd,
4015 const char *namestring, bool *address)
4017 Lisp_Object sym;
4018 sym = intern_c_string (namestring);
4019 b_fwd->type = Lisp_Fwd_Bool;
4020 b_fwd->boolvar = address;
4021 XSYMBOL (sym)->declared_special = 1;
4022 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4023 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)b_fwd);
4024 Vbyte_boolean_vars = Fcons (sym, Vbyte_boolean_vars);
4027 /* Similar but define a variable whose value is the Lisp Object stored
4028 at address. Two versions: with and without gc-marking of the C
4029 variable. The nopro version is used when that variable will be
4030 gc-marked for some other reason, since marking the same slot twice
4031 can cause trouble with strings. */
4032 void
4033 defvar_lisp_nopro (struct Lisp_Objfwd *o_fwd,
4034 const char *namestring, Lisp_Object *address)
4036 Lisp_Object sym;
4037 sym = intern_c_string (namestring);
4038 o_fwd->type = Lisp_Fwd_Obj;
4039 o_fwd->objvar = address;
4040 XSYMBOL (sym)->declared_special = 1;
4041 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4042 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)o_fwd);
4045 void
4046 defvar_lisp (struct Lisp_Objfwd *o_fwd,
4047 const char *namestring, Lisp_Object *address)
4049 defvar_lisp_nopro (o_fwd, namestring, address);
4050 staticpro (address);
4053 /* Similar but define a variable whose value is the Lisp Object stored
4054 at a particular offset in the current kboard object. */
4056 void
4057 defvar_kboard (struct Lisp_Kboard_Objfwd *ko_fwd,
4058 const char *namestring, int offset)
4060 Lisp_Object sym;
4061 sym = intern_c_string (namestring);
4062 ko_fwd->type = Lisp_Fwd_Kboard_Obj;
4063 ko_fwd->offset = offset;
4064 XSYMBOL (sym)->declared_special = 1;
4065 XSYMBOL (sym)->redirect = SYMBOL_FORWARDED;
4066 SET_SYMBOL_FWD (XSYMBOL (sym), (union Lisp_Fwd *)ko_fwd);
4069 /* Check that the elements of Vload_path exist. */
4071 static void
4072 load_path_check (void)
4074 Lisp_Object path_tail;
4076 /* The only elements that might not exist are those from
4077 PATH_LOADSEARCH, EMACSLOADPATH. Anything else is only added if
4078 it exists. */
4079 for (path_tail = Vload_path; !NILP (path_tail); path_tail = XCDR (path_tail))
4081 Lisp_Object dirfile;
4082 dirfile = Fcar (path_tail);
4083 if (STRINGP (dirfile))
4085 dirfile = Fdirectory_file_name (dirfile);
4086 if (! file_accessible_directory_p (SSDATA (dirfile)))
4087 dir_warning ("Lisp directory", XCAR (path_tail));
4092 /* Record the value of load-path used at the start of dumping
4093 so we can see if the site changed it later during dumping. */
4094 static Lisp_Object dump_path;
4096 /* Compute the default Vload_path, with the following logic:
4097 If CANNOT_DUMP:
4098 use EMACSLOADPATH env-var if set; otherwise use PATH_LOADSEARCH,
4099 prepending PATH_SITELOADSEARCH unless --no-site-lisp.
4100 The remainder is what happens when dumping works:
4101 If purify-flag (ie dumping) just use PATH_DUMPLOADSEARCH.
4102 Otherwise use EMACSLOADPATH if set, else PATH_LOADSEARCH.
4104 If !initialized, then just set both Vload_path and dump_path.
4105 If initialized, then if Vload_path != dump_path, do nothing.
4106 (Presumably the load-path has already been changed by something.
4107 This can only be from a site-load file during dumping,
4108 or because EMACSLOADPATH is set.)
4109 If Vinstallation_directory is not nil (ie, running uninstalled):
4110 If installation-dir/lisp exists and not already a member,
4111 we must be running uninstalled. Reset the load-path
4112 to just installation-dir/lisp. (The default PATH_LOADSEARCH
4113 refers to the eventual installation directories. Since we
4114 are not yet installed, we should not use them, even if they exist.)
4115 If installation-dir/lisp does not exist, just add dump_path at the
4116 end instead.
4117 Add installation-dir/leim (if exists and not already a member) at the front.
4118 Add installation-dir/site-lisp (if !no_site_lisp, and exists
4119 and not already a member) at the front.
4120 If installation-dir != source-dir (ie running an uninstalled,
4121 out-of-tree build) AND install-dir/src/Makefile exists BUT
4122 install-dir/src/Makefile.in does NOT exist (this is a sanity
4123 check), then repeat the above steps for source-dir/lisp,
4124 leim and site-lisp.
4125 Finally, add the site-lisp directories at the front (if !no_site_lisp).
4128 void
4129 init_lread (void)
4131 const char *normal;
4133 #ifdef CANNOT_DUMP
4134 #ifdef HAVE_NS
4135 const char *loadpath = ns_load_path ();
4136 #endif
4138 normal = PATH_LOADSEARCH;
4139 #ifdef HAVE_NS
4140 Vload_path = decode_env_path ("EMACSLOADPATH", loadpath ? loadpath : normal);
4141 #else
4142 Vload_path = decode_env_path ("EMACSLOADPATH", normal);
4143 #endif
4145 load_path_check ();
4147 /* FIXME CANNOT_DUMP platforms should get source-dir/lisp etc added
4148 to their load-path too, AFAICS. I don't think we can tell the
4149 difference between initialized and !initialized in this case,
4150 so we'll have to do it unconditionally when Vinstallation_directory
4151 is non-nil. */
4152 if (!no_site_lisp && !egetenv ("EMACSLOADPATH"))
4154 Lisp_Object sitelisp;
4155 sitelisp = decode_env_path (0, PATH_SITELOADSEARCH);
4156 if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
4158 #else /* !CANNOT_DUMP */
4159 if (NILP (Vpurify_flag))
4161 normal = PATH_LOADSEARCH;
4162 /* If the EMACSLOADPATH environment variable is set, use its value.
4163 This doesn't apply if we're dumping. */
4164 if (egetenv ("EMACSLOADPATH"))
4165 Vload_path = decode_env_path ("EMACSLOADPATH", normal);
4167 else
4168 normal = PATH_DUMPLOADSEARCH;
4170 /* In a dumped Emacs, we normally reset the value of Vload_path using
4171 PATH_LOADSEARCH, since the value that was dumped uses lisp/ in
4172 the source directory, instead of the path of the installed elisp
4173 libraries. However, if it appears that Vload_path has already been
4174 changed from the default that was saved before dumping, don't
4175 change it further. Changes can only be due to EMACSLOADPATH, or
4176 site-lisp files that were processed during dumping. */
4177 if (initialized)
4179 if (NILP (Fequal (dump_path, Vload_path)))
4181 /* Do not make any changes, just check the elements exist. */
4182 /* Note: --no-site-lisp is ignored.
4183 I don't know what to do about this. */
4184 load_path_check ();
4186 else
4188 #ifdef HAVE_NS
4189 const char *loadpath = ns_load_path ();
4190 Vload_path = decode_env_path (0, loadpath ? loadpath : normal);
4191 #else
4192 Vload_path = decode_env_path (0, normal);
4193 #endif
4194 if (!NILP (Vinstallation_directory))
4196 Lisp_Object tem, tem1;
4198 /* Add to the path the lisp subdir of the installation
4199 dir, if it is accessible. Note: in out-of-tree builds,
4200 this directory is empty save for Makefile. */
4201 tem = Fexpand_file_name (build_string ("lisp"),
4202 Vinstallation_directory);
4203 tem1 = Ffile_accessible_directory_p (tem);
4204 if (!NILP (tem1))
4206 if (NILP (Fmember (tem, Vload_path)))
4208 /* We are running uninstalled. The default load-path
4209 points to the eventual installed lisp, leim
4210 directories. We should not use those now, even
4211 if they exist, so start over from a clean slate. */
4212 Vload_path = Fcons (tem, Qnil);
4215 else
4216 /* That dir doesn't exist, so add the build-time
4217 Lisp dirs instead. */
4218 Vload_path = nconc2 (Vload_path, dump_path);
4220 /* Add leim under the installation dir, if it is accessible. */
4221 tem = Fexpand_file_name (build_string ("leim"),
4222 Vinstallation_directory);
4223 tem1 = Ffile_accessible_directory_p (tem);
4224 if (!NILP (tem1))
4226 if (NILP (Fmember (tem, Vload_path)))
4227 Vload_path = Fcons (tem, Vload_path);
4230 /* Add site-lisp under the installation dir, if it exists. */
4231 if (!no_site_lisp)
4233 tem = Fexpand_file_name (build_string ("site-lisp"),
4234 Vinstallation_directory);
4235 tem1 = Ffile_accessible_directory_p (tem);
4236 if (!NILP (tem1))
4238 if (NILP (Fmember (tem, Vload_path)))
4239 Vload_path = Fcons (tem, Vload_path);
4243 /* If Emacs was not built in the source directory,
4244 and it is run from where it was built, add to load-path
4245 the lisp, leim and site-lisp dirs under that directory. */
4247 if (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
4249 Lisp_Object tem2;
4251 tem = Fexpand_file_name (build_string ("src/Makefile"),
4252 Vinstallation_directory);
4253 tem1 = Ffile_exists_p (tem);
4255 /* Don't be fooled if they moved the entire source tree
4256 AFTER dumping Emacs. If the build directory is indeed
4257 different from the source dir, src/Makefile.in and
4258 src/Makefile will not be found together. */
4259 tem = Fexpand_file_name (build_string ("src/Makefile.in"),
4260 Vinstallation_directory);
4261 tem2 = Ffile_exists_p (tem);
4262 if (!NILP (tem1) && NILP (tem2))
4264 tem = Fexpand_file_name (build_string ("lisp"),
4265 Vsource_directory);
4267 if (NILP (Fmember (tem, Vload_path)))
4268 Vload_path = Fcons (tem, Vload_path);
4270 tem = Fexpand_file_name (build_string ("leim"),
4271 Vsource_directory);
4273 if (NILP (Fmember (tem, Vload_path)))
4274 Vload_path = Fcons (tem, Vload_path);
4276 if (!no_site_lisp)
4278 tem = Fexpand_file_name (build_string ("site-lisp"),
4279 Vsource_directory);
4280 tem1 = Ffile_accessible_directory_p (tem);
4281 if (!NILP (tem1))
4283 if (NILP (Fmember (tem, Vload_path)))
4284 Vload_path = Fcons (tem, Vload_path);
4288 } /* Vinstallation_directory != Vsource_directory */
4290 } /* if Vinstallation_directory */
4292 /* Check before adding the site-lisp directories.
4293 The install should have created them, but they are not
4294 required, so no need to warn if they are absent.
4295 Or we might be running before installation. */
4296 load_path_check ();
4298 /* Add the site-lisp directories at the front. */
4299 if (!no_site_lisp)
4301 Lisp_Object sitelisp;
4302 sitelisp = decode_env_path (0, PATH_SITELOADSEARCH);
4303 if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
4305 } /* if dump_path == Vload_path */
4307 else /* !initialized */
4309 /* NORMAL refers to PATH_DUMPLOADSEARCH, ie the lisp dir in the
4310 source directory. We used to add ../lisp (ie the lisp dir in
4311 the build directory) at the front here, but that caused trouble
4312 because it was copied from dump_path into Vload_path, above,
4313 when Vinstallation_directory was non-nil. It should not be
4314 necessary, since in out of tree builds lisp/ is empty, save
4315 for Makefile. */
4316 Vload_path = decode_env_path (0, normal);
4317 dump_path = Vload_path;
4318 /* No point calling load_path_check; load-path only contains essential
4319 elements from the source directory at this point. They cannot
4320 be missing unless something went extremely (and improbably)
4321 wrong, in which case the build will fail in obvious ways. */
4323 #endif /* !CANNOT_DUMP */
4325 Vvalues = Qnil;
4327 load_in_progress = 0;
4328 Vload_file_name = Qnil;
4330 load_descriptor_list = Qnil;
4332 Vstandard_input = Qt;
4333 Vloads_in_progress = Qnil;
4336 /* Print a warning that directory intended for use USE and with name
4337 DIRNAME cannot be accessed. On entry, errno should correspond to
4338 the access failure. Print the warning on stderr and put it in
4339 *Messages*. */
4341 void
4342 dir_warning (char const *use, Lisp_Object dirname)
4344 static char const format[] = "Warning: %s `%s': %s\n";
4345 int access_errno = errno;
4346 fprintf (stderr, format, use, SSDATA (dirname), strerror (access_errno));
4348 /* Don't log the warning before we've initialized!! */
4349 if (initialized)
4351 char const *diagnostic = emacs_strerror (access_errno);
4352 USE_SAFE_ALLOCA;
4353 char *buffer = SAFE_ALLOCA (sizeof format - 3 * (sizeof "%s" - 1)
4354 + strlen (use) + SBYTES (dirname)
4355 + strlen (diagnostic));
4356 ptrdiff_t message_len = esprintf (buffer, format, use, SSDATA (dirname),
4357 diagnostic);
4358 message_dolog (buffer, message_len, 0, STRING_MULTIBYTE (dirname));
4359 SAFE_FREE ();
4363 void
4364 syms_of_lread (void)
4366 defsubr (&Sread);
4367 defsubr (&Sread_from_string);
4368 defsubr (&Sintern);
4369 defsubr (&Sintern_soft);
4370 defsubr (&Sunintern);
4371 defsubr (&Sget_load_suffixes);
4372 defsubr (&Sload);
4373 defsubr (&Seval_buffer);
4374 defsubr (&Seval_region);
4375 defsubr (&Sread_char);
4376 defsubr (&Sread_char_exclusive);
4377 defsubr (&Sread_event);
4378 defsubr (&Sget_file_char);
4379 defsubr (&Smapatoms);
4380 defsubr (&Slocate_file_internal);
4382 DEFVAR_LISP ("obarray", Vobarray,
4383 doc: /* Symbol table for use by `intern' and `read'.
4384 It is a vector whose length ought to be prime for best results.
4385 The vector's contents don't make sense if examined from Lisp programs;
4386 to find all the symbols in an obarray, use `mapatoms'. */);
4388 DEFVAR_LISP ("values", Vvalues,
4389 doc: /* List of values of all expressions which were read, evaluated and printed.
4390 Order is reverse chronological. */);
4391 XSYMBOL (intern ("values"))->declared_special = 0;
4393 DEFVAR_LISP ("standard-input", Vstandard_input,
4394 doc: /* Stream for read to get input from.
4395 See documentation of `read' for possible values. */);
4396 Vstandard_input = Qt;
4398 DEFVAR_LISP ("read-with-symbol-positions", Vread_with_symbol_positions,
4399 doc: /* If non-nil, add position of read symbols to `read-symbol-positions-list'.
4401 If this variable is a buffer, then only forms read from that buffer
4402 will be added to `read-symbol-positions-list'.
4403 If this variable is t, then all read forms will be added.
4404 The effect of all other values other than nil are not currently
4405 defined, although they may be in the future.
4407 The positions are relative to the last call to `read' or
4408 `read-from-string'. It is probably a bad idea to set this variable at
4409 the toplevel; bind it instead. */);
4410 Vread_with_symbol_positions = Qnil;
4412 DEFVAR_LISP ("read-symbol-positions-list", Vread_symbol_positions_list,
4413 doc: /* A list mapping read symbols to their positions.
4414 This variable is modified during calls to `read' or
4415 `read-from-string', but only when `read-with-symbol-positions' is
4416 non-nil.
4418 Each element of the list looks like (SYMBOL . CHAR-POSITION), where
4419 CHAR-POSITION is an integer giving the offset of that occurrence of the
4420 symbol from the position where `read' or `read-from-string' started.
4422 Note that a symbol will appear multiple times in this list, if it was
4423 read multiple times. The list is in the same order as the symbols
4424 were read in. */);
4425 Vread_symbol_positions_list = Qnil;
4427 DEFVAR_LISP ("read-circle", Vread_circle,
4428 doc: /* Non-nil means read recursive structures using #N= and #N# syntax. */);
4429 Vread_circle = Qt;
4431 DEFVAR_LISP ("load-path", Vload_path,
4432 doc: /* List of directories to search for files to load.
4433 Each element is a string (directory name) or nil (try default directory).
4434 Initialized based on EMACSLOADPATH environment variable, if any,
4435 otherwise to default specified by file `epaths.h' when Emacs was built. */);
4437 DEFVAR_LISP ("load-suffixes", Vload_suffixes,
4438 doc: /* List of suffixes for (compiled or source) Emacs Lisp files.
4439 This list should not include the empty string.
4440 `load' and related functions try to append these suffixes, in order,
4441 to the specified file name if a Lisp suffix is allowed or required. */);
4442 Vload_suffixes = Fcons (build_pure_c_string (".elc"),
4443 Fcons (build_pure_c_string (".el"), Qnil));
4444 DEFVAR_LISP ("load-file-rep-suffixes", Vload_file_rep_suffixes,
4445 doc: /* List of suffixes that indicate representations of \
4446 the same file.
4447 This list should normally start with the empty string.
4449 Enabling Auto Compression mode appends the suffixes in
4450 `jka-compr-load-suffixes' to this list and disabling Auto Compression
4451 mode removes them again. `load' and related functions use this list to
4452 determine whether they should look for compressed versions of a file
4453 and, if so, which suffixes they should try to append to the file name
4454 in order to do so. However, if you want to customize which suffixes
4455 the loading functions recognize as compression suffixes, you should
4456 customize `jka-compr-load-suffixes' rather than the present variable. */);
4457 Vload_file_rep_suffixes = Fcons (empty_unibyte_string, Qnil);
4459 DEFVAR_BOOL ("load-in-progress", load_in_progress,
4460 doc: /* Non-nil if inside of `load'. */);
4461 DEFSYM (Qload_in_progress, "load-in-progress");
4463 DEFVAR_LISP ("after-load-alist", Vafter_load_alist,
4464 doc: /* An alist of expressions to be evalled when particular files are loaded.
4465 Each element looks like (REGEXP-OR-FEATURE FORMS...).
4467 REGEXP-OR-FEATURE is either a regular expression to match file names, or
4468 a symbol \(a feature name).
4470 When `load' is run and the file-name argument matches an element's
4471 REGEXP-OR-FEATURE, or when `provide' is run and provides the symbol
4472 REGEXP-OR-FEATURE, the FORMS in the element are executed.
4474 An error in FORMS does not undo the load, but does prevent execution of
4475 the rest of the FORMS. */);
4476 Vafter_load_alist = Qnil;
4478 DEFVAR_LISP ("load-history", Vload_history,
4479 doc: /* Alist mapping loaded file names to symbols and features.
4480 Each alist element should be a list (FILE-NAME ENTRIES...), where
4481 FILE-NAME is the name of a file that has been loaded into Emacs.
4482 The file name is absolute and true (i.e. it doesn't contain symlinks).
4483 As an exception, one of the alist elements may have FILE-NAME nil,
4484 for symbols and features not associated with any file.
4486 The remaining ENTRIES in the alist element describe the functions and
4487 variables defined in that file, the features provided, and the
4488 features required. Each entry has the form `(provide . FEATURE)',
4489 `(require . FEATURE)', `(defun . FUNCTION)', `(autoload . SYMBOL)',
4490 `(defface . SYMBOL)', or `(t . SYMBOL)'. Entries like `(t . SYMBOL)'
4491 may precede a `(defun . FUNCTION)' entry, and means that SYMBOL was an
4492 autoload before this file redefined it as a function. In addition,
4493 entries may also be single symbols, which means that SYMBOL was
4494 defined by `defvar' or `defconst'.
4496 During preloading, the file name recorded is relative to the main Lisp
4497 directory. These file names are converted to absolute at startup. */);
4498 Vload_history = Qnil;
4500 DEFVAR_LISP ("load-file-name", Vload_file_name,
4501 doc: /* Full name of file being loaded by `load'. */);
4502 Vload_file_name = Qnil;
4504 DEFVAR_LISP ("user-init-file", Vuser_init_file,
4505 doc: /* File name, including directory, of user's initialization file.
4506 If the file loaded had extension `.elc', and the corresponding source file
4507 exists, this variable contains the name of source file, suitable for use
4508 by functions like `custom-save-all' which edit the init file.
4509 While Emacs loads and evaluates the init file, value is the real name
4510 of the file, regardless of whether or not it has the `.elc' extension. */);
4511 Vuser_init_file = Qnil;
4513 DEFVAR_LISP ("current-load-list", Vcurrent_load_list,
4514 doc: /* Used for internal purposes by `load'. */);
4515 Vcurrent_load_list = Qnil;
4517 DEFVAR_LISP ("load-read-function", Vload_read_function,
4518 doc: /* Function used by `load' and `eval-region' for reading expressions.
4519 The default is nil, which means use the function `read'. */);
4520 Vload_read_function = Qnil;
4522 DEFVAR_LISP ("load-source-file-function", Vload_source_file_function,
4523 doc: /* Function called in `load' to load an Emacs Lisp source file.
4524 The value should be a function for doing code conversion before
4525 reading a source file. It can also be nil, in which case loading is
4526 done without any code conversion.
4528 If the value is a function, it is called with four arguments,
4529 FULLNAME, FILE, NOERROR, NOMESSAGE. FULLNAME is the absolute name of
4530 the file to load, FILE is the non-absolute name (for messages etc.),
4531 and NOERROR and NOMESSAGE are the corresponding arguments passed to
4532 `load'. The function should return t if the file was loaded. */);
4533 Vload_source_file_function = Qnil;
4535 DEFVAR_BOOL ("load-force-doc-strings", load_force_doc_strings,
4536 doc: /* Non-nil means `load' should force-load all dynamic doc strings.
4537 This is useful when the file being loaded is a temporary copy. */);
4538 load_force_doc_strings = 0;
4540 DEFVAR_BOOL ("load-convert-to-unibyte", load_convert_to_unibyte,
4541 doc: /* Non-nil means `read' converts strings to unibyte whenever possible.
4542 This is normally bound by `load' and `eval-buffer' to control `read',
4543 and is not meant for users to change. */);
4544 load_convert_to_unibyte = 0;
4546 DEFVAR_LISP ("source-directory", Vsource_directory,
4547 doc: /* Directory in which Emacs sources were found when Emacs was built.
4548 You cannot count on them to still be there! */);
4549 Vsource_directory
4550 = Fexpand_file_name (build_string ("../"),
4551 Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH)));
4553 DEFVAR_LISP ("preloaded-file-list", Vpreloaded_file_list,
4554 doc: /* List of files that were preloaded (when dumping Emacs). */);
4555 Vpreloaded_file_list = Qnil;
4557 DEFVAR_LISP ("byte-boolean-vars", Vbyte_boolean_vars,
4558 doc: /* List of all DEFVAR_BOOL variables, used by the byte code optimizer. */);
4559 Vbyte_boolean_vars = Qnil;
4561 DEFVAR_BOOL ("load-dangerous-libraries", load_dangerous_libraries,
4562 doc: /* Non-nil means load dangerous compiled Lisp files.
4563 Some versions of XEmacs use different byte codes than Emacs. These
4564 incompatible byte codes can make Emacs crash when it tries to execute
4565 them. */);
4566 load_dangerous_libraries = 0;
4568 DEFVAR_BOOL ("force-load-messages", force_load_messages,
4569 doc: /* Non-nil means force printing messages when loading Lisp files.
4570 This overrides the value of the NOMESSAGE argument to `load'. */);
4571 force_load_messages = 0;
4573 DEFVAR_LISP ("bytecomp-version-regexp", Vbytecomp_version_regexp,
4574 doc: /* Regular expression matching safe to load compiled Lisp files.
4575 When Emacs loads a compiled Lisp file, it reads the first 512 bytes
4576 from the file, and matches them against this regular expression.
4577 When the regular expression matches, the file is considered to be safe
4578 to load. See also `load-dangerous-libraries'. */);
4579 Vbytecomp_version_regexp
4580 = build_pure_c_string ("^;;;.\\(in Emacs version\\|bytecomp version FSF\\)");
4582 DEFSYM (Qlexical_binding, "lexical-binding");
4583 DEFVAR_LISP ("lexical-binding", Vlexical_binding,
4584 doc: /* Whether to use lexical binding when evaluating code.
4585 Non-nil means that the code in the current buffer should be evaluated
4586 with lexical binding.
4587 This variable is automatically set from the file variables of an
4588 interpreted Lisp file read using `load'. Unlike other file local
4589 variables, this must be set in the first line of a file. */);
4590 Vlexical_binding = Qnil;
4591 Fmake_variable_buffer_local (Qlexical_binding);
4593 DEFVAR_LISP ("eval-buffer-list", Veval_buffer_list,
4594 doc: /* List of buffers being read from by calls to `eval-buffer' and `eval-region'. */);
4595 Veval_buffer_list = Qnil;
4597 DEFVAR_LISP ("old-style-backquotes", Vold_style_backquotes,
4598 doc: /* Set to non-nil when `read' encounters an old-style backquote. */);
4599 Vold_style_backquotes = Qnil;
4600 DEFSYM (Qold_style_backquotes, "old-style-backquotes");
4602 /* Vsource_directory was initialized in init_lread. */
4604 load_descriptor_list = Qnil;
4605 staticpro (&load_descriptor_list);
4607 DEFSYM (Qcurrent_load_list, "current-load-list");
4608 DEFSYM (Qstandard_input, "standard-input");
4609 DEFSYM (Qread_char, "read-char");
4610 DEFSYM (Qget_file_char, "get-file-char");
4611 DEFSYM (Qget_emacs_mule_file_char, "get-emacs-mule-file-char");
4612 DEFSYM (Qload_force_doc_strings, "load-force-doc-strings");
4614 DEFSYM (Qbackquote, "`");
4615 DEFSYM (Qcomma, ",");
4616 DEFSYM (Qcomma_at, ",@");
4617 DEFSYM (Qcomma_dot, ",.");
4619 DEFSYM (Qinhibit_file_name_operation, "inhibit-file-name-operation");
4620 DEFSYM (Qascii_character, "ascii-character");
4621 DEFSYM (Qfunction, "function");
4622 DEFSYM (Qload, "load");
4623 DEFSYM (Qload_file_name, "load-file-name");
4624 DEFSYM (Qeval_buffer_list, "eval-buffer-list");
4625 DEFSYM (Qfile_truename, "file-truename");
4626 DEFSYM (Qdir_ok, "dir-ok");
4627 DEFSYM (Qdo_after_load_evaluation, "do-after-load-evaluation");
4629 staticpro (&dump_path);
4631 staticpro (&read_objects);
4632 read_objects = Qnil;
4633 staticpro (&seen_list);
4634 seen_list = Qnil;
4636 Vloads_in_progress = Qnil;
4637 staticpro (&Vloads_in_progress);
4639 DEFSYM (Qhash_table, "hash-table");
4640 DEFSYM (Qdata, "data");
4641 DEFSYM (Qtest, "test");
4642 DEFSYM (Qsize, "size");
4643 DEFSYM (Qweakness, "weakness");
4644 DEFSYM (Qrehash_size, "rehash-size");
4645 DEFSYM (Qrehash_threshold, "rehash-threshold");