Merge from emacs-24; up to 2012-12-26T16:22:18Z!michael.albinus@gmx.de
[bpt/emacs.git] / src / lread.c
1 /* Lisp parsing and input streams.
2
3 Copyright (C) 1985-1989, 1993-1995, 1997-2013 Free Software Foundation,
4 Inc.
5
6 This file is part of GNU Emacs.
7
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.
12
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.
17
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/>. */
20
21
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"
43
44 #ifdef MSDOS
45 #include "msdos.h"
46 #endif
47
48 #ifdef HAVE_NS
49 #include "nsterm.h"
50 #endif
51
52 #include <unistd.h>
53
54 #ifdef HAVE_SETLOCALE
55 #include <locale.h>
56 #endif /* HAVE_SETLOCALE */
57
58 #include <fcntl.h>
59
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
67
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;
74
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 */
84
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;
88
89 static Lisp_Object Qload_force_doc_strings;
90
91 static Lisp_Object Qload_in_progress;
92
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;
98
99 /* List of descriptors now open for Fload. */
100 static Lisp_Object load_descriptor_list;
101
102 /* File for get_file_char to read from. Use by load. */
103 static FILE *instream;
104
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;
109
110 /* Number of characters read in the current call to Fread or
111 Fread_from_string. */
112 static EMACS_INT readchar_count;
113
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;
122
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;
133
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;
140
141 /* A list of file names for files being loaded in Fload. Used to
142 check for recursive loads. */
143
144 static Lisp_Object Vloads_in_progress;
145
146 static int read_emacs_mule_char (int, int (*) (int, Lisp_Object),
147 Lisp_Object);
148
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);
154 \f
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. */
160
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);
164
165 /* Handle unreading and rereading of characters.
166 Write READCHAR to read a character,
167 UNREAD(c) to unread c to be read again.
168
169 These macros correctly read/unread multibyte characters. */
170
171 #define READCHAR readchar (readcharfun, NULL)
172 #define UNREAD(c) unreadchar (readcharfun, c)
173
174 /* Same as READCHAR but set *MULTIBYTE to the multibyteness of the source. */
175 #define READCHAR_REPORT_MULTIBYTE(multibyte) readchar (readcharfun, multibyte)
176
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;
182
183 static int
184 readchar (Lisp_Object readcharfun, bool *multibyte)
185 {
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;
192
193 if (multibyte)
194 *multibyte = 0;
195
196 readchar_count++;
197
198 if (BUFFERP (readcharfun))
199 {
200 register struct buffer *inbuffer = XBUFFER (readcharfun);
201
202 ptrdiff_t pt_byte = BUF_PT_BYTE (inbuffer);
203
204 if (pt_byte >= BUF_ZV_BYTE (inbuffer))
205 return -1;
206
207 if (! NILP (BVAR (inbuffer, enable_multibyte_characters)))
208 {
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;
215 }
216 else
217 {
218 c = BUF_FETCH_BYTE (inbuffer, pt_byte);
219 if (! ASCII_BYTE_P (c))
220 c = BYTE8_TO_CHAR (c);
221 pt_byte++;
222 }
223 SET_BUF_PT_BOTH (inbuffer, BUF_PT (inbuffer) + 1, pt_byte);
224
225 return c;
226 }
227 if (MARKERP (readcharfun))
228 {
229 register struct buffer *inbuffer = XMARKER (readcharfun)->buffer;
230
231 ptrdiff_t bytepos = marker_byte_position (readcharfun);
232
233 if (bytepos >= BUF_ZV_BYTE (inbuffer))
234 return -1;
235
236 if (! NILP (BVAR (inbuffer, enable_multibyte_characters)))
237 {
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;
244 }
245 else
246 {
247 c = BUF_FETCH_BYTE (inbuffer, bytepos);
248 if (! ASCII_BYTE_P (c))
249 c = BYTE8_TO_CHAR (c);
250 bytepos++;
251 }
252
253 XMARKER (readcharfun)->bytepos = bytepos;
254 XMARKER (readcharfun)->charpos++;
255
256 return c;
257 }
258
259 if (EQ (readcharfun, Qlambda))
260 {
261 readbyte = readbyte_for_lambda;
262 goto read_multibyte;
263 }
264
265 if (EQ (readcharfun, Qget_file_char))
266 {
267 readbyte = readbyte_from_file;
268 goto read_multibyte;
269 }
270
271 if (STRINGP (readcharfun))
272 {
273 if (read_from_string_index >= read_from_string_limit)
274 c = -1;
275 else if (STRING_MULTIBYTE (readcharfun))
276 {
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);
282 }
283 else
284 {
285 c = SREF (readcharfun, read_from_string_index_byte);
286 read_from_string_index++;
287 read_from_string_index_byte++;
288 }
289 return c;
290 }
291
292 if (CONSP (readcharfun))
293 {
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;
303 }
304
305 if (EQ (readcharfun, Qget_emacs_mule_file_char))
306 {
307 readbyte = readbyte_from_file;
308 emacs_mule_encoding = 1;
309 goto read_multibyte;
310 }
311
312 tem = call0 (readcharfun);
313
314 if (NILP (tem))
315 return -1;
316 return XINT (tem);
317
318 read_multibyte:
319 if (unread_char >= 0)
320 {
321 c = unread_char;
322 unread_char = -1;
323 return c;
324 }
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)
338 {
339 c = (*readbyte) (-1, readcharfun);
340 if (c < 0 || ! TRAILING_CODE_P (c))
341 {
342 while (--i > 1)
343 (*readbyte) (buf[i], readcharfun);
344 return BYTE8_TO_CHAR (buf[0]);
345 }
346 buf[i++] = c;
347 }
348 return STRING_CHAR (buf);
349 }
350
351 #define FROM_FILE_P(readcharfun) \
352 (EQ (readcharfun, Qget_file_char) \
353 || EQ (readcharfun, Qget_emacs_mule_file_char))
354
355 static void
356 skip_dyn_bytes (Lisp_Object readcharfun, ptrdiff_t n)
357 {
358 if (FROM_FILE_P (readcharfun))
359 {
360 block_input (); /* FIXME: Not sure if it's needed. */
361 fseek (instream, n, SEEK_CUR);
362 unblock_input ();
363 }
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');
375 }
376 }
377
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. */
380
381 static void
382 unreadchar (Lisp_Object readcharfun, int c)
383 {
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. */
388 ;
389 else if (BUFFERP (readcharfun))
390 {
391 struct buffer *b = XBUFFER (readcharfun);
392 ptrdiff_t charpos = BUF_PT (b);
393 ptrdiff_t bytepos = BUF_PT_BYTE (b);
394
395 if (! NILP (BVAR (b, enable_multibyte_characters)))
396 BUF_DEC_POS (b, bytepos);
397 else
398 bytepos--;
399
400 SET_BUF_PT_BOTH (b, charpos - 1, bytepos);
401 }
402 else if (MARKERP (readcharfun))
403 {
404 struct buffer *b = XMARKER (readcharfun)->buffer;
405 ptrdiff_t bytepos = XMARKER (readcharfun)->bytepos;
406
407 XMARKER (readcharfun)->charpos--;
408 if (! NILP (BVAR (b, enable_multibyte_characters)))
409 BUF_DEC_POS (b, bytepos);
410 else
411 bytepos--;
412
413 XMARKER (readcharfun)->bytepos = bytepos;
414 }
415 else if (STRINGP (readcharfun))
416 {
417 read_from_string_index--;
418 read_from_string_index_byte
419 = string_char_to_byte (readcharfun, read_from_string_index);
420 }
421 else if (CONSP (readcharfun))
422 {
423 unread_char = c;
424 }
425 else if (EQ (readcharfun, Qlambda))
426 {
427 unread_char = c;
428 }
429 else if (FROM_FILE_P (readcharfun))
430 {
431 unread_char = c;
432 }
433 else
434 call1 (readcharfun, make_number (c));
435 }
436
437 static int
438 readbyte_for_lambda (int c, Lisp_Object readcharfun)
439 {
440 return read_bytecode_char (c >= 0);
441 }
442
443
444 static int
445 readbyte_from_file (int c, Lisp_Object readcharfun)
446 {
447 if (c >= 0)
448 {
449 block_input ();
450 ungetc (c, instream);
451 unblock_input ();
452 return 0;
453 }
454
455 block_input ();
456 c = getc (instream);
457
458 /* Interrupted reads have been observed while reading over the network. */
459 while (c == EOF && ferror (instream) && errno == EINTR)
460 {
461 unblock_input ();
462 QUIT;
463 block_input ();
464 clearerr (instream);
465 c = getc (instream);
466 }
467
468 unblock_input ();
469
470 return (c == EOF ? -1 : c);
471 }
472
473 static int
474 readbyte_from_string (int c, Lisp_Object readcharfun)
475 {
476 Lisp_Object string = XCAR (readcharfun);
477
478 if (c >= 0)
479 {
480 read_from_string_index--;
481 read_from_string_index_byte
482 = string_char_to_byte (string, read_from_string_index);
483 }
484
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;
492 }
493
494
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. */
498
499 static int
500 read_emacs_mule_char (int c, int (*readbyte) (int, Lisp_Object), Lisp_Object readcharfun)
501 {
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;
508
509 if (len == 1)
510 /* C is not a valid leading-code of `emacs-mule'. */
511 return BYTE8_TO_CHAR (c);
512
513 i = 0;
514 buf[i++] = c;
515 while (i < len)
516 {
517 c = (*readbyte) (-1, readcharfun);
518 if (c < 0xA0)
519 {
520 while (--i > 1)
521 (*readbyte) (buf[i], readcharfun);
522 return BYTE8_TO_CHAR (buf[0]);
523 }
524 buf[i++] = c;
525 }
526
527 if (len == 2)
528 {
529 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
530 code = buf[1] & 0x7F;
531 }
532 else if (len == 3)
533 {
534 if (buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_11
535 || buf[0] == EMACS_MULE_LEADING_CODE_PRIVATE_12)
536 {
537 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
538 code = buf[2] & 0x7F;
539 }
540 else
541 {
542 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[0]]);
543 code = ((buf[1] << 8) | buf[2]) & 0x7F7F;
544 }
545 }
546 else
547 {
548 charset = CHARSET_FROM_ID (emacs_mule_charset[buf[1]]);
549 code = ((buf[2] << 8) | buf[3]) & 0x7F7F;
550 }
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;
556 }
557
558
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);
563
564 static Lisp_Object read_list (bool, Lisp_Object);
565 static Lisp_Object read_vector (Lisp_Object, bool);
566
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);
572
573 \f
574 /* Get a character from the tty. */
575
576 /* Read input events until we get one that's acceptable for our purposes.
577
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.
581
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.
585
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.
590
591 If INPUT_METHOD, invoke the current input method
592 if the character warrants that.
593
594 If SECONDS is a number, wait that many seconds for input, and
595 return Qnil if no input arrives within that time. */
596
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)
600 {
601 Lisp_Object val, delayed_switch_frame;
602 EMACS_TIME end_time;
603
604 #ifdef HAVE_WINDOW_SYSTEM
605 if (display_hourglass_p)
606 cancel_hourglass ();
607 #endif
608
609 delayed_switch_frame = Qnil;
610
611 /* Compute timeout. */
612 if (NUMBERP (seconds))
613 {
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);
617 }
618
619 /* Read until we get an acceptable event. */
620 retry:
621 do
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 */
625
626 if (BUFFERP (val))
627 goto retry;
628
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))
637 {
638 delayed_switch_frame = val;
639 goto retry;
640 }
641
642 if (ascii_required && !(NUMBERP (seconds) && NILP (val)))
643 {
644 /* Convert certain symbols to their ASCII equivalents. */
645 if (SYMBOLP (val))
646 {
647 Lisp_Object tem, tem1;
648 tem = Fget (val, Qevent_symbol_element_mask);
649 if (!NILP (tem))
650 {
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))));
656 }
657 }
658
659 /* If we don't have a character now, deal with it appropriately. */
660 if (!INTEGERP (val))
661 {
662 if (error_nonascii)
663 {
664 Vunread_command_events = Fcons (val, Qnil);
665 error ("Non-character input-event");
666 }
667 else
668 goto retry;
669 }
670 }
671
672 if (! NILP (delayed_switch_frame))
673 unread_switch_frame = delayed_switch_frame;
674
675 #if 0
676
677 #ifdef HAVE_WINDOW_SYSTEM
678 if (display_hourglass_p)
679 start_hourglass ();
680 #endif
681
682 #endif
683
684 return val;
685 }
686
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).
692
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.
699
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)
709 {
710 Lisp_Object val;
711
712 if (! NILP (prompt))
713 message_with_string ("%s", prompt, 0);
714 val = read_filtered_event (1, 1, 1, ! NILP (inherit_input_method), seconds);
715
716 return (NILP (val) ? Qnil
717 : make_number (char_resolve_modifier_mask (XINT (val))));
718 }
719
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)
731 {
732 if (! NILP (prompt))
733 message_with_string ("%s", prompt, 0);
734 return read_filtered_event (0, 0, 0, ! NILP (inherit_input_method), seconds);
735 }
736
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).
742
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)
752 {
753 Lisp_Object val;
754
755 if (! NILP (prompt))
756 message_with_string ("%s", prompt, 0);
757
758 val = read_filtered_event (1, 1, 0, ! NILP (inherit_input_method), seconds);
759
760 return (NILP (val) ? Qnil
761 : make_number (char_resolve_modifier_mask (XINT (val))));
762 }
763
764 DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0,
765 doc: /* Don't use this yourself. */)
766 (void)
767 {
768 register Lisp_Object val;
769 block_input ();
770 XSETINT (val, getc (instream));
771 unblock_input ();
772 return val;
773 }
774
775
776 \f
777
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. */
782
783 static bool
784 lisp_file_lexically_bound_p (Lisp_Object readcharfun)
785 {
786 int ch = READCHAR;
787
788 if (ch == '#')
789 {
790 ch = READCHAR;
791 if (ch != '!')
792 {
793 UNREAD (ch);
794 UNREAD ('#');
795 return 0;
796 }
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. */
802 }
803
804 if (ch != ';')
805 /* The first line isn't a comment, just give up. */
806 {
807 UNREAD (ch);
808 return 0;
809 }
810 else
811 /* Look for an appropriate file-variable in the first line. */
812 {
813 bool rv = 0;
814 enum {
815 NOMINAL, AFTER_FIRST_DASH, AFTER_ASTERIX,
816 } beg_end_state = NOMINAL;
817 bool in_file_vars = 0;
818
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) \
825 { \
826 if (ch == '-') \
827 in_file_vars = !in_file_vars; \
828 beg_end_state = NOMINAL; \
829 }
830
831 /* Skip until we get to the file vars, if any. */
832 do
833 {
834 ch = READCHAR;
835 UPDATE_BEG_END_STATE (ch);
836 }
837 while (!in_file_vars && ch != '\n' && ch != EOF);
838
839 while (in_file_vars)
840 {
841 char var[100], val[100];
842 unsigned i;
843
844 ch = READCHAR;
845
846 /* Read a variable name. */
847 while (ch == ' ' || ch == '\t')
848 ch = READCHAR;
849
850 i = 0;
851 while (ch != ':' && ch != '\n' && ch != EOF && in_file_vars)
852 {
853 if (i < sizeof var - 1)
854 var[i++] = ch;
855 UPDATE_BEG_END_STATE (ch);
856 ch = READCHAR;
857 }
858
859 /* Stop scanning if no colon was found before end marker. */
860 if (!in_file_vars || ch == '\n' || ch == EOF)
861 break;
862
863 while (i > 0 && (var[i - 1] == ' ' || var[i - 1] == '\t'))
864 i--;
865 var[i] = '\0';
866
867 if (ch == ':')
868 {
869 /* Read a variable value. */
870 ch = READCHAR;
871
872 while (ch == ' ' || ch == '\t')
873 ch = READCHAR;
874
875 i = 0;
876 while (ch != ';' && ch != '\n' && ch != EOF && in_file_vars)
877 {
878 if (i < sizeof val - 1)
879 val[i++] = ch;
880 UPDATE_BEG_END_STATE (ch);
881 ch = READCHAR;
882 }
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';
889
890 if (strcmp (var, "lexical-binding") == 0)
891 /* This is it... */
892 {
893 rv = (strcmp (val, "nil") != 0);
894 break;
895 }
896 }
897 }
898
899 while (ch != '\n' && ch != EOF)
900 ch = READCHAR;
901
902 return rv;
903 }
904 }
905 \f
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. */
911
912 static int
913 safe_to_load_version (int fd)
914 {
915 char buf[512];
916 int nbytes, i;
917 int version = 1;
918
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)
923 {
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];
929
930 if (i >= nbytes
931 || fast_c_string_match_ignore_case (Vbytecomp_version_regexp,
932 buf + i, nbytes - i) < 0)
933 version = 0;
934 }
935
936 lseek (fd, 0, SEEK_SET);
937 return version;
938 }
939
940
941 /* Callback for record_unwind_protect. Restore the old load list OLD,
942 after loading a file successfully. */
943
944 static Lisp_Object
945 record_load_unwind (Lisp_Object old)
946 {
947 return Vloads_in_progress = old;
948 }
949
950 /* This handler function is used via internal_condition_case_1. */
951
952 static Lisp_Object
953 load_error_handler (Lisp_Object data)
954 {
955 return Qnil;
956 }
957
958 static Lisp_Object
959 load_warn_old_style_backquotes (Lisp_Object file)
960 {
961 if (!NILP (Vold_style_backquotes))
962 {
963 Lisp_Object args[2];
964 args[0] = build_string ("Loading `%s': old-style backquotes detected!");
965 args[1] = file;
966 Fmessage (2, args);
967 }
968 return Qnil;
969 }
970
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)
976 {
977 Lisp_Object lst = Qnil, suffixes = Vload_suffixes, suffix, ext;
978 while (CONSP (suffixes))
979 {
980 Lisp_Object exts = Vload_file_rep_suffixes;
981 suffix = XCAR (suffixes);
982 suffixes = XCDR (suffixes);
983 while (CONSP (exts))
984 {
985 ext = XCAR (exts);
986 exts = XCDR (exts);
987 lst = Fcons (concat2 (suffix, ext), lst);
988 }
989 }
990 return Fnreverse (lst);
991 }
992
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'.
1000
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.
1011
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.
1017
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.
1023
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'.
1027
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.
1031
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)
1034 {
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;
1049
1050 #ifdef DOS_NT
1051 fmode = "rt";
1052 #endif /* DOS_NT */
1053
1054 CHECK_STRING (file);
1055
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); */
1061
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))
1071 {
1072 file = internal_condition_case_1 (Fsubstitute_in_file_name, file,
1073 Qt, load_error_handler);
1074 if (NILP (file))
1075 return Qnil;
1076 }
1077 else
1078 file = Fsubstitute_in_file_name (file);
1079
1080
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)
1084 {
1085 ptrdiff_t size = SBYTES (file);
1086
1087 found = Qnil;
1088 GCPRO2 (file, found);
1089
1090 if (! NILP (must_suffix))
1091 {
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;
1103 }
1104
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;
1113 }
1114
1115 if (fd == -1)
1116 {
1117 if (NILP (noerror))
1118 xsignal2 (Qfile_error, build_string ("Cannot open load file"), file);
1119 return Qnil;
1120 }
1121
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;
1125
1126 /* If FD is -2, that means openp found a magic file. */
1127 if (fd == -2)
1128 {
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
1154 }
1155
1156 /* Check if we're stuck in a recursive load cycle.
1157
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.
1163
1164 Also, just loading a file recursively is not always an error in
1165 the general case; the second load may do something different. */
1166 {
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))
1171 {
1172 if (fd >= 0)
1173 emacs_close (fd);
1174 signal_error ("Recursive load", Fcons (found, Vloads_in_progress));
1175 }
1176 record_unwind_protect (record_load_unwind, Vloads_in_progress);
1177 Vloads_in_progress = Fcons (found, Vloads_in_progress);
1178 }
1179
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);
1185
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) ;
1192
1193 version = -1;
1194
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);
1198
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! */
1203 {
1204 if (fd != -2)
1205 {
1206 struct stat s1, s2;
1207 int result;
1208
1209 GCPRO3 (file, found, hist_file_name);
1210
1211 if (version < 0
1212 && ! (version = safe_to_load_version (fd)))
1213 {
1214 safe_p = 0;
1215 if (!load_dangerous_libraries)
1216 {
1217 if (fd >= 0)
1218 emacs_close (fd);
1219 error ("File `%s' was not compiled in Emacs",
1220 SDATA (found));
1221 }
1222 else if (!NILP (nomessage) && !force_load_messages)
1223 message_with_string ("File `%s' not compiled in Emacs", found, 1);
1224 }
1225
1226 compiled = 1;
1227
1228 efound = ENCODE_FILE (found);
1229
1230 #ifdef DOS_NT
1231 fmode = "rb";
1232 #endif /* DOS_NT */
1233 result = stat (SSDATA (efound), &s1);
1234 if (result == 0)
1235 {
1236 SSET (efound, SBYTES (efound) - 1, 0);
1237 result = stat (SSDATA (efound), &s2);
1238 SSET (efound, SBYTES (efound) - 1, 'c');
1239 }
1240
1241 if (result == 0
1242 && EMACS_TIME_LT (get_stat_mtime (&s1), get_stat_mtime (&s2)))
1243 {
1244 /* Make the progress messages mention that source is newer. */
1245 newer = 1;
1246
1247 /* If we won't print another message, mention this anyway. */
1248 if (!NILP (nomessage) && !force_load_messages)
1249 {
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);
1254 }
1255 }
1256 UNGCPRO;
1257 }
1258 }
1259 else
1260 {
1261 /* We are loading a source file (*.el). */
1262 if (!NILP (Vload_source_file_function))
1263 {
1264 Lisp_Object val;
1265
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);
1272 }
1273 }
1274
1275 GCPRO3 (file, found, hist_file_name);
1276
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)
1283 {
1284 emacs_close (fd);
1285 stream = fopen (SSDATA (efound), fmode);
1286 }
1287 else
1288 stream = NULL;
1289 #else /* not WINDOWSNT */
1290 stream = fdopen (fd, fmode);
1291 #endif /* not WINDOWSNT */
1292 if (stream == 0)
1293 {
1294 emacs_close (fd);
1295 error ("Failure to create stdio stream for %s", SDATA (file));
1296 }
1297
1298 if (! NILP (Vpurify_flag))
1299 Vpreloaded_file_list = Fcons (Fpurecopy (file), Vpreloaded_file_list);
1300
1301 if (NILP (nomessage) || force_load_messages)
1302 {
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);
1313 }
1314
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);
1322
1323 instream = stream;
1324 if (lisp_file_lexically_bound_p (Qget_file_char))
1325 Fset (Qlexical_binding, Qt);
1326
1327 if (! version || version >= 22)
1328 readevalloop (Qget_file_char, stream, hist_file_name,
1329 0, Qnil, Qnil, Qnil, Qnil);
1330 else
1331 {
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);
1337 }
1338 unbind_to (count, Qnil);
1339
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) ;
1343
1344 UNGCPRO;
1345
1346 xfree (saved_doc_string);
1347 saved_doc_string = 0;
1348 saved_doc_string_size = 0;
1349
1350 xfree (prev_saved_doc_string);
1351 prev_saved_doc_string = 0;
1352 prev_saved_doc_string_size = 0;
1353
1354 if (!noninteractive && (NILP (nomessage) || force_load_messages))
1355 {
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);
1366 }
1367
1368 return Qt;
1369 }
1370
1371 static Lisp_Object
1372 load_unwind (Lisp_Object arg) /* Used as unwind-protect function in load. */
1373 {
1374 FILE *stream = XSAVE_POINTER (arg, 0);
1375 if (stream != NULL)
1376 {
1377 block_input ();
1378 fclose (stream);
1379 unblock_input ();
1380 }
1381 return Qnil;
1382 }
1383
1384 static Lisp_Object
1385 load_descriptor_unwind (Lisp_Object oldlist)
1386 {
1387 load_descriptor_list = oldlist;
1388 return Qnil;
1389 }
1390
1391 /* Close all descriptors in use for Floads.
1392 This is used when starting a subprocess. */
1393
1394 void
1395 close_load_descs (void)
1396 {
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
1402 }
1403 \f
1404 static bool
1405 complete_filename_p (Lisp_Object pathname)
1406 {
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])));
1411 }
1412
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)
1424 {
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;
1430 }
1431
1432 static Lisp_Object Qdir_ok;
1433
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.
1437
1438 SUFFIXES is a list of strings containing possible suffixes.
1439 The empty suffix is automatically added if the list is empty.
1440
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).
1446
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.
1450
1451 If the file we find is remote, return -2
1452 but store the found remote file name in *STOREPTR. */
1453
1454 int
1455 openp (Lisp_Object path, Lisp_Object str, Lisp_Object suffixes, Lisp_Object *storeptr, Lisp_Object predicate)
1456 {
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;
1466
1467 CHECK_STRING (str);
1468
1469 for (tail = suffixes; CONSP (tail); tail = XCDR (tail))
1470 {
1471 CHECK_STRING_CAR (tail);
1472 max_suffix_len = max (max_suffix_len,
1473 SBYTES (XCAR (tail)));
1474 }
1475
1476 string = filename = encoded_fn = Qnil;
1477 GCPRO6 (str, string, filename, path, suffixes, encoded_fn);
1478
1479 if (storeptr)
1480 *storeptr = Qnil;
1481
1482 if (complete_filename_p (str))
1483 absolute = 1;
1484
1485 for (; CONSP (path); path = XCDR (path))
1486 {
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... */
1492 {
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;
1497 }
1498
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);
1504
1505 /* Loop over suffixes. */
1506 for (tail = NILP (suffixes) ? Fcons (empty_unibyte_string, Qnil) : suffixes;
1507 CONSP (tail); tail = XCDR (tail))
1508 {
1509 ptrdiff_t fnlen, lsuffix = SBYTES (XCAR (tail));
1510 Lisp_Object handler;
1511
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))
1533 {
1534 bool exists;
1535 if (NILP (predicate))
1536 exists = !NILP (Ffile_readable_p (string));
1537 else
1538 {
1539 Lisp_Object tmp = call1 (predicate, string);
1540 exists = !NILP (tmp)
1541 && (EQ (tmp, Qdir_ok)
1542 || NILP (Ffile_directory_p (string)));
1543 }
1544
1545 if (exists)
1546 {
1547 /* We succeeded; return this descriptor and filename. */
1548 if (storeptr)
1549 *storeptr = string;
1550 UNGCPRO;
1551 return -2;
1552 }
1553 }
1554 else
1555 {
1556 int fd;
1557 const char *pfn;
1558
1559 encoded_fn = ENCODE_FILE (string);
1560 pfn = SSDATA (encoded_fn);
1561
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
1571 {
1572 struct stat st;
1573 fd = emacs_open (pfn, O_RDONLY, 0);
1574 if (fd >= 0
1575 && (fstat (fd, &st) != 0 || S_ISDIR (st.st_mode)))
1576 {
1577 emacs_close (fd);
1578 fd = -1;
1579 }
1580 }
1581
1582 if (fd >= 0)
1583 {
1584 /* We succeeded; return this descriptor and filename. */
1585 if (storeptr)
1586 *storeptr = string;
1587 UNGCPRO;
1588 return fd;
1589 }
1590 }
1591 }
1592 if (absolute)
1593 break;
1594 }
1595
1596 UNGCPRO;
1597 return -1;
1598 }
1599
1600 \f
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.
1604
1605 FILENAME is the file name that we are loading from.
1606
1607 ENTIRE is true if loading that entire file, false if evaluating
1608 part of it. */
1609
1610 static void
1611 build_load_history (Lisp_Object filename, bool entire)
1612 {
1613 Lisp_Object tail, prev, newelt;
1614 Lisp_Object tem, tem2;
1615 bool foundit = 0;
1616
1617 tail = Vload_history;
1618 prev = Qnil;
1619
1620 while (CONSP (tail))
1621 {
1622 tem = XCAR (tail);
1623
1624 /* Find the feature's previous assoc list... */
1625 if (!NILP (Fequal (filename, Fcar (tem))))
1626 {
1627 foundit = 1;
1628
1629 /* If we're loading the entire file, remove old data. */
1630 if (entire)
1631 {
1632 if (NILP (prev))
1633 Vload_history = XCDR (tail);
1634 else
1635 Fsetcdr (prev, XCDR (tail));
1636 }
1637
1638 /* Otherwise, cons on new symbols that are not already members. */
1639 else
1640 {
1641 tem2 = Vcurrent_load_list;
1642
1643 while (CONSP (tem2))
1644 {
1645 newelt = XCAR (tem2);
1646
1647 if (NILP (Fmember (newelt, tem)))
1648 Fsetcar (tail, Fcons (XCAR (tem),
1649 Fcons (newelt, XCDR (tem))));
1650
1651 tem2 = XCDR (tem2);
1652 QUIT;
1653 }
1654 }
1655 }
1656 else
1657 prev = tail;
1658 tail = XCDR (tail);
1659 QUIT;
1660 }
1661
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);
1668 }
1669
1670 static Lisp_Object
1671 readevalloop_1 (Lisp_Object old)
1672 {
1673 load_convert_to_unibyte = ! NILP (old);
1674 return Qnil;
1675 }
1676
1677 /* Signal an `end-of-file' error, if possible with file name
1678 information. */
1679
1680 static _Noreturn void
1681 end_of_file_error (void)
1682 {
1683 if (STRINGP (Vload_file_name))
1684 xsignal1 (Qend_of_file, Vload_file_name);
1685
1686 xsignal0 (Qend_of_file);
1687 }
1688
1689 /* UNIBYTE specifies how to set load_convert_to_unibyte
1690 for this invocation.
1691 READFUN, if non-nil, is used instead of `read'.
1692
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. */
1695
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)
1703 {
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");
1716
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;
1726
1727 if (MARKERP (readcharfun))
1728 {
1729 if (NILP (start))
1730 start = readcharfun;
1731 }
1732
1733 if (BUFFERP (readcharfun))
1734 b = XBUFFER (readcharfun);
1735 else if (MARKERP (readcharfun))
1736 b = XMARKER (readcharfun)->buffer;
1737
1738 /* We assume START is nil when input is not from a buffer. */
1739 if (! NILP (start) && !b)
1740 emacs_abort ();
1741
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);
1746
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));
1754
1755 GCPRO4 (sourcename, readfun, start, end);
1756
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) ;
1762
1763 LOADHIST_ATTACH (sourcename);
1764
1765 continue_reading_p = 1;
1766 while (continue_reading_p)
1767 {
1768 ptrdiff_t count1 = SPECPDL_INDEX ();
1769
1770 if (b != 0 && !BUFFER_LIVE_P (b))
1771 error ("Reading from killed buffer");
1772
1773 if (!NILP (start))
1774 {
1775 /* Switch to the buffer we are reading from. */
1776 record_unwind_protect (save_excursion_restore, save_excursion_save ());
1777 set_buffer_internal (b);
1778
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. */
1784
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);
1789
1790 /* Just for cleanliness, convert END to a marker
1791 if it is an integer. */
1792 if (INTEGERP (end))
1793 end = Fpoint_max_marker ();
1794 }
1795
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);
1800
1801 instream = stream;
1802 read_next:
1803 c = READCHAR;
1804 if (c == ';')
1805 {
1806 while ((c = READCHAR) != '\n' && c != -1);
1807 goto read_next;
1808 }
1809 if (c < 0)
1810 {
1811 unbind_to (count1, Qnil);
1812 break;
1813 }
1814
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;
1819
1820 if (!NILP (Vpurify_flag) && c == '(')
1821 {
1822 val = read_list (0, readcharfun);
1823 }
1824 else
1825 {
1826 UNREAD (c);
1827 read_objects = Qnil;
1828 if (!NILP (readfun))
1829 {
1830 val = call1 (readfun, readcharfun);
1831
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))
1836 {
1837 struct buffer *buf = XBUFFER (readcharfun);
1838 if (BUF_PT (buf) == BUF_ZV (buf))
1839 continue_reading_p = 0;
1840 }
1841 }
1842 else if (! NILP (Vload_read_function))
1843 val = call1 (Vload_read_function, readcharfun);
1844 else
1845 val = read_internal_start (readcharfun, Qnil, Qnil);
1846 }
1847
1848 if (!NILP (start) && continue_reading_p)
1849 start = Fpoint_marker ();
1850
1851 /* Restore saved point and BEGV. */
1852 unbind_to (count1, Qnil);
1853
1854 /* Now eval what we just read. */
1855 if (!NILP (macroexpand))
1856 val = call1 (macroexpand, val);
1857 val = eval_sub (val);
1858
1859 if (printflag)
1860 {
1861 Vvalues = Fcons (val, Vvalues);
1862 if (EQ (Vstandard_output, Qt))
1863 Fprin1 (val, Qnil);
1864 else
1865 Fprint (val, Qnil);
1866 }
1867
1868 first_sexp = 0;
1869 }
1870
1871 build_load_history (sourcename,
1872 stream || whole_buffer);
1873
1874 UNGCPRO;
1875
1876 unbind_to (count, Qnil);
1877 }
1878
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.
1891
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)
1894 {
1895 ptrdiff_t count = SPECPDL_INDEX ();
1896 Lisp_Object tem, buf;
1897
1898 if (NILP (buffer))
1899 buf = Fcurrent_buffer ();
1900 else
1901 buf = Fget_buffer (buffer);
1902 if (NILP (buf))
1903 error ("No such buffer");
1904
1905 if (NILP (printflag) && NILP (do_allow_print))
1906 tem = Qsymbolp;
1907 else
1908 tem = printflag;
1909
1910 if (NILP (filename))
1911 filename = BVAR (XBUFFER (buf), filename);
1912
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);
1921
1922 return Qnil;
1923 }
1924
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.
1935
1936 This function does not move point. */)
1937 (Lisp_Object start, Lisp_Object end, Lisp_Object printflag, Lisp_Object read_function)
1938 {
1939 /* FIXME: Do the eval-sexp-add-defvars dance! */
1940 ptrdiff_t count = SPECPDL_INDEX ();
1941 Lisp_Object tem, cbuf;
1942
1943 cbuf = Fcurrent_buffer ();
1944
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));
1951
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);
1956
1957 return unbind_to (count, Qnil);
1958 }
1959
1960 \f
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)
1973 {
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);
1980
1981 return read_internal_start (stream, Qnil, Qnil);
1982 }
1983
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)
1992 {
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));
1998 }
1999
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. */
2005 {
2006 Lisp_Object retval;
2007
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;
2014
2015 if (STRINGP (stream)
2016 || ((CONSP (stream) && STRINGP (XCAR (stream)))))
2017 {
2018 ptrdiff_t startval, endval;
2019 Lisp_Object string;
2020
2021 if (STRINGP (stream))
2022 string = stream;
2023 else
2024 string = XCAR (stream);
2025
2026 if (NILP (end))
2027 endval = SCHARS (string);
2028 else
2029 {
2030 CHECK_NUMBER (end);
2031 if (! (0 <= XINT (end) && XINT (end) <= SCHARS (string)))
2032 args_out_of_range (string, end);
2033 endval = XINT (end);
2034 }
2035
2036 if (NILP (start))
2037 startval = 0;
2038 else
2039 {
2040 CHECK_NUMBER (start);
2041 if (! (0 <= XINT (start) && XINT (start) <= endval))
2042 args_out_of_range (string, start);
2043 startval = XINT (start);
2044 }
2045 read_from_string_index = startval;
2046 read_from_string_index_byte = string_char_to_byte (string, startval);
2047 read_from_string_limit = endval;
2048 }
2049
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;
2055 }
2056 \f
2057
2058 /* Signal Qinvalid_read_syntax error.
2059 S is error string of length N (if > 0) */
2060
2061 static _Noreturn void
2062 invalid_syntax (const char *s)
2063 {
2064 xsignal1 (Qinvalid_read_syntax, build_string (s));
2065 }
2066
2067
2068 /* Use this for recursive reads, in contexts where internal tokens
2069 are not allowed. */
2070
2071 static Lisp_Object
2072 read0 (Lisp_Object readcharfun)
2073 {
2074 register Lisp_Object val;
2075 int c;
2076
2077 val = read1 (readcharfun, &c, 0);
2078 if (!c)
2079 return val;
2080
2081 xsignal1 (Qinvalid_read_syntax,
2082 Fmake_string (make_number (1), make_number (c)));
2083 }
2084 \f
2085 static ptrdiff_t read_buffer_size;
2086 static char *read_buffer;
2087
2088 /* Read a \-escape sequence, assuming we already read the `\'.
2089 If the escape sequence forces unibyte, return eight-bit char. */
2090
2091 static int
2092 read_escape (Lisp_Object readcharfun, bool stringp)
2093 {
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;
2098
2099 switch (c)
2100 {
2101 case -1:
2102 end_of_file_error ();
2103
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 ' ';
2128
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;
2137
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;
2146
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;
2155
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;
2164
2165 case 's':
2166 c = READCHAR;
2167 if (stringp || c != '-')
2168 {
2169 UNREAD (c);
2170 return ' ';
2171 }
2172 c = READCHAR;
2173 if (c == '\\')
2174 c = read_escape (readcharfun, 0);
2175 return c | super_modifier;
2176
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;
2197
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. */
2207 {
2208 register int i = c - '0';
2209 register int count = 0;
2210 while (++count < 3)
2211 {
2212 if ((c = READCHAR) >= '0' && c <= '7')
2213 {
2214 i *= 8;
2215 i += c - '0';
2216 }
2217 else
2218 {
2219 UNREAD (c);
2220 break;
2221 }
2222 }
2223
2224 if (i >= 0x80 && i < 0x100)
2225 i = BYTE8_TO_CHAR (i);
2226 return i;
2227 }
2228
2229 case 'x':
2230 /* A hex escape, as in ANSI C. */
2231 {
2232 unsigned int i = 0;
2233 int count = 0;
2234 while (1)
2235 {
2236 c = READCHAR;
2237 if (c >= '0' && c <= '9')
2238 {
2239 i *= 16;
2240 i += c - '0';
2241 }
2242 else if ((c >= 'a' && c <= 'f')
2243 || (c >= 'A' && c <= 'F'))
2244 {
2245 i *= 16;
2246 if (c >= 'a' && c <= 'f')
2247 i += c - 'a' + 10;
2248 else
2249 i += c - 'A' + 10;
2250 }
2251 else
2252 {
2253 UNREAD (c);
2254 break;
2255 }
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;
2261 }
2262
2263 if (count < 3 && i >= 0x80)
2264 return BYTE8_TO_CHAR (i);
2265 return i;
2266 }
2267
2268 case 'U':
2269 /* Post-Unicode-2.0: Up to eight hex chars. */
2270 unicode_hex_count = 8;
2271 case 'u':
2272
2273 /* A Unicode escape. We only permit them in strings and characters,
2274 not arbitrarily in the source code, as in some other languages. */
2275 {
2276 unsigned int i = 0;
2277 int count = 0;
2278
2279 while (++count <= unicode_hex_count)
2280 {
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");
2289 }
2290 if (i > 0x10FFFF)
2291 error ("Non-Unicode character: 0x%x", i);
2292 return i;
2293 }
2294
2295 default:
2296 return c;
2297 }
2298 }
2299
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)
2305 {
2306 int digit;
2307
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;
2316
2317 return digit < base ? digit : -1;
2318 }
2319
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. */
2325
2326 static Lisp_Object
2327 read_integer (Lisp_Object readcharfun, EMACS_INT radix)
2328 {
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))];
2333
2334 int valid = -1; /* 1 if valid, 0 if not, -1 if incomplete. */
2335
2336 if (radix < 2 || radix > 36)
2337 valid = 0;
2338 else
2339 {
2340 char *p = buf;
2341 int c, digit;
2342
2343 c = READCHAR;
2344 if (c == '-' || c == '+')
2345 {
2346 *p++ = c;
2347 c = READCHAR;
2348 }
2349
2350 if (c == '0')
2351 {
2352 *p++ = c;
2353 valid = 1;
2354
2355 /* Ignore redundant leading zeros, so the buffer doesn't
2356 fill up with them. */
2357 do
2358 c = READCHAR;
2359 while (c == '0');
2360 }
2361
2362 while ((digit = digit_to_number (c, radix)) >= -1)
2363 {
2364 if (digit == -1)
2365 valid = 0;
2366 if (valid < 0)
2367 valid = 1;
2368
2369 if (p < buf + sizeof buf - 1)
2370 *p++ = c;
2371 else
2372 valid = 0;
2373
2374 c = READCHAR;
2375 }
2376
2377 UNREAD (c);
2378 *p = '\0';
2379 }
2380
2381 if (! valid)
2382 {
2383 sprintf (buf, "integer, radix %"pI"d", radix);
2384 invalid_syntax (buf);
2385 }
2386
2387 return string_to_number (buf, radix, 0);
2388 }
2389
2390
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.
2394
2395 FIRST_IN_LIST is true if this is the first element of a list. */
2396
2397 static Lisp_Object
2398 read1 (Lisp_Object readcharfun, int *pch, bool first_in_list)
2399 {
2400 int c;
2401 bool uninterned_symbol = 0;
2402 bool multibyte;
2403
2404 *pch = 0;
2405
2406 retry:
2407
2408 c = READCHAR_REPORT_MULTIBYTE (&multibyte);
2409 if (c < 0)
2410 end_of_file_error ();
2411
2412 switch (c)
2413 {
2414 case '(':
2415 return read_list (0, readcharfun);
2416
2417 case '[':
2418 return read_vector (readcharfun, 0);
2419
2420 case ')':
2421 case ']':
2422 {
2423 *pch = c;
2424 return Qnil;
2425 }
2426
2427 case '#':
2428 c = READCHAR;
2429 if (c == 's')
2430 {
2431 c = READCHAR;
2432 if (c == '(')
2433 {
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;
2447
2448 if (!EQ (head, Qhash_table))
2449 error ("Invalid extended read marker at head of #s list "
2450 "(only hash-table allowed)");
2451
2452 tmp = CDR_SAFE (tmp);
2453
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;
2459
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;
2464
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;
2469
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;
2474
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;
2479
2480 /* This is the hashtable data. */
2481 data = Fplist_get (tmp, Qdata);
2482
2483 /* Now use params to make a new hashtable and fill it. */
2484 ht = Fmake_hash_table (param_count, params);
2485
2486 while (CONSP (data))
2487 {
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);
2495 }
2496
2497 return ht;
2498 }
2499 UNREAD (c);
2500 invalid_syntax ("#");
2501 }
2502 if (c == '^')
2503 {
2504 c = READCHAR;
2505 if (c == '[')
2506 {
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;
2513 }
2514 else if (c == '^')
2515 {
2516 c = READCHAR;
2517 if (c == '[')
2518 {
2519 Lisp_Object tmp;
2520 int depth;
2521 ptrdiff_t size;
2522
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;
2534 }
2535 invalid_syntax ("#^^");
2536 }
2537 invalid_syntax ("#^");
2538 }
2539 if (c == '&')
2540 {
2541 Lisp_Object length;
2542 length = read1 (readcharfun, pch, first_in_list);
2543 c = READCHAR;
2544 if (c == '"')
2545 {
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);
2550
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 ("#&...");
2562
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;
2570 }
2571 invalid_syntax ("#&...");
2572 }
2573 if (c == '[')
2574 {
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;
2581 }
2582 if (c == '(')
2583 {
2584 Lisp_Object tmp;
2585 struct gcpro gcpro1;
2586 int ch;
2587
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)
2595 {
2596 Lisp_Object beg, end, plist;
2597
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);
2609 }
2610 UNGCPRO;
2611 return tmp;
2612 }
2613
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 == '@')
2618 {
2619 enum { extra = 100 };
2620 ptrdiff_t i, nskip = 0;
2621
2622 /* Read a decimal integer. */
2623 while ((c = READCHAR) >= 0
2624 && c >= '0' && c <= '9')
2625 {
2626 if ((STRING_BYTES_BOUND - extra) / 10 <= nskip)
2627 string_overflow ();
2628 nskip *= 10;
2629 nskip += c - '0';
2630 }
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);
2639
2640 if (load_force_doc_strings
2641 && (FROM_FILE_P (readcharfun)))
2642 {
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. */
2646
2647 /* But first exchange saved_doc_string
2648 with prev_saved_doc_string, so we save two strings. */
2649 {
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;
2654
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;
2659
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;
2664 }
2665
2666 if (saved_doc_string_size == 0)
2667 {
2668 saved_doc_string = xmalloc (nskip + extra);
2669 saved_doc_string_size = nskip + extra;
2670 }
2671 if (nskip > saved_doc_string_size)
2672 {
2673 saved_doc_string = xrealloc (saved_doc_string, nskip + extra);
2674 saved_doc_string_size = nskip + extra;
2675 }
2676
2677 saved_doc_string_position = file_tell (instream);
2678
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 ();
2684
2685 saved_doc_string_length = i;
2686 }
2687 else
2688 /* Skip that many bytes. */
2689 skip_dyn_bytes (readcharfun, nskip);
2690
2691 goto retry;
2692 }
2693 if (c == '!')
2694 {
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;
2700 }
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 == ':')
2707 {
2708 uninterned_symbol = 1;
2709 c = READCHAR;
2710 if (!(c > 040
2711 && c != 0xa0 /* NBSP */
2712 && (c >= 0200
2713 || strchr ("\"';()[]#`,", c) == NULL)))
2714 {
2715 /* No symbol character follows, this is the empty
2716 symbol. */
2717 UNREAD (c);
2718 return Fmake_symbol (empty_unibyte_string);
2719 }
2720 goto read_symbol;
2721 }
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')
2727 {
2728 EMACS_INT n = 0;
2729 Lisp_Object tem;
2730
2731 /* Read a non-negative integer. */
2732 while (c >= '0' && c <= '9')
2733 {
2734 if (n > MOST_POSITIVE_FIXNUM / 10
2735 || n * 10 + c - '0' > MOST_POSITIVE_FIXNUM)
2736 n = MOST_POSITIVE_FIXNUM + 1;
2737 else
2738 n = n * 10 + c - '0';
2739 c = READCHAR;
2740 }
2741
2742 if (n <= MOST_POSITIVE_FIXNUM)
2743 {
2744 if (c == 'r' || c == 'R')
2745 return read_integer (readcharfun, n);
2746
2747 if (! NILP (Vread_circle))
2748 {
2749 /* #n=object returns object, but associates it with
2750 n for #n#. */
2751 if (c == '=')
2752 {
2753 /* Make a placeholder for #n# to use temporarily. */
2754 Lisp_Object placeholder;
2755 Lisp_Object cell;
2756
2757 placeholder = Fcons (Qnil, Qnil);
2758 cell = Fcons (make_number (n), placeholder);
2759 read_objects = Fcons (cell, read_objects);
2760
2761 /* Read the object itself. */
2762 tem = read0 (readcharfun);
2763
2764 /* Now put it everywhere the placeholder was... */
2765 substitute_object_in_subtree (tem, placeholder);
2766
2767 /* ...and #n# will use the real value from now on. */
2768 Fsetcdr (cell, tem);
2769
2770 return tem;
2771 }
2772
2773 /* #n# returns a previously read object. */
2774 if (c == '#')
2775 {
2776 tem = Fassq (make_number (n), read_objects);
2777 if (CONSP (tem))
2778 return XCDR (tem);
2779 }
2780 }
2781 }
2782 /* Fall through to error message. */
2783 }
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);
2790
2791 UNREAD (c);
2792 invalid_syntax ("#");
2793
2794 case ';':
2795 while ((c = READCHAR) >= 0 && c != '\n');
2796 goto retry;
2797
2798 case '\'':
2799 {
2800 return Fcons (Qquote, Fcons (read0 (readcharfun), Qnil));
2801 }
2802
2803 case '`':
2804 {
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 == ' ')
2818 {
2819 Vold_style_backquotes = Qt;
2820 goto default_label;
2821 }
2822 else
2823 {
2824 Lisp_Object value;
2825 bool saved_new_backquote_flag = new_backquote_flag;
2826
2827 new_backquote_flag = 1;
2828 value = read0 (readcharfun);
2829 new_backquote_flag = saved_new_backquote_flag;
2830
2831 return Fcons (Qbackquote, Fcons (value, Qnil));
2832 }
2833 }
2834 case ',':
2835 {
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 != '@'))
2853 {
2854 Lisp_Object comma_type = Qnil;
2855 Lisp_Object value;
2856 int ch = READCHAR;
2857
2858 if (ch == '@')
2859 comma_type = Qcomma_at;
2860 else if (ch == '.')
2861 comma_type = Qcomma_dot;
2862 else
2863 {
2864 if (ch >= 0) UNREAD (ch);
2865 comma_type = Qcomma;
2866 }
2867
2868 value = read0 (readcharfun);
2869 return Fcons (comma_type, Fcons (value, Qnil));
2870 }
2871 else
2872 {
2873 Vold_style_backquotes = Qt;
2874 goto default_label;
2875 }
2876 }
2877 case '?':
2878 {
2879 int modifiers;
2880 int next_char;
2881 bool ok;
2882
2883 c = READCHAR;
2884 if (c < 0)
2885 end_of_file_error ();
2886
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);
2893
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;
2901
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);
2909
2910 invalid_syntax ("?");
2911 }
2912
2913 case '"':
2914 {
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;
2926
2927 while ((ch = READCHAR) >= 0
2928 && ch != '\"')
2929 {
2930 if (end - p < MAX_MULTIBYTE_LENGTH)
2931 {
2932 ptrdiff_t offset = p - read_buffer;
2933 if (read_buffer_size > min (PTRDIFF_MAX, SIZE_MAX) / 2)
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;
2939 }
2940
2941 if (ch == '\\')
2942 {
2943 int modifiers;
2944
2945 ch = read_escape (readcharfun, 1);
2946
2947 /* CH is -1 if \ newline has just been seen. */
2948 if (ch == -1)
2949 {
2950 if (p == read_buffer)
2951 cancel = 1;
2952 continue;
2953 }
2954
2955 modifiers = ch & CHAR_MODIFIER_MASK;
2956 ch = ch & ~CHAR_MODIFIER_MASK;
2957
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). */
2963 {
2964 /* Allow `\C- ' and `\C-?'. */
2965 if (modifiers == CHAR_CTL)
2966 {
2967 if (ch == ' ')
2968 ch = 0, modifiers = 0;
2969 else if (ch == '?')
2970 ch = 127, modifiers = 0;
2971 }
2972 if (modifiers & CHAR_SHIFT)
2973 {
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;
2979 }
2980
2981 if (modifiers & CHAR_META)
2982 {
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;
2988 }
2989 }
2990
2991 /* Any modifiers remaining are invalid. */
2992 if (modifiers)
2993 error ("Invalid modifier in string");
2994 p += CHAR_STRING (ch, (unsigned char *) p);
2995 }
2996 else
2997 {
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;
3003 }
3004 nchars++;
3005 }
3006
3007 if (ch < 0)
3008 end_of_file_error ();
3009
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);
3015
3016 if (! force_multibyte && force_singlebyte)
3017 {
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;
3023 }
3024
3025 return make_specified_string (read_buffer, nchars, p - read_buffer,
3026 (force_multibyte
3027 || (p - read_buffer != nchars)));
3028 }
3029
3030 case '.':
3031 {
3032 int next_char = READCHAR;
3033 UNREAD (next_char);
3034
3035 if (next_char <= 040
3036 || (next_char < 0200
3037 && strchr ("\"';([#?`,", next_char) != NULL))
3038 {
3039 *pch = c;
3040 return Qnil;
3041 }
3042
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. */
3046 }
3047 default:
3048 default_label:
3049 if (c <= 040) goto retry;
3050 if (c == 0xa0) /* NBSP */
3051 goto retry;
3052
3053 read_symbol:
3054 {
3055 char *p = read_buffer;
3056 bool quoted = 0;
3057 EMACS_INT start_position = readchar_count - 1;
3058
3059 {
3060 char *end = read_buffer + read_buffer_size;
3061
3062 do
3063 {
3064 if (end - p < MAX_MULTIBYTE_LENGTH)
3065 {
3066 ptrdiff_t offset = p - read_buffer;
3067 if (read_buffer_size > min (PTRDIFF_MAX, SIZE_MAX) / 2)
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;
3073 }
3074
3075 if (c == '\\')
3076 {
3077 c = READCHAR;
3078 if (c == -1)
3079 end_of_file_error ();
3080 quoted = 1;
3081 }
3082
3083 if (multibyte)
3084 p += CHAR_STRING (c, (unsigned char *) p);
3085 else
3086 *p++ = c;
3087 c = READCHAR;
3088 }
3089 while (c > 040
3090 && c != 0xa0 /* NBSP */
3091 && (c >= 0200
3092 || strchr ("\"';()[]#`,", c) == NULL));
3093
3094 if (p == end)
3095 {
3096 ptrdiff_t offset = p - read_buffer;
3097 if (read_buffer_size > min (PTRDIFF_MAX, SIZE_MAX) / 2)
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;
3103 }
3104 *p = 0;
3105 UNREAD (c);
3106 }
3107
3108 if (!quoted && !uninterned_symbol)
3109 {
3110 Lisp_Object result = string_to_number (read_buffer, 10, 0);
3111 if (! NILP (result))
3112 return result;
3113 }
3114 {
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);
3122
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));
3128
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;
3135 }
3136 }
3137 }
3138 }
3139 \f
3140
3141 /* List of nodes we've seen during substitute_object_in_subtree. */
3142 static Lisp_Object seen_list;
3143
3144 static void
3145 substitute_object_in_subtree (Lisp_Object object, Lisp_Object placeholder)
3146 {
3147 Lisp_Object check_object;
3148
3149 /* We haven't seen any objects when we start. */
3150 seen_list = Qnil;
3151
3152 /* Make all the substitutions. */
3153 check_object
3154 = substitute_object_recurse (object, placeholder, object);
3155
3156 /* Clear seen_list because we're done with it. */
3157 seen_list = Qnil;
3158
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");
3163 }
3164
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); \
3172 \
3173 if (!EQ (old_value, true_value)) \
3174 { \
3175 set_val; \
3176 } \
3177 } while (0)
3178
3179 static Lisp_Object
3180 substitute_object_recurse (Lisp_Object object, Lisp_Object placeholder, Lisp_Object subtree)
3181 {
3182 /* If we find the placeholder, return the target object. */
3183 if (EQ (placeholder, subtree))
3184 return object;
3185
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;
3189
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);
3196
3197 /* Recurse according to subtree's type.
3198 Every branch must return a Lisp_Object. */
3199 switch (XTYPE (subtree))
3200 {
3201 case Lisp_Vectorlike:
3202 {
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);
3217
3218 for (i = 0; i < length; i++)
3219 SUBSTITUTE (AREF (subtree, i),
3220 ASET (subtree, i, true_value));
3221 return subtree;
3222 }
3223
3224 case Lisp_Cons:
3225 {
3226 SUBSTITUTE (XCAR (subtree),
3227 XSETCAR (subtree, true_value));
3228 SUBSTITUTE (XCDR (subtree),
3229 XSETCDR (subtree, true_value));
3230 return subtree;
3231 }
3232
3233 case Lisp_String:
3234 {
3235 /* Check for text properties in each interval.
3236 substitute_in_interval contains part of the logic. */
3237
3238 INTERVAL root_interval = string_intervals (subtree);
3239 Lisp_Object arg = Fcons (object, placeholder);
3240
3241 traverse_intervals_noorder (root_interval,
3242 &substitute_in_interval, arg);
3243
3244 return subtree;
3245 }
3246
3247 /* Other types don't recurse any further. */
3248 default:
3249 return subtree;
3250 }
3251 }
3252
3253 /* Helper function for substitute_object_recurse. */
3254 static void
3255 substitute_in_interval (INTERVAL interval, Lisp_Object arg)
3256 {
3257 Lisp_Object object = Fcar (arg);
3258 Lisp_Object placeholder = Fcdr (arg);
3259
3260 SUBSTITUTE (interval->plist, set_interval_plist (interval, true_value));
3261 }
3262
3263 \f
3264 #define LEAD_INT 1
3265 #define DOT_CHAR 2
3266 #define TRAIL_INT 4
3267 #define E_EXP 16
3268
3269
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. */
3276
3277 Lisp_Object
3278 string_to_number (char const *string, int base, bool ignore_trailing)
3279 {
3280 int state;
3281 char const *cp = string;
3282 int leading_digit;
3283 bool float_syntax = 0;
3284 double value = 0;
3285
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;
3289
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 == '-';
3294
3295 bool signedp = negative || *cp == '+';
3296 cp += signedp;
3297
3298 state = 0;
3299
3300 leading_digit = digit_to_number (*cp, base);
3301 if (leading_digit >= 0)
3302 {
3303 state |= LEAD_INT;
3304 do
3305 ++cp;
3306 while (digit_to_number (*cp, base) >= 0);
3307 }
3308 if (*cp == '.')
3309 {
3310 state |= DOT_CHAR;
3311 cp++;
3312 }
3313
3314 if (base == 10)
3315 {
3316 if ('0' <= *cp && *cp <= '9')
3317 {
3318 state |= TRAIL_INT;
3319 do
3320 cp++;
3321 while ('0' <= *cp && *cp <= '9');
3322 }
3323 if (*cp == 'e' || *cp == 'E')
3324 {
3325 char const *ecp = cp;
3326 cp++;
3327 if (*cp == '+' || *cp == '-')
3328 cp++;
3329 if ('0' <= *cp && *cp <= '9')
3330 {
3331 state |= E_EXP;
3332 do
3333 cp++;
3334 while ('0' <= *cp && *cp <= '9');
3335 }
3336 else if (cp[-1] == '+'
3337 && cp[0] == 'I' && cp[1] == 'N' && cp[2] == 'F')
3338 {
3339 state |= E_EXP;
3340 cp += 3;
3341 value = 1.0 / zero;
3342 }
3343 else if (cp[-1] == '+'
3344 && cp[0] == 'N' && cp[1] == 'a' && cp[2] == 'N')
3345 {
3346 state |= E_EXP;
3347 cp += 3;
3348 value = zero / zero;
3349
3350 /* If that made a "negative" NaN, negate it. */
3351 {
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])
3359 {
3360 value = -value;
3361 break;
3362 }
3363 }
3364 /* Now VALUE is a positive NaN. */
3365 }
3366 else
3367 cp = ecp;
3368 }
3369
3370 float_syntax = ((state & (DOT_CHAR|TRAIL_INT)) == (DOT_CHAR|TRAIL_INT)
3371 || state == (LEAD_INT|E_EXP));
3372 }
3373
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;
3380
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 (leading_digit >= 0 && ! float_syntax)
3384 {
3385 uintmax_t n;
3386
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);
3393
3394 errno = 0;
3395 n = strtoumax (string + signedp, NULL, base);
3396 if (errno == ERANGE)
3397 {
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));
3402 }
3403 else if (n <= (negative ? -MOST_NEGATIVE_FIXNUM : MOST_POSITIVE_FIXNUM))
3404 {
3405 EMACS_INT signed_n = n;
3406 return make_number (negative ? -signed_n : signed_n);
3407 }
3408 else
3409 value = n;
3410 }
3411
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);
3418
3419 return make_float (negative ? -value : value);
3420 }
3421
3422 \f
3423 static Lisp_Object
3424 read_vector (Lisp_Object readcharfun, bool bytecodeflag)
3425 {
3426 ptrdiff_t i, size;
3427 Lisp_Object *ptr;
3428 Lisp_Object tem, item, vector;
3429 struct Lisp_Cons *otem;
3430 Lisp_Object len;
3431
3432 tem = read_list (1, readcharfun);
3433 len = Flength (tem);
3434 vector = Fmake_vector (len, Qnil);
3435
3436 size = ASIZE (vector);
3437 ptr = XVECTOR (vector)->contents;
3438 for (i = 0; i < size; i++)
3439 {
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)
3446 {
3447 if (i == COMPILED_BYTECODE)
3448 {
3449 if (!STRINGP (item))
3450 error ("Invalid byte code");
3451
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;
3457 }
3458 else if (i == COMPILED_CONSTANTS)
3459 {
3460 Lisp_Object bytestr = ptr[COMPILED_CONSTANTS];
3461
3462 if (NILP (item))
3463 {
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);
3469
3470 item = Fread (Fcons (bytestr, readcharfun));
3471 if (!CONSP (item))
3472 error ("Invalid byte code");
3473
3474 otem = XCONS (item);
3475 bytestr = XCAR (item);
3476 item = XCDR (item);
3477 free_cons (otem);
3478 }
3479
3480 /* Now handle the bytecode slot. */
3481 ASET (vector, COMPILED_BYTECODE, bytestr);
3482 }
3483 else if (i == COMPILED_DOC_STRING
3484 && STRINGP (item)
3485 && ! STRING_MULTIBYTE (item))
3486 {
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);
3491 }
3492 }
3493 ASET (vector, i, item);
3494 otem = XCONS (tem);
3495 tem = Fcdr (tem);
3496 free_cons (otem);
3497 }
3498 return vector;
3499 }
3500
3501 /* FLAG means check for ] to terminate rather than ) and . */
3502
3503 static Lisp_Object
3504 read_list (bool flag, Lisp_Object readcharfun)
3505 {
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;
3513
3514 /* Initialize this to 1 if we are reading a list. */
3515 bool first_in_list = flag <= 0;
3516
3517 val = Qnil;
3518 tail = Qnil;
3519
3520 while (1)
3521 {
3522 int ch;
3523 GCPRO2 (val, tail);
3524 elt = read1 (readcharfun, &ch, first_in_list);
3525 UNGCPRO;
3526
3527 first_in_list = 0;
3528
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))
3533 {
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));
3548 }
3549 else if (EQ (elt, Vload_file_name)
3550 && ! NILP (elt)
3551 && load_force_doc_strings)
3552 doc_reference = 2;
3553
3554 if (ch)
3555 {
3556 if (flag > 0)
3557 {
3558 if (ch == ']')
3559 return val;
3560 invalid_syntax (") or . in a vector");
3561 }
3562 if (ch == ')')
3563 return val;
3564 if (ch == '.')
3565 {
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 == ')')
3574 {
3575 if (doc_reference == 1)
3576 return make_number (0);
3577 if (doc_reference == 2 && INTEGERP (XCDR (val)))
3578 {
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.
3583
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. */
3590
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))
3596 {
3597 saved = saved_doc_string;
3598 saved_position = saved_doc_string_position;
3599 }
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))
3604 {
3605 saved = prev_saved_doc_string;
3606 saved_position = prev_saved_doc_string_position;
3607 }
3608 if (saved)
3609 {
3610 ptrdiff_t start = pos - saved_position;
3611 ptrdiff_t from, to;
3612
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;)
3618 {
3619 int c = saved[from++];
3620 if (c == 1)
3621 {
3622 c = saved[from++];
3623 saved[to++] = (c == 1 ? c
3624 : c == '0' ? 0
3625 : c == '_' ? 037
3626 : c);
3627 }
3628 else
3629 saved[to++] = c;
3630 }
3631
3632 return make_unibyte_string (saved + start,
3633 to - start);
3634 }
3635 else
3636 return get_doc_string (val, 1, 0);
3637 }
3638
3639 return val;
3640 }
3641 invalid_syntax (". in wrong context");
3642 }
3643 invalid_syntax ("] in a list");
3644 }
3645 tem = Fcons (elt, Qnil);
3646 if (!NILP (tail))
3647 XSETCDR (tail, tem);
3648 else
3649 val = tem;
3650 tail = tem;
3651 }
3652 }
3653 \f
3654 static Lisp_Object initial_obarray;
3655
3656 /* `oblookup' stores the bucket number here, for the sake of Funintern. */
3657
3658 static size_t oblookup_last_bucket_number;
3659
3660 /* Get an error if OBARRAY is not an obarray.
3661 If it is one, return it. */
3662
3663 Lisp_Object
3664 check_obarray (Lisp_Object obarray)
3665 {
3666 if (!VECTORP (obarray) || ASIZE (obarray) == 0)
3667 {
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);
3671 }
3672 return obarray;
3673 }
3674
3675 /* Intern the C string STR: return a symbol with that name,
3676 interned in the current obarray. */
3677
3678 Lisp_Object
3679 intern_1 (const char *str, ptrdiff_t len)
3680 {
3681 Lisp_Object obarray = check_obarray (Vobarray);
3682 Lisp_Object tem = oblookup (obarray, str, len, len);
3683
3684 return SYMBOLP (tem) ? tem : Fintern (make_string (str, len), obarray);
3685 }
3686
3687 Lisp_Object
3688 intern_c_string_1 (const char *str, ptrdiff_t len)
3689 {
3690 Lisp_Object obarray = check_obarray (Vobarray);
3691 Lisp_Object tem = oblookup (obarray, str, len, len);
3692
3693 if (SYMBOLP (tem))
3694 return tem;
3695
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 ();
3701
3702 return Fintern (make_pure_c_string (str, len), obarray);
3703 }
3704 \f
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)
3711 {
3712 register Lisp_Object tem, sym, *ptr;
3713
3714 if (NILP (obarray)) obarray = Vobarray;
3715 obarray = check_obarray (obarray);
3716
3717 CHECK_STRING (string);
3718
3719 tem = oblookup (obarray, SSDATA (string),
3720 SCHARS (string),
3721 SBYTES (string));
3722 if (!INTEGERP (tem))
3723 return tem;
3724
3725 if (!NILP (Vpurify_flag))
3726 string = Fpurecopy (string);
3727 sym = Fmake_symbol (string);
3728
3729 if (EQ (obarray, initial_obarray))
3730 XSYMBOL (sym)->interned = SYMBOL_INTERNED_IN_INITIAL_OBARRAY;
3731 else
3732 XSYMBOL (sym)->interned = SYMBOL_INTERNED;
3733
3734 if ((SREF (string, 0) == ':')
3735 && EQ (obarray, initial_obarray))
3736 {
3737 XSYMBOL (sym)->constant = 1;
3738 XSYMBOL (sym)->redirect = SYMBOL_PLAINVAL;
3739 SET_SYMBOL_VAL (XSYMBOL (sym), sym);
3740 }
3741
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;
3749 }
3750
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)
3758 {
3759 register Lisp_Object tem, string;
3760
3761 if (NILP (obarray)) obarray = Vobarray;
3762 obarray = check_obarray (obarray);
3763
3764 if (!SYMBOLP (name))
3765 {
3766 CHECK_STRING (name);
3767 string = name;
3768 }
3769 else
3770 string = SYMBOL_NAME (name);
3771
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;
3777 }
3778 \f
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)
3786 {
3787 register Lisp_Object string, tem;
3788 size_t hash;
3789
3790 if (NILP (obarray)) obarray = Vobarray;
3791 obarray = check_obarray (obarray);
3792
3793 if (SYMBOLP (name))
3794 string = SYMBOL_NAME (name);
3795 else
3796 {
3797 CHECK_STRING (name);
3798 string = name;
3799 }
3800
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;
3809
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"); */
3816
3817 XSYMBOL (tem)->interned = SYMBOL_UNINTERNED;
3818
3819 hash = oblookup_last_bucket_number;
3820
3821 if (EQ (AREF (obarray, hash), tem))
3822 {
3823 if (XSYMBOL (tem)->next)
3824 {
3825 Lisp_Object sym;
3826 XSETSYMBOL (sym, XSYMBOL (tem)->next);
3827 ASET (obarray, hash, sym);
3828 }
3829 else
3830 ASET (obarray, hash, make_number (0));
3831 }
3832 else
3833 {
3834 Lisp_Object tail, following;
3835
3836 for (tail = AREF (obarray, hash);
3837 XSYMBOL (tail)->next;
3838 tail = following)
3839 {
3840 XSETSYMBOL (following, XSYMBOL (tail)->next);
3841 if (EQ (following, tem))
3842 {
3843 set_symbol_next (tail, XSYMBOL (following)->next);
3844 break;
3845 }
3846 }
3847 }
3848
3849 return Qt;
3850 }
3851 \f
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.
3855
3856 Also store the bucket number in oblookup_last_bucket_number. */
3857
3858 Lisp_Object
3859 oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff_t size_byte)
3860 {
3861 size_t hash;
3862 size_t obsize;
3863 register Lisp_Object tail;
3864 Lisp_Object bucket, tem;
3865
3866 obarray = check_obarray (obarray);
3867 obsize = ASIZE (obarray);
3868
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)))
3875 ;
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))
3880 {
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;
3887 }
3888 XSETINT (tem, hash);
3889 return tem;
3890 }
3891 \f
3892 void
3893 map_obarray (Lisp_Object obarray, void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg)
3894 {
3895 ptrdiff_t i;
3896 register Lisp_Object tail;
3897 CHECK_VECTOR (obarray);
3898 for (i = ASIZE (obarray) - 1; i >= 0; i--)
3899 {
3900 tail = AREF (obarray, i);
3901 if (SYMBOLP (tail))
3902 while (1)
3903 {
3904 (*fn) (tail, arg);
3905 if (XSYMBOL (tail)->next == 0)
3906 break;
3907 XSETSYMBOL (tail, XSYMBOL (tail)->next);
3908 }
3909 }
3910 }
3911
3912 static void
3913 mapatoms_1 (Lisp_Object sym, Lisp_Object function)
3914 {
3915 call1 (function, sym);
3916 }
3917
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)
3922 {
3923 if (NILP (obarray)) obarray = Vobarray;
3924 obarray = check_obarray (obarray);
3925
3926 map_obarray (obarray, mapatoms_1, function);
3927 return Qnil;
3928 }
3929
3930 #define OBARRAY_SIZE 1511
3931
3932 void
3933 init_obarray (void)
3934 {
3935 Lisp_Object oblength;
3936 ptrdiff_t size = 100 + MAX_MULTIBYTE_LENGTH;
3937
3938 XSETFASTINT (oblength, OBARRAY_SIZE);
3939
3940 Vobarray = Fmake_vector (oblength, make_number (0));
3941 initial_obarray = Vobarray;
3942 staticpro (&initial_obarray);
3943
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");
3949
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);
3960
3961 Qt = intern_c_string ("t");
3962 SET_SYMBOL_VAL (XSYMBOL (Qt), Qt);
3963 XSYMBOL (Qnil)->declared_special = 1;
3964 XSYMBOL (Qt)->constant = 1;
3965
3966 /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */
3967 Vpurify_flag = Qt;
3968
3969 DEFSYM (Qvariable_documentation, "variable-documentation");
3970
3971 read_buffer = xmalloc (size);
3972 read_buffer_size = size;
3973 }
3974 \f
3975 void
3976 defsubr (struct Lisp_Subr *sname)
3977 {
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);
3983 }
3984
3985 #ifdef NOTDEF /* Use fset in subr.el now! */
3986 void
3987 defalias (struct Lisp_Subr *sname, char *string)
3988 {
3989 Lisp_Object sym;
3990 sym = intern (string);
3991 XSETSUBR (XSYMBOL (sym)->function, sname);
3992 }
3993 #endif /* NOTDEF */
3994
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)
4001 {
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);
4009 }
4010
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)
4016 {
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);
4025 }
4026
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)
4035 {
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);
4043 }
4044
4045 void
4046 defvar_lisp (struct Lisp_Objfwd *o_fwd,
4047 const char *namestring, Lisp_Object *address)
4048 {
4049 defvar_lisp_nopro (o_fwd, namestring, address);
4050 staticpro (address);
4051 }
4052
4053 /* Similar but define a variable whose value is the Lisp Object stored
4054 at a particular offset in the current kboard object. */
4055
4056 void
4057 defvar_kboard (struct Lisp_Kboard_Objfwd *ko_fwd,
4058 const char *namestring, int offset)
4059 {
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);
4067 }
4068 \f
4069 /* Check that the elements of Vload_path exist. */
4070
4071 static void
4072 load_path_check (void)
4073 {
4074 Lisp_Object path_tail;
4075
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))
4080 {
4081 Lisp_Object dirfile;
4082 dirfile = Fcar (path_tail);
4083 if (STRINGP (dirfile))
4084 {
4085 dirfile = Fdirectory_file_name (dirfile);
4086 if (! file_accessible_directory_p (SSDATA (dirfile)))
4087 dir_warning ("Lisp directory", XCAR (path_tail));
4088 }
4089 }
4090 }
4091
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;
4095
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.
4103
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).
4126 */
4127
4128 void
4129 init_lread (void)
4130 {
4131 const char *normal;
4132
4133 #ifdef CANNOT_DUMP
4134 #ifdef HAVE_NS
4135 const char *loadpath = ns_load_path ();
4136 #endif
4137
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
4144
4145 load_path_check ();
4146
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"))
4153 {
4154 Lisp_Object sitelisp;
4155 sitelisp = decode_env_path (0, PATH_SITELOADSEARCH);
4156 if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
4157 }
4158 #else /* !CANNOT_DUMP */
4159 if (NILP (Vpurify_flag))
4160 {
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);
4166 }
4167 else
4168 normal = PATH_DUMPLOADSEARCH;
4169
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)
4178 {
4179 if (NILP (Fequal (dump_path, Vload_path)))
4180 {
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 ();
4185 }
4186 else
4187 {
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))
4195 {
4196 Lisp_Object tem, tem1;
4197
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))
4205 {
4206 if (NILP (Fmember (tem, Vload_path)))
4207 {
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);
4213 }
4214 }
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);
4219
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))
4225 {
4226 if (NILP (Fmember (tem, Vload_path)))
4227 Vload_path = Fcons (tem, Vload_path);
4228 }
4229
4230 /* Add site-lisp under the installation dir, if it exists. */
4231 if (!no_site_lisp)
4232 {
4233 tem = Fexpand_file_name (build_string ("site-lisp"),
4234 Vinstallation_directory);
4235 tem1 = Ffile_accessible_directory_p (tem);
4236 if (!NILP (tem1))
4237 {
4238 if (NILP (Fmember (tem, Vload_path)))
4239 Vload_path = Fcons (tem, Vload_path);
4240 }
4241 }
4242
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. */
4246
4247 if (NILP (Fequal (Vinstallation_directory, Vsource_directory)))
4248 {
4249 Lisp_Object tem2;
4250
4251 tem = Fexpand_file_name (build_string ("src/Makefile"),
4252 Vinstallation_directory);
4253 tem1 = Ffile_exists_p (tem);
4254
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))
4263 {
4264 tem = Fexpand_file_name (build_string ("lisp"),
4265 Vsource_directory);
4266
4267 if (NILP (Fmember (tem, Vload_path)))
4268 Vload_path = Fcons (tem, Vload_path);
4269
4270 tem = Fexpand_file_name (build_string ("leim"),
4271 Vsource_directory);
4272
4273 if (NILP (Fmember (tem, Vload_path)))
4274 Vload_path = Fcons (tem, Vload_path);
4275
4276 if (!no_site_lisp)
4277 {
4278 tem = Fexpand_file_name (build_string ("site-lisp"),
4279 Vsource_directory);
4280 tem1 = Ffile_accessible_directory_p (tem);
4281 if (!NILP (tem1))
4282 {
4283 if (NILP (Fmember (tem, Vload_path)))
4284 Vload_path = Fcons (tem, Vload_path);
4285 }
4286 }
4287 }
4288 } /* Vinstallation_directory != Vsource_directory */
4289
4290 } /* if Vinstallation_directory */
4291
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 ();
4297
4298 /* Add the site-lisp directories at the front. */
4299 if (!no_site_lisp)
4300 {
4301 Lisp_Object sitelisp;
4302 sitelisp = decode_env_path (0, PATH_SITELOADSEARCH);
4303 if (! NILP (sitelisp)) Vload_path = nconc2 (sitelisp, Vload_path);
4304 }
4305 } /* if dump_path == Vload_path */
4306 }
4307 else /* !initialized */
4308 {
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. */
4322 }
4323 #endif /* !CANNOT_DUMP */
4324
4325 Vvalues = Qnil;
4326
4327 load_in_progress = 0;
4328 Vload_file_name = Qnil;
4329
4330 load_descriptor_list = Qnil;
4331
4332 Vstandard_input = Qt;
4333 Vloads_in_progress = Qnil;
4334 }
4335
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*. */
4340
4341 void
4342 dir_warning (char const *use, Lisp_Object dirname)
4343 {
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));
4347
4348 /* Don't log the warning before we've initialized!! */
4349 if (initialized)
4350 {
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 ();
4360 }
4361 }
4362
4363 void
4364 syms_of_lread (void)
4365 {
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);
4381
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'. */);
4387
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;
4392
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;
4397
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'.
4400
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.
4406
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;
4411
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.
4417
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.
4421
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;
4426
4427 DEFVAR_LISP ("read-circle", Vread_circle,
4428 doc: /* Non-nil means read recursive structures using #N= and #N# syntax. */);
4429 Vread_circle = Qt;
4430
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. */);
4436
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.
4448
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);
4458
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");
4462
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...).
4466
4467 REGEXP-OR-FEATURE is either a regular expression to match file names, or
4468 a symbol \(a feature name).
4469
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.
4473
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;
4477
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.
4485
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'.
4495
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;
4499
4500 DEFVAR_LISP ("load-file-name", Vload_file_name,
4501 doc: /* Full name of file being loaded by `load'. */);
4502 Vload_file_name = Qnil;
4503
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;
4512
4513 DEFVAR_LISP ("current-load-list", Vcurrent_load_list,
4514 doc: /* Used for internal purposes by `load'. */);
4515 Vcurrent_load_list = Qnil;
4516
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;
4521
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.
4527
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;
4534
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;
4539
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;
4545
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)));
4552
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;
4556
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;
4560
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;
4567
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;
4572
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\\)");
4581
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);
4592
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;
4596
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");
4601
4602 /* Vsource_directory was initialized in init_lread. */
4603
4604 load_descriptor_list = Qnil;
4605 staticpro (&load_descriptor_list);
4606
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");
4613
4614 DEFSYM (Qbackquote, "`");
4615 DEFSYM (Qcomma, ",");
4616 DEFSYM (Qcomma_at, ",@");
4617 DEFSYM (Qcomma_dot, ",.");
4618
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");
4628
4629 staticpro (&dump_path);
4630
4631 staticpro (&read_objects);
4632 read_objects = Qnil;
4633 staticpro (&seen_list);
4634 seen_list = Qnil;
4635
4636 Vloads_in_progress = Qnil;
4637 staticpro (&Vloads_in_progress);
4638
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");
4646 }