annotate src/lread.c @ 16945:d6cd00b2e214

(isnan): Define even if LISP_FLOAT_TYPE is not defined, since fmod might need it. (fmod): Ensure that the magnitude of the result does not exceed that of the divisor, and that the sign of the result does not disagree with that of the dividend. This does not yield a particularly accurate result, but at least it will be in the range promised by fmod.
author Paul Eggert <eggert@twinsun.com>
date Tue, 28 Jan 1997 04:51:45 +0000
parents c46111ba348b
children 71aff157cff2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Lisp parsing and input streams.
7589
b6993af7a905 Only lusers assume that O_RDONLY == 0.
Michael I. Bushnell <mib@gnu.org>
parents: 7307
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1989,
11235
e6bdaaa6ce1b Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 11188
diff changeset
3 1993, 1994, 1995 Free Software Foundation, Inc.
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14130
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14130
diff changeset
20 Boston, MA 02111-1307, USA. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
7898
1d65b2152c4e Put config.h first.
Richard M. Stallman <rms@gnu.org>
parents: 7823
diff changeset
23 #include <config.h>
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <stdio.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include <sys/types.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include <sys/stat.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include <sys/file.h>
8083
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
28 #include <errno.h>
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "lisp.h"
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "buffer.h"
4701
05f6a91c2801 Include <paths.h>, not "paths.h".
Roland McGrath <roland@gnu.org>
parents: 4696
diff changeset
33 #include <paths.h>
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #include "commands.h"
1591
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
35 #include "keyboard.h"
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
36 #include "termhooks.h"
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #ifdef lint
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #include <sys/inode.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 #endif /* lint */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42
14972
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
43 #ifdef MSDOS
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
44 #if __DJGPP__ < 2
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
45 #include <unistd.h> /* to get X_OK */
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
46 #endif
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
47 #include "msdos.h"
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
48 #endif
a6889b33d21c [MSDOS]: If DJGPP version 2, include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents: 14950
diff changeset
49
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 #ifndef X_OK
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 #define X_OK 01
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #ifdef LISP_FLOAT_TYPE
2781
fde05936aebb * lread.c, data.c: If STDC_HEADERS is #defined, include <stdlib.h>
Jim Blandy <jimb@redhat.com>
parents: 2654
diff changeset
55 #ifdef STDC_HEADERS
fde05936aebb * lread.c, data.c: If STDC_HEADERS is #defined, include <stdlib.h>
Jim Blandy <jimb@redhat.com>
parents: 2654
diff changeset
56 #include <stdlib.h>
fde05936aebb * lread.c, data.c: If STDC_HEADERS is #defined, include <stdlib.h>
Jim Blandy <jimb@redhat.com>
parents: 2654
diff changeset
57 #endif
5496
24f0d2908e61 [MSDOS]: Use text mode for all files but ".elc" files.
Richard M. Stallman <rms@gnu.org>
parents: 5243
diff changeset
58
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 #include <math.h>
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 #endif /* LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61
14950
f5abde0d2904 Include locale.h.
Richard M. Stallman <rms@gnu.org>
parents: 14945
diff changeset
62 #ifdef HAVE_SETLOCALE
f5abde0d2904 Include locale.h.
Richard M. Stallman <rms@gnu.org>
parents: 14945
diff changeset
63 #include <locale.h>
f5abde0d2904 Include locale.h.
Richard M. Stallman <rms@gnu.org>
parents: 14945
diff changeset
64 #endif /* HAVE_SETLOCALE */
f5abde0d2904 Include locale.h.
Richard M. Stallman <rms@gnu.org>
parents: 14945
diff changeset
65
8596
ccd3c3ca2aef (O_RDONLY): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8182
diff changeset
66 #ifndef O_RDONLY
ccd3c3ca2aef (O_RDONLY): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8182
diff changeset
67 #define O_RDONLY 0
ccd3c3ca2aef (O_RDONLY): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8182
diff changeset
68 #endif
ccd3c3ca2aef (O_RDONLY): Defined.
Richard M. Stallman <rms@gnu.org>
parents: 8182
diff changeset
69
8083
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
70 extern int errno;
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
71
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
72 Lisp_Object Qread_char, Qget_file_char, Qstandard_input, Qcurrent_load_list;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 Lisp_Object Qvariable_documentation, Vvalues, Vstandard_input, Vafter_load_alist;
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
74 Lisp_Object Qascii_character, Qload, Qload_file_name;
13235
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
75 Lisp_Object Qbackquote, Qcomma, Qcomma_at, Qcomma_dot, Qfunction;
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
76 Lisp_Object Qinhibit_file_name_operation;
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
77
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
78 extern Lisp_Object Qevent_symbol_element_mask;
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
79 extern Lisp_Object Qfile_exists_p;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 /* non-zero if inside `load' */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 int load_in_progress;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83
13601
0a091134e047 (Vsource_directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13455
diff changeset
84 /* Directory in which the sources were found. */
0a091134e047 (Vsource_directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13455
diff changeset
85 Lisp_Object Vsource_directory;
0a091134e047 (Vsource_directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13455
diff changeset
86
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 /* Search path for files to be loaded. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88 Lisp_Object Vload_path;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
90 /* This is the user-visible association list that maps features to
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
91 lists of defs in their load files. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
92 Lisp_Object Vload_history;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
93
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
94 /* This is used to build the load history. */
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
95 Lisp_Object Vcurrent_load_list;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
96
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
97 /* Name of file actually being read by `load'. */
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
98 Lisp_Object Vload_file_name;
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
99
11079
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
100 /* Function to use for reading, in `load' and friends. */
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
101 Lisp_Object Vload_read_function;
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
102
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
103 /* The association list of objects read with the #n=object form.
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
104 Each member of the list has the form (n . object), and is used to
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
105 look up the object for the corresponding #n# construct.
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
106 It must be set to nil before all top-level calls to read0. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
107 Lisp_Object read_objects;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
108
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
109 /* Nonzero means load should forcibly load all dynamic doc strings. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
110 static int load_force_doc_strings;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
111
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
112 /* List of descriptors now open for Fload. */
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
113 static Lisp_Object load_descriptor_list;
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
114
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
115 /* File for get_file_char to read from. Use by load. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 static FILE *instream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 /* When nonzero, read conses in pure space */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 static int read_pure;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
121 /* For use within read-from-string (this reader is non-reentrant!!) */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 static int read_from_string_index;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 static int read_from_string_limit;
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
124
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
125 /* This contains the last string skipped with #@. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
126 static char *saved_doc_string;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
127 /* Length of buffer allocated in saved_doc_string. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
128 static int saved_doc_string_size;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
129 /* Length of actual data in saved_doc_string. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
130 static int saved_doc_string_length;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
131 /* This is the file position that string came from. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
132 static int saved_doc_string_position;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
133
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
134 /* Nonzero means inside a new-style backquote
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
135 with no surrounding parentheses.
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
136 Fread initializes this to zero, so we need not specbind it
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
137 or worry about what happens to it when there is an error. */
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
138 static int new_backquote_flag;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 /* Handle unreading and rereading of characters.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 Write READCHAR to read a character,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 UNREAD(c) to unread c to be read again. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 #define READCHAR readchar (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 #define UNREAD(c) unreadchar (readcharfun, c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 readchar (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 register struct buffer *inbuffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 register int c, mpos;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
155 if (BUFFERP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 inbuffer = XBUFFER (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 if (BUF_PT (inbuffer) >= BUF_ZV (inbuffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 c = *(unsigned char *) BUF_CHAR_ADDRESS (inbuffer, BUF_PT (inbuffer));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 SET_BUF_PT (inbuffer, BUF_PT (inbuffer) + 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 }
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
166 if (MARKERP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 inbuffer = XMARKER (readcharfun)->buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 mpos = marker_position (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 if (mpos > BUF_ZV (inbuffer) - 1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 c = *(unsigned char *) BUF_CHAR_ADDRESS (inbuffer, mpos);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 if (mpos != BUF_GPT (inbuffer))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 XMARKER (readcharfun)->bufpos++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 Fset_marker (readcharfun, make_number (mpos + 1),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 Fmarker_buffer (readcharfun));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 if (EQ (readcharfun, Qget_file_char))
8083
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
183 {
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
184 c = getc (instream);
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
185 #ifdef EINTR
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
186 /* Interrupted reads have been observed while reading over the network */
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
187 while (c == EOF && ferror (instream) && errno == EINTR)
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
188 {
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
189 clearerr (instream);
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
190 c = getc (instream);
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
191 }
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
192 #endif
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
193 return c;
dc62b2daf48e (readchar): Restart interrupted I/O.
Karl Heuer <kwzh@gnu.org>
parents: 7898
diff changeset
194 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
196 if (STRINGP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 /* This used to be return of a conditional expression,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 but that truncated -1 to a char on VMS. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 if (read_from_string_index < read_from_string_limit)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 c = XSTRING (readcharfun)->data[read_from_string_index++];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 c = -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 tem = call0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
210 if (NILP (tem))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 return XINT (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 /* Unread the character C in the way appropriate for the stream READCHARFUN.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 If the stream is a user function, call it with the char as argument. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 static void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 unreadchar (readcharfun, c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 {
6471
4e6b54b64d94 (unreadchar): Don't back up the pointer when unreading EOF.
Karl Heuer <kwzh@gnu.org>
parents: 6470
diff changeset
223 if (c == -1)
4e6b54b64d94 (unreadchar): Don't back up the pointer when unreading EOF.
Karl Heuer <kwzh@gnu.org>
parents: 6470
diff changeset
224 /* Don't back up the pointer if we're unreading the end-of-input mark,
4e6b54b64d94 (unreadchar): Don't back up the pointer when unreading EOF.
Karl Heuer <kwzh@gnu.org>
parents: 6470
diff changeset
225 since readchar didn't advance it when we read it. */
4e6b54b64d94 (unreadchar): Don't back up the pointer when unreading EOF.
Karl Heuer <kwzh@gnu.org>
parents: 6470
diff changeset
226 ;
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
227 else if (BUFFERP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 if (XBUFFER (readcharfun) == current_buffer)
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 16012
diff changeset
230 SET_PT (PT - 1);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 SET_BUF_PT (XBUFFER (readcharfun), BUF_PT (XBUFFER (readcharfun)) - 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 }
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
234 else if (MARKERP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 XMARKER (readcharfun)->bufpos--;
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
236 else if (STRINGP (readcharfun))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 read_from_string_index--;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 else if (EQ (readcharfun, Qget_file_char))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 ungetc (c, instream);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 call1 (readcharfun, make_number (c));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 static Lisp_Object read0 (), read1 (), read_list (), read_vector ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 /* get a character from the tty */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
1519
5d0837ebee9c * lread.c (read_char): Add an extern declaration for this,
Jim Blandy <jimb@redhat.com>
parents: 1092
diff changeset
248 extern Lisp_Object read_char ();
5d0837ebee9c * lread.c (read_char): Add an extern declaration for this,
Jim Blandy <jimb@redhat.com>
parents: 1092
diff changeset
249
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
250 /* Read input events until we get one that's acceptable for our purposes.
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
251
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
252 If NO_SWITCH_FRAME is non-zero, switch-frame events are stashed
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
253 until we get a character we like, and then stuffed into
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
254 unread_switch_frame.
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
255
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
256 If ASCII_REQUIRED is non-zero, we check function key events to see
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
257 if the unmodified version of the symbol has a Qascii_character
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
258 property, and use that character, if present.
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
259
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
260 If ERROR_NONASCII is non-zero, we signal an error if the input we
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
261 get isn't an ASCII character with modifiers. If it's zero but
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
262 ASCII_REQUIRED is non-zero, we just re-read until we get an ASCII
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
263 character. */
14483
7f49c41db1e8 (Fread_char_exclusive): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14300
diff changeset
264
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
265 Lisp_Object
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
266 read_filtered_event (no_switch_frame, ascii_required, error_nonascii)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
267 int no_switch_frame, ascii_required, error_nonascii;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
268 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
269 #ifdef standalone
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
270 return make_number (getchar ());
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
271 #else
6503
7c566d0e4b3d (read_filtered_event, intern): Use assignment instead of initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6471
diff changeset
272 register Lisp_Object val, delayed_switch_frame;
7c566d0e4b3d (read_filtered_event, intern): Use assignment instead of initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6471
diff changeset
273
7c566d0e4b3d (read_filtered_event, intern): Use assignment instead of initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6471
diff changeset
274 delayed_switch_frame = Qnil;
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
275
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
276 /* Read until we get an acceptable event. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
277 retry:
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
278 val = read_char (0, 0, 0, Qnil, 0);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
279
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
280 if (BUFFERP (val))
5888
0d02ee7ee659 (read_filtered_event): Retry read_char after a buffer change.
Karl Heuer <kwzh@gnu.org>
parents: 5687
diff changeset
281 goto retry;
0d02ee7ee659 (read_filtered_event): Retry read_char after a buffer change.
Karl Heuer <kwzh@gnu.org>
parents: 5687
diff changeset
282
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
283 /* switch-frame events are put off until after the next ASCII
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13772
diff changeset
284 character. This is better than signaling an error just because
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
285 the last characters were typed to a separate minibuffer frame,
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
286 for example. Eventually, some code which can deal with
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
287 switch-frame events will read it and process it. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
288 if (no_switch_frame
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
289 && EVENT_HAS_PARAMETERS (val)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
290 && EQ (EVENT_HEAD (val), Qswitch_frame))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
291 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
292 delayed_switch_frame = val;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
293 goto retry;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
294 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
295
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
296 if (ascii_required)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
297 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
298 /* Convert certain symbols to their ASCII equivalents. */
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
299 if (SYMBOLP (val))
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
300 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
301 Lisp_Object tem, tem1, tem2;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
302 tem = Fget (val, Qevent_symbol_element_mask);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
303 if (!NILP (tem))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
304 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
305 tem1 = Fget (Fcar (tem), Qascii_character);
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
306 /* Merge this symbol's modifier bits
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
307 with the ASCII equivalent of its basic code. */
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
308 if (!NILP (tem1))
9313
ed68c3822e4b (read_filtered_event, init_obarray): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9274
diff changeset
309 XSETFASTINT (val, XINT (tem1) | XINT (Fcar (Fcdr (tem))));
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
310 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
311 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
312
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
313 /* If we don't have a character now, deal with it appropriately. */
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
314 if (!INTEGERP (val))
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
315 {
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
316 if (error_nonascii)
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
317 {
7106
06542cc6ddcd (read_filtered_event): Use Vunread_command_events.
Richard M. Stallman <rms@gnu.org>
parents: 7028
diff changeset
318 Vunread_command_events = Fcons (val, Qnil);
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
319 error ("Non-character input-event");
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
320 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
321 else
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
322 goto retry;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
323 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
324 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
325
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
326 if (! NILP (delayed_switch_frame))
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
327 unread_switch_frame = delayed_switch_frame;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
328
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
329 return val;
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
330 #endif
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
331 }
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
332
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 DEFUN ("read-char", Fread_char, Sread_char, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 "Read a character from the command input (keyboard or macro).\n\
851
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
335 It is returned as a number.\n\
9620f7edf04d entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 826
diff changeset
336 If the user generates an event which is not a character (i.e. a mouse\n\
1591
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
337 click or function key event), `read-char' signals an error. As an\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
338 exception, switch-frame events are put off until non-ASCII events can\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
339 be read.\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
340 If you want to read non-character events, or ignore them, call\n\
765cb54fa9af * lread.c: #include "keyboard.h".
Jim Blandy <jimb@redhat.com>
parents: 1519
diff changeset
341 `read-event' or `read-char-exclusive' instead.")
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 {
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
344 return read_filtered_event (1, 1, 1);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 DEFUN ("read-event", Fread_event, Sread_event, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 "Read an event object from the input stream.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 {
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
351 return read_filtered_event (0, 0, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 DEFUN ("read-char-exclusive", Fread_char_exclusive, Sread_char_exclusive, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 "Read a character from the command input (keyboard or macro).\n\
14483
7f49c41db1e8 (Fread_char_exclusive): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14300
diff changeset
356 It is returned as a number. Non-character events are ignored.")
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 {
2654
ba685dcc3750 Arrange for Fy_or_n_p to put off switch-frame events.
Jim Blandy <jimb@redhat.com>
parents: 2545
diff changeset
359 return read_filtered_event (1, 1, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 DEFUN ("get-file-char", Fget_file_char, Sget_file_char, 0, 0, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 "Don't use this yourself.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 register Lisp_Object val;
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
367 XSETINT (val, getc (instream));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 static void readevalloop ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 static Lisp_Object load_unwind ();
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
373 static Lisp_Object load_descriptor_unwind ();
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 DEFUN ("load", Fload, Sload, 1, 4, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 "Execute a file of Lisp code named FILE.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 First try FILE with `.elc' appended, then try with `.el',\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 then try FILE unmodified.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 This function searches the directories in `load-path'.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 If optional second arg NOERROR is non-nil,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 report no error if FILE doesn't exist.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 Print messages at start and end of loading unless\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 optional third arg NOMESSAGE is non-nil.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 If optional fourth arg NOSUFFIX is non-nil, don't try adding\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 suffixes `.elc' or `.el' to the specified name FILE.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 Return t if file exists.")
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
387 (file, noerror, nomessage, nosuffix)
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
388 Lisp_Object file, noerror, nomessage, nosuffix;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 register FILE *stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 register int fd = -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 register Lisp_Object lispstream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 int count = specpdl_ptr - specpdl;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 Lisp_Object temp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395 struct gcpro gcpro1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 Lisp_Object found;
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
397 /* 1 means we printed the ".el is newer" message. */
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
398 int newer = 0;
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
399 /* 1 means we are loading a compiled file. */
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
400 int compiled = 0;
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
401 Lisp_Object handler;
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
402 #ifdef DOS_NT
5496
24f0d2908e61 [MSDOS]: Use text mode for all files but ".elc" files.
Richard M. Stallman <rms@gnu.org>
parents: 5243
diff changeset
403 char *dosmode = "rt";
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
404 #endif /* DOS_NT */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
406 CHECK_STRING (file, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
408 /* If file name is magic, call the handler. */
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
409 handler = Ffind_file_name_handler (file, Qload);
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
410 if (!NILP (handler))
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
411 return call5 (handler, Qload, file, noerror, nomessage, nosuffix);
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
412
10014
d149c4dc84f3 (Fload): Call Fsubstitute_in_file_name after trying handler.
Richard M. Stallman <rms@gnu.org>
parents: 9938
diff changeset
413 /* Do this after the handler to avoid
d149c4dc84f3 (Fload): Call Fsubstitute_in_file_name after trying handler.
Richard M. Stallman <rms@gnu.org>
parents: 9938
diff changeset
414 the need to gcpro noerror, nomessage and nosuffix.
d149c4dc84f3 (Fload): Call Fsubstitute_in_file_name after trying handler.
Richard M. Stallman <rms@gnu.org>
parents: 9938
diff changeset
415 (Below here, we care only whether they are nil or not.) */
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
416 file = Fsubstitute_in_file_name (file);
10014
d149c4dc84f3 (Fload): Call Fsubstitute_in_file_name after trying handler.
Richard M. Stallman <rms@gnu.org>
parents: 9938
diff changeset
417
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 /* Avoid weird lossage with null string as arg,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 since it would try to load a directory as a Lisp file */
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
420 if (XSTRING (file)->size > 0)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 {
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
422 GCPRO1 (file);
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
423 fd = openp (Vload_path, file, !NILP (nosuffix) ? "" : ".elc:.el:",
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 &found, 0);
6392
58e075552627 (openp, Fload): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6072
diff changeset
425 UNGCPRO;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 if (fd < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
430 if (NILP (noerror))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 Fsignal (Qfile_error, Fcons (build_string ("Cannot open load file"),
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
433 Fcons (file, Qnil)));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
438 /* If FD is 0, that means openp found a remote file. */
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
439 if (fd == 0)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
440 {
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
441 handler = Ffind_file_name_handler (found, Qload);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
442 return call5 (handler, Qload, found, noerror, nomessage, Qt);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
443 }
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
444
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 if (!bcmp (&(XSTRING (found)->data[XSTRING (found)->size - 4]),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 ".elc", 4))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 struct stat s1, s2;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 int result;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
451 compiled = 1;
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
452
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
453 #ifdef DOS_NT
5496
24f0d2908e61 [MSDOS]: Use text mode for all files but ".elc" files.
Richard M. Stallman <rms@gnu.org>
parents: 5243
diff changeset
454 dosmode = "rb";
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
455 #endif /* DOS_NT */
6072
8af8f6b469e1 (Fload): Cast the args to stat.
Richard M. Stallman <rms@gnu.org>
parents: 5888
diff changeset
456 stat ((char *)XSTRING (found)->data, &s1);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 XSTRING (found)->data[XSTRING (found)->size - 1] = 0;
6072
8af8f6b469e1 (Fload): Cast the args to stat.
Richard M. Stallman <rms@gnu.org>
parents: 5888
diff changeset
458 result = stat ((char *)XSTRING (found)->data, &s2);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 if (result >= 0 && (unsigned) s1.st_mtime < (unsigned) s2.st_mtime)
1758
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
460 {
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
461 /* Make the progress messages mention that source is newer. */
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
462 newer = 1;
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
463
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
464 /* If we won't print another message, mention this anyway. */
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
465 if (! NILP (nomessage))
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
466 message ("Source file `%s' newer than byte-compiled file",
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
467 XSTRING (found)->data);
1758
12c730b89ac8 (Fload): If warn that .elc file is older,
Richard M. Stallman <rms@gnu.org>
parents: 1591
diff changeset
468 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 XSTRING (found)->data[XSTRING (found)->size - 1] = 'c';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
472 #ifdef DOS_NT
5496
24f0d2908e61 [MSDOS]: Use text mode for all files but ".elc" files.
Richard M. Stallman <rms@gnu.org>
parents: 5243
diff changeset
473 close (fd);
24f0d2908e61 [MSDOS]: Use text mode for all files but ".elc" files.
Richard M. Stallman <rms@gnu.org>
parents: 5243
diff changeset
474 stream = fopen ((char *) XSTRING (found)->data, dosmode);
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
475 #else /* not DOS_NT */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 stream = fdopen (fd, "r");
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
477 #endif /* not DOS_NT */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 if (stream == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 close (fd);
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
481 error ("Failure to create stdio stream for %s", XSTRING (file)->data);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
484 if (NILP (nomessage))
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
485 {
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
486 if (newer)
16165
a95e975275d8 (Fload): Move ... to ends of messages.
Richard M. Stallman <rms@gnu.org>
parents: 16141
diff changeset
487 message ("Loading %s (compiled; note, source file is newer)...",
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
488 XSTRING (file)->data);
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
489 else if (compiled)
16165
a95e975275d8 (Fload): Move ... to ends of messages.
Richard M. Stallman <rms@gnu.org>
parents: 16141
diff changeset
490 message ("Loading %s (compiled)...", XSTRING (file)->data);
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
491 else
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
492 message ("Loading %s...", XSTRING (file)->data);
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
493 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
495 GCPRO1 (file);
9361
c11cc966dc6a (Fload, load_unwind): Store stream pointer as a cons of two integers,
Karl Heuer <kwzh@gnu.org>
parents: 9358
diff changeset
496 lispstream = Fcons (Qnil, Qnil);
c11cc966dc6a (Fload, load_unwind): Store stream pointer as a cons of two integers,
Karl Heuer <kwzh@gnu.org>
parents: 9358
diff changeset
497 XSETFASTINT (XCONS (lispstream)->car, (EMACS_UINT)stream >> 16);
c11cc966dc6a (Fload, load_unwind): Store stream pointer as a cons of two integers,
Karl Heuer <kwzh@gnu.org>
parents: 9358
diff changeset
498 XSETFASTINT (XCONS (lispstream)->cdr, (EMACS_UINT)stream & 0xffff);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 record_unwind_protect (load_unwind, lispstream);
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
500 record_unwind_protect (load_descriptor_unwind, load_descriptor_list);
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
501 specbind (Qload_file_name, found);
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
502 specbind (Qinhibit_file_name_operation, Qnil);
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
503 load_descriptor_list
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
504 = Fcons (make_number (fileno (stream)), load_descriptor_list);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 load_in_progress++;
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
506 readevalloop (Qget_file_char, stream, file, Feval, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507 unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 /* Run any load-hooks for this file. */
13036
cd0e7903d0a9 (Fload): Rename arg STR to FILE.
Richard M. Stallman <rms@gnu.org>
parents: 12780
diff changeset
510 temp = Fassoc (file, Vafter_load_alist);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
511 if (!NILP (temp))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 Fprogn (Fcdr (temp));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 UNGCPRO;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
515 if (saved_doc_string)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
516 free (saved_doc_string);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
517 saved_doc_string = 0;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
518 saved_doc_string_size = 0;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
519
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
520 if (!noninteractive && NILP (nomessage))
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
521 {
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
522 if (newer)
16165
a95e975275d8 (Fload): Move ... to ends of messages.
Richard M. Stallman <rms@gnu.org>
parents: 16141
diff changeset
523 message ("Loading %s (compiled; note, source file is newer)...done",
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
524 XSTRING (file)->data);
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
525 else if (compiled)
16165
a95e975275d8 (Fload): Move ... to ends of messages.
Richard M. Stallman <rms@gnu.org>
parents: 16141
diff changeset
526 message ("Loading %s (compiled)...done", XSTRING (file)->data);
16012
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
527 else
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
528 message ("Loading %s...done", XSTRING (file)->data);
3b5ffd35defe (Fload): Add "source is newer" info to the "loading" and "done" messages.
Richard M. Stallman <rms@gnu.org>
parents: 15283
diff changeset
529 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 return Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 load_unwind (stream) /* used as unwind-protect function in load */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 Lisp_Object stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 {
9552
c1d477aec340 (load_unwind): Cast argument of fclose.
Richard M. Stallman <rms@gnu.org>
parents: 9466
diff changeset
537 fclose ((FILE *) (XFASTINT (XCONS (stream)->car) << 16
c1d477aec340 (load_unwind): Cast argument of fclose.
Richard M. Stallman <rms@gnu.org>
parents: 9466
diff changeset
538 | XFASTINT (XCONS (stream)->cdr)));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 if (--load_in_progress < 0) load_in_progress = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
543 static Lisp_Object
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
544 load_descriptor_unwind (oldlist)
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
545 Lisp_Object oldlist;
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
546 {
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
547 load_descriptor_list = oldlist;
9361
c11cc966dc6a (Fload, load_unwind): Store stream pointer as a cons of two integers,
Karl Heuer <kwzh@gnu.org>
parents: 9358
diff changeset
548 return Qnil;
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
549 }
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
550
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
551 /* Close all descriptors in use for Floads.
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
552 This is used when starting a subprocess. */
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
553
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
554 void
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
555 close_load_descs ()
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
556 {
15091
e05dd165b889 (close_load_descs) [WINDOWS_NT]: Don't actually do anything.
Richard M. Stallman <rms@gnu.org>
parents: 14972
diff changeset
557 #ifndef WINDOWSNT
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
558 Lisp_Object tail;
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
559 for (tail = load_descriptor_list; !NILP (tail); tail = XCONS (tail)->cdr)
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
560 close (XFASTINT (XCONS (tail)->car));
15091
e05dd165b889 (close_load_descs) [WINDOWS_NT]: Don't actually do anything.
Richard M. Stallman <rms@gnu.org>
parents: 14972
diff changeset
561 #endif
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
562 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 complete_filename_p (pathname)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 Lisp_Object pathname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 register unsigned char *s = XSTRING (pathname)->data;
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
569 return (IS_DIRECTORY_SEP (s[0])
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
570 || (XSTRING (pathname)->size > 2
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
571 && IS_DEVICE_SEP (s[1]) && IS_DIRECTORY_SEP (s[2]))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 #ifdef ALTOS
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 || *s == '@'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 #ifdef VMS
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 || index (s, ':')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 #endif /* VMS */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 );
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 /* Search for a file whose name is STR, looking in directories
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 in the Lisp list PATH, and trying suffixes from SUFFIX.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 SUFFIX is a string containing possible suffixes separated by colons.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 On success, returns a file descriptor. On failure, returns -1.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 EXEC_ONLY nonzero means don't open the files,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 just look for one that is executable. In this case,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 returns 1 on success.
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 If STOREPTR is nonzero, it points to a slot where the name of
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 the file actually found should be stored as a Lisp string.
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
592 nil is stored there on failure.
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
593
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
594 If the file we find is remote, return 0
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
595 but store the found remote file name in *STOREPTR.
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
596 We do not check for remote files if EXEC_ONLY is nonzero. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 openp (path, str, suffix, storeptr, exec_only)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 Lisp_Object path, str;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 char *suffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 Lisp_Object *storeptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 int exec_only;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 register int fd;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 int fn_size = 100;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 char buf[100];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 register char *fn = buf;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 int absolute = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 int want_size;
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
611 Lisp_Object filename;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 struct stat st;
6392
58e075552627 (openp, Fload): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6072
diff changeset
613 struct gcpro gcpro1;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614
6392
58e075552627 (openp, Fload): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6072
diff changeset
615 GCPRO1 (str);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 if (storeptr)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 *storeptr = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 if (complete_filename_p (str))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 absolute = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
622 for (; !NILP (path); path = Fcdr (path))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 char *nsuffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 filename = Fexpand_file_name (str, Fcar (path));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 if (!complete_filename_p (filename))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 /* If there are non-absolute elts in PATH (eg ".") */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 /* Of course, this could conceivably lose if luser sets
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 default-directory to be something non-absolute... */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 filename = Fexpand_file_name (filename, current_buffer->directory);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 if (!complete_filename_p (filename))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 /* Give up on this path element! */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 /* Calculate maximum size of any filename made from
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 this path element/specified file name and any possible suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 want_size = strlen (suffix) + XSTRING (filename)->size + 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 if (fn_size < want_size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 fn = (char *) alloca (fn_size = 100 + want_size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 nsuffix = suffix;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 /* Loop over suffixes. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 char *esuffix = (char *) index (nsuffix, ':');
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 int lsuffix = esuffix ? esuffix - nsuffix : strlen (nsuffix);
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
651 Lisp_Object handler;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652
16383
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
653 /* Concatenate path element/specified name with the suffix.
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
654 If the directory starts with /:, remove that. */
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
655 if (XSTRING (filename)->size > 2
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
656 && XSTRING (filename)->data[0] == '/'
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
657 && XSTRING (filename)->data[1] == ':')
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
658 {
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
659 strncpy (fn, XSTRING (filename)->data + 2,
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
660 XSTRING (filename)->size - 2);
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
661 fn[XSTRING (filename)->size - 2] = 0;
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
662 }
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
663 else
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
664 {
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
665 strncpy (fn, XSTRING (filename)->data, XSTRING (filename)->size);
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
666 fn[XSTRING (filename)->size] = 0;
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
667 }
497b37552adb (openp): Omit /: from start of file name.
Richard M. Stallman <rms@gnu.org>
parents: 16342
diff changeset
668
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 if (lsuffix != 0) /* Bug happens on CCI if lsuffix is 0. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 strncat (fn, nsuffix, lsuffix);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
672 /* Check that the file exists and is not a directory. */
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
673 if (absolute)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
674 handler = Qnil;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
675 else
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
676 handler = Ffind_file_name_handler (filename, Qfile_exists_p);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
677 if (! NILP (handler) && ! exec_only)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 {
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
679 Lisp_Object string;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
680 int exists;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
682 string = build_string (fn);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
683 exists = ! NILP (exec_only ? Ffile_executable_p (string)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
684 : Ffile_readable_p (string));
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
685 if (exists
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
686 && ! NILP (Ffile_directory_p (build_string (fn))))
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
687 exists = 0;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
688
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
689 if (exists)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 /* We succeeded; return this descriptor and filename. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 if (storeptr)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 *storeptr = build_string (fn);
8906
93f3d6f5753c (openp): Fix Lisp_Object vs. int problems.
Karl Heuer <kwzh@gnu.org>
parents: 8828
diff changeset
694 UNGCPRO;
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
695 return 0;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
696 }
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
697 }
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
698 else
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
699 {
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
700 int exists = (stat (fn, &st) >= 0
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
701 && (st.st_mode & S_IFMT) != S_IFDIR);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
702 if (exists)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
703 {
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
704 /* Check that we can access or open it. */
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
705 if (exec_only)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
706 fd = (access (fn, X_OK) == 0) ? 1 : -1;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
707 else
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
708 fd = open (fn, O_RDONLY, 0);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
709
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
710 if (fd >= 0)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
711 {
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
712 /* We succeeded; return this descriptor and filename. */
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
713 if (storeptr)
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
714 *storeptr = build_string (fn);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
715 UNGCPRO;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
716 return fd;
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
717 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 /* Advance to next suffix. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 if (esuffix == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 nsuffix += lsuffix + 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 }
6392
58e075552627 (openp, Fload): GCPRO some things.
Karl Heuer <kwzh@gnu.org>
parents: 6072
diff changeset
726 if (absolute)
8906
93f3d6f5753c (openp): Fix Lisp_Object vs. int problems.
Karl Heuer <kwzh@gnu.org>
parents: 8828
diff changeset
727 break;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729
8906
93f3d6f5753c (openp): Fix Lisp_Object vs. int problems.
Karl Heuer <kwzh@gnu.org>
parents: 8828
diff changeset
730 UNGCPRO;
93f3d6f5753c (openp): Fix Lisp_Object vs. int problems.
Karl Heuer <kwzh@gnu.org>
parents: 8828
diff changeset
731 return -1;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
735 /* Merge the list we've accumulated of globals from the current input source
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
736 into the load_history variable. The details depend on whether
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
737 the source has an associated file name or not. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
738
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
739 static void
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
740 build_load_history (stream, source)
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
741 FILE *stream;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
742 Lisp_Object source;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
743 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
744 register Lisp_Object tail, prev, newelt;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
745 register Lisp_Object tem, tem2;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
746 register int foundit, loading;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
747
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
748 /* Don't bother recording anything for preloaded files. */
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
749 if (!NILP (Vpurify_flag))
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
750 return;
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
751
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
752 loading = stream || !NARROWED;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
753
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
754 tail = Vload_history;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
755 prev = Qnil;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
756 foundit = 0;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
757 while (!NILP (tail))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
758 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
759 tem = Fcar (tail);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
760
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
761 /* Find the feature's previous assoc list... */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
762 if (!NILP (Fequal (source, Fcar (tem))))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
763 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
764 foundit = 1;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
765
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
766 /* If we're loading, remove it. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
767 if (loading)
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
768 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
769 if (NILP (prev))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
770 Vload_history = Fcdr (tail);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
771 else
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
772 Fsetcdr (prev, Fcdr (tail));
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
773 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
774
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
775 /* Otherwise, cons on new symbols that are not already members. */
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
776 else
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
777 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
778 tem2 = Vcurrent_load_list;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
779
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
780 while (CONSP (tem2))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
781 {
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
782 newelt = Fcar (tem2);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
783
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
784 if (NILP (Fmemq (newelt, tem)))
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
785 Fsetcar (tail, Fcons (Fcar (tem),
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
786 Fcons (newelt, Fcdr (tem))));
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
787
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
788 tem2 = Fcdr (tem2);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
789 QUIT;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
790 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
791 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
792 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
793 else
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
794 prev = tail;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
795 tail = Fcdr (tail);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
796 QUIT;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
797 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
798
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
799 /* If we're loading, cons the new assoc onto the front of load-history,
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
800 the most-recently-loaded position. Also do this if we didn't find
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
801 an existing member for the current source. */
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
802 if (loading || !foundit)
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
803 Vload_history = Fcons (Fnreverse (Vcurrent_load_list),
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
804 Vload_history);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
805 }
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
806
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 unreadpure () /* Used as unwind-protect function in readevalloop */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 read_pure = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 static void
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
815 readevalloop (readcharfun, stream, sourcename, evalfun, printflag)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 Lisp_Object readcharfun;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
817 FILE *stream;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
818 Lisp_Object sourcename;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 Lisp_Object (*evalfun) ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 int printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 int count = specpdl_ptr - specpdl;
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
825 struct gcpro gcpro1;
5185
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
826 struct buffer *b = 0;
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
827
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
828 if (BUFFERP (readcharfun))
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
829 b = XBUFFER (readcharfun);
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
830 else if (MARKERP (readcharfun))
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
831 b = XMARKER (readcharfun)->buffer;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 specbind (Qstandard_input, readcharfun);
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
834 specbind (Qcurrent_load_list, Qnil);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
836 GCPRO1 (sourcename);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
837
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
838 LOADHIST_ATTACH (sourcename);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
839
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 {
5185
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
842 if (b != 0 && NILP (b->name))
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
843 error ("Reading from killed buffer");
52629d087993 (readevalloop): Get error if buffer being eval'd is killed.
Richard M. Stallman <rms@gnu.org>
parents: 5117
diff changeset
844
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 instream = stream;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 if (c == ';')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 while ((c = READCHAR) != '\n' && c != -1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 continue;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 if (c < 0) break;
10163
70b04b218216 (readevalloop): Ignore ^M here.
Richard M. Stallman <rms@gnu.org>
parents: 10014
diff changeset
853
70b04b218216 (readevalloop): Ignore ^M here.
Richard M. Stallman <rms@gnu.org>
parents: 10014
diff changeset
854 /* Ignore whitespace here, so we can detect eof. */
70b04b218216 (readevalloop): Ignore ^M here.
Richard M. Stallman <rms@gnu.org>
parents: 10014
diff changeset
855 if (c == ' ' || c == '\t' || c == '\n' || c == '\f' || c == '\r')
70b04b218216 (readevalloop): Ignore ^M here.
Richard M. Stallman <rms@gnu.org>
parents: 10014
diff changeset
856 continue;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
858 if (!NILP (Vpurify_flag) && c == '(')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 {
8182
94f524e0d5cd (readevalloop): Correctly unbind the unwind protect.
Richard M. Stallman <rms@gnu.org>
parents: 8083
diff changeset
860 int count1 = specpdl_ptr - specpdl;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 record_unwind_protect (unreadpure, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 val = read_list (-1, readcharfun);
8182
94f524e0d5cd (readevalloop): Correctly unbind the unwind protect.
Richard M. Stallman <rms@gnu.org>
parents: 8083
diff changeset
863 unbind_to (count1, Qnil);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 UNREAD (c);
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
868 read_objects = Qnil;
11079
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
869 if (NILP (Vload_read_function))
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
870 val = read0 (readcharfun);
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
871 else
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
872 val = call1 (Vload_read_function, readcharfun);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 val = (*evalfun) (val);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 if (printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 Vvalues = Fcons (val, Vvalues);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 if (EQ (Vstandard_output, Qt))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 Fprin1 (val, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 Fprint (val, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
886 build_load_history (stream, sourcename);
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
887 UNGCPRO;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
888
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 692
diff changeset
894 DEFUN ("eval-buffer", Feval_buffer, Seval_buffer, 0, 2, "",
675
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
895 "Execute the current buffer as Lisp code.\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
896 Programs can pass two arguments, BUFFER and PRINTFLAG.\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
897 BUFFER is the buffer to evaluate (nil means use current buffer).\n\
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
898 PRINTFLAG controls printing of output:\n\
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
899 nil means discard it; anything else is stream for print.\n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
900 \n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
901 If there is no error, point does not move. If there is an error,\n\
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
902 point remains at the end of the last character read from the buffer.")
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
903 (buffer, printflag)
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
904 Lisp_Object buffer, printflag;
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
905 {
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
906 int count = specpdl_ptr - specpdl;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
907 Lisp_Object tem, buf;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
908
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
909 if (NILP (buffer))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
910 buf = Fcurrent_buffer ();
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
911 else
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
912 buf = Fget_buffer (buffer);
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
913 if (NILP (buf))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
914 error ("No such buffer.");
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
915
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 672
diff changeset
916 if (NILP (printflag))
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
917 tem = Qsymbolp;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
918 else
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
919 tem = printflag;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
920 specbind (Qstandard_output, tem);
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
921 record_unwind_protect (save_excursion_restore, save_excursion_save ());
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
922 BUF_SET_PT (XBUFFER (buf), BUF_BEGV (XBUFFER (buf)));
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
923 readevalloop (buf, 0, XBUFFER (buf)->filename, Feval, !NILP (printflag));
1924
21bd3a2189d3 * keyboard.c (recursive_edit_1, command_loop_1): Pass the proper
Jim Blandy <jimb@redhat.com>
parents: 1887
diff changeset
924 unbind_to (count, Qnil);
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
925
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
926 return Qnil;
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
927 }
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
928
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
929 #if 0
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 DEFUN ("eval-current-buffer", Feval_current_buffer, Seval_current_buffer, 0, 1, "",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 "Execute the current buffer as Lisp code.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 Programs can pass argument PRINTFLAG which controls printing of output:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 nil means discard it; anything else is stream for print.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 \n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 If there is no error, point does not move. If there is an error,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 point remains at the end of the last character read from the buffer.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 (printflag)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938 Lisp_Object printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 int count = specpdl_ptr - specpdl;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
941 Lisp_Object tem, cbuf;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
942
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
943 cbuf = Fcurrent_buffer ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
945 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 tem = Qsymbolp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 tem = printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 specbind (Qstandard_output, tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 record_unwind_protect (save_excursion_restore, save_excursion_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 SET_PT (BEGV);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
952 readevalloop (cbuf, 0, XBUFFER (cbuf)->filename, Feval, !NILP (printflag));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 return unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 }
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
955 #endif
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 DEFUN ("eval-region", Feval_region, Seval_region, 2, 3, "r",
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 "Execute the region as Lisp code.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959 When called from programs, expects two arguments,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 giving starting and ending indices in the current buffer\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 of the text to be executed.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 Programs can pass third argument PRINTFLAG which controls output:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 nil means discard it; anything else is stream for printing it.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 \n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 If there is no error, point does not move. If there is an error,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 point remains at the end of the last character read from the buffer.")
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
967 (start, end, printflag)
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
968 Lisp_Object start, end, printflag;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 int count = specpdl_ptr - specpdl;
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
971 Lisp_Object tem, cbuf;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
972
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
973 cbuf = Fcurrent_buffer ();
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
975 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 tem = Qsymbolp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 tem = printflag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 specbind (Qstandard_output, tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
981 if (NILP (printflag))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 record_unwind_protect (save_excursion_restore, save_excursion_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 record_unwind_protect (save_restriction_restore, save_restriction_save ());
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
985 /* This both uses start and checks its type. */
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
986 Fgoto_char (start);
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
987 Fnarrow_to_region (make_number (BEGV), end);
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
988 readevalloop (cbuf, 0, XBUFFER (cbuf)->filename, Feval, !NILP (printflag));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 return unbind_to (count, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 #endif /* standalone */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
994
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 DEFUN ("read", Fread, Sread, 0, 1, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 "Read one Lisp expression as text from STREAM, return as Lisp object.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 If STREAM is nil, use the value of `standard-input' (which see).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 STREAM or the value of `standard-input' may be:\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 a buffer (read from point and advance it)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 a marker (read from where it points and advance it)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 a function (call it with no arguments for each character,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 call it with a char as argument to push a char back)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 a string (takes text from string, starting at the beginning)\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 t (read text line using minibuffer and use it).")
12545
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1005 (stream)
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1006 Lisp_Object stream;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 extern Lisp_Object Fread_minibuffer ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009
12545
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1010 if (NILP (stream))
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1011 stream = Vstandard_input;
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1012 if (EQ (stream, Qt))
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1013 stream = Qread_char;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1015 new_backquote_flag = 0;
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1016 read_objects = Qnil;
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1017
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 #ifndef standalone
12545
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1019 if (EQ (stream, Qread_char))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 return Fread_minibuffer (build_string ("Lisp expression: "), Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 #endif
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022
12545
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1023 if (STRINGP (stream))
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1024 return Fcar (Fread_from_string (stream, Qnil, Qnil));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025
12545
ccc20d466150 (Fread): Rename arg READCHARFUN to STREAM.
Karl Heuer <kwzh@gnu.org>
parents: 11955
diff changeset
1026 return read0 (stream);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 DEFUN ("read-from-string", Fread_from_string, Sread_from_string, 1, 3, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 "Read one Lisp expression which is represented as text by STRING.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 Returns a cons: (OBJECT-READ . FINAL-STRING-INDEX).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 START and END optionally delimit a substring of STRING from which to read;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 they default to 0 and (length STRING) respectively.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 (string, start, end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 Lisp_Object string, start, end;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 int startval, endval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 CHECK_STRING (string,0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1042 if (NILP (end))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 endval = XSTRING (string)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 { CHECK_NUMBER (end,2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 endval = XINT (end);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 if (endval < 0 || endval > XSTRING (string)->size)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 args_out_of_range (string, end);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1051 if (NILP (start))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 startval = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 { CHECK_NUMBER (start,1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 startval = XINT (start);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 if (startval < 0 || startval > endval)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057 args_out_of_range (string, start);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 read_from_string_index = startval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 read_from_string_limit = endval;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1063 new_backquote_flag = 0;
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1064 read_objects = Qnil;
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1065
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 tem = read0 (string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 return Fcons (tem, make_number (read_from_string_index));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1070 /* Use this for recursive reads, in contexts where internal tokens
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1071 are not allowed. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 read0 (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 char c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1079 val = read1 (readcharfun, &c, 0);
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1080 if (c)
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1081 Fsignal (Qinvalid_read_syntax, Fcons (make_string (&c, 1), Qnil));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 static int read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 static char *read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 read_escape (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 register int c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 switch (c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 {
15091
e05dd165b889 (close_load_descs) [WINDOWS_NT]: Don't actually do anything.
Richard M. Stallman <rms@gnu.org>
parents: 14972
diff changeset
1096 case -1:
e05dd165b889 (close_load_descs) [WINDOWS_NT]: Don't actually do anything.
Richard M. Stallman <rms@gnu.org>
parents: 14972
diff changeset
1097 error ("End of file");
e05dd165b889 (close_load_descs) [WINDOWS_NT]: Don't actually do anything.
Richard M. Stallman <rms@gnu.org>
parents: 14972
diff changeset
1098
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 case 'a':
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1100 return '\007';
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 case 'b':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 return '\b';
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1103 case 'd':
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1104 return 0177;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 case 'e':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 return 033;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 case 'f':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 return '\f';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 case 'n':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 return '\n';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 case 'r':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 return '\r';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 case 't':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 return '\t';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 case 'v':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 return '\v';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 case '\n':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 return -1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 case 'M':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 if (c != '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 error ("Invalid escape character syntax");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 c = read_escape (readcharfun);
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1127 return c | meta_modifier;
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1128
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1129 case 'S':
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1130 c = READCHAR;
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1131 if (c != '-')
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1132 error ("Invalid escape character syntax");
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1133 c = READCHAR;
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1134 if (c == '\\')
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1135 c = read_escape (readcharfun);
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1136 return c | shift_modifier;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1137
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1138 case 'H':
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1139 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1140 if (c != '-')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1141 error ("Invalid escape character syntax");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1142 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1143 if (c == '\\')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1144 c = read_escape (readcharfun);
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1145 return c | hyper_modifier;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1146
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1147 case 'A':
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1148 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1149 if (c != '-')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1150 error ("Invalid escape character syntax");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1151 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1152 if (c == '\\')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1153 c = read_escape (readcharfun);
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1154 return c | alt_modifier;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1155
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1156 case 's':
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1157 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1158 if (c != '-')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1159 error ("Invalid escape character syntax");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1160 c = READCHAR;
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1161 if (c == '\\')
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1162 c = read_escape (readcharfun);
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1163 return c | super_modifier;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 case 'C':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 if (c != '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 error ("Invalid escape character syntax");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 case '^':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 c = read_escape (readcharfun);
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1173 if ((c & 0177) == '?')
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1174 return 0177 | c;
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1175 /* ASCII control chars are made from letters (both cases),
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1176 as well as the non-letters within 0100...0137. */
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1177 else if ((c & 0137) >= 0101 && (c & 0137) <= 0132)
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1178 return (c & (037 | ~0177));
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1179 else if ((c & 0177) >= 0100 && (c & 0177) <= 0137)
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1180 return (c & (037 | ~0177));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 else
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
1182 return c | ctrl_modifier;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 case '0':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 case '1':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 case '2':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 case '3':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 case '4':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 case '5':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 case '6':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 case '7':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 /* An octal escape, as in ANSI C. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 register int i = c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 register int count = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 while (++count < 3)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 if ((c = READCHAR) >= '0' && c <= '7')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 i *= 8;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 i += c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 return i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 case 'x':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 /* A hex escape, as in ANSI C. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 int i = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 if (c >= '0' && c <= '9')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 i *= 16;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 i += c - '0';
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 else if ((c >= 'a' && c <= 'f')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 || (c >= 'A' && c <= 'F'))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 i *= 16;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 if (c >= 'a' && c <= 'f')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 i += c - 'a' + 10;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 i += c - 'A' + 10;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 return i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 default:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 return c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1247 /* If the next token is ')' or ']' or '.', we store that character
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1248 in *PCH and the return value is not interesting. Else, we store
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1249 zero in *PCH and we read and return one lisp object.
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1250
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1251 FIRST_IN_LIST is nonzero if this is the first element of a list. */
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1252
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 static Lisp_Object
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1254 read1 (readcharfun, pch, first_in_list)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 register Lisp_Object readcharfun;
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1256 char *pch;
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1257 int first_in_list;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 register int c;
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1260 int uninterned_symbol = 0;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1261
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1262 *pch = 0;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 retry:
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 switch (c)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 case '(':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 return read_list (0, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 case '[':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 return read_vector (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 case ')':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 case ']':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 {
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1280 *pch = c;
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1281 return Qnil;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 case '#':
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1285 c = READCHAR;
13146
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1286 if (c == '^')
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1287 {
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1288 c = READCHAR;
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1289 if (c == '[')
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1290 {
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1291 Lisp_Object tmp;
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1292 tmp = read_vector (readcharfun);
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1293 if (XVECTOR (tmp)->size < CHAR_TABLE_STANDARD_SLOTS
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1294 || XVECTOR (tmp)->size > CHAR_TABLE_STANDARD_SLOTS + 10)
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1295 error ("Invalid size char-table");
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1296 XSETCHAR_TABLE (tmp, XCHAR_TABLE (tmp));
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1297 return tmp;
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1298 }
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1299 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#^", 2), Qnil));
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1300 }
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1301 if (c == '&')
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1302 {
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1303 Lisp_Object length;
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1304 length = read1 (readcharfun, pch, first_in_list);
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1305 c = READCHAR;
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1306 if (c == '"')
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1307 {
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1308 Lisp_Object tmp, val;
16925
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1309 int size_in_chars = ((XFASTINT (length) + BITS_PER_CHAR - 1)
13363
941c37982f37 (BITS_PER_SHORT, BITS_PER_INT, BITS_PER_LONG):
Karl Heuer <kwzh@gnu.org>
parents: 13235
diff changeset
1310 / BITS_PER_CHAR);
13146
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1311
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1312 UNREAD (c);
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1313 tmp = read1 (readcharfun, pch, first_in_list);
16925
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1314 if (size_in_chars != XSTRING (tmp)->size
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1315 /* We used to print 1 char too many
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1316 when the number of bits was a multiple of 8.
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1317 Accept such input in case it came from an old version. */
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1318 && ! (XFASTINT (length)
2b35e4ccbb32 (read1): Round size of bool-vector properly.
Richard M. Stallman <rms@gnu.org>
parents: 16856
diff changeset
1319 == (XSTRING (tmp)->size - 1) * BITS_PER_CHAR))
13146
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1320 Fsignal (Qinvalid_read_syntax,
16856
f838ff9a4d39 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16855
diff changeset
1321 Fcons (make_string ("#&...", 5), Qnil));
13146
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1322
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1323 val = Fmake_bool_vector (length, Qnil);
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1324 bcopy (XSTRING (tmp)->data, XBOOL_VECTOR (val)->data,
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1325 size_in_chars);
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1326 return val;
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1327 }
16856
f838ff9a4d39 Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 16855
diff changeset
1328 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#&...", 5),
16855
d10bb3a79eff (read1): Fix error messages.
Richard M. Stallman <rms@gnu.org>
parents: 16487
diff changeset
1329 Qnil));
13146
6182d95acd14 (read1): Handle chartables and boolvectors.
Richard M. Stallman <rms@gnu.org>
parents: 13036
diff changeset
1330 }
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1331 if (c == '[')
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1332 {
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1333 /* Accept compiled functions at read-time so that we don't have to
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1334 build them using function calls. */
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1335 Lisp_Object tmp;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1336 tmp = read_vector (readcharfun);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1337 return Fmake_byte_code (XVECTOR (tmp)->size,
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1338 XVECTOR (tmp)->contents);
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1339 }
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1340 #ifdef USE_TEXT_PROPERTIES
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1341 if (c == '(')
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1342 {
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1343 Lisp_Object tmp;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1344 struct gcpro gcpro1;
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1345 char ch;
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1346
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1347 /* Read the string itself. */
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1348 tmp = read1 (readcharfun, &ch, 0);
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1349 if (ch != 0 || !STRINGP (tmp))
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1350 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1351 GCPRO1 (tmp);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1352 /* Read the intervals and their properties. */
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1353 while (1)
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1354 {
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1355 Lisp_Object beg, end, plist;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1356
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1357 beg = read1 (readcharfun, &ch, 0);
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1358 if (ch == ')')
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1359 break;
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1360 if (ch == 0)
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1361 end = read1 (readcharfun, &ch, 0);
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1362 if (ch == 0)
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1363 plist = read1 (readcharfun, &ch, 0);
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1364 if (ch)
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1365 Fsignal (Qinvalid_read_syntax,
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1366 Fcons (build_string ("invalid string property list"),
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1367 Qnil));
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1368 Fset_text_properties (beg, end, plist, tmp);
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1369 }
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1370 UNGCPRO;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1371 return tmp;
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1372 }
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1373 #endif
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1374 /* #@NUMBER is used to skip NUMBER following characters.
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1375 That's used in .elc files to skip over doc strings
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1376 and function definitions. */
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1377 if (c == '@')
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1378 {
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1379 int i, nskip = 0;
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1380
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1381 /* Read a decimal integer. */
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1382 while ((c = READCHAR) >= 0
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1383 && c >= '0' && c <= '9')
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1384 {
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1385 nskip *= 10;
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1386 nskip += c - '0';
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1387 }
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1388 if (c >= 0)
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1389 UNREAD (c);
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1390
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1391 #ifndef DOS_NT /* I don't know if filepos works right on MSDOS and Windoze. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1392 if (load_force_doc_strings && EQ (readcharfun, Qget_file_char))
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1393 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1394 /* If we are supposed to force doc strings into core right now,
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1395 record the last string that we skipped,
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1396 and record where in the file it comes from. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1397 if (saved_doc_string_size == 0)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1398 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1399 saved_doc_string_size = nskip + 100;
14130
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
1400 saved_doc_string = (char *) xmalloc (saved_doc_string_size);
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1401 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1402 if (nskip > saved_doc_string_size)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1403 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1404 saved_doc_string_size = nskip + 100;
14130
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
1405 saved_doc_string = (char *) xrealloc (saved_doc_string,
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
1406 saved_doc_string_size);
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1407 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1408
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1409 saved_doc_string_position = ftell (instream);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1410
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1411 /* Copy that many characters into saved_doc_string. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1412 for (i = 0; i < nskip && c >= 0; i++)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1413 saved_doc_string[i] = c = READCHAR;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1414
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1415 saved_doc_string_length = i;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1416 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1417 else
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1418 #endif /* not DOS_NT */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1419 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1420 /* Skip that many characters. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1421 for (i = 0; i < nskip && c >= 0; i++)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1422 c = READCHAR;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1423 }
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1424 goto retry;
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1425 }
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1426 if (c == '$')
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1427 return Vload_file_name;
13235
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
1428 if (c == '\'')
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
1429 return Fcons (Qfunction, Fcons (read0 (readcharfun), Qnil));
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1430 /* #:foo is the uninterned symbol named foo. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1431 if (c == ':')
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1432 {
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1433 uninterned_symbol = 1;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1434 c = READCHAR;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1435 goto default_label;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1436 }
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1437 /* Reader forms that can reuse previously read objects. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1438 if (c >= '0' && c <= '9')
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1439 {
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1440 int n = 0;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1441 Lisp_Object tem;
13235
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
1442
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1443 /* Read a non-negative integer. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1444 while (c >= '0' && c <= '9')
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1445 {
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1446 n *= 10;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1447 n += c - '0';
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1448 c = READCHAR;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1449 }
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1450 /* #n=object returns object, but associates it with n for #n#. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1451 if (c == '=')
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1452 {
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1453 tem = read0 (readcharfun);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1454 read_objects = Fcons (Fcons (make_number (n), tem), read_objects);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1455 return tem;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1456 }
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1457 /* #n# returns a previously read object. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1458 if (c == '#')
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1459 {
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1460 tem = Fassq (make_number (n), read_objects);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1461 if (CONSP (tem))
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1462 return XCDR (tem);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1463 /* Fall through to error message. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1464 }
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1465 /* Fall through to error message. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1466 }
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1467
373
7c6f74ef31a3 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 364
diff changeset
1468 UNREAD (c);
1966
bcc34323a475 (read1--strings with properties case):
Richard M. Stallman <rms@gnu.org>
parents: 1924
diff changeset
1469 Fsignal (Qinvalid_read_syntax, Fcons (make_string ("#", 1), Qnil));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 case ';':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 while ((c = READCHAR) >= 0 && c != '\n');
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 goto retry;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475 case '\'':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 return Fcons (Qquote, Fcons (read0 (readcharfun), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1480 case '`':
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1481 if (first_in_list)
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1482 goto default_label;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1483 else
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1484 {
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1485 Lisp_Object value;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1486
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1487 new_backquote_flag = 1;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1488 value = read0 (readcharfun);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1489 new_backquote_flag = 0;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1490
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1491 return Fcons (Qbackquote, Fcons (value, Qnil));
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1492 }
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1493
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1494 case ',':
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1495 if (new_backquote_flag)
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1496 {
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1497 Lisp_Object comma_type = Qnil;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1498 Lisp_Object value;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1499 int ch = READCHAR;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1500
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1501 if (ch == '@')
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1502 comma_type = Qcomma_at;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1503 else if (ch == '.')
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1504 comma_type = Qcomma_dot;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1505 else
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1506 {
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1507 if (ch >= 0) UNREAD (ch);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1508 comma_type = Qcomma;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1509 }
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1510
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1511 new_backquote_flag = 0;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1512 value = read0 (readcharfun);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1513 new_backquote_flag = 1;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1514 return Fcons (comma_type, Fcons (value, Qnil));
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1515 }
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1516 else
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1517 goto default_label;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1518
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 case '?':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 register Lisp_Object val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 if (c == '\\')
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
1527 XSETINT (val, read_escape (readcharfun));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 else
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
1529 XSETINT (val, c);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 return val;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 case '\"':
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 register char *p = read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 register char *end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 register int c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 int cancel = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 while ((c = READCHAR) >= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 && c != '\"')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 if (c == '\\')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 c = read_escape (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 /* c is -1 if \ newline has just been seen */
2018
7c970ef8949d (read_escape): Handle M-, C- and S- for new convention.
Richard M. Stallman <rms@gnu.org>
parents: 1966
diff changeset
1554 if (c == -1)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556 if (p == read_buffer)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 cancel = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 else
6470
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1560 {
7144
cf47c0c11bda (read1): Allow `\C- ' and `\C-?'.
Richard M. Stallman <rms@gnu.org>
parents: 7106
diff changeset
1561 /* Allow `\C- ' and `\C-?'. */
cf47c0c11bda (read1): Allow `\C- ' and `\C-?'.
Richard M. Stallman <rms@gnu.org>
parents: 7106
diff changeset
1562 if (c == (CHAR_CTL | ' '))
cf47c0c11bda (read1): Allow `\C- ' and `\C-?'.
Richard M. Stallman <rms@gnu.org>
parents: 7106
diff changeset
1563 c = 0;
cf47c0c11bda (read1): Allow `\C- ' and `\C-?'.
Richard M. Stallman <rms@gnu.org>
parents: 7106
diff changeset
1564 else if (c == (CHAR_CTL | '?'))
cf47c0c11bda (read1): Allow `\C- ' and `\C-?'.
Richard M. Stallman <rms@gnu.org>
parents: 7106
diff changeset
1565 c = 127;
cf47c0c11bda (read1): Allow `\C- ' and `\C-?'.
Richard M. Stallman <rms@gnu.org>
parents: 7106
diff changeset
1566
6470
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1567 if (c & CHAR_META)
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1568 /* Move the meta bit to the right place for a string. */
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1569 c = (c & ~CHAR_META) | 0x80;
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1570 if (c & ~0xff)
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1571 error ("Invalid modifier in string");
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1572 *p++ = c;
651b49e52c9e (read1): Check for invalid modifier bits in a string.
Karl Heuer <kwzh@gnu.org>
parents: 6392
diff changeset
1573 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 if (c < 0) return Fsignal (Qend_of_file, Qnil);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 /* If purifying, and string starts with \ newline,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 return zero instead. This is for doc strings
604
63a8e7b3c547 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1579 that we are really going to find in etc/DOC.nn.nn */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1580 if (!NILP (Vpurify_flag) && NILP (Vdoc_file_name) && cancel)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 return make_number (0);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 if (read_pure)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 return make_pure_string (read_buffer, p - read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 return make_string (read_buffer, p - read_buffer);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1589 case '.':
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1590 {
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1591 #ifdef LISP_FLOAT_TYPE
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1592 /* If a period is followed by a number, then we should read it
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1593 as a floating point number. Otherwise, it denotes a dotted
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1594 pair. */
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1595 int next_char = READCHAR;
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1596 UNREAD (next_char);
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1597
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1598 if (! (next_char >= '0' && next_char <= '9'))
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1599 #endif
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1600 {
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1601 *pch = c;
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1602 return Qnil;
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1603 }
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1604
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1605 /* Otherwise, we fall through! Note that the atom-reading loop
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1606 below will now loop at least once, assuring that we will not
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1607 try to UNREAD two characters in a row. */
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1608 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 default:
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1610 default_label:
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 if (c <= 040) goto retry;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 register char *p = read_buffer;
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1614 int quoted = 0;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 register char *end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 while (c > 040 &&
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 !(c == '\"' || c == '\'' || c == ';' || c == '?'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 || c == '(' || c == ')'
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1622 #ifndef LISP_FLOAT_TYPE
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1623 /* If we have floating-point support, then we need
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1624 to allow <digits><dot><digits>. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 || c =='.'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 #endif /* not LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 || c == '[' || c == ']' || c == '#'
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 ))
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 register char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635 end = read_buffer + read_buffer_size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637 if (c == '\\')
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1638 {
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1639 c = READCHAR;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1640 quoted = 1;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1641 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 *p++ = c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 c = READCHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 if (p == end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 char *new = (char *) xrealloc (read_buffer, read_buffer_size *= 2);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649 p += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 read_buffer += new - read_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651 /* end = read_buffer + read_buffer_size; */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1653 *p = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654 if (c >= 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 UNREAD (c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1658 if (!quoted && !uninterned_symbol)
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1659 {
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1660 register char *p1;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1661 register Lisp_Object val;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1662 p1 = read_buffer;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1663 if (*p1 == '+' || *p1 == '-') p1++;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1664 /* Is it an integer? */
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1665 if (p1 != p)
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1666 {
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1667 while (p1 != p && (c = *p1) >= '0' && c <= '9') p1++;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1668 #ifdef LISP_FLOAT_TYPE
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1669 /* Integers can have trailing decimal points. */
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1670 if (p1 > read_buffer && p1 < p && *p1 == '.') p1++;
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1671 #endif
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1672 if (p1 == p)
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1673 /* It is an integer. */
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1674 {
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1675 #ifdef LISP_FLOAT_TYPE
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1676 if (p1[-1] == '.')
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1677 p1[-1] = '\0';
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1758
diff changeset
1678 #endif
11699
eb4b842ee557 (read1): Handle long EMACS_INT in atol.
Richard M. Stallman <rms@gnu.org>
parents: 11683
diff changeset
1679 if (sizeof (int) == sizeof (EMACS_INT))
eb4b842ee557 (read1): Handle long EMACS_INT in atol.
Richard M. Stallman <rms@gnu.org>
parents: 11683
diff changeset
1680 XSETINT (val, atoi (read_buffer));
eb4b842ee557 (read1): Handle long EMACS_INT in atol.
Richard M. Stallman <rms@gnu.org>
parents: 11683
diff changeset
1681 else if (sizeof (long) == sizeof (EMACS_INT))
eb4b842ee557 (read1): Handle long EMACS_INT in atol.
Richard M. Stallman <rms@gnu.org>
parents: 11683
diff changeset
1682 XSETINT (val, atol (read_buffer));
eb4b842ee557 (read1): Handle long EMACS_INT in atol.
Richard M. Stallman <rms@gnu.org>
parents: 11683
diff changeset
1683 else
eb4b842ee557 (read1): Handle long EMACS_INT in atol.
Richard M. Stallman <rms@gnu.org>
parents: 11683
diff changeset
1684 abort ();
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1685 return val;
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1686 }
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1687 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 #ifdef LISP_FLOAT_TYPE
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1689 if (isfloat_string (read_buffer))
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1690 return make_float (atof (read_buffer));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691 #endif
5017
9c277d938ccd (read1): If token has a \, don't treat it as a number.
Richard M. Stallman <rms@gnu.org>
parents: 4701
diff changeset
1692 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1694 if (uninterned_symbol)
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1695 return make_symbol (read_buffer);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1696 else
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1697 return intern (read_buffer);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 #ifdef LISP_FLOAT_TYPE
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 #define LEAD_INT 1
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 #define DOT_CHAR 2
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 #define TRAIL_INT 4
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 #define E_CHAR 8
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 #define EXP_INT 16
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 isfloat_string (cp)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 register char *cp;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 register state;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1715
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 state = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 if (*cp == '+' || *cp == '-')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1720 if (*cp >= '0' && *cp <= '9')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 state |= LEAD_INT;
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1723 while (*cp >= '0' && *cp <= '9')
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1724 cp++;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 if (*cp == '.')
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 state |= DOT_CHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 }
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1731 if (*cp >= '0' && *cp <= '9')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 state |= TRAIL_INT;
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1734 while (*cp >= '0' && *cp <= '9')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 }
16342
b91af71f45f1 (isfloat_string): Accept E like e.
Richard M. Stallman <rms@gnu.org>
parents: 16228
diff changeset
1737 if (*cp == 'e' || *cp == 'E')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 state |= E_CHAR;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 cp++;
11735
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
1741 if (*cp == '+' || *cp == '-')
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
1742 cp++;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1745 if (*cp >= '0' && *cp <= '9')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 state |= EXP_INT;
9871
e91d69642eab Don't include ctype.h.
Richard M. Stallman <rms@gnu.org>
parents: 9790
diff changeset
1748 while (*cp >= '0' && *cp <= '9')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749 cp++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 }
11172
e1ca77e22c12 (isfloat_string): Permit trailing space.
Richard M. Stallman <rms@gnu.org>
parents: 11079
diff changeset
1751 return (((*cp == 0) || (*cp == ' ') || (*cp == '\t') || (*cp == '\n') || (*cp == '\r') || (*cp == '\f'))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 && (state == (LEAD_INT|DOT_CHAR|TRAIL_INT)
826
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1753 || state == (DOT_CHAR|TRAIL_INT)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 || state == (LEAD_INT|E_CHAR|EXP_INT)
826
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1755 || state == (LEAD_INT|DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)
e9b9a1cff2c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 796
diff changeset
1756 || state == (DOT_CHAR|TRAIL_INT|E_CHAR|EXP_INT)));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 #endif /* LISP_FLOAT_TYPE */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 read_vector (readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 register int i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 register int size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 register Lisp_Object *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 register Lisp_Object tem, vector;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 register struct Lisp_Cons *otem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 Lisp_Object len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 tem = read_list (1, readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 len = Flength (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773 vector = (read_pure ? make_pure_vector (XINT (len)) : Fmake_vector (len, Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 size = XVECTOR (vector)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 ptr = XVECTOR (vector)->contents;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 for (i = 0; i < size; i++)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 ptr[i] = read_pure ? Fpurecopy (Fcar (tem)) : Fcar (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 otem = XCONS (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 tem = Fcdr (tem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 free_cons (otem);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 return vector;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 /* flag = 1 means check for ] to terminate rather than ) and .
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 flag = -1 means check for starting with defun
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 and make structure pure. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 static Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 read_list (flag, readcharfun)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 int flag;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 register Lisp_Object readcharfun;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 /* -1 means check next element for defun,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798 0 means don't check,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 1 means already checked and found defun. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 int defunflag = flag < 0 ? -1 : 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 Lisp_Object val, tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 register Lisp_Object elt, tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 struct gcpro gcpro1, gcpro2;
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1804 /* 0 is the normal case.
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1805 1 means this list is a doc reference; replace it with the number 0.
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1806 2 means this list is a doc reference; replace it with the doc string. */
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1807 int doc_reference = 0;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1809 /* Initialize this to 1 if we are reading a list. */
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1810 int first_in_list = flag <= 0;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1811
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 val = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 tail = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 {
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1817 char ch;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 GCPRO2 (val, tail);
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1819 elt = read1 (readcharfun, &ch, first_in_list);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 UNGCPRO;
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1821
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1822 first_in_list = 0;
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1823
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1824 /* While building, if the list starts with #$, treat it specially. */
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1825 if (EQ (elt, Vload_file_name)
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1826 && !NILP (Vpurify_flag))
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1827 {
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1828 if (NILP (Vdoc_file_name))
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1829 /* We have not yet called Snarf-documentation, so assume
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1830 this file is described in the DOC-MM.NN file
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1831 and Snarf-documentation will fill in the right value later.
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1832 For now, replace the whole list with 0. */
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1833 doc_reference = 1;
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1834 else
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1835 /* We have already called Snarf-documentation, so make a relative
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1836 file name for this file, so it can be found properly
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1837 in the installed Lisp directory.
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1838 We don't use Fexpand_file_name because that would make
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1839 the directory absolute now. */
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1840 elt = concat2 (build_string ("../lisp/"),
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1841 Ffile_name_nondirectory (elt));
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1842 }
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1843 else if (EQ (elt, Vload_file_name)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1844 && load_force_doc_strings)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1845 doc_reference = 2;
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
1846
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1847 if (ch)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 if (flag > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 {
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1851 if (ch == ']')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852 return val;
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1853 Fsignal (Qinvalid_read_syntax,
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1854 Fcons (make_string (") or . in a vector", 18), Qnil));
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 }
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1856 if (ch == ')')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 return val;
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1858 if (ch == '.')
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 GCPRO2 (val, tail);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1861 if (!NILP (tail))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 XCONS (tail)->cdr = read0 (readcharfun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 val = read0 (readcharfun);
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
1865 read1 (readcharfun, &ch, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 UNGCPRO;
9358
361c6409e7c1 (read1): New argument for returning out-of-band data, obviating the need for
Karl Heuer <kwzh@gnu.org>
parents: 9313
diff changeset
1867 if (ch == ')')
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1868 {
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1869 if (doc_reference == 1)
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1870 return make_number (0);
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1871 if (doc_reference == 2)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1872 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1873 /* Get a doc string from the file we are loading.
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1874 If it's in saved_doc_string, get it from there. */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1875 int pos = XINT (XCONS (val)->cdr);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1876 if (pos >= saved_doc_string_position
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1877 && pos < (saved_doc_string_position
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1878 + saved_doc_string_length))
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1879 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1880 int start = pos - saved_doc_string_position;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1881 int from, to;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1882
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1883 /* Process quoting with ^A,
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1884 and find the end of the string,
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1885 which is marked with ^_ (037). */
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1886 for (from = start, to = start;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1887 saved_doc_string[from] != 037;)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1888 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1889 int c = saved_doc_string[from++];
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1890 if (c == 1)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1891 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1892 c = saved_doc_string[from++];
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1893 if (c == 1)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1894 saved_doc_string[to++] = c;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1895 else if (c == '0')
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1896 saved_doc_string[to++] = 0;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1897 else if (c == '_')
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1898 saved_doc_string[to++] = 037;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1899 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1900 else
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1901 saved_doc_string[to++] = c;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1902 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1903
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1904 return make_string (saved_doc_string + start,
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1905 to - start);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1906 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1907 else
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1908 return read_doc_string (val);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1909 }
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
1910
12639
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1911 return val;
1410ce7c4fab (read_list): When a file loaded from site-init.el uses #$,
Richard M. Stallman <rms@gnu.org>
parents: 12545
diff changeset
1912 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1913 return Fsignal (Qinvalid_read_syntax, Fcons (make_string (". in wrong context", 18), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 return Fsignal (Qinvalid_read_syntax, Fcons (make_string ("] in a list", 11), Qnil));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1917 tem = (read_pure && flag <= 0
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 ? pure_cons (elt, Qnil)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 : Fcons (elt, Qnil));
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1920 if (!NILP (tail))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 XCONS (tail)->cdr = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923 val = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1924 tail = tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925 if (defunflag < 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 defunflag = EQ (elt, Qdefun);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927 else if (defunflag > 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1928 read_pure = 1;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1929 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1930 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932 Lisp_Object Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 Lisp_Object initial_obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1935 /* oblookup stores the bucket number here, for the sake of Funintern. */
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1936
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1937 int oblookup_last_bucket_number;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1938
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1939 static int hash_string ();
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1940 Lisp_Object oblookup ();
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1941
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1942 /* Get an error if OBARRAY is not an obarray.
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1943 If it is one, return it. */
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1944
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1946 check_obarray (obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948 {
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
1949 while (!VECTORP (obarray) || XVECTOR (obarray)->size == 0)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 /* If Vobarray is now invalid, force it to be valid. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 if (EQ (Vobarray, obarray)) Vobarray = initial_obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1953
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954 obarray = wrong_type_argument (Qvectorp, obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956 return obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1959 /* Intern the C string STR: return a symbol with that name,
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1960 interned in the current obarray. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 Lisp_Object
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 intern (str)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 char *str;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 int len = strlen (str);
6503
7c566d0e4b3d (read_filtered_event, intern): Use assignment instead of initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6471
diff changeset
1968 Lisp_Object obarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969
6503
7c566d0e4b3d (read_filtered_event, intern): Use assignment instead of initialization.
Karl Heuer <kwzh@gnu.org>
parents: 6471
diff changeset
1970 obarray = Vobarray;
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
1971 if (!VECTORP (obarray) || XVECTOR (obarray)->size == 0)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 tem = oblookup (obarray, str, len);
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
1974 if (SYMBOLP (tem))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975 return tem;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
1976 return Fintern ((!NILP (Vpurify_flag)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 ? make_pure_string (str, len)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978 : make_string (str, len)),
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 }
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1981
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1982 /* Create an uninterned symbol with name STR. */
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1983
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1984 Lisp_Object
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1985 make_symbol (str)
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1986 char *str;
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1987 {
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1988 int len = strlen (str);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1989
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1990 return Fmake_symbol ((!NILP (Vpurify_flag)
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1991 ? make_pure_string (str, len)
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1992 : make_string (str, len)));
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
1993 }
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
1994
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1995 DEFUN ("intern", Fintern, Sintern, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996 "Return the canonical symbol whose name is STRING.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997 If there is none, one is created by this function and returned.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 A second optional argument specifies the obarray to use;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 it defaults to the value of `obarray'.")
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2000 (string, obarray)
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2001 Lisp_Object string, obarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 register Lisp_Object tem, sym, *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
2005 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2008 CHECK_STRING (string, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2010 tem = oblookup (obarray, XSTRING (string)->data, XSTRING (string)->size);
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
2011 if (!INTEGERP (tem))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
2014 if (!NILP (Vpurify_flag))
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2015 string = Fpurecopy (string);
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2016 sym = Fmake_symbol (string);
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
2017 XSYMBOL (sym)->obarray = obarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019 ptr = &XVECTOR (obarray)->contents[XINT (tem)];
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
2020 if (SYMBOLP (*ptr))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021 XSYMBOL (sym)->next = XSYMBOL (*ptr);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2022 else
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023 XSYMBOL (sym)->next = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 *ptr = sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 return sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 DEFUN ("intern-soft", Fintern_soft, Sintern_soft, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 "Return the canonical symbol whose name is STRING, or nil if none exists.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 A second optional argument specifies the obarray to use;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 it defaults to the value of `obarray'.")
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2032 (string, obarray)
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2033 Lisp_Object string, obarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 register Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
2037 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2040 CHECK_STRING (string, 0);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041
14092
279f5f3528a8 (Feval_buffer, Feval_region, Fintern, Fintern_soft): Harmonize arguments
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
2042 tem = oblookup (obarray, XSTRING (string)->data, XSTRING (string)->size);
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
2043 if (!INTEGERP (tem))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 }
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2047
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2048 DEFUN ("unintern", Funintern, Sunintern, 1, 2, 0,
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2049 "Delete the symbol named NAME, if any, from OBARRAY.\n\
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2050 The value is t if a symbol was found and deleted, nil otherwise.\n\
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2051 NAME may be a string or a symbol. If it is a symbol, that symbol\n\
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2052 is deleted, if it belongs to OBARRAY--no other symbol is deleted.\n\
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2053 OBARRAY defaults to the value of the variable `obarray'.")
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2054 (name, obarray)
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2055 Lisp_Object name, obarray;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2056 {
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2057 register Lisp_Object string, tem;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2058 int hash;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2059
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2060 if (NILP (obarray)) obarray = Vobarray;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2061 obarray = check_obarray (obarray);
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2062
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2063 if (SYMBOLP (name))
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2064 XSETSTRING (string, XSYMBOL (name)->name);
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2065 else
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2066 {
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2067 CHECK_STRING (name, 0);
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2068 string = name;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2069 }
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2070
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2071 tem = oblookup (obarray, XSTRING (string)->data, XSTRING (string)->size);
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2072 if (INTEGERP (tem))
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2073 return Qnil;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2074 /* If arg was a symbol, don't delete anything but that symbol itself. */
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2075 if (SYMBOLP (name) && !EQ (name, tem))
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2076 return Qnil;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2077
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2078 hash = oblookup_last_bucket_number;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2079
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2080 if (EQ (XVECTOR (obarray)->contents[hash], tem))
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2081 {
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2082 if (XSYMBOL (tem)->next)
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2083 XSETSYMBOL (XVECTOR (obarray)->contents[hash], XSYMBOL (tem)->next);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2084 else
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2085 XSETINT (XVECTOR (obarray)->contents[hash], 0);
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2086 }
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2087 else
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2088 {
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2089 Lisp_Object tail, following;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2090
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2091 for (tail = XVECTOR (obarray)->contents[hash];
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2092 XSYMBOL (tail)->next;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2093 tail = following)
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2094 {
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2095 XSETSYMBOL (following, XSYMBOL (tail)->next);
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2096 if (EQ (following, tem))
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2097 {
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2098 XSYMBOL (tail)->next = XSYMBOL (following)->next;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2099 break;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2100 }
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2101 }
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2102 }
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2103
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2104 return Qt;
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2105 }
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2106
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2107 /* Return the symbol in OBARRAY whose names matches the string
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2108 of SIZE characters at PTR. If there is no such symbol in OBARRAY,
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2109 return nil.
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2110
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2111 Also store the bucket number in oblookup_last_bucket_number. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2112
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113 Lisp_Object
11868
129b45ef421b (oblookup): Delete argument hashp.
Karl Heuer <kwzh@gnu.org>
parents: 11735
diff changeset
2114 oblookup (obarray, ptr, size)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116 register char *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 register int size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 {
8828
2ff6fed642b1 (Fload): Use EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents: 8596
diff changeset
2119 int hash;
2ff6fed642b1 (Fload): Use EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents: 8596
diff changeset
2120 int obsize;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2121 register Lisp_Object tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122 Lisp_Object bucket, tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
2124 if (!VECTORP (obarray)
5243
13cce14b5a0c Line breaking change.
Richard M. Stallman <rms@gnu.org>
parents: 5185
diff changeset
2125 || (obsize = XVECTOR (obarray)->size) == 0)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2128 obsize = XVECTOR (obarray)->size;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2129 }
13455
4f5a9ce67782 (oblookup): Clear ARRAY_MARK_FLAG in obsize.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
2130 /* This is sometimes needed in the middle of GC. */
4f5a9ce67782 (oblookup): Clear ARRAY_MARK_FLAG in obsize.
Richard M. Stallman <rms@gnu.org>
parents: 13363
diff changeset
2131 obsize &= ~ARRAY_MARK_FLAG;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 /* Combining next two lines breaks VMS C 2.3. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133 hash = hash_string (ptr, size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134 hash %= obsize;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 bucket = XVECTOR (obarray)->contents[hash];
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2136 oblookup_last_bucket_number = hash;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 if (XFASTINT (bucket) == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 ;
9149
fe6b30db719d (readchar, readchar, unreadchar, read_filtered_event, Fread, read0, read1,
Karl Heuer <kwzh@gnu.org>
parents: 8906
diff changeset
2139 else if (!SYMBOLP (bucket))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2140 error ("Bad data in guts of obarray"); /* Like CADR error message */
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2141 else
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2142 for (tail = bucket; ; XSETSYMBOL (tail, XSYMBOL (tail)->next))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 {
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2144 if (XSYMBOL (tail)->name->size == size
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2145 && !bcmp (XSYMBOL (tail)->name->data, ptr, size))
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 return tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 else if (XSYMBOL (tail)->next == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148 break;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2149 }
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
2150 XSETINT (tem, hash);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 return tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2152 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 static int
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 hash_string (ptr, len)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 unsigned char *ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2157 int len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2158 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159 register unsigned char *p = ptr;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2160 register unsigned char *end = p + len;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2161 register unsigned char c;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2162 register int hash = 0;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164 while (p != end)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2165 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2166 c = *p++;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2167 if (c >= 0140) c -= 40;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 hash = ((hash<<3) + (hash>>28) + c);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 return hash & 07777777777;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 }
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2172
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 map_obarray (obarray, fn, arg)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 Lisp_Object obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 int (*fn) ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 Lisp_Object arg;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 register int i;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180 register Lisp_Object tail;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 CHECK_VECTOR (obarray, 1);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 for (i = XVECTOR (obarray)->size - 1; i >= 0; i--)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184 tail = XVECTOR (obarray)->contents[i];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 if (XFASTINT (tail) != 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 while (1)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188 (*fn) (tail, arg);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189 if (XSYMBOL (tail)->next == 0)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 break;
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
2191 XSETSYMBOL (tail, XSYMBOL (tail)->next);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196 mapatoms_1 (sym, function)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2197 Lisp_Object sym, function;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2199 call1 (function, sym);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2200 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202 DEFUN ("mapatoms", Fmapatoms, Smapatoms, 1, 2, 0,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203 "Call FUNCTION on every symbol in OBARRAY.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2204 OBARRAY defaults to the value of `obarray'.")
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 (function, obarray)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2206 Lisp_Object function, obarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2207 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208 Lisp_Object tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 463
diff changeset
2210 if (NILP (obarray)) obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211 obarray = check_obarray (obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 map_obarray (obarray, mapatoms_1, function);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 return Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216
5117
951396781a0e (OBARRAY_SIZE): Increase from 509.
Richard M. Stallman <rms@gnu.org>
parents: 5017
diff changeset
2217 #define OBARRAY_SIZE 1511
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 init_obarray ()
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2222 Lisp_Object oblength;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2223 int hash;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 Lisp_Object *tem;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225
9313
ed68c3822e4b (read_filtered_event, init_obarray): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents: 9274
diff changeset
2226 XSETFASTINT (oblength, OBARRAY_SIZE);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2227
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2228 Qnil = Fmake_symbol (make_pure_string ("nil", 3));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2229 Vobarray = Fmake_vector (oblength, make_number (0));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230 initial_obarray = Vobarray;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2231 staticpro (&initial_obarray);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2232 /* Intern nil in the obarray */
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
2233 XSYMBOL (Qnil)->obarray = Vobarray;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2234 /* These locals are to kludge around a pyramid compiler bug. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2235 hash = hash_string ("nil", 3);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2236 /* Separate statement here to avoid VAXC bug. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2237 hash %= OBARRAY_SIZE;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2238 tem = &XVECTOR (Vobarray)->contents[hash];
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2239 *tem = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2240
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 Qunbound = Fmake_symbol (make_pure_string ("unbound", 7));
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 XSYMBOL (Qnil)->function = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 XSYMBOL (Qunbound)->value = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2244 XSYMBOL (Qunbound)->function = Qunbound;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2245
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 Qt = intern ("t");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2247 XSYMBOL (Qnil)->value = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2248 XSYMBOL (Qnil)->plist = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 XSYMBOL (Qt)->value = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 /* Qt is correct even if CANNOT_DUMP. loadup.el will set to nil at end. */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2252 Vpurify_flag = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 Qvariable_documentation = intern ("variable-documentation");
16228
fa7a56c543df (init_obarray): staticpro Qvariable_documentation.
Erik Naggum <erik@naggum.no>
parents: 16165
diff changeset
2255 staticpro (&Qvariable_documentation);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257 read_buffer_size = 100;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 read_buffer = (char *) malloc (read_buffer_size);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262 defsubr (sname)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 struct Lisp_Subr *sname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2265 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266 sym = intern (sname->symbol_name);
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
2267 XSETSUBR (XSYMBOL (sym)->function, sname);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2268 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2269
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2270 #ifdef NOTDEF /* use fset in subr.el now */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2271 void
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 defalias (sname, string)
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 struct Lisp_Subr *sname;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 char *string;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 Lisp_Object sym;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 sym = intern (string);
9274
5c66d8b65a7c (Fget_file_char, Fload, read1, oblookup, map_obarray, defsubr, defalias,
Karl Heuer <kwzh@gnu.org>
parents: 9149
diff changeset
2278 XSETSUBR (XSYMBOL (sym)->function, sname);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2280 #endif /* NOTDEF */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 /* Define an "integer variable"; a symbol whose value is forwarded
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2283 to a C variable of type int. Sample call: */
10606
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2284 /* DEFVAR_INT ("indent-tabs-mode", &indent_tabs_mode, "Documentation"); */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 void
7765
688637ba31c5 (defvar_bool, defvar_int, defvar_lisp, defvar_lisp_nopro):
Richard M. Stallman <rms@gnu.org>
parents: 7675
diff changeset
2286 defvar_int (namestring, address)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 int *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 {
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2290 Lisp_Object sym, val;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2291 sym = intern (namestring);
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2292 val = allocate_misc ();
11242
36e8e27c8625 (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_kboard)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2293 XMISCTYPE (val) = Lisp_Misc_Intfwd;
9913
c921977bb0ce (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_per_buffer): Use accessor
Karl Heuer <kwzh@gnu.org>
parents: 9871
diff changeset
2294 XINTFWD (val)->intvar = address;
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2295 XSYMBOL (sym)->value = val;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2297
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298 /* Similar but define a variable whose value is T if address contains 1,
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2299 NIL if address contains 0 */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2300 void
7765
688637ba31c5 (defvar_bool, defvar_int, defvar_lisp, defvar_lisp_nopro):
Richard M. Stallman <rms@gnu.org>
parents: 7675
diff changeset
2301 defvar_bool (namestring, address)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2302 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2303 int *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2304 {
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2305 Lisp_Object sym, val;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2306 sym = intern (namestring);
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2307 val = allocate_misc ();
11242
36e8e27c8625 (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_kboard)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2308 XMISCTYPE (val) = Lisp_Misc_Boolfwd;
9913
c921977bb0ce (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_per_buffer): Use accessor
Karl Heuer <kwzh@gnu.org>
parents: 9871
diff changeset
2309 XBOOLFWD (val)->boolvar = address;
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2310 XSYMBOL (sym)->value = val;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2311 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2312
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2313 /* Similar but define a variable whose value is the Lisp Object stored
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2314 at address. Two versions: with and without gc-marking of the C
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2315 variable. The nopro version is used when that variable will be
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2316 gc-marked for some other reason, since marking the same slot twice
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2317 can cause trouble with strings. */
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2318 void
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2319 defvar_lisp_nopro (namestring, address)
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2320 char *namestring;
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2321 Lisp_Object *address;
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2322 {
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2323 Lisp_Object sym, val;
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2324 sym = intern (namestring);
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2325 val = allocate_misc ();
11242
36e8e27c8625 (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_kboard)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2326 XMISCTYPE (val) = Lisp_Misc_Objfwd;
9913
c921977bb0ce (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_per_buffer): Use accessor
Karl Heuer <kwzh@gnu.org>
parents: 9871
diff changeset
2327 XOBJFWD (val)->objvar = address;
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2328 XSYMBOL (sym)->value = val;
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2329 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2330
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2331 void
7765
688637ba31c5 (defvar_bool, defvar_int, defvar_lisp, defvar_lisp_nopro):
Richard M. Stallman <rms@gnu.org>
parents: 7675
diff changeset
2332 defvar_lisp (namestring, address)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2333 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334 Lisp_Object *address;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2335 {
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2336 defvar_lisp_nopro (namestring, address);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 staticpro (address);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2339
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2340 #ifndef standalone
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2342 /* Similar but define a variable whose value is the Lisp Object stored in
9363
4ccd5f13788d (defvar_per_buffer): Access buffer_local_flags as Lisp_Object, not int.
Karl Heuer <kwzh@gnu.org>
parents: 9361
diff changeset
2343 the current buffer. address is the address of the slot in the buffer
4ccd5f13788d (defvar_per_buffer): Access buffer_local_flags as Lisp_Object, not int.
Karl Heuer <kwzh@gnu.org>
parents: 9361
diff changeset
2344 that is current now. */
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2345
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2346 void
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
2347 defvar_per_buffer (namestring, address, type, doc)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348 char *namestring;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2349 Lisp_Object *address;
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
2350 Lisp_Object type;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2351 char *doc;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2352 {
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2353 Lisp_Object sym, val;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2354 int offset;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2355 extern struct buffer buffer_local_symbols;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357 sym = intern (namestring);
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2358 val = allocate_misc ();
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359 offset = (char *)address - (char *)current_buffer;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360
11242
36e8e27c8625 (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_kboard)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2361 XMISCTYPE (val) = Lisp_Misc_Buffer_Objfwd;
9913
c921977bb0ce (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_per_buffer): Use accessor
Karl Heuer <kwzh@gnu.org>
parents: 9871
diff changeset
2362 XBUFFER_OBJFWD (val)->offset = offset;
9466
9052bf69f7de (defvar_int, defvar_bool, defvar_lisp, defvar_lisp_nopro, defvar_per_buffer):
Karl Heuer <kwzh@gnu.org>
parents: 9363
diff changeset
2363 XSYMBOL (sym)->value = val;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364 *(Lisp_Object *)(offset + (char *)&buffer_local_symbols) = sym;
1009
bf78b5ea9b3a * lread.c (defvar_per_buffer): Support new TYPE argument, by
Jim Blandy <jimb@redhat.com>
parents: 851
diff changeset
2365 *(Lisp_Object *)(offset + (char *)&buffer_local_types) = type;
9363
4ccd5f13788d (defvar_per_buffer): Access buffer_local_flags as Lisp_Object, not int.
Karl Heuer <kwzh@gnu.org>
parents: 9361
diff changeset
2366 if (XINT (*(Lisp_Object *)(offset + (char *)&buffer_local_flags)) == 0)
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2367 /* Did a DEFVAR_PER_BUFFER without initializing the corresponding
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2368 slot of buffer_local_flags */
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2369 abort ();
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 #endif /* standalone */
10606
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2373
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2374 /* Similar but define a variable whose value is the Lisp Object stored
11020
0951bb12c8ee (defvar_kboard): Renamed from defvar_display.
Karl Heuer <kwzh@gnu.org>
parents: 10650
diff changeset
2375 at a particular offset in the current kboard object. */
10606
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2376
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2377 void
11020
0951bb12c8ee (defvar_kboard): Renamed from defvar_display.
Karl Heuer <kwzh@gnu.org>
parents: 10650
diff changeset
2378 defvar_kboard (namestring, offset)
10606
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2379 char *namestring;
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2380 int offset;
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2381 {
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2382 Lisp_Object sym, val;
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2383 sym = intern (namestring);
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2384 val = allocate_misc ();
11242
36e8e27c8625 (defvar_int, defvar_bool, defvar_lisp_nopro, defvar_kboard)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2385 XMISCTYPE (val) = Lisp_Misc_Kboard_Objfwd;
11020
0951bb12c8ee (defvar_kboard): Renamed from defvar_display.
Karl Heuer <kwzh@gnu.org>
parents: 10650
diff changeset
2386 XKBOARD_OBJFWD (val)->offset = offset;
10606
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2387 XSYMBOL (sym)->value = val;
97b210b19217 (defvar_display): New function.
Karl Heuer <kwzh@gnu.org>
parents: 10200
diff changeset
2388 }
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2389
14130
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2390 /* Record the value of load-path used at the start of dumping
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2391 so we can see if the site changed it later during dumping. */
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2392 static Lisp_Object dump_path;
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2393
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2394 init_lread ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2395 {
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2396 char *normal;
11735
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2397 int turn_off_warning = 0;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2398
14945
4cd74c2aca79 (init_lread): Specify LC_NUMERIC locale.
Richard M. Stallman <rms@gnu.org>
parents: 14483
diff changeset
2399 #ifdef HAVE_SETLOCALE
4cd74c2aca79 (init_lread): Specify LC_NUMERIC locale.
Richard M. Stallman <rms@gnu.org>
parents: 14483
diff changeset
2400 /* Make sure numbers are parsed as we expect. */
4cd74c2aca79 (init_lread): Specify LC_NUMERIC locale.
Richard M. Stallman <rms@gnu.org>
parents: 14483
diff changeset
2401 setlocale (LC_NUMERIC, "C");
4cd74c2aca79 (init_lread): Specify LC_NUMERIC locale.
Richard M. Stallman <rms@gnu.org>
parents: 14483
diff changeset
2402 #endif /* HAVE_SETLOCALE */
4cd74c2aca79 (init_lread): Specify LC_NUMERIC locale.
Richard M. Stallman <rms@gnu.org>
parents: 14483
diff changeset
2403
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2404 /* Compute the default load-path. */
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2405 #ifdef CANNOT_DUMP
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2406 normal = PATH_LOADSEARCH;
638
40b255f55df3 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
2407 Vload_path = decode_env_path (0, normal);
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2408 #else
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2409 if (NILP (Vpurify_flag))
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2410 normal = PATH_LOADSEARCH;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2411 else
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2412 normal = PATH_DUMPLOADSEARCH;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2413
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2414 /* In a dumped Emacs, we normally have to reset the value of
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2415 Vload_path from PATH_LOADSEARCH, since the value that was dumped
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2416 uses ../lisp, instead of the path of the installed elisp
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2417 libraries. However, if it appears that Vload_path was changed
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2418 from the default before dumping, don't override that value. */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
2419 if (initialized)
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
2420 {
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
2421 if (! NILP (Fequal (dump_path, Vload_path)))
4482
09d0f4b26641 (init_lread): Normally put Vinvocation_directory
Richard M. Stallman <rms@gnu.org>
parents: 3704
diff changeset
2422 {
09d0f4b26641 (init_lread): Normally put Vinvocation_directory
Richard M. Stallman <rms@gnu.org>
parents: 3704
diff changeset
2423 Vload_path = decode_env_path (0, normal);
5617
0b312b3fa24e (init_lread): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5568
diff changeset
2424 if (!NILP (Vinstallation_directory))
4482
09d0f4b26641 (init_lread): Normally put Vinvocation_directory
Richard M. Stallman <rms@gnu.org>
parents: 3704
diff changeset
2425 {
5617
0b312b3fa24e (init_lread): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5568
diff changeset
2426 /* Add to the path the lisp subdir of the
7004
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2427 installation dir, if it exists. */
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2428 Lisp_Object tem, tem1;
5617
0b312b3fa24e (init_lread): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5568
diff changeset
2429 tem = Fexpand_file_name (build_string ("lisp"),
0b312b3fa24e (init_lread): Use Vinstallation_directory.
Richard M. Stallman <rms@gnu.org>
parents: 5568
diff changeset
2430 Vinstallation_directory);
7004
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2431 tem1 = Ffile_exists_p (tem);
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2432 if (!NILP (tem1))
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2433 {
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2434 if (NILP (Fmember (tem, Vload_path)))
11735
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2435 {
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2436 turn_off_warning = 1;
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2437 Vload_path = nconc2 (Vload_path, Fcons (tem, Qnil));
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2438 }
7004
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2439 }
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2440 else
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2441 /* That dir doesn't exist, so add the build-time
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2442 Lisp dirs instead. */
0c4d3481bb1b (init_lread): Maybe put build-time Lisp dirs on load-path.
Richard M. Stallman <rms@gnu.org>
parents: 6503
diff changeset
2443 Vload_path = nconc2 (Vload_path, dump_path);
11311
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2444
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2445 /* Add site-list under the installation dir, if it exists. */
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2446 tem = Fexpand_file_name (build_string ("site-lisp"),
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2447 Vinstallation_directory);
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2448 tem1 = Ffile_exists_p (tem);
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2449 if (!NILP (tem1))
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2450 {
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2451 if (NILP (Fmember (tem, Vload_path)))
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2452 Vload_path = nconc2 (Vload_path, Fcons (tem, Qnil));
864c3dea8754 (read_escape): Undo Nov 15 change.
Richard M. Stallman <rms@gnu.org>
parents: 11242
diff changeset
2453 }
4482
09d0f4b26641 (init_lread): Normally put Vinvocation_directory
Richard M. Stallman <rms@gnu.org>
parents: 3704
diff changeset
2454 }
09d0f4b26641 (init_lread): Normally put Vinvocation_directory
Richard M. Stallman <rms@gnu.org>
parents: 3704
diff changeset
2455 }
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
2456 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
2457 else
14130
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2458 {
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2459 /* ../lisp refers to the build directory.
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2460 NORMAL refers to the lisp dir in the source directory. */
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2461 Vload_path = Fcons (build_string ("../lisp"),
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2462 decode_env_path (0, normal));
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2463 dump_path = Vload_path;
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2464 }
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2465 #endif
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2466
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
2467 #ifndef WINDOWSNT
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
2468 /* When Emacs is invoked over network shares on NT, PATH_LOADSEARCH is
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
2469 almost never correct, thereby causing a warning to be printed out that
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13772
diff changeset
2470 confuses users. Since PATH_LOADSEARCH is always overridden by the
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
2471 EMACSLOADPATH environment variable below, disable the warning on NT. */
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
2472
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2473 /* Warn if dirs in the *standard* path don't exist. */
11735
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2474 if (!turn_off_warning)
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2475 {
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2476 Lisp_Object path_tail;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2477
11735
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2478 for (path_tail = Vload_path;
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2479 !NILP (path_tail);
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2480 path_tail = XCONS (path_tail)->cdr)
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2481 {
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2482 Lisp_Object dirfile;
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2483 dirfile = Fcar (path_tail);
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2484 if (STRINGP (dirfile))
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2485 {
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2486 dirfile = Fdirectory_file_name (dirfile);
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2487 if (access (XSTRING (dirfile)->data, 0) < 0)
16487
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2488 dir_warning ("Warning: Lisp directory `%s' does not exist.\n",
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2489 XCONS (path_tail)->car);
11735
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2490 }
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2491 }
f2f0f3b55a7e (isfloat_string): Reject strings like "0.5+".
Richard M. Stallman <rms@gnu.org>
parents: 11699
diff changeset
2492 }
9790
637b4664f7a5 Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents: 9552
diff changeset
2493 #endif /* WINDOWSNT */
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2494
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2495 /* If the EMACSLOADPATH environment variable is set, use its value.
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2496 This doesn't apply if we're dumping. */
11955
d972c95e7577 (init_lread) [CANNOT_DUMP]: Set Vload_path to EMACSLOADPATH.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11868
diff changeset
2497 #ifndef CANNOT_DUMP
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2498 if (NILP (Vpurify_flag)
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 604
diff changeset
2499 && egetenv ("EMACSLOADPATH"))
11955
d972c95e7577 (init_lread) [CANNOT_DUMP]: Set Vload_path to EMACSLOADPATH.
Geoff Voelker <voelker@cs.washington.edu>
parents: 11868
diff changeset
2500 #endif
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2501 Vload_path = decode_env_path ("EMACSLOADPATH", normal);
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2502
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2503 Vvalues = Qnil;
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2504
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2505 load_in_progress = 0;
15283
b2be450a8da4 (init_lread): Init Vload_file_name to Qnil.
Karl Heuer <kwzh@gnu.org>
parents: 15091
diff changeset
2506 Vload_file_name = Qnil;
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
2507
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
2508 load_descriptor_list = Qnil;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2509 }
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2510
16487
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2511 /* Print a warning, using format string FORMAT, that directory DIRNAME
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2512 does not exist. Print it on stderr and put it in *Message*. */
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2513
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2514 dir_warning (format, dirname)
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2515 char *format;
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2516 Lisp_Object dirname;
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2517 {
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2518 char *buffer
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2519 = (char *) alloca (XSTRING (dirname)->size + strlen (format) + 5);
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2520
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2521 fprintf (stderr, format, XSTRING (dirname)->data);
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2522 sprintf (buffer, format, XSTRING (dirname)->data);
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2523 message_dolog (buffer, strlen (buffer), 0);
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2524 }
8e154ff6d4bf (dir_warning): New function.
Richard M. Stallman <rms@gnu.org>
parents: 16383
diff changeset
2525
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2526 void
364
f4767dc8fff4 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 341
diff changeset
2527 syms_of_lread ()
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2528 {
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2529 defsubr (&Sread);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2530 defsubr (&Sread_from_string);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2531 defsubr (&Sintern);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2532 defsubr (&Sintern_soft);
11188
d7f70df00bb0 (oblookup): Save bucket num in oblookup_last_bucket_number.
Richard M. Stallman <rms@gnu.org>
parents: 11172
diff changeset
2533 defsubr (&Sunintern);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2534 defsubr (&Sload);
672
f81a3cf6ec22 *** empty log message ***
Joseph Arceneaux <jla@gnu.org>
parents: 638
diff changeset
2535 defsubr (&Seval_buffer);
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2536 defsubr (&Seval_region);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537 defsubr (&Sread_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2538 defsubr (&Sread_char_exclusive);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2539 defsubr (&Sread_event);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2540 defsubr (&Sget_file_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2541 defsubr (&Smapatoms);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2542
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2543 DEFVAR_LISP ("obarray", &Vobarray,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2544 "Symbol table for use by `intern' and `read'.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2545 It is a vector whose length ought to be prime for best results.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2546 The vector's contents don't make sense if examined from Lisp programs;\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2547 to find all the symbols in an obarray, use `mapatoms'.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2548
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2549 DEFVAR_LISP ("values", &Vvalues,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2550 "List of values of all expressions which were read, evaluated and printed.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2551 Order is reverse chronological.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2552
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2553 DEFVAR_LISP ("standard-input", &Vstandard_input,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2554 "Stream for read to get input from.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2555 See documentation of `read' for possible values.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2556 Vstandard_input = Qt;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2558 DEFVAR_LISP ("load-path", &Vload_path,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2559 "*List of directories to search for files to load.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2560 Each element is a string (directory name) or nil (try default directory).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2561 Initialized based on EMACSLOADPATH environment variable, if any,\n\
1887
ab56990c27c4 (syms_of_lread): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1827
diff changeset
2562 otherwise to default specified by file `paths.h' when Emacs was built.");
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2563
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2564 DEFVAR_BOOL ("load-in-progress", &load_in_progress,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2565 "Non-nil iff inside of `load'.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2566
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2567 DEFVAR_LISP ("after-load-alist", &Vafter_load_alist,
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2568 "An alist of expressions to be evalled when particular files are loaded.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2569 Each element looks like (FILENAME FORMS...).\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2570 When `load' is run and the file-name argument is FILENAME,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2571 the FORMS in the corresponding element are executed at the end of loading.\n\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2572 FILENAME must match exactly! Normally FILENAME is the name of a library,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2573 with no directory specified, since that is how `load' is normally called.\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2574 An error in FORMS does not undo the load,\n\
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2575 but does prevent execution of the rest of the FORMS.");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2576 Vafter_load_alist = Qnil;
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2577
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2578 DEFVAR_LISP ("load-history", &Vload_history,
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2579 "Alist mapping source file names to symbols and features.\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2580 Each alist element is a list that starts with a file name,\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2581 except for one element (optional) that starts with nil and describes\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2582 definitions evaluated from buffers not visiting files.\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2583 The remaining elements of each list are symbols defined as functions\n\
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2584 or variables, and cons cells `(provide . FEATURE)' and `(require . FEATURE)'.");
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2585 Vload_history = Qnil;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2586
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2587 DEFVAR_LISP ("load-file-name", &Vload_file_name,
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2588 "Full name of file being loaded by `load'.");
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2589 Vload_file_name = Qnil;
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2590
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
2591 DEFVAR_LISP ("current-load-list", &Vcurrent_load_list,
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
2592 "Used for internal purposes by `load'.");
2545
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2593 Vcurrent_load_list = Qnil;
d666732c5f41 (readevalloop): New argument is the source file name (or nil if none).
Richard M. Stallman <rms@gnu.org>
parents: 2439
diff changeset
2594
11079
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
2595 DEFVAR_LISP ("load-read-function", &Vload_read_function,
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
2596 "Function used by `load' and `eval-region' for reading expressions.\n\
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
2597 The default is nil, which means use the function `read'.");
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
2598 Vload_read_function = Qnil;
aeaaa579d967 (Vload_read_function): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 11020
diff changeset
2599
12780
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2600 DEFVAR_BOOL ("load-force-doc-strings", &load_force_doc_strings,
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2601 "Non-nil means `load' should force-load all dynamic doc strings.\n\
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2602 This is useful when the file being loaded is a temporary copy.");
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2603 load_force_doc_strings = 0;
2c1f71512d5d (saved_doc_string*): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 12639
diff changeset
2604
13601
0a091134e047 (Vsource_directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13455
diff changeset
2605 DEFVAR_LISP ("source-directory", &Vsource_directory,
0a091134e047 (Vsource_directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13455
diff changeset
2606 "Directory in which Emacs sources were found when Emacs was built.\n\
0a091134e047 (Vsource_directory): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13455
diff changeset
2607 You cannot count on them to still be there!");
14300
f777822a5d81 (syms_of_lread): Set Vsource_directory here.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2608 Vsource_directory
f777822a5d81 (syms_of_lread): Set Vsource_directory here.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2609 = Fexpand_file_name (build_string ("../"),
f777822a5d81 (syms_of_lread): Set Vsource_directory here.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2610 Fcar (decode_env_path (0, PATH_DUMPLOADSEARCH)));
f777822a5d81 (syms_of_lread): Set Vsource_directory here.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2611
f777822a5d81 (syms_of_lread): Set Vsource_directory here.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2612 /* Vsource_directory was initialized in init_lread. */
f777822a5d81 (syms_of_lread): Set Vsource_directory here.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2613
5568
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
2614 load_descriptor_list = Qnil;
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
2615 staticpro (&load_descriptor_list);
1af95f18f709 (Fload): Record descriptor numbers on load_descriptor_list.
Richard M. Stallman <rms@gnu.org>
parents: 5496
diff changeset
2616
2901
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
2617 Qcurrent_load_list = intern ("current-load-list");
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
2618 staticpro (&Qcurrent_load_list);
510a7ebce564 (syms_of_lread): Make Vcurrent_load_list ordinary Lisp var.
Richard M. Stallman <rms@gnu.org>
parents: 2781
diff changeset
2619
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2620 Qstandard_input = intern ("standard-input");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2621 staticpro (&Qstandard_input);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2622
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2623 Qread_char = intern ("read-char");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2624 staticpro (&Qread_char);
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2625
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2626 Qget_file_char = intern ("get-file-char");
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2627 staticpro (&Qget_file_char);
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
2628
11683
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2629 Qbackquote = intern ("`");
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2630 staticpro (&Qbackquote);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2631 Qcomma = intern (",");
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2632 staticpro (&Qcomma);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2633 Qcomma_at = intern (",@");
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2634 staticpro (&Qcomma_at);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2635 Qcomma_dot = intern (",.");
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2636 staticpro (&Qcomma_dot);
355d0b23a080 (read1): New arg FIRST_IN_LIST; all callers changed.
Richard M. Stallman <rms@gnu.org>
parents: 11311
diff changeset
2637
16937
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
2638 Qinhibit_file_name_operation = intern ("inhibit-file-name-operation");
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
2639 staticpro (&Qinhibit_file_name_operation);
c46111ba348b (openp): Handle remote file names in path.
Richard M. Stallman <rms@gnu.org>
parents: 16925
diff changeset
2640
2044
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
2641 Qascii_character = intern ("ascii-character");
258362f03d90 (syms_of_lread): Set up Qascii_character.
Richard M. Stallman <rms@gnu.org>
parents: 2018
diff changeset
2642 staticpro (&Qascii_character);
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
2643
13235
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
2644 Qfunction = intern ("function");
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
2645 staticpro (&Qfunction);
0f83b9eb5478 (read1): Handle #' as prefix.
Richard M. Stallman <rms@gnu.org>
parents: 13146
diff changeset
2646
3625
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
2647 Qload = intern ("load");
57174f9b1870 (Fload): Forward all 4 args to magic-name handler.
Richard M. Stallman <rms@gnu.org>
parents: 3041
diff changeset
2648 staticpro (&Qload);
10200
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2649
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2650 Qload_file_name = intern ("load-file-name");
899f5bd94bbb (Qload_file_name, Vload_file_name): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 10163
diff changeset
2651 staticpro (&Qload_file_name);
14130
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2652
99ab26698ab0 (read1): Use xmalloc and xrealloc, not malloc and realloc.
Karl Heuer <kwzh@gnu.org>
parents: 14092
diff changeset
2653 staticpro (&dump_path);
16141
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
2654
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
2655 staticpro (&read_objects);
9cbc74969e46 Add #n=object, #n#, and #:symbol constructs to reader.
Erik Naggum <erik@naggum.no>
parents: 16039
diff changeset
2656 read_objects = Qnil;
341
84ec93d39015 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2657 }