aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h309
1 files changed, 157 insertions, 152 deletions
diff --git a/src/lisp.h b/src/lisp.h
index e4788e63f5b..9cbaf24cacf 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -27,9 +27,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
27 types of run time checks for Lisp objects. */ 27 types of run time checks for Lisp objects. */
28 28
29#ifdef GC_CHECK_CONS_LIST 29#ifdef GC_CHECK_CONS_LIST
30#define CHECK_CONS_LIST() check_cons_list() 30extern void check_cons_list (void);
31#define CHECK_CONS_LIST() check_cons_list ()
31#else 32#else
32#define CHECK_CONS_LIST() ((void)0) 33#define CHECK_CONS_LIST() ((void) 0)
33#endif 34#endif
34 35
35/* These are default choices for the types to use. */ 36/* These are default choices for the types to use. */
@@ -85,7 +86,7 @@ extern void die (const char *, const char *, int) NO_RETURN;
85/* Define an Emacs version of "assert", since some system ones are 86/* Define an Emacs version of "assert", since some system ones are
86 flaky. */ 87 flaky. */
87#ifndef ENABLE_CHECKING 88#ifndef ENABLE_CHECKING
88#define eassert(X) (void) 0 89#define eassert(X) ((void) (0 && (X))) /* Check that X compiles. */
89#else /* ENABLE_CHECKING */ 90#else /* ENABLE_CHECKING */
90#if defined (__GNUC__) && __GNUC__ >= 2 && defined (__STDC__) 91#if defined (__GNUC__) && __GNUC__ >= 2 && defined (__STDC__)
91#define eassert(cond) CHECK(cond,"assertion failed: " #cond) 92#define eassert(cond) CHECK(cond,"assertion failed: " #cond)
@@ -841,6 +842,9 @@ struct Lisp_Vector
841 842
842#endif /* not __GNUC__ */ 843#endif /* not __GNUC__ */
843 844
845/* Nonzero iff C is an ASCII character. */
846#define ASCII_CHAR_P(c) ((unsigned) (c) < 0x80)
847
844/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII 848/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
845 characters. Do not check validity of CT. */ 849 characters. Do not check validity of CT. */
846#define CHAR_TABLE_REF(CT, IDX) \ 850#define CHAR_TABLE_REF(CT, IDX) \
@@ -2046,50 +2050,6 @@ extern int pending_signals;
2046 2050
2047#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) 2051#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
2048 2052
2049/* Variables used locally in the following case handling macros. */
2050extern int case_temp1;
2051extern Lisp_Object case_temp2;
2052
2053/* Current buffer's map from characters to lower-case characters. */
2054
2055#define DOWNCASE_TABLE BVAR (current_buffer, downcase_table)
2056
2057/* Current buffer's map from characters to upper-case characters. */
2058
2059#define UPCASE_TABLE BVAR (current_buffer, upcase_table)
2060
2061/* Downcase a character, or make no change if that cannot be done. */
2062
2063#define DOWNCASE(CH) \
2064 ((case_temp1 = (CH), \
2065 case_temp2 = CHAR_TABLE_REF (DOWNCASE_TABLE, case_temp1), \
2066 NATNUMP (case_temp2)) \
2067 ? XFASTINT (case_temp2) : case_temp1)
2068
2069/* 1 if CH is upper case. */
2070
2071#define UPPERCASEP(CH) (DOWNCASE (CH) != (CH))
2072
2073/* 1 if CH is neither upper nor lower case. */
2074
2075#define NOCASEP(CH) (UPCASE1 (CH) == (CH))
2076
2077/* 1 if CH is lower case. */
2078
2079#define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH))
2080
2081/* Upcase a character, or make no change if that cannot be done. */
2082
2083#define UPCASE(CH) (!UPPERCASEP (CH) ? UPCASE1 (CH) : (CH))
2084
2085/* Upcase a character known to be not upper case. */
2086
2087#define UPCASE1(CH) \
2088 ((case_temp1 = (CH), \
2089 case_temp2 = CHAR_TABLE_REF (UPCASE_TABLE, case_temp1), \
2090 NATNUMP (case_temp2)) \
2091 ? XFASTINT (case_temp2) : case_temp1)
2092
2093extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table; 2053extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table;
2094extern Lisp_Object Vascii_canon_table, Vascii_eqv_table; 2054extern Lisp_Object Vascii_canon_table, Vascii_eqv_table;
2095 2055
@@ -2155,126 +2115,143 @@ struct gcpro
2155 || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS) 2115 || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
2156 2116
2157 2117
2118#define GCPRO1(var) \
2119 GCPRO1_VAR (var, gcpro)
2120#define GCPRO2(var1, var2) \
2121 GCPRO2_VAR (var1, var2, gcpro)
2122#define GCPRO3(var1, var2, var3) \
2123 GCPRO3_VAR (var1, var2, var3, gcpro)
2124#define GCPRO4(var1, var2, var3, var4) \
2125 GCPRO4_VAR (var1, var2, var3, var4, gcpro)
2126#define GCPRO5(var1, var2, var3, var4, var5) \
2127 GCPRO5_VAR (var1, var2, var3, var4, var5, gcpro)
2128#define GCPRO6(var1, var2, var3, var4, var5, var6) \
2129 GCPRO6_VAR (var1, var2, var3, var4, var5, var6, gcpro)
2130#define UNGCPRO UNGCPRO_VAR (gcpro)
2131
2158#if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS 2132#if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
2159 2133
2160/* Do something silly with gcproN vars just so gcc shuts up. */ 2134/* Do something silly with gcproN vars just so gcc shuts up. */
2161/* You get warnings from MIPSPro... */ 2135/* You get warnings from MIPSPro... */
2162 2136
2163#define GCPRO1(varname) ((void) gcpro1) 2137#define GCPRO1_VAR(var, gcpro) ((void) gcpro##1)
2164#define GCPRO2(varname1, varname2)(((void) gcpro2, (void) gcpro1)) 2138#define GCPRO2_VAR(var1, var2, gcpro) \
2165#define GCPRO3(varname1, varname2, varname3) \ 2139 ((void) gcpro##2, (void) gcpro##1)
2166 (((void) gcpro3, (void) gcpro2, (void) gcpro1)) 2140#define GCPRO3_VAR(var1, var2, var3, gcpro) \
2167#define GCPRO4(varname1, varname2, varname3, varname4) \ 2141 ((void) gcpro##3, (void) gcpro##2, (void) gcpro##1)
2168 (((void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1)) 2142#define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \
2169#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ 2143 ((void) gcpro##4, (void) gcpro##3, (void) gcpro##2, (void) gcpro##1)
2170 (((void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1)) 2144#define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \
2171#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ 2145 ((void) gcpro##5, (void) gcpro##4, (void) gcpro##3, (void) gcpro##2, \
2172 (((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1)) 2146 (void) gcpro##1)
2173#define UNGCPRO ((void) 0) 2147#define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \
2148 ((void) gcpro##6, (void) gcpro##5, (void) gcpro##4, (void) gcpro##3, \
2149 (void) gcpro##2, (void) gcpro##1)
2150#define UNGCPRO_VAR(gcpro) ((void) 0)
2174 2151
2175#else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ 2152#else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
2176 2153
2177#ifndef DEBUG_GCPRO 2154#ifndef DEBUG_GCPRO
2178 2155
2179#define GCPRO1(varname) \ 2156#define GCPRO1_VAR(var, gcpro) \
2180 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ 2157 {gcpro##1.next = gcprolist; gcpro##1.var = &var; gcpro##1.nvars = 1; \
2181 gcprolist = &gcpro1; } 2158 gcprolist = &gcpro##1; }
2182 2159
2183#define GCPRO2(varname1, varname2) \ 2160#define GCPRO2_VAR(var1, var2, gcpro) \
2184 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2161 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2185 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2162 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2186 gcprolist = &gcpro2; } 2163 gcprolist = &gcpro##2; }
2187 2164
2188#define GCPRO3(varname1, varname2, varname3) \ 2165#define GCPRO3_VAR(var1, var2, var3, gcpro) \
2189 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2166 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2190 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2167 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2191 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2168 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2192 gcprolist = &gcpro3; } 2169 gcprolist = &gcpro##3; }
2193 2170
2194#define GCPRO4(varname1, varname2, varname3, varname4) \ 2171#define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \
2195 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2172 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2196 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2173 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2197 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2174 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2198 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ 2175 gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
2199 gcprolist = &gcpro4; } 2176 gcprolist = &gcpro##4; }
2200 2177
2201#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ 2178#define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \
2202 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2179 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2203 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2180 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2204 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2181 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2205 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ 2182 gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
2206 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ 2183 gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
2207 gcprolist = &gcpro5; } 2184 gcprolist = &gcpro##5; }
2208 2185
2209#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ 2186#define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \
2210 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2187 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2211 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2188 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2212 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2189 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2213 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ 2190 gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
2214 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ 2191 gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
2215 gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \ 2192 gcpro##6.next = &gcpro##5; gcpro##6.var = &var6; gcpro##6.nvars = 1; \
2216 gcprolist = &gcpro6; } 2193 gcprolist = &gcpro##6; }
2217 2194
2218#define UNGCPRO (gcprolist = gcpro1.next) 2195#define UNGCPRO_VAR(gcpro) (gcprolist = gcpro##1.next)
2219 2196
2220#else 2197#else
2221 2198
2222extern int gcpro_level; 2199extern int gcpro_level;
2223 2200
2224#define GCPRO1(varname) \ 2201#define GCPRO1_VAR(var, gcpro) \
2225 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ 2202 {gcpro##1.next = gcprolist; gcpro##1.var = &var; gcpro##1.nvars = 1; \
2226 gcpro1.level = gcpro_level++; \ 2203 gcpro##1.level = gcpro_level++; \
2227 gcprolist = &gcpro1; } 2204 gcprolist = &gcpro##1; }
2228 2205
2229#define GCPRO2(varname1, varname2) \ 2206#define GCPRO2_VAR(var1, var2, gcpro) \
2230 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2207 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2231 gcpro1.level = gcpro_level; \ 2208 gcpro##1.level = gcpro_level; \
2232 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2209 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2233 gcpro2.level = gcpro_level++; \ 2210 gcpro##2.level = gcpro_level++; \
2234 gcprolist = &gcpro2; } 2211 gcprolist = &gcpro##2; }
2235 2212
2236#define GCPRO3(varname1, varname2, varname3) \ 2213#define GCPRO3_VAR(var1, var2, var3, gcpro) \
2237 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2214 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2238 gcpro1.level = gcpro_level; \ 2215 gcpro##1.level = gcpro_level; \
2239 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2216 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2240 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2217 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2241 gcpro3.level = gcpro_level++; \ 2218 gcpro##3.level = gcpro_level++; \
2242 gcprolist = &gcpro3; } 2219 gcprolist = &gcpro##3; }
2243 2220
2244#define GCPRO4(varname1, varname2, varname3, varname4) \ 2221#define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \
2245 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2222 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2246 gcpro1.level = gcpro_level; \ 2223 gcpro##1.level = gcpro_level; \
2247 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2224 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2248 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2225 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2249 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ 2226 gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
2250 gcpro4.level = gcpro_level++; \ 2227 gcpro##4.level = gcpro_level++; \
2251 gcprolist = &gcpro4; } 2228 gcprolist = &gcpro##4; }
2252 2229
2253#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ 2230#define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \
2254 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2231 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2255 gcpro1.level = gcpro_level; \ 2232 gcpro##1.level = gcpro_level; \
2256 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2233 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2257 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2234 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2258 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ 2235 gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
2259 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ 2236 gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
2260 gcpro5.level = gcpro_level++; \ 2237 gcpro##5.level = gcpro_level++; \
2261 gcprolist = &gcpro5; } 2238 gcprolist = &gcpro##5; }
2262 2239
2263#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ 2240#define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \
2264 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ 2241 {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
2265 gcpro1.level = gcpro_level; \ 2242 gcpro##1.level = gcpro_level; \
2266 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ 2243 gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
2267 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ 2244 gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
2268 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ 2245 gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
2269 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ 2246 gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
2270 gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \ 2247 gcpro##6.next = &gcpro##5; gcpro##6.var = &var6; gcpro##6.nvars = 1; \
2271 gcpro6.level = gcpro_level++; \ 2248 gcpro##6.level = gcpro_level++; \
2272 gcprolist = &gcpro6; } 2249 gcprolist = &gcpro##6; }
2273 2250
2274#define UNGCPRO \ 2251#define UNGCPRO_VAR(gcpro) \
2275 ((--gcpro_level != gcpro1.level) \ 2252 ((--gcpro_level != gcpro##1.level) \
2276 ? (abort (), 0) \ 2253 ? (abort (), 0) \
2277 : ((gcprolist = gcpro1.next), 0)) 2254 : ((gcprolist = gcpro##1.next), 0))
2278 2255
2279#endif /* DEBUG_GCPRO */ 2256#endif /* DEBUG_GCPRO */
2280#endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ 2257#endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
@@ -2542,7 +2519,10 @@ extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y);
2542/* Defined in fringe.c */ 2519/* Defined in fringe.c */
2543extern void syms_of_fringe (void); 2520extern void syms_of_fringe (void);
2544extern void init_fringe (void); 2521extern void init_fringe (void);
2522#ifdef HAVE_WINDOW_SYSTEM
2523extern void mark_fringe_data (void);
2545extern void init_fringe_once (void); 2524extern void init_fringe_once (void);
2525#endif /* HAVE_WINDOW_SYSTEM */
2546 2526
2547/* Defined in image.c */ 2527/* Defined in image.c */
2548extern Lisp_Object QCascent, QCmargin, QCrelief, Qcount, Qextension_data; 2528extern Lisp_Object QCascent, QCmargin, QCrelief, Qcount, Qextension_data;
@@ -2606,6 +2586,7 @@ extern void syms_of_insdel (void);
2606 2586
2607/* Defined in dispnew.c */ 2587/* Defined in dispnew.c */
2608extern Lisp_Object selected_frame; 2588extern Lisp_Object selected_frame;
2589extern Lisp_Object Vwindow_system;
2609EXFUN (Fding, 1); 2590EXFUN (Fding, 1);
2610EXFUN (Fredraw_frame, 1); 2591EXFUN (Fredraw_frame, 1);
2611EXFUN (Fsleep_for, 2); 2592EXFUN (Fsleep_for, 2);
@@ -2788,6 +2769,7 @@ EXFUN (Fprint, 2);
2788EXFUN (Ferror_message_string, 1); 2769EXFUN (Ferror_message_string, 1);
2789extern Lisp_Object Qstandard_output; 2770extern Lisp_Object Qstandard_output;
2790extern Lisp_Object Qexternal_debugging_output; 2771extern Lisp_Object Qexternal_debugging_output;
2772extern void debug_output_compilation_hack (int);
2791extern void temp_output_buffer_setup (const char *); 2773extern void temp_output_buffer_setup (const char *);
2792extern int print_level; 2774extern int print_level;
2793extern Lisp_Object Qprint_escape_newlines; 2775extern Lisp_Object Qprint_escape_newlines;
@@ -2899,8 +2881,10 @@ extern Lisp_Object safe_call (int, Lisp_Object *);
2899extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object); 2881extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object);
2900extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object); 2882extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
2901extern void init_eval (void); 2883extern void init_eval (void);
2884extern void mark_backtrace (void);
2902extern void syms_of_eval (void); 2885extern void syms_of_eval (void);
2903 2886
2887/* Defined in editfns.c */
2904extern Lisp_Object Qfield; 2888extern Lisp_Object Qfield;
2905EXFUN (Fcurrent_message, 0); 2889EXFUN (Fcurrent_message, 0);
2906EXFUN (Fgoto_char, 1); 2890EXFUN (Fgoto_char, 1);
@@ -2940,6 +2924,8 @@ extern Lisp_Object make_buffer_string (EMACS_INT, EMACS_INT, int);
2940extern Lisp_Object make_buffer_string_both (EMACS_INT, EMACS_INT, EMACS_INT, 2924extern Lisp_Object make_buffer_string_both (EMACS_INT, EMACS_INT, EMACS_INT,
2941 EMACS_INT, int); 2925 EMACS_INT, int);
2942extern void init_editfns (void); 2926extern void init_editfns (void);
2927const char *get_system_name (void);
2928const char *get_operating_system_release (void);
2943extern void syms_of_editfns (void); 2929extern void syms_of_editfns (void);
2944EXFUN (Fconstrain_to_field, 5); 2930EXFUN (Fconstrain_to_field, 5);
2945EXFUN (Ffield_end, 3); 2931EXFUN (Ffield_end, 3);
@@ -2996,12 +2982,14 @@ extern EMACS_INT marker_byte_position (Lisp_Object);
2996extern void clear_charpos_cache (struct buffer *); 2982extern void clear_charpos_cache (struct buffer *);
2997extern EMACS_INT charpos_to_bytepos (EMACS_INT); 2983extern EMACS_INT charpos_to_bytepos (EMACS_INT);
2998extern EMACS_INT buf_charpos_to_bytepos (struct buffer *, EMACS_INT); 2984extern EMACS_INT buf_charpos_to_bytepos (struct buffer *, EMACS_INT);
2985extern EMACS_INT verify_bytepos (EMACS_INT charpos);
2999extern EMACS_INT buf_bytepos_to_charpos (struct buffer *, EMACS_INT); 2986extern EMACS_INT buf_bytepos_to_charpos (struct buffer *, EMACS_INT);
3000extern void unchain_marker (struct Lisp_Marker *marker); 2987extern void unchain_marker (struct Lisp_Marker *marker);
3001extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object); 2988extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3002extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT); 2989extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT);
3003extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object, 2990extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object,
3004 EMACS_INT, EMACS_INT); 2991 EMACS_INT, EMACS_INT);
2992extern int count_markers (struct buffer *);
3005extern void syms_of_marker (void); 2993extern void syms_of_marker (void);
3006 2994
3007/* Defined in fileio.c */ 2995/* Defined in fileio.c */
@@ -3010,6 +2998,7 @@ extern Lisp_Object Qfile_error;
3010extern Lisp_Object Qfile_exists_p; 2998extern Lisp_Object Qfile_exists_p;
3011extern Lisp_Object Qfile_directory_p; 2999extern Lisp_Object Qfile_directory_p;
3012extern Lisp_Object Qinsert_file_contents; 3000extern Lisp_Object Qinsert_file_contents;
3001extern Lisp_Object Qfile_name_history;
3013EXFUN (Ffind_file_name_handler, 2); 3002EXFUN (Ffind_file_name_handler, 2);
3014EXFUN (Ffile_name_as_directory, 1); 3003EXFUN (Ffile_name_as_directory, 1);
3015EXFUN (Fexpand_file_name, 2); 3004EXFUN (Fexpand_file_name, 2);
@@ -3051,6 +3040,10 @@ EXFUN (Fset_match_data, 2);
3051EXFUN (Fmatch_beginning, 1); 3040EXFUN (Fmatch_beginning, 1);
3052EXFUN (Fmatch_end, 1); 3041EXFUN (Fmatch_end, 1);
3053extern void record_unwind_save_match_data (void); 3042extern void record_unwind_save_match_data (void);
3043struct re_registers;
3044extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
3045 struct re_registers *,
3046 Lisp_Object, int, int);
3054extern int fast_string_match (Lisp_Object, Lisp_Object); 3047extern int fast_string_match (Lisp_Object, Lisp_Object);
3055extern int fast_c_string_match_ignore_case (Lisp_Object, const char *); 3048extern int fast_c_string_match_ignore_case (Lisp_Object, const char *);
3056extern int fast_string_match_ignore_case (Lisp_Object, Lisp_Object); 3049extern int fast_string_match_ignore_case (Lisp_Object, Lisp_Object);
@@ -3142,6 +3135,7 @@ extern void cmd_error_internal (Lisp_Object, const char *);
3142extern Lisp_Object command_loop_1 (void); 3135extern Lisp_Object command_loop_1 (void);
3143extern Lisp_Object recursive_edit_1 (void); 3136extern Lisp_Object recursive_edit_1 (void);
3144extern void record_auto_save (void); 3137extern void record_auto_save (void);
3138extern void force_auto_save_soon (void);
3145extern void init_keyboard (void); 3139extern void init_keyboard (void);
3146extern void syms_of_keyboard (void); 3140extern void syms_of_keyboard (void);
3147extern void keys_of_keyboard (void); 3141extern void keys_of_keyboard (void);
@@ -3194,6 +3188,7 @@ extern Lisp_Object decode_env_path (const char *, const char *);
3194extern Lisp_Object empty_unibyte_string, empty_multibyte_string; 3188extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
3195extern Lisp_Object Qfile_name_handler_alist; 3189extern Lisp_Object Qfile_name_handler_alist;
3196extern void (*fatal_error_signal_hook) (void); 3190extern void (*fatal_error_signal_hook) (void);
3191extern SIGTYPE fatal_error_signal (int);
3197EXFUN (Fkill_emacs, 1) NO_RETURN; 3192EXFUN (Fkill_emacs, 1) NO_RETURN;
3198#if HAVE_SETLOCALE 3193#if HAVE_SETLOCALE
3199void fixup_locale (void); 3194void fixup_locale (void);
@@ -3341,6 +3336,8 @@ extern void child_setup_tty (int);
3341extern void setup_pty (int); 3336extern void setup_pty (int);
3342extern int set_window_size (int, int, int); 3337extern int set_window_size (int, int, int);
3343extern void create_process (Lisp_Object, char **, Lisp_Object); 3338extern void create_process (Lisp_Object, char **, Lisp_Object);
3339extern long get_random (void);
3340extern void seed_random (long);
3344extern int emacs_open (const char *, int, int); 3341extern int emacs_open (const char *, int, int);
3345extern int emacs_close (int); 3342extern int emacs_close (int);
3346extern int emacs_read (int, char *, unsigned int); 3343extern int emacs_read (int, char *, unsigned int);
@@ -3387,6 +3384,7 @@ extern Lisp_Object directory_files_internal (Lisp_Object, Lisp_Object,
3387 3384
3388/* Defined in term.c */ 3385/* Defined in term.c */
3389extern int *char_ins_del_vector; 3386extern int *char_ins_del_vector;
3387extern void mark_ttys (void);
3390extern void syms_of_term (void); 3388extern void syms_of_term (void);
3391extern void fatal (const char *msgid, ...) NO_RETURN; 3389extern void fatal (const char *msgid, ...) NO_RETURN;
3392 3390
@@ -3533,6 +3531,13 @@ extern void init_system_name (void);
3533 && (circular_list_error ((list)), 1))) \ 3531 && (circular_list_error ((list)), 1))) \
3534 : 0))) 3532 : 0)))
3535 3533
3534/* Use this to suppress gcc's `...may be used before initialized' warnings. */
3535#ifdef lint
3536# define IF_LINT(Code) Code
3537#else
3538# define IF_LINT(Code) /* empty */
3539#endif
3540
3536/* The ubiquitous min and max macros. */ 3541/* The ubiquitous min and max macros. */
3537 3542
3538#ifdef max 3543#ifdef max