1 /* Lisp parsing and input streams.
2 Copyright (C) 1985, 1986, 1987, 1988, 1989, 1993, 1994, 1995,
3 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
4 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
6 This file is part of GNU Emacs.
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
24 #include <sys/types.h>
30 #include "intervals.h"
32 #include "character.h"
39 #include "termhooks.h"
41 #include "blockinput.h"
55 #endif /* HAVE_SETLOCALE */
65 #define file_offset off_t
66 #define file_tell ftello
68 #define file_offset long
69 #define file_tell ftell
72 /* hash table read constants */
73 Lisp_Object Qhash_table
, Qdata
;
74 Lisp_Object Qtest
, Qsize
;
75 Lisp_Object Qweakness
;
76 Lisp_Object Qrehash_size
;
77 Lisp_Object Qrehash_threshold
;
79 Lisp_Object Qread_char
, Qget_file_char
, Qstandard_input
, Qcurrent_load_list
;
80 Lisp_Object Qvariable_documentation
, Vvalues
, Vstandard_input
, Vafter_load_alist
;
81 Lisp_Object Qascii_character
, Qload
, Qload_file_name
;
82 Lisp_Object Qbackquote
, Qcomma
, Qcomma_at
, Qcomma_dot
, Qfunction
;
83 Lisp_Object Qinhibit_file_name_operation
;
84 Lisp_Object Qeval_buffer_list
, Veval_buffer_list
;
85 Lisp_Object Qfile_truename
, Qdo_after_load_evaluation
; /* ACM 2006/5/16 */
87 /* Used instead of Qget_file_char while loading *.elc files compiled
88 by Emacs 21 or older. */
89 static Lisp_Object Qget_emacs_mule_file_char
;
91 static Lisp_Object Qload_force_doc_strings
;
93 /* non-zero if inside `load' */
95 static Lisp_Object Qload_in_progress
;
97 /* Directory in which the sources were found. */
98 Lisp_Object Vsource_directory
;
100 /* Search path and suffixes for files to be loaded. */
101 Lisp_Object Vload_path
, Vload_suffixes
, Vload_file_rep_suffixes
;
103 /* File name of user's init file. */
104 Lisp_Object Vuser_init_file
;
106 /* This is the user-visible association list that maps features to
107 lists of defs in their load files. */
108 Lisp_Object Vload_history
;
110 /* This is used to build the load history. */
111 Lisp_Object Vcurrent_load_list
;
113 /* List of files that were preloaded. */
114 Lisp_Object Vpreloaded_file_list
;
116 /* Name of file actually being read by `load'. */
117 Lisp_Object Vload_file_name
;
119 /* Function to use for reading, in `load' and friends. */
120 Lisp_Object Vload_read_function
;
122 /* Non-nil means read recursive structures using #n= and #n# syntax. */
123 Lisp_Object Vread_circle
;
125 /* The association list of objects read with the #n=object form.
126 Each member of the list has the form (n . object), and is used to
127 look up the object for the corresponding #n# construct.
128 It must be set to nil before all top-level calls to read0. */
129 Lisp_Object read_objects
;
131 /* Nonzero means load should forcibly load all dynamic doc strings. */
132 static int load_force_doc_strings
;
134 /* Nonzero means read should convert strings to unibyte. */
135 static int load_convert_to_unibyte
;
137 /* Nonzero means READCHAR should read bytes one by one (not character)
138 when READCHARFUN is Qget_file_char or Qget_emacs_mule_file_char.
139 This is set to 1 by read1 temporarily while handling #@NUMBER. */
140 static int load_each_byte
;
142 /* Function to use for loading an Emacs Lisp source file (not
143 compiled) instead of readevalloop. */
144 Lisp_Object Vload_source_file_function
;
146 /* List of all DEFVAR_BOOL variables. Used by the byte optimizer. */
147 Lisp_Object Vbyte_boolean_vars
;
149 /* Whether or not to add a `read-positions' property to symbols
151 Lisp_Object Vread_with_symbol_positions
;
153 /* List of (SYMBOL . POSITION) accumulated so far. */
154 Lisp_Object Vread_symbol_positions_list
;
156 /* List of descriptors now open for Fload. */
157 static Lisp_Object load_descriptor_list
;
159 /* File for get_file_char to read from. Use by load. */
160 static FILE *instream
;
162 /* When nonzero, read conses in pure space */
163 static int read_pure
;
165 /* For use within read-from-string (this reader is non-reentrant!!) */
166 static int read_from_string_index
;
167 static int read_from_string_index_byte
;
168 static int read_from_string_limit
;
170 /* Number of characters read in the current call to Fread or
171 Fread_from_string. */
172 static int readchar_count
;
174 /* This contains the last string skipped with #@. */
175 static char *saved_doc_string
;
176 /* Length of buffer allocated in saved_doc_string. */
177 static int saved_doc_string_size
;
178 /* Length of actual data in saved_doc_string. */
179 static int saved_doc_string_length
;
180 /* This is the file position that string came from. */
181 static file_offset saved_doc_string_position
;
183 /* This contains the previous string skipped with #@.
184 We copy it from saved_doc_string when a new string
185 is put in saved_doc_string. */
186 static char *prev_saved_doc_string
;
187 /* Length of buffer allocated in prev_saved_doc_string. */
188 static int prev_saved_doc_string_size
;
189 /* Length of actual data in prev_saved_doc_string. */
190 static int prev_saved_doc_string_length
;
191 /* This is the file position that string came from. */
192 static file_offset prev_saved_doc_string_position
;
194 /* Nonzero means inside a new-style backquote
195 with no surrounding parentheses.
196 Fread initializes this to zero, so we need not specbind it
197 or worry about what happens to it when there is an error. */
198 static int new_backquote_flag
;
199 static Lisp_Object Vold_style_backquotes
, Qold_style_backquotes
;
201 /* A list of file names for files being loaded in Fload. Used to
202 check for recursive loads. */
204 static Lisp_Object Vloads_in_progress
;
206 /* Non-zero means load dangerous compiled Lisp files. */
208 int load_dangerous_libraries
;
210 /* Non-zero means force printing messages when loading Lisp files. */
212 int force_load_messages
;
214 /* A regular expression used to detect files compiled with Emacs. */
216 static Lisp_Object Vbytecomp_version_regexp
;
218 static int read_emacs_mule_char (int, int (*) (int, Lisp_Object
),
221 static void readevalloop (Lisp_Object
, FILE*, Lisp_Object
,
222 Lisp_Object (*) (Lisp_Object
), int,
223 Lisp_Object
, Lisp_Object
,
224 Lisp_Object
, Lisp_Object
);
225 static Lisp_Object
load_unwind (Lisp_Object
);
226 static Lisp_Object
load_descriptor_unwind (Lisp_Object
);
228 static void invalid_syntax (const char *, int) NO_RETURN
;
229 static void end_of_file_error (void) NO_RETURN
;
232 /* Functions that read one byte from the current source READCHARFUN
233 or unreads one byte. If the integer argument C is -1, it returns
234 one read byte, or -1 when there's no more byte in the source. If C
235 is 0 or positive, it unreads C, and the return value is not
238 static int readbyte_for_lambda (int, Lisp_Object
);
239 static int readbyte_from_file (int, Lisp_Object
);
240 static int readbyte_from_string (int, Lisp_Object
);
242 /* Handle unreading and rereading of characters.
243 Write READCHAR to read a character,
244 UNREAD(c) to unread c to be read again.
246 These macros correctly read/unread multibyte characters. */
248 #define READCHAR readchar (readcharfun, NULL)
249 #define UNREAD(c) unreadchar (readcharfun, c)
251 /* Same as READCHAR but set *MULTIBYTE to the multibyteness of the source. */
252 #define READCHAR_REPORT_MULTIBYTE(multibyte) readchar (readcharfun, multibyte)
254 /* When READCHARFUN is Qget_file_char, Qget_emacs_mule_file_char,
255 Qlambda, or a cons, we use this to keep an unread character because
256 a file stream can't handle multibyte-char unreading. The value -1
257 means that there's no unread character. */
258 static int unread_char
;
261 readchar (Lisp_Object readcharfun
, int *multibyte
)
265 int (*readbyte
) (int, Lisp_Object
);
266 unsigned char buf
[MAX_MULTIBYTE_LENGTH
];
268 int emacs_mule_encoding
= 0;
275 if (BUFFERP (readcharfun
))
277 register struct buffer
*inbuffer
= XBUFFER (readcharfun
);
279 int pt_byte
= BUF_PT_BYTE (inbuffer
);
281 if (pt_byte
>= BUF_ZV_BYTE (inbuffer
))
284 if (! NILP (inbuffer
->enable_multibyte_characters
))
286 /* Fetch the character code from the buffer. */
287 unsigned char *p
= BUF_BYTE_ADDRESS (inbuffer
, pt_byte
);
288 BUF_INC_POS (inbuffer
, pt_byte
);
295 c
= BUF_FETCH_BYTE (inbuffer
, pt_byte
);
296 if (! ASCII_BYTE_P (c
))
297 c
= BYTE8_TO_CHAR (c
);
300 SET_BUF_PT_BOTH (inbuffer
, BUF_PT (inbuffer
) + 1, pt_byte
);
304 if (MARKERP (readcharfun
))
306 register struct buffer
*inbuffer
= XMARKER (readcharfun
)->buffer
;
308 int bytepos
= marker_byte_position (readcharfun
);
310 if (bytepos
>= BUF_ZV_BYTE (inbuffer
))
313 if (! NILP (inbuffer
->enable_multibyte_characters
))
315 /* Fetch the character code from the buffer. */
316 unsigned char *p
= BUF_BYTE_ADDRESS (inbuffer
, bytepos
);
317 BUF_INC_POS (inbuffer
, bytepos
);
324 c
= BUF_FETCH_BYTE (inbuffer
, bytepos
);
325 if (! ASCII_BYTE_P (c
))
326 c
= BYTE8_TO_CHAR (c
);
330 XMARKER (readcharfun
)->bytepos
= bytepos
;
331 XMARKER (readcharfun
)->charpos
++;
336 if (EQ (readcharfun
, Qlambda
))
338 readbyte
= readbyte_for_lambda
;
342 if (EQ (readcharfun
, Qget_file_char
))
344 readbyte
= readbyte_from_file
;
348 if (STRINGP (readcharfun
))
350 if (read_from_string_index
>= read_from_string_limit
)
352 else if (STRING_MULTIBYTE (readcharfun
))
356 FETCH_STRING_CHAR_ADVANCE_NO_CHECK (c
, readcharfun
,
357 read_from_string_index
,
358 read_from_string_index_byte
);
362 c
= SREF (readcharfun
, read_from_string_index_byte
);
363 read_from_string_index
++;
364 read_from_string_index_byte
++;
369 if (CONSP (readcharfun
))
371 /* This is the case that read_vector is reading from a unibyte
372 string that contains a byte sequence previously skipped
373 because of #@NUMBER. The car part of readcharfun is that
374 string, and the cdr part is a value of readcharfun given to
376 readbyte
= readbyte_from_string
;
377 if (EQ (XCDR (readcharfun
), Qget_emacs_mule_file_char
))
378 emacs_mule_encoding
= 1;
382 if (EQ (readcharfun
, Qget_emacs_mule_file_char
))
384 readbyte
= readbyte_from_file
;
385 emacs_mule_encoding
= 1;
389 tem
= call0 (readcharfun
);
396 if (unread_char
>= 0)
402 c
= (*readbyte
) (-1, readcharfun
);
403 if (c
< 0 || load_each_byte
)
407 if (ASCII_BYTE_P (c
))
409 if (emacs_mule_encoding
)
410 return read_emacs_mule_char (c
, readbyte
, readcharfun
);
413 len
= BYTES_BY_CHAR_HEAD (c
);
416 c
= (*readbyte
) (-1, readcharfun
);
417 if (c
< 0 || ! TRAILING_CODE_P (c
))
420 (*readbyte
) (buf
[i
], readcharfun
);
421 return BYTE8_TO_CHAR (buf
[0]);
425 return STRING_CHAR (buf
);
428 /* Unread the character C in the way appropriate for the stream READCHARFUN.
429 If the stream is a user function, call it with the char as argument. */
432 unreadchar (Lisp_Object readcharfun
, int c
)
436 /* Don't back up the pointer if we're unreading the end-of-input mark,
437 since readchar didn't advance it when we read it. */
439 else if (BUFFERP (readcharfun
))
441 struct buffer
*b
= XBUFFER (readcharfun
);
442 int bytepos
= BUF_PT_BYTE (b
);
445 if (! NILP (b
->enable_multibyte_characters
))
446 BUF_DEC_POS (b
, bytepos
);
450 BUF_PT_BYTE (b
) = bytepos
;
452 else if (MARKERP (readcharfun
))
454 struct buffer
*b
= XMARKER (readcharfun
)->buffer
;
455 int bytepos
= XMARKER (readcharfun
)->bytepos
;
457 XMARKER (readcharfun
)->charpos
--;
458 if (! NILP (b
->enable_multibyte_characters
))
459 BUF_DEC_POS (b
, bytepos
);
463 XMARKER (readcharfun
)->bytepos
= bytepos
;
465 else if (STRINGP (readcharfun
))
467 read_from_string_index
--;
468 read_from_string_index_byte
469 = string_char_to_byte (readcharfun
, read_from_string_index
);
471 else if (CONSP (readcharfun
))
475 else if (EQ (readcharfun
, Qlambda
))
479 else if (EQ (readcharfun
, Qget_file_char
)
480 || EQ (readcharfun
, Qget_emacs_mule_file_char
))
485 ungetc (c
, instream
);
492 call1 (readcharfun
, make_number (c
));
496 readbyte_for_lambda (int c
, Lisp_Object readcharfun
)
498 return read_bytecode_char (c
>= 0);
503 readbyte_from_file (int c
, Lisp_Object readcharfun
)
508 ungetc (c
, instream
);
517 /* Interrupted reads have been observed while reading over the network */
518 while (c
== EOF
&& ferror (instream
) && errno
== EINTR
)
530 return (c
== EOF
? -1 : c
);
534 readbyte_from_string (int c
, Lisp_Object readcharfun
)
536 Lisp_Object string
= XCAR (readcharfun
);
540 read_from_string_index
--;
541 read_from_string_index_byte
542 = string_char_to_byte (string
, read_from_string_index
);
545 if (read_from_string_index
>= read_from_string_limit
)
548 FETCH_STRING_CHAR_ADVANCE (c
, string
,
549 read_from_string_index
,
550 read_from_string_index_byte
);
555 /* Read one non-ASCII character from INSTREAM. The character is
556 encoded in `emacs-mule' and the first byte is already read in
559 extern char emacs_mule_bytes
[256];
562 read_emacs_mule_char (int c
, int (*readbyte
) (int, Lisp_Object
), Lisp_Object readcharfun
)
564 /* Emacs-mule coding uses at most 4-byte for one character. */
565 unsigned char buf
[4];
566 int len
= emacs_mule_bytes
[c
];
567 struct charset
*charset
;
572 /* C is not a valid leading-code of `emacs-mule'. */
573 return BYTE8_TO_CHAR (c
);
579 c
= (*readbyte
) (-1, readcharfun
);
583 (*readbyte
) (buf
[i
], readcharfun
);
584 return BYTE8_TO_CHAR (buf
[0]);
591 charset
= emacs_mule_charset
[buf
[0]];
592 code
= buf
[1] & 0x7F;
596 if (buf
[0] == EMACS_MULE_LEADING_CODE_PRIVATE_11
597 || buf
[0] == EMACS_MULE_LEADING_CODE_PRIVATE_12
)
599 charset
= emacs_mule_charset
[buf
[1]];
600 code
= buf
[2] & 0x7F;
604 charset
= emacs_mule_charset
[buf
[0]];
605 code
= ((buf
[1] << 8) | buf
[2]) & 0x7F7F;
610 charset
= emacs_mule_charset
[buf
[1]];
611 code
= ((buf
[2] << 8) | buf
[3]) & 0x7F7F;
613 c
= DECODE_CHAR (charset
, code
);
615 Fsignal (Qinvalid_read_syntax
,
616 Fcons (build_string ("invalid multibyte form"), Qnil
));
621 static Lisp_Object
read_internal_start (Lisp_Object
, Lisp_Object
,
623 static Lisp_Object
read0 (Lisp_Object
);
624 static Lisp_Object
read1 (Lisp_Object
, int *, int);
626 static Lisp_Object
read_list (int, Lisp_Object
);
627 static Lisp_Object
read_vector (Lisp_Object
, int);
629 static Lisp_Object
substitute_object_recurse (Lisp_Object
, Lisp_Object
,
631 static void substitute_object_in_subtree (Lisp_Object
,
633 static void substitute_in_interval (INTERVAL
, Lisp_Object
);
636 /* Get a character from the tty. */
638 /* Read input events until we get one that's acceptable for our purposes.
640 If NO_SWITCH_FRAME is non-zero, switch-frame events are stashed
641 until we get a character we like, and then stuffed into
644 If ASCII_REQUIRED is non-zero, we check function key events to see
645 if the unmodified version of the symbol has a Qascii_character
646 property, and use that character, if present.
648 If ERROR_NONASCII is non-zero, we signal an error if the input we
649 get isn't an ASCII character with modifiers. If it's zero but
650 ASCII_REQUIRED is non-zero, we just re-read until we get an ASCII
653 If INPUT_METHOD is nonzero, we invoke the current input method
654 if the character warrants that.
656 If SECONDS is a number, we wait that many seconds for input, and
657 return Qnil if no input arrives within that time. */
660 read_filtered_event (int no_switch_frame
, int ascii_required
,
661 int error_nonascii
, int input_method
, Lisp_Object seconds
)
663 Lisp_Object val
, delayed_switch_frame
;
666 #ifdef HAVE_WINDOW_SYSTEM
667 if (display_hourglass_p
)
671 delayed_switch_frame
= Qnil
;
673 /* Compute timeout. */
674 if (NUMBERP (seconds
))
676 EMACS_TIME wait_time
;
678 double duration
= extract_float (seconds
);
680 sec
= (int) duration
;
681 usec
= (duration
- sec
) * 1000000;
682 EMACS_GET_TIME (end_time
);
683 EMACS_SET_SECS_USECS (wait_time
, sec
, usec
);
684 EMACS_ADD_TIME (end_time
, end_time
, wait_time
);
687 /* Read until we get an acceptable event. */
690 val
= read_char (0, 0, 0, (input_method
? Qnil
: Qt
), 0,
691 NUMBERP (seconds
) ? &end_time
: NULL
);
692 while (INTEGERP (val
) && XINT (val
) == -2); /* wrong_kboard_jmpbuf */
697 /* switch-frame events are put off until after the next ASCII
698 character. This is better than signaling an error just because
699 the last characters were typed to a separate minibuffer frame,
700 for example. Eventually, some code which can deal with
701 switch-frame events will read it and process it. */
703 && EVENT_HAS_PARAMETERS (val
)
704 && EQ (EVENT_HEAD_KIND (EVENT_HEAD (val
)), Qswitch_frame
))
706 delayed_switch_frame
= val
;
710 if (ascii_required
&& !(NUMBERP (seconds
) && NILP (val
)))
712 /* Convert certain symbols to their ASCII equivalents. */
715 Lisp_Object tem
, tem1
;
716 tem
= Fget (val
, Qevent_symbol_element_mask
);
719 tem1
= Fget (Fcar (tem
), Qascii_character
);
720 /* Merge this symbol's modifier bits
721 with the ASCII equivalent of its basic code. */
723 XSETFASTINT (val
, XINT (tem1
) | XINT (Fcar (Fcdr (tem
))));
727 /* If we don't have a character now, deal with it appropriately. */
732 Vunread_command_events
= Fcons (val
, Qnil
);
733 error ("Non-character input-event");
740 if (! NILP (delayed_switch_frame
))
741 unread_switch_frame
= delayed_switch_frame
;
745 #ifdef HAVE_WINDOW_SYSTEM
746 if (display_hourglass_p
)
755 DEFUN ("read-char", Fread_char
, Sread_char
, 0, 3, 0,
756 doc
: /* Read a character from the command input (keyboard or macro).
757 It is returned as a number.
758 If the character has modifiers, they are resolved and reflected to the
759 character code if possible (e.g. C-SPC -> 0).
761 If the user generates an event which is not a character (i.e. a mouse
762 click or function key event), `read-char' signals an error. As an
763 exception, switch-frame events are put off until non-character events
765 If you want to read non-character events, or ignore them, call
766 `read-event' or `read-char-exclusive' instead.
768 If the optional argument PROMPT is non-nil, display that as a prompt.
769 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
770 input method is turned on in the current buffer, that input method
771 is used for reading a character.
772 If the optional argument SECONDS is non-nil, it should be a number
773 specifying the maximum number of seconds to wait for input. If no
774 input arrives in that time, return nil. SECONDS may be a
775 floating-point value. */)
776 (Lisp_Object prompt
, Lisp_Object inherit_input_method
, Lisp_Object seconds
)
781 message_with_string ("%s", prompt
, 0);
782 val
= read_filtered_event (1, 1, 1, ! NILP (inherit_input_method
), seconds
);
784 return (NILP (val
) ? Qnil
785 : make_number (char_resolve_modifier_mask (XINT (val
))));
788 DEFUN ("read-event", Fread_event
, Sread_event
, 0, 3, 0,
789 doc
: /* Read an event object from the input stream.
790 If the optional argument PROMPT is non-nil, display that as a prompt.
791 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
792 input method is turned on in the current buffer, that input method
793 is used for reading a character.
794 If the optional argument SECONDS is non-nil, it should be a number
795 specifying the maximum number of seconds to wait for input. If no
796 input arrives in that time, return nil. SECONDS may be a
797 floating-point value. */)
798 (Lisp_Object prompt
, Lisp_Object inherit_input_method
, Lisp_Object seconds
)
801 message_with_string ("%s", prompt
, 0);
802 return read_filtered_event (0, 0, 0, ! NILP (inherit_input_method
), seconds
);
805 DEFUN ("read-char-exclusive", Fread_char_exclusive
, Sread_char_exclusive
, 0, 3, 0,
806 doc
: /* Read a character from the command input (keyboard or macro).
807 It is returned as a number. Non-character events are ignored.
808 If the character has modifiers, they are resolved and reflected to the
809 character code if possible (e.g. C-SPC -> 0).
811 If the optional argument PROMPT is non-nil, display that as a prompt.
812 If the optional argument INHERIT-INPUT-METHOD is non-nil and some
813 input method is turned on in the current buffer, that input method
814 is used for reading a character.
815 If the optional argument SECONDS is non-nil, it should be a number
816 specifying the maximum number of seconds to wait for input. If no
817 input arrives in that time, return nil. SECONDS may be a
818 floating-point value. */)
819 (Lisp_Object prompt
, Lisp_Object inherit_input_method
, Lisp_Object seconds
)
824 message_with_string ("%s", prompt
, 0);
826 val
= read_filtered_event (1, 1, 0, ! NILP (inherit_input_method
), seconds
);
828 return (NILP (val
) ? Qnil
829 : make_number (char_resolve_modifier_mask (XINT (val
))));
832 DEFUN ("get-file-char", Fget_file_char
, Sget_file_char
, 0, 0, 0,
833 doc
: /* Don't use this yourself. */)
836 register Lisp_Object val
;
838 XSETINT (val
, getc (instream
));
845 /* Value is a version number of byte compiled code if the file
846 associated with file descriptor FD is a compiled Lisp file that's
847 safe to load. Only files compiled with Emacs are safe to load.
848 Files compiled with XEmacs can lead to a crash in Fbyte_code
849 because of an incompatible change in the byte compiler. */
852 safe_to_load_p (int fd
)
859 /* Read the first few bytes from the file, and look for a line
860 specifying the byte compiler version used. */
861 nbytes
= emacs_read (fd
, buf
, sizeof buf
- 1);
866 /* Skip to the next newline, skipping over the initial `ELC'
867 with NUL bytes following it, but note the version. */
868 for (i
= 0; i
< nbytes
&& buf
[i
] != '\n'; ++i
)
873 || fast_c_string_match_ignore_case (Vbytecomp_version_regexp
,
880 lseek (fd
, 0, SEEK_SET
);
885 /* Callback for record_unwind_protect. Restore the old load list OLD,
886 after loading a file successfully. */
889 record_load_unwind (Lisp_Object old
)
891 return Vloads_in_progress
= old
;
894 /* This handler function is used via internal_condition_case_1. */
897 load_error_handler (Lisp_Object data
)
903 load_warn_old_style_backquotes (Lisp_Object file
)
905 if (!NILP (Vold_style_backquotes
))
908 args
[0] = build_string ("Loading `%s': old-style backquotes detected!");
915 DEFUN ("get-load-suffixes", Fget_load_suffixes
, Sget_load_suffixes
, 0, 0, 0,
916 doc
: /* Return the suffixes that `load' should try if a suffix is \
918 This uses the variables `load-suffixes' and `load-file-rep-suffixes'. */)
921 Lisp_Object lst
= Qnil
, suffixes
= Vload_suffixes
, suffix
, ext
;
922 while (CONSP (suffixes
))
924 Lisp_Object exts
= Vload_file_rep_suffixes
;
925 suffix
= XCAR (suffixes
);
926 suffixes
= XCDR (suffixes
);
931 lst
= Fcons (concat2 (suffix
, ext
), lst
);
934 return Fnreverse (lst
);
937 DEFUN ("load", Fload
, Sload
, 1, 5, 0,
938 doc
: /* Execute a file of Lisp code named FILE.
939 First try FILE with `.elc' appended, then try with `.el',
940 then try FILE unmodified (the exact suffixes in the exact order are
941 determined by `load-suffixes'). Environment variable references in
942 FILE are replaced with their values by calling `substitute-in-file-name'.
943 This function searches the directories in `load-path'.
945 If optional second arg NOERROR is non-nil,
946 report no error if FILE doesn't exist.
947 Print messages at start and end of loading unless
948 optional third arg NOMESSAGE is non-nil (but `force-load-messages'
950 If optional fourth arg NOSUFFIX is non-nil, don't try adding
951 suffixes `.elc' or `.el' to the specified name FILE.
952 If optional fifth arg MUST-SUFFIX is non-nil, insist on
953 the suffix `.elc' or `.el'; don't accept just FILE unless
954 it ends in one of those suffixes or includes a directory name.
956 If this function fails to find a file, it may look for different
957 representations of that file before trying another file.
958 It does so by adding the non-empty suffixes in `load-file-rep-suffixes'
959 to the file name. Emacs uses this feature mainly to find compressed
960 versions of files when Auto Compression mode is enabled.
962 The exact suffixes that this function tries out, in the exact order,
963 are given by the value of the variable `load-file-rep-suffixes' if
964 NOSUFFIX is non-nil and by the return value of the function
965 `get-load-suffixes' if MUST-SUFFIX is non-nil. If both NOSUFFIX and
966 MUST-SUFFIX are nil, this function first tries out the latter suffixes
969 Loading a file records its definitions, and its `provide' and
970 `require' calls, in an element of `load-history' whose
971 car is the file name loaded. See `load-history'.
973 Return t if the file exists and loads successfully. */)
974 (Lisp_Object file
, Lisp_Object noerror
, Lisp_Object nomessage
, Lisp_Object nosuffix
, Lisp_Object must_suffix
)
976 register FILE *stream
;
977 register int fd
= -1;
978 int count
= SPECPDL_INDEX ();
979 struct gcpro gcpro1
, gcpro2
, gcpro3
;
980 Lisp_Object found
, efound
, hist_file_name
;
981 /* 1 means we printed the ".el is newer" message. */
983 /* 1 means we are loading a compiled file. */
987 const char *fmode
= "r";
997 /* If file name is magic, call the handler. */
998 /* This shouldn't be necessary any more now that `openp' handles it right.
999 handler = Ffind_file_name_handler (file, Qload);
1000 if (!NILP (handler))
1001 return call5 (handler, Qload, file, noerror, nomessage, nosuffix); */
1003 /* Do this after the handler to avoid
1004 the need to gcpro noerror, nomessage and nosuffix.
1005 (Below here, we care only whether they are nil or not.)
1006 The presence of this call is the result of a historical accident:
1007 it used to be in every file-operation and when it got removed
1008 everywhere, it accidentally stayed here. Since then, enough people
1009 supposedly have things like (load "$PROJECT/foo.el") in their .emacs
1010 that it seemed risky to remove. */
1011 if (! NILP (noerror
))
1013 file
= internal_condition_case_1 (Fsubstitute_in_file_name
, file
,
1014 Qt
, load_error_handler
);
1019 file
= Fsubstitute_in_file_name (file
);
1022 /* Avoid weird lossage with null string as arg,
1023 since it would try to load a directory as a Lisp file */
1024 if (SCHARS (file
) > 0)
1026 int size
= SBYTES (file
);
1029 GCPRO2 (file
, found
);
1031 if (! NILP (must_suffix
))
1033 /* Don't insist on adding a suffix if FILE already ends with one. */
1035 && !strcmp (SDATA (file
) + size
- 3, ".el"))
1038 && !strcmp (SDATA (file
) + size
- 4, ".elc"))
1040 /* Don't insist on adding a suffix
1041 if the argument includes a directory name. */
1042 else if (! NILP (Ffile_name_directory (file
)))
1046 fd
= openp (Vload_path
, file
,
1047 (!NILP (nosuffix
) ? Qnil
1048 : !NILP (must_suffix
) ? Fget_load_suffixes ()
1049 : Fappend (2, (tmp
[0] = Fget_load_suffixes (),
1050 tmp
[1] = Vload_file_rep_suffixes
,
1059 xsignal2 (Qfile_error
, build_string ("Cannot open load file"), file
);
1063 /* Tell startup.el whether or not we found the user's init file. */
1064 if (EQ (Qt
, Vuser_init_file
))
1065 Vuser_init_file
= found
;
1067 /* If FD is -2, that means openp found a magic file. */
1070 if (NILP (Fequal (found
, file
)))
1071 /* If FOUND is a different file name from FILE,
1072 find its handler even if we have already inhibited
1073 the `load' operation on FILE. */
1074 handler
= Ffind_file_name_handler (found
, Qt
);
1076 handler
= Ffind_file_name_handler (found
, Qload
);
1077 if (! NILP (handler
))
1078 return call5 (handler
, Qload
, found
, noerror
, nomessage
, Qt
);
1081 /* Check if we're stuck in a recursive load cycle.
1083 2000-09-21: It's not possible to just check for the file loaded
1084 being a member of Vloads_in_progress. This fails because of the
1085 way the byte compiler currently works; `provide's are not
1086 evaluated, see font-lock.el/jit-lock.el as an example. This
1087 leads to a certain amount of ``normal'' recursion.
1089 Also, just loading a file recursively is not always an error in
1090 the general case; the second load may do something different. */
1094 for (tem
= Vloads_in_progress
; CONSP (tem
); tem
= XCDR (tem
))
1095 if (!NILP (Fequal (found
, XCAR (tem
))) && (++count
> 3))
1099 signal_error ("Recursive load", Fcons (found
, Vloads_in_progress
));
1101 record_unwind_protect (record_load_unwind
, Vloads_in_progress
);
1102 Vloads_in_progress
= Fcons (found
, Vloads_in_progress
);
1105 /* Get the name for load-history. */
1106 hist_file_name
= (! NILP (Vpurify_flag
)
1107 ? Fconcat (2, (tmp
[0] = Ffile_name_directory (file
),
1108 tmp
[1] = Ffile_name_nondirectory (found
),
1114 /* Check for the presence of old-style quotes and warn about them. */
1115 specbind (Qold_style_backquotes
, Qnil
);
1116 record_unwind_protect (load_warn_old_style_backquotes
, file
);
1118 if (!memcmp (SDATA (found
) + SBYTES (found
) - 4, ".elc", 4)
1119 || (fd
>= 0 && (version
= safe_to_load_p (fd
)) > 0))
1120 /* Load .elc files directly, but not when they are
1121 remote and have no handler! */
1128 GCPRO3 (file
, found
, hist_file_name
);
1131 && ! (version
= safe_to_load_p (fd
)))
1134 if (!load_dangerous_libraries
)
1138 error ("File `%s' was not compiled in Emacs",
1141 else if (!NILP (nomessage
) && !force_load_messages
)
1142 message_with_string ("File `%s' not compiled in Emacs", found
, 1);
1147 efound
= ENCODE_FILE (found
);
1152 stat ((char *)SDATA (efound
), &s1
);
1153 SSET (efound
, SBYTES (efound
) - 1, 0);
1154 result
= stat ((char *)SDATA (efound
), &s2
);
1155 SSET (efound
, SBYTES (efound
) - 1, 'c');
1157 if (result
>= 0 && (unsigned) s1
.st_mtime
< (unsigned) s2
.st_mtime
)
1159 /* Make the progress messages mention that source is newer. */
1162 /* If we won't print another message, mention this anyway. */
1163 if (!NILP (nomessage
) && !force_load_messages
)
1165 Lisp_Object msg_file
;
1166 msg_file
= Fsubstring (found
, make_number (0), make_number (-1));
1167 message_with_string ("Source file `%s' newer than byte-compiled file",
1176 /* We are loading a source file (*.el). */
1177 if (!NILP (Vload_source_file_function
))
1183 val
= call4 (Vload_source_file_function
, found
, hist_file_name
,
1184 NILP (noerror
) ? Qnil
: Qt
,
1185 (NILP (nomessage
) || force_load_messages
) ? Qnil
: Qt
);
1186 return unbind_to (count
, val
);
1190 GCPRO3 (file
, found
, hist_file_name
);
1194 efound
= ENCODE_FILE (found
);
1195 stream
= fopen ((char *) SDATA (efound
), fmode
);
1196 #else /* not WINDOWSNT */
1197 stream
= fdopen (fd
, fmode
);
1198 #endif /* not WINDOWSNT */
1202 error ("Failure to create stdio stream for %s", SDATA (file
));
1205 if (! NILP (Vpurify_flag
))
1206 Vpreloaded_file_list
= Fcons (Fpurecopy(file
), Vpreloaded_file_list
);
1208 if (NILP (nomessage
) || force_load_messages
)
1211 message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...",
1214 message_with_string ("Loading %s (source)...", file
, 1);
1216 message_with_string ("Loading %s (compiled; note, source file is newer)...",
1218 else /* The typical case; compiled file newer than source file. */
1219 message_with_string ("Loading %s...", file
, 1);
1222 record_unwind_protect (load_unwind
, make_save_value (stream
, 0));
1223 record_unwind_protect (load_descriptor_unwind
, load_descriptor_list
);
1224 specbind (Qload_file_name
, found
);
1225 specbind (Qinhibit_file_name_operation
, Qnil
);
1226 load_descriptor_list
1227 = Fcons (make_number (fileno (stream
)), load_descriptor_list
);
1228 specbind (Qload_in_progress
, Qt
);
1229 if (! version
|| version
>= 22)
1230 readevalloop (Qget_file_char
, stream
, hist_file_name
,
1231 Feval
, 0, Qnil
, Qnil
, Qnil
, Qnil
);
1234 /* We can't handle a file which was compiled with
1235 byte-compile-dynamic by older version of Emacs. */
1236 specbind (Qload_force_doc_strings
, Qt
);
1237 readevalloop (Qget_emacs_mule_file_char
, stream
, hist_file_name
, Feval
,
1238 0, Qnil
, Qnil
, Qnil
, Qnil
);
1240 unbind_to (count
, Qnil
);
1242 /* Run any eval-after-load forms for this file */
1243 if (!NILP (Ffboundp (Qdo_after_load_evaluation
)))
1244 call1 (Qdo_after_load_evaluation
, hist_file_name
) ;
1248 xfree (saved_doc_string
);
1249 saved_doc_string
= 0;
1250 saved_doc_string_size
= 0;
1252 xfree (prev_saved_doc_string
);
1253 prev_saved_doc_string
= 0;
1254 prev_saved_doc_string_size
= 0;
1256 if (!noninteractive
&& (NILP (nomessage
) || force_load_messages
))
1259 message_with_string ("Loading %s (compiled; note unsafe, not compiled in Emacs)...done",
1262 message_with_string ("Loading %s (source)...done", file
, 1);
1264 message_with_string ("Loading %s (compiled; note, source file is newer)...done",
1266 else /* The typical case; compiled file newer than source file. */
1267 message_with_string ("Loading %s...done", file
, 1);
1274 load_unwind (Lisp_Object arg
) /* used as unwind-protect function in load */
1276 FILE *stream
= (FILE *) XSAVE_VALUE (arg
)->pointer
;
1287 load_descriptor_unwind (Lisp_Object oldlist
)
1289 load_descriptor_list
= oldlist
;
1293 /* Close all descriptors in use for Floads.
1294 This is used when starting a subprocess. */
1297 close_load_descs (void)
1301 for (tail
= load_descriptor_list
; CONSP (tail
); tail
= XCDR (tail
))
1302 emacs_close (XFASTINT (XCAR (tail
)));
1307 complete_filename_p (Lisp_Object pathname
)
1309 register const unsigned char *s
= SDATA (pathname
);
1310 return (IS_DIRECTORY_SEP (s
[0])
1311 || (SCHARS (pathname
) > 2
1312 && IS_DEVICE_SEP (s
[1]) && IS_DIRECTORY_SEP (s
[2])));
1315 DEFUN ("locate-file-internal", Flocate_file_internal
, Slocate_file_internal
, 2, 4, 0,
1316 doc
: /* Search for FILENAME through PATH.
1317 Returns the file's name in absolute form, or nil if not found.
1318 If SUFFIXES is non-nil, it should be a list of suffixes to append to
1319 file name when searching.
1320 If non-nil, PREDICATE is used instead of `file-readable-p'.
1321 PREDICATE can also be an integer to pass to the access(2) function,
1322 in which case file-name-handlers are ignored. */)
1323 (Lisp_Object filename
, Lisp_Object path
, Lisp_Object suffixes
, Lisp_Object predicate
)
1326 int fd
= openp (path
, filename
, suffixes
, &file
, predicate
);
1327 if (NILP (predicate
) && fd
> 0)
1333 /* Search for a file whose name is STR, looking in directories
1334 in the Lisp list PATH, and trying suffixes from SUFFIX.
1335 On success, returns a file descriptor. On failure, returns -1.
1337 SUFFIXES is a list of strings containing possible suffixes.
1338 The empty suffix is automatically added if the list is empty.
1340 PREDICATE non-nil means don't open the files,
1341 just look for one that satisfies the predicate. In this case,
1342 returns 1 on success. The predicate can be a lisp function or
1343 an integer to pass to `access' (in which case file-name-handlers
1346 If STOREPTR is nonzero, it points to a slot where the name of
1347 the file actually found should be stored as a Lisp string.
1348 nil is stored there on failure.
1350 If the file we find is remote, return -2
1351 but store the found remote file name in *STOREPTR. */
1354 openp (Lisp_Object path
, Lisp_Object str
, Lisp_Object suffixes
, Lisp_Object
*storeptr
, Lisp_Object predicate
)
1359 register char *fn
= buf
;
1362 Lisp_Object filename
;
1364 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
, gcpro5
, gcpro6
;
1365 Lisp_Object string
, tail
, encoded_fn
;
1366 int max_suffix_len
= 0;
1370 for (tail
= suffixes
; CONSP (tail
); tail
= XCDR (tail
))
1372 CHECK_STRING_CAR (tail
);
1373 max_suffix_len
= max (max_suffix_len
,
1374 SBYTES (XCAR (tail
)));
1377 string
= filename
= encoded_fn
= Qnil
;
1378 GCPRO6 (str
, string
, filename
, path
, suffixes
, encoded_fn
);
1383 if (complete_filename_p (str
))
1386 for (; CONSP (path
); path
= XCDR (path
))
1388 filename
= Fexpand_file_name (str
, XCAR (path
));
1389 if (!complete_filename_p (filename
))
1390 /* If there are non-absolute elts in PATH (eg ".") */
1391 /* Of course, this could conceivably lose if luser sets
1392 default-directory to be something non-absolute... */
1394 filename
= Fexpand_file_name (filename
, current_buffer
->directory
);
1395 if (!complete_filename_p (filename
))
1396 /* Give up on this path element! */
1400 /* Calculate maximum size of any filename made from
1401 this path element/specified file name and any possible suffix. */
1402 want_size
= max_suffix_len
+ SBYTES (filename
) + 1;
1403 if (fn_size
< want_size
)
1404 fn
= (char *) alloca (fn_size
= 100 + want_size
);
1406 /* Loop over suffixes. */
1407 for (tail
= NILP (suffixes
) ? Fcons (empty_unibyte_string
, Qnil
) : suffixes
;
1408 CONSP (tail
); tail
= XCDR (tail
))
1410 int lsuffix
= SBYTES (XCAR (tail
));
1411 Lisp_Object handler
;
1414 /* Concatenate path element/specified name with the suffix.
1415 If the directory starts with /:, remove that. */
1416 if (SCHARS (filename
) > 2
1417 && SREF (filename
, 0) == '/'
1418 && SREF (filename
, 1) == ':')
1420 strncpy (fn
, SDATA (filename
) + 2,
1421 SBYTES (filename
) - 2);
1422 fn
[SBYTES (filename
) - 2] = 0;
1426 strncpy (fn
, SDATA (filename
),
1428 fn
[SBYTES (filename
)] = 0;
1431 if (lsuffix
!= 0) /* Bug happens on CCI if lsuffix is 0. */
1432 strncat (fn
, SDATA (XCAR (tail
)), lsuffix
);
1434 /* Check that the file exists and is not a directory. */
1435 /* We used to only check for handlers on non-absolute file names:
1439 handler = Ffind_file_name_handler (filename, Qfile_exists_p);
1440 It's not clear why that was the case and it breaks things like
1441 (load "/bar.el") where the file is actually "/bar.el.gz". */
1442 string
= build_string (fn
);
1443 handler
= Ffind_file_name_handler (string
, Qfile_exists_p
);
1444 if ((!NILP (handler
) || !NILP (predicate
)) && !NATNUMP (predicate
))
1446 if (NILP (predicate
))
1447 exists
= !NILP (Ffile_readable_p (string
));
1449 exists
= !NILP (call1 (predicate
, string
));
1450 if (exists
&& !NILP (Ffile_directory_p (string
)))
1455 /* We succeeded; return this descriptor and filename. */
1466 encoded_fn
= ENCODE_FILE (string
);
1467 pfn
= SDATA (encoded_fn
);
1468 exists
= (stat (pfn
, &st
) >= 0
1469 && (st
.st_mode
& S_IFMT
) != S_IFDIR
);
1472 /* Check that we can access or open it. */
1473 if (NATNUMP (predicate
))
1474 fd
= (access (pfn
, XFASTINT (predicate
)) == 0) ? 1 : -1;
1476 fd
= emacs_open (pfn
, O_RDONLY
, 0);
1480 /* We succeeded; return this descriptor and filename. */
1498 /* Merge the list we've accumulated of globals from the current input source
1499 into the load_history variable. The details depend on whether
1500 the source has an associated file name or not.
1502 FILENAME is the file name that we are loading from.
1503 ENTIRE is 1 if loading that entire file, 0 if evaluating part of it. */
1506 build_load_history (Lisp_Object filename
, int entire
)
1508 register Lisp_Object tail
, prev
, newelt
;
1509 register Lisp_Object tem
, tem2
;
1510 register int foundit
= 0;
1512 tail
= Vload_history
;
1515 while (CONSP (tail
))
1519 /* Find the feature's previous assoc list... */
1520 if (!NILP (Fequal (filename
, Fcar (tem
))))
1524 /* If we're loading the entire file, remove old data. */
1528 Vload_history
= XCDR (tail
);
1530 Fsetcdr (prev
, XCDR (tail
));
1533 /* Otherwise, cons on new symbols that are not already members. */
1536 tem2
= Vcurrent_load_list
;
1538 while (CONSP (tem2
))
1540 newelt
= XCAR (tem2
);
1542 if (NILP (Fmember (newelt
, tem
)))
1543 Fsetcar (tail
, Fcons (XCAR (tem
),
1544 Fcons (newelt
, XCDR (tem
))));
1557 /* If we're loading an entire file, cons the new assoc onto the
1558 front of load-history, the most-recently-loaded position. Also
1559 do this if we didn't find an existing member for the file. */
1560 if (entire
|| !foundit
)
1561 Vload_history
= Fcons (Fnreverse (Vcurrent_load_list
),
1566 unreadpure (Lisp_Object junk
) /* Used as unwind-protect function in readevalloop */
1573 readevalloop_1 (Lisp_Object old
)
1575 load_convert_to_unibyte
= ! NILP (old
);
1579 /* Signal an `end-of-file' error, if possible with file name
1583 end_of_file_error (void)
1585 if (STRINGP (Vload_file_name
))
1586 xsignal1 (Qend_of_file
, Vload_file_name
);
1588 xsignal0 (Qend_of_file
);
1591 /* UNIBYTE specifies how to set load_convert_to_unibyte
1592 for this invocation.
1593 READFUN, if non-nil, is used instead of `read'.
1595 START, END specify region to read in current buffer (from eval-region).
1596 If the input is not from a buffer, they must be nil. */
1599 readevalloop (Lisp_Object readcharfun
,
1601 Lisp_Object sourcename
,
1602 Lisp_Object (*evalfun
) (Lisp_Object
),
1604 Lisp_Object unibyte
, Lisp_Object readfun
,
1605 Lisp_Object start
, Lisp_Object end
)
1608 register Lisp_Object val
;
1609 int count
= SPECPDL_INDEX ();
1610 struct gcpro gcpro1
, gcpro2
, gcpro3
, gcpro4
;
1611 struct buffer
*b
= 0;
1612 int continue_reading_p
;
1613 /* Nonzero if reading an entire buffer. */
1614 int whole_buffer
= 0;
1615 /* 1 on the first time around. */
1618 if (MARKERP (readcharfun
))
1621 start
= readcharfun
;
1624 if (BUFFERP (readcharfun
))
1625 b
= XBUFFER (readcharfun
);
1626 else if (MARKERP (readcharfun
))
1627 b
= XMARKER (readcharfun
)->buffer
;
1629 /* We assume START is nil when input is not from a buffer. */
1630 if (! NILP (start
) && !b
)
1633 specbind (Qstandard_input
, readcharfun
); /* GCPROs readcharfun. */
1634 specbind (Qcurrent_load_list
, Qnil
);
1635 record_unwind_protect (readevalloop_1
, load_convert_to_unibyte
? Qt
: Qnil
);
1636 load_convert_to_unibyte
= !NILP (unibyte
);
1638 GCPRO4 (sourcename
, readfun
, start
, end
);
1640 /* Try to ensure sourcename is a truename, except whilst preloading. */
1641 if (NILP (Vpurify_flag
)
1642 && !NILP (sourcename
) && !NILP (Ffile_name_absolute_p (sourcename
))
1643 && !NILP (Ffboundp (Qfile_truename
)))
1644 sourcename
= call1 (Qfile_truename
, sourcename
) ;
1646 LOADHIST_ATTACH (sourcename
);
1648 continue_reading_p
= 1;
1649 while (continue_reading_p
)
1651 int count1
= SPECPDL_INDEX ();
1653 if (b
!= 0 && NILP (b
->name
))
1654 error ("Reading from killed buffer");
1658 /* Switch to the buffer we are reading from. */
1659 record_unwind_protect (save_excursion_restore
, save_excursion_save ());
1660 set_buffer_internal (b
);
1662 /* Save point in it. */
1663 record_unwind_protect (save_excursion_restore
, save_excursion_save ());
1664 /* Save ZV in it. */
1665 record_unwind_protect (save_restriction_restore
, save_restriction_save ());
1666 /* Those get unbound after we read one expression. */
1668 /* Set point and ZV around stuff to be read. */
1671 Fnarrow_to_region (make_number (BEGV
), end
);
1673 /* Just for cleanliness, convert END to a marker
1674 if it is an integer. */
1676 end
= Fpoint_max_marker ();
1679 /* On the first cycle, we can easily test here
1680 whether we are reading the whole buffer. */
1681 if (b
&& first_sexp
)
1682 whole_buffer
= (PT
== BEG
&& ZV
== Z
);
1689 while ((c
= READCHAR
) != '\n' && c
!= -1);
1694 unbind_to (count1
, Qnil
);
1698 /* Ignore whitespace here, so we can detect eof. */
1699 if (c
== ' ' || c
== '\t' || c
== '\n' || c
== '\f' || c
== '\r'
1700 || c
== 0x8a0) /* NBSP */
1703 if (!NILP (Vpurify_flag
) && c
== '(')
1705 record_unwind_protect (unreadpure
, Qnil
);
1706 val
= read_list (-1, readcharfun
);
1711 read_objects
= Qnil
;
1712 if (!NILP (readfun
))
1714 val
= call1 (readfun
, readcharfun
);
1716 /* If READCHARFUN has set point to ZV, we should
1717 stop reading, even if the form read sets point
1718 to a different value when evaluated. */
1719 if (BUFFERP (readcharfun
))
1721 struct buffer
*b
= XBUFFER (readcharfun
);
1722 if (BUF_PT (b
) == BUF_ZV (b
))
1723 continue_reading_p
= 0;
1726 else if (! NILP (Vload_read_function
))
1727 val
= call1 (Vload_read_function
, readcharfun
);
1729 val
= read_internal_start (readcharfun
, Qnil
, Qnil
);
1732 if (!NILP (start
) && continue_reading_p
)
1733 start
= Fpoint_marker ();
1735 /* Restore saved point and BEGV. */
1736 unbind_to (count1
, Qnil
);
1738 /* Now eval what we just read. */
1739 val
= (*evalfun
) (val
);
1743 Vvalues
= Fcons (val
, Vvalues
);
1744 if (EQ (Vstandard_output
, Qt
))
1753 build_load_history (sourcename
,
1754 stream
|| whole_buffer
);
1758 unbind_to (count
, Qnil
);
1761 DEFUN ("eval-buffer", Feval_buffer
, Seval_buffer
, 0, 5, "",
1762 doc
: /* Execute the current buffer as Lisp code.
1763 When called from a Lisp program (i.e., not interactively), this
1764 function accepts up to five optional arguments:
1765 BUFFER is the buffer to evaluate (nil means use current buffer).
1766 PRINTFLAG controls printing of output:
1767 A value of nil means discard it; anything else is stream for print.
1768 FILENAME specifies the file name to use for `load-history'.
1769 UNIBYTE, if non-nil, specifies `load-convert-to-unibyte' for this
1771 DO-ALLOW-PRINT, if non-nil, specifies that `print' and related
1772 functions should work normally even if PRINTFLAG is nil.
1774 This function preserves the position of point. */)
1775 (Lisp_Object buffer
, Lisp_Object printflag
, Lisp_Object filename
, Lisp_Object unibyte
, Lisp_Object do_allow_print
)
1777 int count
= SPECPDL_INDEX ();
1778 Lisp_Object tem
, buf
;
1781 buf
= Fcurrent_buffer ();
1783 buf
= Fget_buffer (buffer
);
1785 error ("No such buffer");
1787 if (NILP (printflag
) && NILP (do_allow_print
))
1792 if (NILP (filename
))
1793 filename
= XBUFFER (buf
)->filename
;
1795 specbind (Qeval_buffer_list
, Fcons (buf
, Veval_buffer_list
));
1796 specbind (Qstandard_output
, tem
);
1797 record_unwind_protect (save_excursion_restore
, save_excursion_save ());
1798 BUF_TEMP_SET_PT (XBUFFER (buf
), BUF_BEGV (XBUFFER (buf
)));
1799 readevalloop (buf
, 0, filename
, Feval
,
1800 !NILP (printflag
), unibyte
, Qnil
, Qnil
, Qnil
);
1801 unbind_to (count
, Qnil
);
1806 DEFUN ("eval-region", Feval_region
, Seval_region
, 2, 4, "r",
1807 doc
: /* Execute the region as Lisp code.
1808 When called from programs, expects two arguments,
1809 giving starting and ending indices in the current buffer
1810 of the text to be executed.
1811 Programs can pass third argument PRINTFLAG which controls output:
1812 A value of nil means discard it; anything else is stream for printing it.
1813 Also the fourth argument READ-FUNCTION, if non-nil, is used
1814 instead of `read' to read each expression. It gets one argument
1815 which is the input stream for reading characters.
1817 This function does not move point. */)
1818 (Lisp_Object start
, Lisp_Object end
, Lisp_Object printflag
, Lisp_Object read_function
)
1820 int count
= SPECPDL_INDEX ();
1821 Lisp_Object tem
, cbuf
;
1823 cbuf
= Fcurrent_buffer ();
1825 if (NILP (printflag
))
1829 specbind (Qstandard_output
, tem
);
1830 specbind (Qeval_buffer_list
, Fcons (cbuf
, Veval_buffer_list
));
1832 /* readevalloop calls functions which check the type of start and end. */
1833 readevalloop (cbuf
, 0, XBUFFER (cbuf
)->filename
, Feval
,
1834 !NILP (printflag
), Qnil
, read_function
,
1837 return unbind_to (count
, Qnil
);
1841 DEFUN ("read", Fread
, Sread
, 0, 1, 0,
1842 doc
: /* Read one Lisp expression as text from STREAM, return as Lisp object.
1843 If STREAM is nil, use the value of `standard-input' (which see).
1844 STREAM or the value of `standard-input' may be:
1845 a buffer (read from point and advance it)
1846 a marker (read from where it points and advance it)
1847 a function (call it with no arguments for each character,
1848 call it with a char as argument to push a char back)
1849 a string (takes text from string, starting at the beginning)
1850 t (read text line using minibuffer and use it, or read from
1851 standard input in batch mode). */)
1852 (Lisp_Object stream
)
1855 stream
= Vstandard_input
;
1856 if (EQ (stream
, Qt
))
1857 stream
= Qread_char
;
1858 if (EQ (stream
, Qread_char
))
1859 return Fread_minibuffer (build_string ("Lisp expression: "), Qnil
);
1861 return read_internal_start (stream
, Qnil
, Qnil
);
1864 DEFUN ("read-from-string", Fread_from_string
, Sread_from_string
, 1, 3, 0,
1865 doc
: /* Read one Lisp expression which is represented as text by STRING.
1866 Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).
1867 START and END optionally delimit a substring of STRING from which to read;
1868 they default to 0 and (length STRING) respectively. */)
1869 (Lisp_Object string
, Lisp_Object start
, Lisp_Object end
)
1872 CHECK_STRING (string
);
1873 /* read_internal_start sets read_from_string_index. */
1874 ret
= read_internal_start (string
, start
, end
);
1875 return Fcons (ret
, make_number (read_from_string_index
));
1878 /* Function to set up the global context we need in toplevel read
1881 read_internal_start (Lisp_Object stream
, Lisp_Object start
, Lisp_Object end
)
1882 /* start, end only used when stream is a string. */
1887 new_backquote_flag
= 0;
1888 read_objects
= Qnil
;
1889 if (EQ (Vread_with_symbol_positions
, Qt
)
1890 || EQ (Vread_with_symbol_positions
, stream
))
1891 Vread_symbol_positions_list
= Qnil
;
1893 if (STRINGP (stream
)
1894 || ((CONSP (stream
) && STRINGP (XCAR (stream
)))))
1896 int startval
, endval
;
1899 if (STRINGP (stream
))
1902 string
= XCAR (stream
);
1905 endval
= SCHARS (string
);
1909 endval
= XINT (end
);
1910 if (endval
< 0 || endval
> SCHARS (string
))
1911 args_out_of_range (string
, end
);
1918 CHECK_NUMBER (start
);
1919 startval
= XINT (start
);
1920 if (startval
< 0 || startval
> endval
)
1921 args_out_of_range (string
, start
);
1923 read_from_string_index
= startval
;
1924 read_from_string_index_byte
= string_char_to_byte (string
, startval
);
1925 read_from_string_limit
= endval
;
1928 retval
= read0 (stream
);
1929 if (EQ (Vread_with_symbol_positions
, Qt
)
1930 || EQ (Vread_with_symbol_positions
, stream
))
1931 Vread_symbol_positions_list
= Fnreverse (Vread_symbol_positions_list
);
1936 /* Signal Qinvalid_read_syntax error.
1937 S is error string of length N (if > 0) */
1940 invalid_syntax (const char *s
, int n
)
1944 xsignal1 (Qinvalid_read_syntax
, make_string (s
, n
));
1948 /* Use this for recursive reads, in contexts where internal tokens
1952 read0 (Lisp_Object readcharfun
)
1954 register Lisp_Object val
;
1957 val
= read1 (readcharfun
, &c
, 0);
1961 xsignal1 (Qinvalid_read_syntax
,
1962 Fmake_string (make_number (1), make_number (c
)));
1965 static int read_buffer_size
;
1966 static char *read_buffer
;
1968 /* Read a \-escape sequence, assuming we already read the `\'.
1969 If the escape sequence forces unibyte, return eight-bit char. */
1972 read_escape (Lisp_Object readcharfun
, int stringp
)
1974 register int c
= READCHAR
;
1975 /* \u allows up to four hex digits, \U up to eight. Default to the
1976 behavior for \u, and change this value in the case that \U is seen. */
1977 int unicode_hex_count
= 4;
1982 end_of_file_error ();
2012 error ("Invalid escape character syntax");
2015 c
= read_escape (readcharfun
, 0);
2016 return c
| meta_modifier
;
2021 error ("Invalid escape character syntax");
2024 c
= read_escape (readcharfun
, 0);
2025 return c
| shift_modifier
;
2030 error ("Invalid escape character syntax");
2033 c
= read_escape (readcharfun
, 0);
2034 return c
| hyper_modifier
;
2039 error ("Invalid escape character syntax");
2042 c
= read_escape (readcharfun
, 0);
2043 return c
| alt_modifier
;
2047 if (stringp
|| c
!= '-')
2054 c
= read_escape (readcharfun
, 0);
2055 return c
| super_modifier
;
2060 error ("Invalid escape character syntax");
2064 c
= read_escape (readcharfun
, 0);
2065 if ((c
& ~CHAR_MODIFIER_MASK
) == '?')
2066 return 0177 | (c
& CHAR_MODIFIER_MASK
);
2067 else if (! SINGLE_BYTE_CHAR_P ((c
& ~CHAR_MODIFIER_MASK
)))
2068 return c
| ctrl_modifier
;
2069 /* ASCII control chars are made from letters (both cases),
2070 as well as the non-letters within 0100...0137. */
2071 else if ((c
& 0137) >= 0101 && (c
& 0137) <= 0132)
2072 return (c
& (037 | ~0177));
2073 else if ((c
& 0177) >= 0100 && (c
& 0177) <= 0137)
2074 return (c
& (037 | ~0177));
2076 return c
| ctrl_modifier
;
2086 /* An octal escape, as in ANSI C. */
2088 register int i
= c
- '0';
2089 register int count
= 0;
2092 if ((c
= READCHAR
) >= '0' && c
<= '7')
2104 if (i
>= 0x80 && i
< 0x100)
2105 i
= BYTE8_TO_CHAR (i
);
2110 /* A hex escape, as in ANSI C. */
2117 if (c
>= '0' && c
<= '9')
2122 else if ((c
>= 'a' && c
<= 'f')
2123 || (c
>= 'A' && c
<= 'F'))
2126 if (c
>= 'a' && c
<= 'f')
2139 if (count
< 3 && i
>= 0x80)
2140 return BYTE8_TO_CHAR (i
);
2145 /* Post-Unicode-2.0: Up to eight hex chars. */
2146 unicode_hex_count
= 8;
2149 /* A Unicode escape. We only permit them in strings and characters,
2150 not arbitrarily in the source code, as in some other languages. */
2155 while (++count
<= unicode_hex_count
)
2158 /* isdigit and isalpha may be locale-specific, which we don't
2160 if (c
>= '0' && c
<= '9') i
= (i
<< 4) + (c
- '0');
2161 else if (c
>= 'a' && c
<= 'f') i
= (i
<< 4) + (c
- 'a') + 10;
2162 else if (c
>= 'A' && c
<= 'F') i
= (i
<< 4) + (c
- 'A') + 10;
2165 error ("Non-hex digit used for Unicode escape");
2170 error ("Non-Unicode character: 0x%x", i
);
2179 /* Read an integer in radix RADIX using READCHARFUN to read
2180 characters. RADIX must be in the interval [2..36]; if it isn't, a
2181 read error is signaled . Value is the integer read. Signals an
2182 error if encountering invalid read syntax or if RADIX is out of
2186 read_integer (Lisp_Object readcharfun
, int radix
)
2188 int ndigits
= 0, invalid_p
, c
, sign
= 0;
2189 /* We use a floating point number because */
2192 if (radix
< 2 || radix
> 36)
2196 number
= ndigits
= invalid_p
= 0;
2212 if (c
>= '0' && c
<= '9')
2214 else if (c
>= 'a' && c
<= 'z')
2215 digit
= c
- 'a' + 10;
2216 else if (c
>= 'A' && c
<= 'Z')
2217 digit
= c
- 'A' + 10;
2224 if (digit
< 0 || digit
>= radix
)
2227 number
= radix
* number
+ digit
;
2233 if (ndigits
== 0 || invalid_p
)
2236 sprintf (buf
, "integer, radix %d", radix
);
2237 invalid_syntax (buf
, 0);
2240 return make_fixnum_or_float (sign
* number
);
2244 /* If the next token is ')' or ']' or '.', we store that character
2245 in *PCH and the return value is not interesting. Else, we store
2246 zero in *PCH and we read and return one lisp object.
2248 FIRST_IN_LIST is nonzero if this is the first element of a list. */
2251 read1 (register Lisp_Object readcharfun
, int *pch
, int first_in_list
)
2254 int uninterned_symbol
= 0;
2262 c
= READCHAR_REPORT_MULTIBYTE (&multibyte
);
2264 end_of_file_error ();
2269 return read_list (0, readcharfun
);
2272 return read_vector (readcharfun
, 0);
2288 /* Accept extended format for hashtables (extensible to
2290 #s(hash-table size 2 test equal data (k1 v1 k2 v2)) */
2291 Lisp_Object tmp
= read_list (0, readcharfun
);
2292 Lisp_Object head
= CAR_SAFE (tmp
);
2293 Lisp_Object data
= Qnil
;
2294 Lisp_Object val
= Qnil
;
2295 /* The size is 2 * number of allowed keywords to
2297 Lisp_Object params
[10];
2299 Lisp_Object key
= Qnil
;
2300 int param_count
= 0;
2302 if (!EQ (head
, Qhash_table
))
2303 error ("Invalid extended read marker at head of #s list "
2304 "(only hash-table allowed)");
2306 tmp
= CDR_SAFE (tmp
);
2308 /* This is repetitive but fast and simple. */
2309 params
[param_count
] = QCsize
;
2310 params
[param_count
+1] = Fplist_get (tmp
, Qsize
);
2311 if (!NILP (params
[param_count
+ 1]))
2314 params
[param_count
] = QCtest
;
2315 params
[param_count
+1] = Fplist_get (tmp
, Qtest
);
2316 if (!NILP (params
[param_count
+ 1]))
2319 params
[param_count
] = QCweakness
;
2320 params
[param_count
+1] = Fplist_get (tmp
, Qweakness
);
2321 if (!NILP (params
[param_count
+ 1]))
2324 params
[param_count
] = QCrehash_size
;
2325 params
[param_count
+1] = Fplist_get (tmp
, Qrehash_size
);
2326 if (!NILP (params
[param_count
+ 1]))
2329 params
[param_count
] = QCrehash_threshold
;
2330 params
[param_count
+1] = Fplist_get (tmp
, Qrehash_threshold
);
2331 if (!NILP (params
[param_count
+ 1]))
2334 /* This is the hashtable data. */
2335 data
= Fplist_get (tmp
, Qdata
);
2337 /* Now use params to make a new hashtable and fill it. */
2338 ht
= Fmake_hash_table (param_count
, params
);
2340 while (CONSP (data
))
2345 error ("Odd number of elements in hashtable data");
2348 Fputhash (key
, val
, ht
);
2354 invalid_syntax ("#", 1);
2362 tmp
= read_vector (readcharfun
, 0);
2363 if (XVECTOR (tmp
)->size
< CHAR_TABLE_STANDARD_SLOTS
)
2364 error ("Invalid size char-table");
2365 XSETPVECTYPE (XVECTOR (tmp
), PVEC_CHAR_TABLE
);
2376 tmp
= read_vector (readcharfun
, 0);
2377 if (!INTEGERP (AREF (tmp
, 0)))
2378 error ("Invalid depth in char-table");
2379 depth
= XINT (AREF (tmp
, 0));
2380 if (depth
< 1 || depth
> 3)
2381 error ("Invalid depth in char-table");
2382 size
= XVECTOR (tmp
)->size
- 2;
2383 if (chartab_size
[depth
] != size
)
2384 error ("Invalid size char-table");
2385 XSETPVECTYPE (XVECTOR (tmp
), PVEC_SUB_CHAR_TABLE
);
2388 invalid_syntax ("#^^", 3);
2390 invalid_syntax ("#^", 2);
2395 length
= read1 (readcharfun
, pch
, first_in_list
);
2399 Lisp_Object tmp
, val
;
2401 = ((XFASTINT (length
) + BOOL_VECTOR_BITS_PER_CHAR
- 1)
2402 / BOOL_VECTOR_BITS_PER_CHAR
);
2405 tmp
= read1 (readcharfun
, pch
, first_in_list
);
2406 if (STRING_MULTIBYTE (tmp
)
2407 || (size_in_chars
!= SCHARS (tmp
)
2408 /* We used to print 1 char too many
2409 when the number of bits was a multiple of 8.
2410 Accept such input in case it came from an old
2412 && ! (XFASTINT (length
)
2413 == (SCHARS (tmp
) - 1) * BOOL_VECTOR_BITS_PER_CHAR
)))
2414 invalid_syntax ("#&...", 5);
2416 val
= Fmake_bool_vector (length
, Qnil
);
2417 memcpy (XBOOL_VECTOR (val
)->data
, SDATA (tmp
), size_in_chars
);
2418 /* Clear the extraneous bits in the last byte. */
2419 if (XINT (length
) != size_in_chars
* BOOL_VECTOR_BITS_PER_CHAR
)
2420 XBOOL_VECTOR (val
)->data
[size_in_chars
- 1]
2421 &= (1 << (XINT (length
) % BOOL_VECTOR_BITS_PER_CHAR
)) - 1;
2424 invalid_syntax ("#&...", 5);
2428 /* Accept compiled functions at read-time so that we don't have to
2429 build them using function calls. */
2431 tmp
= read_vector (readcharfun
, 1);
2432 return Fmake_byte_code (XVECTOR (tmp
)->size
,
2433 XVECTOR (tmp
)->contents
);
2438 struct gcpro gcpro1
;
2441 /* Read the string itself. */
2442 tmp
= read1 (readcharfun
, &ch
, 0);
2443 if (ch
!= 0 || !STRINGP (tmp
))
2444 invalid_syntax ("#", 1);
2446 /* Read the intervals and their properties. */
2449 Lisp_Object beg
, end
, plist
;
2451 beg
= read1 (readcharfun
, &ch
, 0);
2456 end
= read1 (readcharfun
, &ch
, 0);
2458 plist
= read1 (readcharfun
, &ch
, 0);
2460 invalid_syntax ("Invalid string property list", 0);
2461 Fset_text_properties (beg
, end
, plist
, tmp
);
2467 /* #@NUMBER is used to skip NUMBER following characters.
2468 That's used in .elc files to skip over doc strings
2469 and function definitions. */
2475 /* Read a decimal integer. */
2476 while ((c
= READCHAR
) >= 0
2477 && c
>= '0' && c
<= '9')
2485 if (load_force_doc_strings
2486 && (EQ (readcharfun
, Qget_file_char
)
2487 || EQ (readcharfun
, Qget_emacs_mule_file_char
)))
2489 /* If we are supposed to force doc strings into core right now,
2490 record the last string that we skipped,
2491 and record where in the file it comes from. */
2493 /* But first exchange saved_doc_string
2494 with prev_saved_doc_string, so we save two strings. */
2496 char *temp
= saved_doc_string
;
2497 int temp_size
= saved_doc_string_size
;
2498 file_offset temp_pos
= saved_doc_string_position
;
2499 int temp_len
= saved_doc_string_length
;
2501 saved_doc_string
= prev_saved_doc_string
;
2502 saved_doc_string_size
= prev_saved_doc_string_size
;
2503 saved_doc_string_position
= prev_saved_doc_string_position
;
2504 saved_doc_string_length
= prev_saved_doc_string_length
;
2506 prev_saved_doc_string
= temp
;
2507 prev_saved_doc_string_size
= temp_size
;
2508 prev_saved_doc_string_position
= temp_pos
;
2509 prev_saved_doc_string_length
= temp_len
;
2512 if (saved_doc_string_size
== 0)
2514 saved_doc_string_size
= nskip
+ 100;
2515 saved_doc_string
= (char *) xmalloc (saved_doc_string_size
);
2517 if (nskip
> saved_doc_string_size
)
2519 saved_doc_string_size
= nskip
+ 100;
2520 saved_doc_string
= (char *) xrealloc (saved_doc_string
,
2521 saved_doc_string_size
);
2524 saved_doc_string_position
= file_tell (instream
);
2526 /* Copy that many characters into saved_doc_string. */
2527 for (i
= 0; i
< nskip
&& c
>= 0; i
++)
2528 saved_doc_string
[i
] = c
= READCHAR
;
2530 saved_doc_string_length
= i
;
2534 /* Skip that many characters. */
2535 for (i
= 0; i
< nskip
&& c
>= 0; i
++)
2544 /* #! appears at the beginning of an executable file.
2545 Skip the first line. */
2546 while (c
!= '\n' && c
>= 0)
2551 return Vload_file_name
;
2553 return Fcons (Qfunction
, Fcons (read0 (readcharfun
), Qnil
));
2554 /* #:foo is the uninterned symbol named foo. */
2557 uninterned_symbol
= 1;
2561 /* Reader forms that can reuse previously read objects. */
2562 if (c
>= '0' && c
<= '9')
2567 /* Read a non-negative integer. */
2568 while (c
>= '0' && c
<= '9')
2574 /* #n=object returns object, but associates it with n for #n#. */
2575 if (c
== '=' && !NILP (Vread_circle
))
2577 /* Make a placeholder for #n# to use temporarily */
2578 Lisp_Object placeholder
;
2581 placeholder
= Fcons (Qnil
, Qnil
);
2582 cell
= Fcons (make_number (n
), placeholder
);
2583 read_objects
= Fcons (cell
, read_objects
);
2585 /* Read the object itself. */
2586 tem
= read0 (readcharfun
);
2588 /* Now put it everywhere the placeholder was... */
2589 substitute_object_in_subtree (tem
, placeholder
);
2591 /* ...and #n# will use the real value from now on. */
2592 Fsetcdr (cell
, tem
);
2596 /* #n# returns a previously read object. */
2597 if (c
== '#' && !NILP (Vread_circle
))
2599 tem
= Fassq (make_number (n
), read_objects
);
2602 /* Fall through to error message. */
2604 else if (c
== 'r' || c
== 'R')
2605 return read_integer (readcharfun
, n
);
2607 /* Fall through to error message. */
2609 else if (c
== 'x' || c
== 'X')
2610 return read_integer (readcharfun
, 16);
2611 else if (c
== 'o' || c
== 'O')
2612 return read_integer (readcharfun
, 8);
2613 else if (c
== 'b' || c
== 'B')
2614 return read_integer (readcharfun
, 2);
2617 invalid_syntax ("#", 1);
2620 while ((c
= READCHAR
) >= 0 && c
!= '\n');
2625 return Fcons (Qquote
, Fcons (read0 (readcharfun
), Qnil
));
2630 int next_char
= READCHAR
;
2632 /* Transition from old-style to new-style:
2633 If we see "(`" it used to mean old-style, which usually works
2634 fine because ` should almost never appear in such a position
2635 for new-style. But occasionally we need "(`" to mean new
2636 style, so we try to distinguish the two by the fact that we
2637 can either write "( `foo" or "(` foo", where the first
2638 intends to use new-style whereas the second intends to use
2639 old-style. For Emacs-25, we should completely remove this
2640 first_in_list exception (old-style can still be obtained via
2642 if (first_in_list
&& next_char
== ' ')
2644 Vold_style_backquotes
= Qt
;
2651 new_backquote_flag
++;
2652 value
= read0 (readcharfun
);
2653 new_backquote_flag
--;
2655 return Fcons (Qbackquote
, Fcons (value
, Qnil
));
2659 if (new_backquote_flag
)
2661 Lisp_Object comma_type
= Qnil
;
2666 comma_type
= Qcomma_at
;
2668 comma_type
= Qcomma_dot
;
2671 if (ch
>= 0) UNREAD (ch
);
2672 comma_type
= Qcomma
;
2675 new_backquote_flag
--;
2676 value
= read0 (readcharfun
);
2677 new_backquote_flag
++;
2678 return Fcons (comma_type
, Fcons (value
, Qnil
));
2682 Vold_style_backquotes
= Qt
;
2694 end_of_file_error ();
2696 /* Accept `single space' syntax like (list ? x) where the
2697 whitespace character is SPC or TAB.
2698 Other literal whitespace like NL, CR, and FF are not accepted,
2699 as there are well-established escape sequences for these. */
2700 if (c
== ' ' || c
== '\t')
2701 return make_number (c
);
2704 c
= read_escape (readcharfun
, 0);
2705 modifiers
= c
& CHAR_MODIFIER_MASK
;
2706 c
&= ~CHAR_MODIFIER_MASK
;
2707 if (CHAR_BYTE8_P (c
))
2708 c
= CHAR_TO_BYTE8 (c
);
2711 next_char
= READCHAR
;
2712 if (next_char
== '.')
2714 /* Only a dotted-pair dot is valid after a char constant. */
2715 int next_next_char
= READCHAR
;
2716 UNREAD (next_next_char
);
2718 ok
= (next_next_char
<= 040
2719 || (next_next_char
< 0200
2720 && (strchr ("\"';([#?", next_next_char
)
2721 || (!first_in_list
&& next_next_char
== '`')
2722 || (new_backquote_flag
&& next_next_char
== ','))));
2726 ok
= (next_char
<= 040
2727 || (next_char
< 0200
2728 && (strchr ("\"';()[]#?", next_char
)
2729 || (!first_in_list
&& next_char
== '`')
2730 || (new_backquote_flag
&& next_char
== ','))));
2734 return make_number (c
);
2736 invalid_syntax ("?", 1);
2741 char *p
= read_buffer
;
2742 char *end
= read_buffer
+ read_buffer_size
;
2744 /* Nonzero if we saw an escape sequence specifying
2745 a multibyte character. */
2746 int force_multibyte
= 0;
2747 /* Nonzero if we saw an escape sequence specifying
2748 a single-byte character. */
2749 int force_singlebyte
= 0;
2753 while ((c
= READCHAR
) >= 0
2756 if (end
- p
< MAX_MULTIBYTE_LENGTH
)
2758 int offset
= p
- read_buffer
;
2759 read_buffer
= (char *) xrealloc (read_buffer
,
2760 read_buffer_size
*= 2);
2761 p
= read_buffer
+ offset
;
2762 end
= read_buffer
+ read_buffer_size
;
2769 c
= read_escape (readcharfun
, 1);
2771 /* C is -1 if \ newline has just been seen */
2774 if (p
== read_buffer
)
2779 modifiers
= c
& CHAR_MODIFIER_MASK
;
2780 c
= c
& ~CHAR_MODIFIER_MASK
;
2782 if (CHAR_BYTE8_P (c
))
2783 force_singlebyte
= 1;
2784 else if (! ASCII_CHAR_P (c
))
2785 force_multibyte
= 1;
2786 else /* i.e. ASCII_CHAR_P (c) */
2788 /* Allow `\C- ' and `\C-?'. */
2789 if (modifiers
== CHAR_CTL
)
2792 c
= 0, modifiers
= 0;
2794 c
= 127, modifiers
= 0;
2796 if (modifiers
& CHAR_SHIFT
)
2798 /* Shift modifier is valid only with [A-Za-z]. */
2799 if (c
>= 'A' && c
<= 'Z')
2800 modifiers
&= ~CHAR_SHIFT
;
2801 else if (c
>= 'a' && c
<= 'z')
2802 c
-= ('a' - 'A'), modifiers
&= ~CHAR_SHIFT
;
2805 if (modifiers
& CHAR_META
)
2807 /* Move the meta bit to the right place for a
2809 modifiers
&= ~CHAR_META
;
2810 c
= BYTE8_TO_CHAR (c
| 0x80);
2811 force_singlebyte
= 1;
2815 /* Any modifiers remaining are invalid. */
2817 error ("Invalid modifier in string");
2818 p
+= CHAR_STRING (c
, (unsigned char *) p
);
2822 p
+= CHAR_STRING (c
, (unsigned char *) p
);
2823 if (CHAR_BYTE8_P (c
))
2824 force_singlebyte
= 1;
2825 else if (! ASCII_CHAR_P (c
))
2826 force_multibyte
= 1;
2832 end_of_file_error ();
2834 /* If purifying, and string starts with \ newline,
2835 return zero instead. This is for doc strings
2836 that we are really going to find in etc/DOC.nn.nn */
2837 if (!NILP (Vpurify_flag
) && NILP (Vdoc_file_name
) && cancel
)
2838 return make_number (0);
2840 if (force_multibyte
)
2841 /* READ_BUFFER already contains valid multibyte forms. */
2843 else if (force_singlebyte
)
2845 nchars
= str_as_unibyte (read_buffer
, p
- read_buffer
);
2846 p
= read_buffer
+ nchars
;
2849 /* Otherwise, READ_BUFFER contains only ASCII. */
2852 /* We want readchar_count to be the number of characters, not
2853 bytes. Hence we adjust for multibyte characters in the
2854 string. ... But it doesn't seem to be necessary, because
2855 READCHAR *does* read multibyte characters from buffers. */
2856 /* readchar_count -= (p - read_buffer) - nchars; */
2858 return make_pure_string (read_buffer
, nchars
, p
- read_buffer
,
2860 || (p
- read_buffer
!= nchars
)));
2861 return make_specified_string (read_buffer
, nchars
, p
- read_buffer
,
2863 || (p
- read_buffer
!= nchars
)));
2868 int next_char
= READCHAR
;
2871 if (next_char
<= 040
2872 || (next_char
< 0200
2873 && (strchr ("\"';([#?", next_char
)
2874 || (!first_in_list
&& next_char
== '`')
2875 || (new_backquote_flag
&& next_char
== ','))))
2881 /* Otherwise, we fall through! Note that the atom-reading loop
2882 below will now loop at least once, assuring that we will not
2883 try to UNREAD two characters in a row. */
2887 if (c
<= 040) goto retry
;
2888 if (c
== 0x8a0) /* NBSP */
2891 char *p
= read_buffer
;
2895 char *end
= read_buffer
+ read_buffer_size
;
2898 && c
!= 0x8a0 /* NBSP */
2900 || (!strchr ("\"';()[]#", c
)
2901 && !(!first_in_list
&& c
== '`')
2902 && !(new_backquote_flag
&& c
== ','))))
2904 if (end
- p
< MAX_MULTIBYTE_LENGTH
)
2906 int offset
= p
- read_buffer
;
2907 read_buffer
= (char *) xrealloc (read_buffer
,
2908 read_buffer_size
*= 2);
2909 p
= read_buffer
+ offset
;
2910 end
= read_buffer
+ read_buffer_size
;
2917 end_of_file_error ();
2922 p
+= CHAR_STRING (c
, p
);
2930 int offset
= p
- read_buffer
;
2931 read_buffer
= (char *) xrealloc (read_buffer
,
2932 read_buffer_size
*= 2);
2933 p
= read_buffer
+ offset
;
2934 end
= read_buffer
+ read_buffer_size
;
2941 if (!quoted
&& !uninterned_symbol
)
2945 if (*p1
== '+' || *p1
== '-') p1
++;
2946 /* Is it an integer? */
2949 while (p1
!= p
&& (c
= *p1
) >= '0' && c
<= '9') p1
++;
2950 /* Integers can have trailing decimal points. */
2951 if (p1
> read_buffer
&& p1
< p
&& *p1
== '.') p1
++;
2953 /* It is an integer. */
2958 /* EMACS_INT n = atol (read_buffer); */
2959 char *endptr
= NULL
;
2960 EMACS_INT n
= (errno
= 0,
2961 strtol (read_buffer
, &endptr
, 10));
2962 if (errno
== ERANGE
&& endptr
)
2965 = Fcons (make_string (read_buffer
,
2966 endptr
- read_buffer
),
2968 xsignal (Qoverflow_error
, args
);
2970 return make_fixnum_or_float (n
);
2974 if (isfloat_string (read_buffer
, 0))
2976 /* Compute NaN and infinities using 0.0 in a variable,
2977 to cope with compilers that think they are smarter
2983 /* Negate the value ourselves. This treats 0, NaNs,
2984 and infinity properly on IEEE floating point hosts,
2985 and works around a common bug where atof ("-0.0")
2987 int negative
= read_buffer
[0] == '-';
2989 /* The only way p[-1] can be 'F' or 'N', after isfloat_string
2990 returns 1, is if the input ends in e+INF or e+NaN. */
2997 value
= zero
/ zero
;
2999 /* If that made a "negative" NaN, negate it. */
3003 union { double d
; char c
[sizeof (double)]; } u_data
, u_minus_zero
;
3006 u_minus_zero
.d
= - 0.0;
3007 for (i
= 0; i
< sizeof (double); i
++)
3008 if (u_data
.c
[i
] & u_minus_zero
.c
[i
])
3014 /* Now VALUE is a positive NaN. */
3017 value
= atof (read_buffer
+ negative
);
3021 return make_float (negative
? - value
: value
);
3025 Lisp_Object name
, result
;
3026 EMACS_INT nbytes
= p
- read_buffer
;
3028 = (multibyte
? multibyte_chars_in_text (read_buffer
, nbytes
)
3031 if (uninterned_symbol
&& ! NILP (Vpurify_flag
))
3032 name
= make_pure_string (read_buffer
, nchars
, nbytes
, multibyte
);
3034 name
= make_specified_string (read_buffer
, nchars
, nbytes
,multibyte
);
3035 result
= (uninterned_symbol
? Fmake_symbol (name
)
3036 : Fintern (name
, Qnil
));
3038 if (EQ (Vread_with_symbol_positions
, Qt
)
3039 || EQ (Vread_with_symbol_positions
, readcharfun
))
3040 Vread_symbol_positions_list
=
3041 /* Kind of a hack; this will probably fail if characters
3042 in the symbol name were escaped. Not really a big
3044 Fcons (Fcons (result
,
3045 make_number (readchar_count
3046 - XFASTINT (Flength (Fsymbol_name (result
))))),
3047 Vread_symbol_positions_list
);
3055 /* List of nodes we've seen during substitute_object_in_subtree. */
3056 static Lisp_Object seen_list
;
3059 substitute_object_in_subtree (Lisp_Object object
, Lisp_Object placeholder
)
3061 Lisp_Object check_object
;
3063 /* We haven't seen any objects when we start. */
3066 /* Make all the substitutions. */
3068 = substitute_object_recurse (object
, placeholder
, object
);
3070 /* Clear seen_list because we're done with it. */
3073 /* The returned object here is expected to always eq the
3075 if (!EQ (check_object
, object
))
3076 error ("Unexpected mutation error in reader");
3079 /* Feval doesn't get called from here, so no gc protection is needed. */
3080 #define SUBSTITUTE(get_val, set_val) \
3082 Lisp_Object old_value = get_val; \
3083 Lisp_Object true_value \
3084 = substitute_object_recurse (object, placeholder, \
3087 if (!EQ (old_value, true_value)) \
3094 substitute_object_recurse (Lisp_Object object
, Lisp_Object placeholder
, Lisp_Object subtree
)
3096 /* If we find the placeholder, return the target object. */
3097 if (EQ (placeholder
, subtree
))
3100 /* If we've been to this node before, don't explore it again. */
3101 if (!EQ (Qnil
, Fmemq (subtree
, seen_list
)))
3104 /* If this node can be the entry point to a cycle, remember that
3105 we've seen it. It can only be such an entry point if it was made
3106 by #n=, which means that we can find it as a value in
3108 if (!EQ (Qnil
, Frassq (subtree
, read_objects
)))
3109 seen_list
= Fcons (subtree
, seen_list
);
3111 /* Recurse according to subtree's type.
3112 Every branch must return a Lisp_Object. */
3113 switch (XTYPE (subtree
))
3115 case Lisp_Vectorlike
:
3118 if (BOOL_VECTOR_P (subtree
))
3119 return subtree
; /* No sub-objects anyway. */
3120 else if (CHAR_TABLE_P (subtree
) || SUB_CHAR_TABLE_P (subtree
)
3121 || COMPILEDP (subtree
))
3122 length
= ASIZE (subtree
) & PSEUDOVECTOR_SIZE_MASK
;
3123 else if (VECTORP (subtree
))
3124 length
= ASIZE (subtree
);
3126 /* An unknown pseudovector may contain non-Lisp fields, so we
3127 can't just blindly traverse all its fields. We used to call
3128 `Flength' which signaled `sequencep', so I just preserved this
3130 wrong_type_argument (Qsequencep
, subtree
);
3132 for (i
= 0; i
< length
; i
++)
3133 SUBSTITUTE (AREF (subtree
, i
),
3134 ASET (subtree
, i
, true_value
));
3140 SUBSTITUTE (XCAR (subtree
),
3141 XSETCAR (subtree
, true_value
));
3142 SUBSTITUTE (XCDR (subtree
),
3143 XSETCDR (subtree
, true_value
));
3149 /* Check for text properties in each interval.
3150 substitute_in_interval contains part of the logic. */
3152 INTERVAL root_interval
= STRING_INTERVALS (subtree
);
3153 Lisp_Object arg
= Fcons (object
, placeholder
);
3155 traverse_intervals_noorder (root_interval
,
3156 &substitute_in_interval
, arg
);
3161 /* Other types don't recurse any further. */
3167 /* Helper function for substitute_object_recurse. */
3169 substitute_in_interval (INTERVAL interval
, Lisp_Object arg
)
3171 Lisp_Object object
= Fcar (arg
);
3172 Lisp_Object placeholder
= Fcdr (arg
);
3174 SUBSTITUTE (interval
->plist
, interval
->plist
= true_value
);
3185 isfloat_string (const char *cp
, int ignore_trailing
)
3188 const char *start
= cp
;
3191 if (*cp
== '+' || *cp
== '-')
3194 if (*cp
>= '0' && *cp
<= '9')
3197 while (*cp
>= '0' && *cp
<= '9')
3205 if (*cp
>= '0' && *cp
<= '9')
3208 while (*cp
>= '0' && *cp
<= '9')
3211 if (*cp
== 'e' || *cp
== 'E')
3215 if (*cp
== '+' || *cp
== '-')
3219 if (*cp
>= '0' && *cp
<= '9')
3222 while (*cp
>= '0' && *cp
<= '9')
3225 else if (cp
== start
)
3227 else if (cp
[-1] == '+' && cp
[0] == 'I' && cp
[1] == 'N' && cp
[2] == 'F')
3232 else if (cp
[-1] == '+' && cp
[0] == 'N' && cp
[1] == 'a' && cp
[2] == 'N')
3238 return ((ignore_trailing
3239 || *cp
== 0 || *cp
== ' ' || *cp
== '\t' || *cp
== '\n'
3240 || *cp
== '\r' || *cp
== '\f')
3241 && (state
== (LEAD_INT
|DOT_CHAR
|TRAIL_INT
)
3242 || state
== (DOT_CHAR
|TRAIL_INT
)
3243 || state
== (LEAD_INT
|E_CHAR
|EXP_INT
)
3244 || state
== (LEAD_INT
|DOT_CHAR
|TRAIL_INT
|E_CHAR
|EXP_INT
)
3245 || state
== (DOT_CHAR
|TRAIL_INT
|E_CHAR
|EXP_INT
)));
3250 read_vector (Lisp_Object readcharfun
, int bytecodeflag
)
3254 register Lisp_Object
*ptr
;
3255 register Lisp_Object tem
, item
, vector
;
3256 register struct Lisp_Cons
*otem
;
3259 tem
= read_list (1, readcharfun
);
3260 len
= Flength (tem
);
3261 vector
= (read_pure
? make_pure_vector (XINT (len
)) : Fmake_vector (len
, Qnil
));
3263 size
= XVECTOR (vector
)->size
;
3264 ptr
= XVECTOR (vector
)->contents
;
3265 for (i
= 0; i
< size
; i
++)
3268 /* If `load-force-doc-strings' is t when reading a lazily-loaded
3269 bytecode object, the docstring containing the bytecode and
3270 constants values must be treated as unibyte and passed to
3271 Fread, to get the actual bytecode string and constants vector. */
3272 if (bytecodeflag
&& load_force_doc_strings
)
3274 if (i
== COMPILED_BYTECODE
)
3276 if (!STRINGP (item
))
3277 error ("Invalid byte code");
3279 /* Delay handling the bytecode slot until we know whether
3280 it is lazily-loaded (we can tell by whether the
3281 constants slot is nil). */
3282 ptr
[COMPILED_CONSTANTS
] = item
;
3285 else if (i
== COMPILED_CONSTANTS
)
3287 Lisp_Object bytestr
= ptr
[COMPILED_CONSTANTS
];
3291 /* Coerce string to unibyte (like string-as-unibyte,
3292 but without generating extra garbage and
3293 guaranteeing no change in the contents). */
3294 STRING_SET_CHARS (bytestr
, SBYTES (bytestr
));
3295 STRING_SET_UNIBYTE (bytestr
);
3297 item
= Fread (Fcons (bytestr
, readcharfun
));
3299 error ("Invalid byte code");
3301 otem
= XCONS (item
);
3302 bytestr
= XCAR (item
);
3307 /* Now handle the bytecode slot. */
3308 ptr
[COMPILED_BYTECODE
] = read_pure
? Fpurecopy (bytestr
) : bytestr
;
3310 else if (i
== COMPILED_DOC_STRING
3312 && ! STRING_MULTIBYTE (item
))
3314 if (EQ (readcharfun
, Qget_emacs_mule_file_char
))
3315 item
= Fdecode_coding_string (item
, Qemacs_mule
, Qnil
, Qnil
);
3317 item
= Fstring_as_multibyte (item
);
3320 ptr
[i
] = read_pure
? Fpurecopy (item
) : item
;
3328 /* FLAG = 1 means check for ] to terminate rather than ) and .
3329 FLAG = -1 means check for starting with defun
3330 and make structure pure. */
3333 read_list (int flag
, register Lisp_Object readcharfun
)
3335 /* -1 means check next element for defun,
3336 0 means don't check,
3337 1 means already checked and found defun. */
3338 int defunflag
= flag
< 0 ? -1 : 0;
3339 Lisp_Object val
, tail
;
3340 register Lisp_Object elt
, tem
;
3341 struct gcpro gcpro1
, gcpro2
;
3342 /* 0 is the normal case.
3343 1 means this list is a doc reference; replace it with the number 0.
3344 2 means this list is a doc reference; replace it with the doc string. */
3345 int doc_reference
= 0;
3347 /* Initialize this to 1 if we are reading a list. */
3348 int first_in_list
= flag
<= 0;
3357 elt
= read1 (readcharfun
, &ch
, first_in_list
);
3362 /* While building, if the list starts with #$, treat it specially. */
3363 if (EQ (elt
, Vload_file_name
)
3365 && !NILP (Vpurify_flag
))
3367 if (NILP (Vdoc_file_name
))
3368 /* We have not yet called Snarf-documentation, so assume
3369 this file is described in the DOC-MM.NN file
3370 and Snarf-documentation will fill in the right value later.
3371 For now, replace the whole list with 0. */
3374 /* We have already called Snarf-documentation, so make a relative
3375 file name for this file, so it can be found properly
3376 in the installed Lisp directory.
3377 We don't use Fexpand_file_name because that would make
3378 the directory absolute now. */
3379 elt
= concat2 (build_string ("../lisp/"),
3380 Ffile_name_nondirectory (elt
));
3382 else if (EQ (elt
, Vload_file_name
)
3384 && load_force_doc_strings
)
3393 invalid_syntax (") or . in a vector", 18);
3401 XSETCDR (tail
, read0 (readcharfun
));
3403 val
= read0 (readcharfun
);
3404 read1 (readcharfun
, &ch
, 0);
3408 if (doc_reference
== 1)
3409 return make_number (0);
3410 if (doc_reference
== 2)
3412 /* Get a doc string from the file we are loading.
3413 If it's in saved_doc_string, get it from there.
3415 Here, we don't know if the string is a
3416 bytecode string or a doc string. As a
3417 bytecode string must be unibyte, we always
3418 return a unibyte string. If it is actually a
3419 doc string, caller must make it
3422 int pos
= XINT (XCDR (val
));
3423 /* Position is negative for user variables. */
3424 if (pos
< 0) pos
= -pos
;
3425 if (pos
>= saved_doc_string_position
3426 && pos
< (saved_doc_string_position
3427 + saved_doc_string_length
))
3429 int start
= pos
- saved_doc_string_position
;
3432 /* Process quoting with ^A,
3433 and find the end of the string,
3434 which is marked with ^_ (037). */
3435 for (from
= start
, to
= start
;
3436 saved_doc_string
[from
] != 037;)
3438 int c
= saved_doc_string
[from
++];
3441 c
= saved_doc_string
[from
++];
3443 saved_doc_string
[to
++] = c
;
3445 saved_doc_string
[to
++] = 0;
3447 saved_doc_string
[to
++] = 037;
3450 saved_doc_string
[to
++] = c
;
3453 return make_unibyte_string (saved_doc_string
+ start
,
3456 /* Look in prev_saved_doc_string the same way. */
3457 else if (pos
>= prev_saved_doc_string_position
3458 && pos
< (prev_saved_doc_string_position
3459 + prev_saved_doc_string_length
))
3461 int start
= pos
- prev_saved_doc_string_position
;
3464 /* Process quoting with ^A,
3465 and find the end of the string,
3466 which is marked with ^_ (037). */
3467 for (from
= start
, to
= start
;
3468 prev_saved_doc_string
[from
] != 037;)
3470 int c
= prev_saved_doc_string
[from
++];
3473 c
= prev_saved_doc_string
[from
++];
3475 prev_saved_doc_string
[to
++] = c
;
3477 prev_saved_doc_string
[to
++] = 0;
3479 prev_saved_doc_string
[to
++] = 037;
3482 prev_saved_doc_string
[to
++] = c
;
3485 return make_unibyte_string (prev_saved_doc_string
3490 return get_doc_string (val
, 1, 0);
3495 invalid_syntax (". in wrong context", 18);
3497 invalid_syntax ("] in a list", 11);
3499 tem
= (read_pure
&& flag
<= 0
3500 ? pure_cons (elt
, Qnil
)
3501 : Fcons (elt
, Qnil
));
3503 XSETCDR (tail
, tem
);
3508 defunflag
= EQ (elt
, Qdefun
);
3509 else if (defunflag
> 0)
3514 Lisp_Object Vobarray
;
3515 Lisp_Object initial_obarray
;
3517 /* oblookup stores the bucket number here, for the sake of Funintern. */
3519 int oblookup_last_bucket_number
;
3521 static int hash_string (const unsigned char *ptr
, int len
);
3523 /* Get an error if OBARRAY is not an obarray.
3524 If it is one, return it. */
3527 check_obarray (Lisp_Object obarray
)
3529 if (!VECTORP (obarray
) || XVECTOR (obarray
)->size
== 0)
3531 /* If Vobarray is now invalid, force it to be valid. */
3532 if (EQ (Vobarray
, obarray
)) Vobarray
= initial_obarray
;
3533 wrong_type_argument (Qvectorp
, obarray
);
3538 /* Intern the C string STR: return a symbol with that name,
3539 interned in the current obarray. */
3542 intern (const char *str
)
3545 int len
= strlen (str
);
3546 Lisp_Object obarray
;
3549 if (!VECTORP (obarray
) || XVECTOR (obarray
)->size
== 0)
3550 obarray
= check_obarray (obarray
);
3551 tem
= oblookup (obarray
, str
, len
, len
);
3554 return Fintern (make_string (str
, len
), obarray
);
3558 intern_c_string (const char *str
)
3561 int len
= strlen (str
);
3562 Lisp_Object obarray
;
3565 if (!VECTORP (obarray
) || XVECTOR (obarray
)->size
== 0)
3566 obarray
= check_obarray (obarray
);
3567 tem
= oblookup (obarray
, str
, len
, len
);
3571 if (NILP (Vpurify_flag
))
3572 /* Creating a non-pure string from a string literal not
3573 implemented yet. We could just use make_string here and live
3574 with the extra copy. */
3577 return Fintern (make_pure_c_string (str
), obarray
);
3580 /* Create an uninterned symbol with name STR. */
3583 make_symbol (const char *str
)
3585 int len
= strlen (str
);
3587 return Fmake_symbol (!NILP (Vpurify_flag
)
3588 ? make_pure_string (str
, len
, len
, 0)
3589 : make_string (str
, len
));
3592 DEFUN ("intern", Fintern
, Sintern
, 1, 2, 0,
3593 doc
: /* Return the canonical symbol whose name is STRING.
3594 If there is none, one is created by this function and returned.
3595 A second optional argument specifies the obarray to use;
3596 it defaults to the value of `obarray'. */)
3597 (Lisp_Object string
, Lisp_Object obarray
)
3599 register Lisp_Object tem
, sym
, *ptr
;
3601 if (NILP (obarray
)) obarray
= Vobarray
;
3602 obarray
= check_obarray (obarray
);
3604 CHECK_STRING (string
);
3606 tem
= oblookup (obarray
, SDATA (string
),
3609 if (!INTEGERP (tem
))
3612 if (!NILP (Vpurify_flag
))
3613 string
= Fpurecopy (string
);
3614 sym
= Fmake_symbol (string
);
3616 if (EQ (obarray
, initial_obarray
))
3617 XSYMBOL (sym
)->interned
= SYMBOL_INTERNED_IN_INITIAL_OBARRAY
;
3619 XSYMBOL (sym
)->interned
= SYMBOL_INTERNED
;
3621 if ((SREF (string
, 0) == ':')
3622 && EQ (obarray
, initial_obarray
))
3624 XSYMBOL (sym
)->constant
= 1;
3625 XSYMBOL (sym
)->redirect
= SYMBOL_PLAINVAL
;
3626 SET_SYMBOL_VAL (XSYMBOL (sym
), sym
);
3629 ptr
= &XVECTOR (obarray
)->contents
[XINT (tem
)];
3631 XSYMBOL (sym
)->next
= XSYMBOL (*ptr
);
3633 XSYMBOL (sym
)->next
= 0;
3638 DEFUN ("intern-soft", Fintern_soft
, Sintern_soft
, 1, 2, 0,
3639 doc
: /* Return the canonical symbol named NAME, or nil if none exists.
3640 NAME may be a string or a symbol. If it is a symbol, that exact
3641 symbol is searched for.
3642 A second optional argument specifies the obarray to use;
3643 it defaults to the value of `obarray'. */)
3644 (Lisp_Object name
, Lisp_Object obarray
)
3646 register Lisp_Object tem
, string
;
3648 if (NILP (obarray
)) obarray
= Vobarray
;
3649 obarray
= check_obarray (obarray
);
3651 if (!SYMBOLP (name
))
3653 CHECK_STRING (name
);
3657 string
= SYMBOL_NAME (name
);
3659 tem
= oblookup (obarray
, SDATA (string
), SCHARS (string
), SBYTES (string
));
3660 if (INTEGERP (tem
) || (SYMBOLP (name
) && !EQ (name
, tem
)))
3666 DEFUN ("unintern", Funintern
, Sunintern
, 1, 2, 0,
3667 doc
: /* Delete the symbol named NAME, if any, from OBARRAY.
3668 The value is t if a symbol was found and deleted, nil otherwise.
3669 NAME may be a string or a symbol. If it is a symbol, that symbol
3670 is deleted, if it belongs to OBARRAY--no other symbol is deleted.
3671 OBARRAY defaults to the value of the variable `obarray'. */)
3672 (Lisp_Object name
, Lisp_Object obarray
)
3674 register Lisp_Object string
, tem
;
3677 if (NILP (obarray
)) obarray
= Vobarray
;
3678 obarray
= check_obarray (obarray
);
3681 string
= SYMBOL_NAME (name
);
3684 CHECK_STRING (name
);
3688 tem
= oblookup (obarray
, SDATA (string
),
3693 /* If arg was a symbol, don't delete anything but that symbol itself. */
3694 if (SYMBOLP (name
) && !EQ (name
, tem
))
3697 /* There are plenty of other symbols which will screw up the Emacs
3698 session if we unintern them, as well as even more ways to use
3699 `setq' or `fset' or whatnot to make the Emacs session
3700 unusable. Let's not go down this silly road. --Stef */
3701 /* if (EQ (tem, Qnil) || EQ (tem, Qt))
3702 error ("Attempt to unintern t or nil"); */
3704 XSYMBOL (tem
)->interned
= SYMBOL_UNINTERNED
;
3706 hash
= oblookup_last_bucket_number
;
3708 if (EQ (XVECTOR (obarray
)->contents
[hash
], tem
))
3710 if (XSYMBOL (tem
)->next
)
3711 XSETSYMBOL (XVECTOR (obarray
)->contents
[hash
], XSYMBOL (tem
)->next
);
3713 XSETINT (XVECTOR (obarray
)->contents
[hash
], 0);
3717 Lisp_Object tail
, following
;
3719 for (tail
= XVECTOR (obarray
)->contents
[hash
];
3720 XSYMBOL (tail
)->next
;
3723 XSETSYMBOL (following
, XSYMBOL (tail
)->next
);
3724 if (EQ (following
, tem
))
3726 XSYMBOL (tail
)->next
= XSYMBOL (following
)->next
;
3735 /* Return the symbol in OBARRAY whose names matches the string
3736 of SIZE characters (SIZE_BYTE bytes) at PTR.
3737 If there is no such symbol in OBARRAY, return nil.
3739 Also store the bucket number in oblookup_last_bucket_number. */
3742 oblookup (Lisp_Object obarray
, register const char *ptr
, EMACS_INT size
, EMACS_INT size_byte
)
3746 register Lisp_Object tail
;
3747 Lisp_Object bucket
, tem
;
3749 if (!VECTORP (obarray
)
3750 || (obsize
= XVECTOR (obarray
)->size
) == 0)
3752 obarray
= check_obarray (obarray
);
3753 obsize
= XVECTOR (obarray
)->size
;
3755 /* This is sometimes needed in the middle of GC. */
3756 obsize
&= ~ARRAY_MARK_FLAG
;
3757 hash
= hash_string (ptr
, size_byte
) % obsize
;
3758 bucket
= XVECTOR (obarray
)->contents
[hash
];
3759 oblookup_last_bucket_number
= hash
;
3760 if (EQ (bucket
, make_number (0)))
3762 else if (!SYMBOLP (bucket
))
3763 error ("Bad data in guts of obarray"); /* Like CADR error message */
3765 for (tail
= bucket
; ; XSETSYMBOL (tail
, XSYMBOL (tail
)->next
))
3767 if (SBYTES (SYMBOL_NAME (tail
)) == size_byte
3768 && SCHARS (SYMBOL_NAME (tail
)) == size
3769 && !memcmp (SDATA (SYMBOL_NAME (tail
)), ptr
, size_byte
))
3771 else if (XSYMBOL (tail
)->next
== 0)
3774 XSETINT (tem
, hash
);
3779 hash_string (const unsigned char *ptr
, int len
)
3781 register const unsigned char *p
= ptr
;
3782 register const unsigned char *end
= p
+ len
;
3783 register unsigned char c
;
3784 register int hash
= 0;
3789 if (c
>= 0140) c
-= 40;
3790 hash
= ((hash
<<3) + (hash
>>28) + c
);
3792 return hash
& 07777777777;
3796 map_obarray (Lisp_Object obarray
, void (*fn
) (Lisp_Object
, Lisp_Object
), Lisp_Object arg
)
3799 register Lisp_Object tail
;
3800 CHECK_VECTOR (obarray
);
3801 for (i
= XVECTOR (obarray
)->size
- 1; i
>= 0; i
--)
3803 tail
= XVECTOR (obarray
)->contents
[i
];
3808 if (XSYMBOL (tail
)->next
== 0)
3810 XSETSYMBOL (tail
, XSYMBOL (tail
)->next
);
3816 mapatoms_1 (Lisp_Object sym
, Lisp_Object function
)
3818 call1 (function
, sym
);
3821 DEFUN ("mapatoms", Fmapatoms
, Smapatoms
, 1, 2, 0,
3822 doc
: /* Call FUNCTION on every symbol in OBARRAY.
3823 OBARRAY defaults to the value of `obarray'. */)
3824 (Lisp_Object function
, Lisp_Object obarray
)
3826 if (NILP (obarray
)) obarray
= Vobarray
;
3827 obarray
= check_obarray (obarray
);
3829 map_obarray (obarray
, mapatoms_1
, function
);
3833 #define OBARRAY_SIZE 1511
3838 Lisp_Object oblength
;
3840 XSETFASTINT (oblength
, OBARRAY_SIZE
);
3842 Vobarray
= Fmake_vector (oblength
, make_number (0));
3843 initial_obarray
= Vobarray
;
3844 staticpro (&initial_obarray
);
3846 Qunbound
= Fmake_symbol (make_pure_c_string ("unbound"));
3847 /* Set temporary dummy values to Qnil and Vpurify_flag to satisfy the
3848 NILP (Vpurify_flag) check in intern_c_string. */
3849 Qnil
= make_number (-1); Vpurify_flag
= make_number (1);
3850 Qnil
= intern_c_string ("nil");
3852 /* Fmake_symbol inits fields of new symbols with Qunbound and Qnil,
3853 so those two need to be fixed manally. */
3854 SET_SYMBOL_VAL (XSYMBOL (Qunbound
), Qunbound
);
3855 XSYMBOL (Qunbound
)->function
= Qunbound
;
3856 XSYMBOL (Qunbound
)->plist
= Qnil
;
3857 /* XSYMBOL (Qnil)->function = Qunbound; */
3858 SET_SYMBOL_VAL (XSYMBOL (Qnil
), Qnil
);
3859 XSYMBOL (Qnil
)->constant
= 1;
3860 XSYMBOL (Qnil
)->plist
= Qnil
;
3862 Qt
= intern_c_string ("t");
3863 SET_SYMBOL_VAL (XSYMBOL (Qt
), Qt
);
3864 XSYMBOL (Qt
)->constant
= 1;
3866 /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */
3869 Qvariable_documentation
= intern_c_string ("variable-documentation");
3870 staticpro (&Qvariable_documentation
);
3872 read_buffer_size
= 100 + MAX_MULTIBYTE_LENGTH
;
3873 read_buffer
= (char *) xmalloc (read_buffer_size
);
3877 defsubr (struct Lisp_Subr
*sname
)
3880 sym
= intern_c_string (sname
->symbol_name
);
3881 XSETPVECTYPE (sname
, PVEC_SUBR
);
3882 XSETSUBR (XSYMBOL (sym
)->function
, sname
);
3885 #ifdef NOTDEF /* use fset in subr.el now */
3887 defalias (sname
, string
)
3888 struct Lisp_Subr
*sname
;
3892 sym
= intern (string
);
3893 XSETSUBR (XSYMBOL (sym
)->function
, sname
);
3897 /* Define an "integer variable"; a symbol whose value is forwarded
3898 to a C variable of type int. Sample call:
3899 DEFVAR_INT ("emacs-priority", &emacs_priority, "Documentation"); */
3901 defvar_int (struct Lisp_Intfwd
*i_fwd
,
3902 const char *namestring
, EMACS_INT
*address
)
3905 sym
= intern_c_string (namestring
);
3906 i_fwd
->type
= Lisp_Fwd_Int
;
3907 i_fwd
->intvar
= address
;
3908 XSYMBOL (sym
)->redirect
= SYMBOL_FORWARDED
;
3909 SET_SYMBOL_FWD (XSYMBOL (sym
), (union Lisp_Fwd
*)i_fwd
);
3912 /* Similar but define a variable whose value is t if address contains 1,
3913 nil if address contains 0. */
3915 defvar_bool (struct Lisp_Boolfwd
*b_fwd
,
3916 const char *namestring
, int *address
)
3919 sym
= intern_c_string (namestring
);
3920 b_fwd
->type
= Lisp_Fwd_Bool
;
3921 b_fwd
->boolvar
= address
;
3922 XSYMBOL (sym
)->redirect
= SYMBOL_FORWARDED
;
3923 SET_SYMBOL_FWD (XSYMBOL (sym
), (union Lisp_Fwd
*)b_fwd
);
3924 Vbyte_boolean_vars
= Fcons (sym
, Vbyte_boolean_vars
);
3927 /* Similar but define a variable whose value is the Lisp Object stored
3928 at address. Two versions: with and without gc-marking of the C
3929 variable. The nopro version is used when that variable will be
3930 gc-marked for some other reason, since marking the same slot twice
3931 can cause trouble with strings. */
3933 defvar_lisp_nopro (struct Lisp_Objfwd
*o_fwd
,
3934 const char *namestring
, Lisp_Object
*address
)
3937 sym
= intern_c_string (namestring
);
3938 o_fwd
->type
= Lisp_Fwd_Obj
;
3939 o_fwd
->objvar
= address
;
3940 XSYMBOL (sym
)->redirect
= SYMBOL_FORWARDED
;
3941 SET_SYMBOL_FWD (XSYMBOL (sym
), (union Lisp_Fwd
*)o_fwd
);
3945 defvar_lisp (struct Lisp_Objfwd
*o_fwd
,
3946 const char *namestring
, Lisp_Object
*address
)
3948 defvar_lisp_nopro (o_fwd
, namestring
, address
);
3949 staticpro (address
);
3952 /* Similar but define a variable whose value is the Lisp Object stored
3953 at a particular offset in the current kboard object. */
3956 defvar_kboard (struct Lisp_Kboard_Objfwd
*ko_fwd
,
3957 const char *namestring
, int offset
)
3960 sym
= intern_c_string (namestring
);
3961 ko_fwd
->type
= Lisp_Fwd_Kboard_Obj
;
3962 ko_fwd
->offset
= offset
;
3963 XSYMBOL (sym
)->redirect
= SYMBOL_FORWARDED
;
3964 SET_SYMBOL_FWD (XSYMBOL (sym
), (union Lisp_Fwd
*)ko_fwd
);
3967 /* Record the value of load-path used at the start of dumping
3968 so we can see if the site changed it later during dumping. */
3969 static Lisp_Object dump_path
;
3975 int turn_off_warning
= 0;
3977 /* Compute the default load-path. */
3979 normal
= PATH_LOADSEARCH
;
3980 Vload_path
= decode_env_path (0, normal
);
3982 if (NILP (Vpurify_flag
))
3983 normal
= PATH_LOADSEARCH
;
3985 normal
= PATH_DUMPLOADSEARCH
;
3987 /* In a dumped Emacs, we normally have to reset the value of
3988 Vload_path from PATH_LOADSEARCH, since the value that was dumped
3989 uses ../lisp, instead of the path of the installed elisp
3990 libraries. However, if it appears that Vload_path was changed
3991 from the default before dumping, don't override that value. */
3994 if (! NILP (Fequal (dump_path
, Vload_path
)))
3996 Vload_path
= decode_env_path (0, normal
);
3997 if (!NILP (Vinstallation_directory
))
3999 Lisp_Object tem
, tem1
, sitelisp
;
4001 /* Remove site-lisp dirs from path temporarily and store
4002 them in sitelisp, then conc them on at the end so
4003 they're always first in path. */
4007 tem
= Fcar (Vload_path
);
4008 tem1
= Fstring_match (build_string ("site-lisp"),
4012 Vload_path
= Fcdr (Vload_path
);
4013 sitelisp
= Fcons (tem
, sitelisp
);
4019 /* Add to the path the lisp subdir of the
4020 installation dir, if it exists. */
4021 tem
= Fexpand_file_name (build_string ("lisp"),
4022 Vinstallation_directory
);
4023 tem1
= Ffile_exists_p (tem
);
4026 if (NILP (Fmember (tem
, Vload_path
)))
4028 turn_off_warning
= 1;
4029 Vload_path
= Fcons (tem
, Vload_path
);
4033 /* That dir doesn't exist, so add the build-time
4034 Lisp dirs instead. */
4035 Vload_path
= nconc2 (Vload_path
, dump_path
);
4037 /* Add leim under the installation dir, if it exists. */
4038 tem
= Fexpand_file_name (build_string ("leim"),
4039 Vinstallation_directory
);
4040 tem1
= Ffile_exists_p (tem
);
4043 if (NILP (Fmember (tem
, Vload_path
)))
4044 Vload_path
= Fcons (tem
, Vload_path
);
4047 /* Add site-lisp under the installation dir, if it exists. */
4048 tem
= Fexpand_file_name (build_string ("site-lisp"),
4049 Vinstallation_directory
);
4050 tem1
= Ffile_exists_p (tem
);
4053 if (NILP (Fmember (tem
, Vload_path
)))
4054 Vload_path
= Fcons (tem
, Vload_path
);
4057 /* If Emacs was not built in the source directory,
4058 and it is run from where it was built, add to load-path
4059 the lisp, leim and site-lisp dirs under that directory. */
4061 if (NILP (Fequal (Vinstallation_directory
, Vsource_directory
)))
4065 tem
= Fexpand_file_name (build_string ("src/Makefile"),
4066 Vinstallation_directory
);
4067 tem1
= Ffile_exists_p (tem
);
4069 /* Don't be fooled if they moved the entire source tree
4070 AFTER dumping Emacs. If the build directory is indeed
4071 different from the source dir, src/Makefile.in and
4072 src/Makefile will not be found together. */
4073 tem
= Fexpand_file_name (build_string ("src/Makefile.in"),
4074 Vinstallation_directory
);
4075 tem2
= Ffile_exists_p (tem
);
4076 if (!NILP (tem1
) && NILP (tem2
))
4078 tem
= Fexpand_file_name (build_string ("lisp"),
4081 if (NILP (Fmember (tem
, Vload_path
)))
4082 Vload_path
= Fcons (tem
, Vload_path
);
4084 tem
= Fexpand_file_name (build_string ("leim"),
4087 if (NILP (Fmember (tem
, Vload_path
)))
4088 Vload_path
= Fcons (tem
, Vload_path
);
4090 tem
= Fexpand_file_name (build_string ("site-lisp"),
4093 if (NILP (Fmember (tem
, Vload_path
)))
4094 Vload_path
= Fcons (tem
, Vload_path
);
4097 if (!NILP (sitelisp
))
4098 Vload_path
= nconc2 (Fnreverse (sitelisp
), Vload_path
);
4104 /* NORMAL refers to the lisp dir in the source directory. */
4105 /* We used to add ../lisp at the front here, but
4106 that caused trouble because it was copied from dump_path
4107 into Vload_path, above, when Vinstallation_directory was non-nil.
4108 It should be unnecessary. */
4109 Vload_path
= decode_env_path (0, normal
);
4110 dump_path
= Vload_path
;
4114 #if (!(defined (WINDOWSNT) || (defined (HAVE_NS))))
4115 /* When Emacs is invoked over network shares on NT, PATH_LOADSEARCH is
4116 almost never correct, thereby causing a warning to be printed out that
4117 confuses users. Since PATH_LOADSEARCH is always overridden by the
4118 EMACSLOADPATH environment variable below, disable the warning on NT. */
4120 /* Warn if dirs in the *standard* path don't exist. */
4121 if (!turn_off_warning
)
4123 Lisp_Object path_tail
;
4125 for (path_tail
= Vload_path
;
4127 path_tail
= XCDR (path_tail
))
4129 Lisp_Object dirfile
;
4130 dirfile
= Fcar (path_tail
);
4131 if (STRINGP (dirfile
))
4133 dirfile
= Fdirectory_file_name (dirfile
);
4134 if (access (SDATA (dirfile
), 0) < 0)
4135 dir_warning ("Warning: Lisp directory `%s' does not exist.\n",
4140 #endif /* !(WINDOWSNT || HAVE_NS) */
4142 /* If the EMACSLOADPATH environment variable is set, use its value.
4143 This doesn't apply if we're dumping. */
4145 if (NILP (Vpurify_flag
)
4146 && egetenv ("EMACSLOADPATH"))
4148 Vload_path
= decode_env_path ("EMACSLOADPATH", normal
);
4152 load_in_progress
= 0;
4153 Vload_file_name
= Qnil
;
4155 load_descriptor_list
= Qnil
;
4157 Vstandard_input
= Qt
;
4158 Vloads_in_progress
= Qnil
;
4161 /* Print a warning, using format string FORMAT, that directory DIRNAME
4162 does not exist. Print it on stderr and put it in *Messages*. */
4165 dir_warning (const char *format
, Lisp_Object dirname
)
4168 = (char *) alloca (SCHARS (dirname
) + strlen (format
) + 5);
4170 fprintf (stderr
, format
, SDATA (dirname
));
4171 sprintf (buffer
, format
, SDATA (dirname
));
4172 /* Don't log the warning before we've initialized!! */
4174 message_dolog (buffer
, strlen (buffer
), 0, STRING_MULTIBYTE (dirname
));
4178 syms_of_lread (void)
4181 defsubr (&Sread_from_string
);
4183 defsubr (&Sintern_soft
);
4184 defsubr (&Sunintern
);
4185 defsubr (&Sget_load_suffixes
);
4187 defsubr (&Seval_buffer
);
4188 defsubr (&Seval_region
);
4189 defsubr (&Sread_char
);
4190 defsubr (&Sread_char_exclusive
);
4191 defsubr (&Sread_event
);
4192 defsubr (&Sget_file_char
);
4193 defsubr (&Smapatoms
);
4194 defsubr (&Slocate_file_internal
);
4196 DEFVAR_LISP ("obarray", &Vobarray
,
4197 doc
: /* Symbol table for use by `intern' and `read'.
4198 It is a vector whose length ought to be prime for best results.
4199 The vector's contents don't make sense if examined from Lisp programs;
4200 to find all the symbols in an obarray, use `mapatoms'. */);
4202 DEFVAR_LISP ("values", &Vvalues
,
4203 doc
: /* List of values of all expressions which were read, evaluated and printed.
4204 Order is reverse chronological. */);
4206 DEFVAR_LISP ("standard-input", &Vstandard_input
,
4207 doc
: /* Stream for read to get input from.
4208 See documentation of `read' for possible values. */);
4209 Vstandard_input
= Qt
;
4211 DEFVAR_LISP ("read-with-symbol-positions", &Vread_with_symbol_positions
,
4212 doc
: /* If non-nil, add position of read symbols to `read-symbol-positions-list'.
4214 If this variable is a buffer, then only forms read from that buffer
4215 will be added to `read-symbol-positions-list'.
4216 If this variable is t, then all read forms will be added.
4217 The effect of all other values other than nil are not currently
4218 defined, although they may be in the future.
4220 The positions are relative to the last call to `read' or
4221 `read-from-string'. It is probably a bad idea to set this variable at
4222 the toplevel; bind it instead. */);
4223 Vread_with_symbol_positions
= Qnil
;
4225 DEFVAR_LISP ("read-symbol-positions-list", &Vread_symbol_positions_list
,
4226 doc
: /* A list mapping read symbols to their positions.
4227 This variable is modified during calls to `read' or
4228 `read-from-string', but only when `read-with-symbol-positions' is
4231 Each element of the list looks like (SYMBOL . CHAR-POSITION), where
4232 CHAR-POSITION is an integer giving the offset of that occurrence of the
4233 symbol from the position where `read' or `read-from-string' started.
4235 Note that a symbol will appear multiple times in this list, if it was
4236 read multiple times. The list is in the same order as the symbols
4238 Vread_symbol_positions_list
= Qnil
;
4240 DEFVAR_LISP ("read-circle", &Vread_circle
,
4241 doc
: /* Non-nil means read recursive structures using #N= and #N# syntax. */);
4244 DEFVAR_LISP ("load-path", &Vload_path
,
4245 doc
: /* *List of directories to search for files to load.
4246 Each element is a string (directory name) or nil (try default directory).
4247 Initialized based on EMACSLOADPATH environment variable, if any,
4248 otherwise to default specified by file `epaths.h' when Emacs was built. */);
4250 DEFVAR_LISP ("load-suffixes", &Vload_suffixes
,
4251 doc
: /* List of suffixes for (compiled or source) Emacs Lisp files.
4252 This list should not include the empty string.
4253 `load' and related functions try to append these suffixes, in order,
4254 to the specified file name if a Lisp suffix is allowed or required. */);
4255 Vload_suffixes
= Fcons (make_pure_c_string (".elc"),
4256 Fcons (make_pure_c_string (".el"), Qnil
));
4257 DEFVAR_LISP ("load-file-rep-suffixes", &Vload_file_rep_suffixes
,
4258 doc
: /* List of suffixes that indicate representations of \
4260 This list should normally start with the empty string.
4262 Enabling Auto Compression mode appends the suffixes in
4263 `jka-compr-load-suffixes' to this list and disabling Auto Compression
4264 mode removes them again. `load' and related functions use this list to
4265 determine whether they should look for compressed versions of a file
4266 and, if so, which suffixes they should try to append to the file name
4267 in order to do so. However, if you want to customize which suffixes
4268 the loading functions recognize as compression suffixes, you should
4269 customize `jka-compr-load-suffixes' rather than the present variable. */);
4270 Vload_file_rep_suffixes
= Fcons (empty_unibyte_string
, Qnil
);
4272 DEFVAR_BOOL ("load-in-progress", &load_in_progress
,
4273 doc
: /* Non-nil if inside of `load'. */);
4274 Qload_in_progress
= intern_c_string ("load-in-progress");
4275 staticpro (&Qload_in_progress
);
4277 DEFVAR_LISP ("after-load-alist", &Vafter_load_alist
,
4278 doc
: /* An alist of expressions to be evalled when particular files are loaded.
4279 Each element looks like (REGEXP-OR-FEATURE FORMS...).
4281 REGEXP-OR-FEATURE is either a regular expression to match file names, or
4282 a symbol \(a feature name).
4284 When `load' is run and the file-name argument matches an element's
4285 REGEXP-OR-FEATURE, or when `provide' is run and provides the symbol
4286 REGEXP-OR-FEATURE, the FORMS in the element are executed.
4288 An error in FORMS does not undo the load, but does prevent execution of
4289 the rest of the FORMS. */);
4290 Vafter_load_alist
= Qnil
;
4292 DEFVAR_LISP ("load-history", &Vload_history
,
4293 doc
: /* Alist mapping loaded file names to symbols and features.
4294 Each alist element should be a list (FILE-NAME ENTRIES...), where
4295 FILE-NAME is the name of a file that has been loaded into Emacs.
4296 The file name is absolute and true (i.e. it doesn't contain symlinks).
4297 As an exception, one of the alist elements may have FILE-NAME nil,
4298 for symbols and features not associated with any file.
4300 The remaining ENTRIES in the alist element describe the functions and
4301 variables defined in that file, the features provided, and the
4302 features required. Each entry has the form `(provide . FEATURE)',
4303 `(require . FEATURE)', `(defun . FUNCTION)', `(autoload . SYMBOL)',
4304 `(defface . SYMBOL)', or `(t . SYMBOL)'. In addition, an entry `(t
4305 . SYMBOL)' may precede an entry `(defun . FUNCTION)', and means that
4306 SYMBOL was an autoload before this file redefined it as a function.
4308 During preloading, the file name recorded is relative to the main Lisp
4309 directory. These file names are converted to absolute at startup. */);
4310 Vload_history
= Qnil
;
4312 DEFVAR_LISP ("load-file-name", &Vload_file_name
,
4313 doc
: /* Full name of file being loaded by `load'. */);
4314 Vload_file_name
= Qnil
;
4316 DEFVAR_LISP ("user-init-file", &Vuser_init_file
,
4317 doc
: /* File name, including directory, of user's initialization file.
4318 If the file loaded had extension `.elc', and the corresponding source file
4319 exists, this variable contains the name of source file, suitable for use
4320 by functions like `custom-save-all' which edit the init file.
4321 While Emacs loads and evaluates the init file, value is the real name
4322 of the file, regardless of whether or not it has the `.elc' extension. */);
4323 Vuser_init_file
= Qnil
;
4325 DEFVAR_LISP ("current-load-list", &Vcurrent_load_list
,
4326 doc
: /* Used for internal purposes by `load'. */);
4327 Vcurrent_load_list
= Qnil
;
4329 DEFVAR_LISP ("load-read-function", &Vload_read_function
,
4330 doc
: /* Function used by `load' and `eval-region' for reading expressions.
4331 The default is nil, which means use the function `read'. */);
4332 Vload_read_function
= Qnil
;
4334 DEFVAR_LISP ("load-source-file-function", &Vload_source_file_function
,
4335 doc
: /* Function called in `load' for loading an Emacs Lisp source file.
4336 This function is for doing code conversion before reading the source file.
4337 If nil, loading is done without any code conversion.
4338 Arguments are FULLNAME, FILE, NOERROR, NOMESSAGE, where
4339 FULLNAME is the full name of FILE.
4340 See `load' for the meaning of the remaining arguments. */);
4341 Vload_source_file_function
= Qnil
;
4343 DEFVAR_BOOL ("load-force-doc-strings", &load_force_doc_strings
,
4344 doc
: /* Non-nil means `load' should force-load all dynamic doc strings.
4345 This is useful when the file being loaded is a temporary copy. */);
4346 load_force_doc_strings
= 0;
4348 DEFVAR_BOOL ("load-convert-to-unibyte", &load_convert_to_unibyte
,
4349 doc
: /* Non-nil means `read' converts strings to unibyte whenever possible.
4350 This is normally bound by `load' and `eval-buffer' to control `read',
4351 and is not meant for users to change. */);
4352 load_convert_to_unibyte
= 0;
4354 DEFVAR_LISP ("source-directory", &Vsource_directory
,
4355 doc
: /* Directory in which Emacs sources were found when Emacs was built.
4356 You cannot count on them to still be there! */);
4358 = Fexpand_file_name (build_string ("../"),
4359 Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH
)));
4361 DEFVAR_LISP ("preloaded-file-list", &Vpreloaded_file_list
,
4362 doc
: /* List of files that were preloaded (when dumping Emacs). */);
4363 Vpreloaded_file_list
= Qnil
;
4365 DEFVAR_LISP ("byte-boolean-vars", &Vbyte_boolean_vars
,
4366 doc
: /* List of all DEFVAR_BOOL variables, used by the byte code optimizer. */);
4367 Vbyte_boolean_vars
= Qnil
;
4369 DEFVAR_BOOL ("load-dangerous-libraries", &load_dangerous_libraries
,
4370 doc
: /* Non-nil means load dangerous compiled Lisp files.
4371 Some versions of XEmacs use different byte codes than Emacs. These
4372 incompatible byte codes can make Emacs crash when it tries to execute
4374 load_dangerous_libraries
= 0;
4376 DEFVAR_BOOL ("force-load-messages", &force_load_messages
,
4377 doc
: /* Non-nil means force printing messages when loading Lisp files.
4378 This overrides the value of the NOMESSAGE argument to `load'. */);
4379 force_load_messages
= 0;
4381 DEFVAR_LISP ("bytecomp-version-regexp", &Vbytecomp_version_regexp
,
4382 doc
: /* Regular expression matching safe to load compiled Lisp files.
4383 When Emacs loads a compiled Lisp file, it reads the first 512 bytes
4384 from the file, and matches them against this regular expression.
4385 When the regular expression matches, the file is considered to be safe
4386 to load. See also `load-dangerous-libraries'. */);
4387 Vbytecomp_version_regexp
4388 = make_pure_c_string ("^;;;.\\(in Emacs version\\|bytecomp version FSF\\)");
4390 DEFVAR_LISP ("eval-buffer-list", &Veval_buffer_list
,
4391 doc
: /* List of buffers being read from by calls to `eval-buffer' and `eval-region'. */);
4392 Veval_buffer_list
= Qnil
;
4394 DEFVAR_LISP ("old-style-backquotes", &Vold_style_backquotes
,
4395 doc
: /* Set to non-nil when `read' encounters an old-style backquote. */);
4396 Vold_style_backquotes
= Qnil
;
4397 Qold_style_backquotes
= intern_c_string ("old-style-backquotes");
4398 staticpro (&Qold_style_backquotes
);
4400 /* Vsource_directory was initialized in init_lread. */
4402 load_descriptor_list
= Qnil
;
4403 staticpro (&load_descriptor_list
);
4405 Qcurrent_load_list
= intern_c_string ("current-load-list");
4406 staticpro (&Qcurrent_load_list
);
4408 Qstandard_input
= intern_c_string ("standard-input");
4409 staticpro (&Qstandard_input
);
4411 Qread_char
= intern_c_string ("read-char");
4412 staticpro (&Qread_char
);
4414 Qget_file_char
= intern_c_string ("get-file-char");
4415 staticpro (&Qget_file_char
);
4417 Qget_emacs_mule_file_char
= intern_c_string ("get-emacs-mule-file-char");
4418 staticpro (&Qget_emacs_mule_file_char
);
4420 Qload_force_doc_strings
= intern_c_string ("load-force-doc-strings");
4421 staticpro (&Qload_force_doc_strings
);
4423 Qbackquote
= intern_c_string ("`");
4424 staticpro (&Qbackquote
);
4425 Qcomma
= intern_c_string (",");
4426 staticpro (&Qcomma
);
4427 Qcomma_at
= intern_c_string (",@");
4428 staticpro (&Qcomma_at
);
4429 Qcomma_dot
= intern_c_string (",.");
4430 staticpro (&Qcomma_dot
);
4432 Qinhibit_file_name_operation
= intern_c_string ("inhibit-file-name-operation");
4433 staticpro (&Qinhibit_file_name_operation
);
4435 Qascii_character
= intern_c_string ("ascii-character");
4436 staticpro (&Qascii_character
);
4438 Qfunction
= intern_c_string ("function");
4439 staticpro (&Qfunction
);
4441 Qload
= intern_c_string ("load");
4444 Qload_file_name
= intern_c_string ("load-file-name");
4445 staticpro (&Qload_file_name
);
4447 Qeval_buffer_list
= intern_c_string ("eval-buffer-list");
4448 staticpro (&Qeval_buffer_list
);
4450 Qfile_truename
= intern_c_string ("file-truename");
4451 staticpro (&Qfile_truename
) ;
4453 Qdo_after_load_evaluation
= intern_c_string ("do-after-load-evaluation");
4454 staticpro (&Qdo_after_load_evaluation
) ;
4456 staticpro (&dump_path
);
4458 staticpro (&read_objects
);
4459 read_objects
= Qnil
;
4460 staticpro (&seen_list
);
4463 Vloads_in_progress
= Qnil
;
4464 staticpro (&Vloads_in_progress
);
4466 Qhash_table
= intern_c_string ("hash-table");
4467 staticpro (&Qhash_table
);
4468 Qdata
= intern_c_string ("data");
4470 Qtest
= intern_c_string ("test");
4472 Qsize
= intern_c_string ("size");
4474 Qweakness
= intern_c_string ("weakness");
4475 staticpro (&Qweakness
);
4476 Qrehash_size
= intern_c_string ("rehash-size");
4477 staticpro (&Qrehash_size
);
4478 Qrehash_threshold
= intern_c_string ("rehash-threshold");
4479 staticpro (&Qrehash_threshold
);
4482 /* arch-tag: a0d02733-0f96-4844-a659-9fd53c4f414d
4483 (do not change this comment) */