diff options
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 309 |
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() | 30 | extern 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. */ | ||
| 2050 | extern int case_temp1; | ||
| 2051 | extern 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 | |||
| 2093 | extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table; | 2053 | extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table; |
| 2094 | extern Lisp_Object Vascii_canon_table, Vascii_eqv_table; | 2054 | extern 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 | ||
| 2222 | extern int gcpro_level; | 2199 | extern 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 */ |
| 2543 | extern void syms_of_fringe (void); | 2520 | extern void syms_of_fringe (void); |
| 2544 | extern void init_fringe (void); | 2521 | extern void init_fringe (void); |
| 2522 | #ifdef HAVE_WINDOW_SYSTEM | ||
| 2523 | extern void mark_fringe_data (void); | ||
| 2545 | extern void init_fringe_once (void); | 2524 | extern void init_fringe_once (void); |
| 2525 | #endif /* HAVE_WINDOW_SYSTEM */ | ||
| 2546 | 2526 | ||
| 2547 | /* Defined in image.c */ | 2527 | /* Defined in image.c */ |
| 2548 | extern Lisp_Object QCascent, QCmargin, QCrelief, Qcount, Qextension_data; | 2528 | extern 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 */ |
| 2608 | extern Lisp_Object selected_frame; | 2588 | extern Lisp_Object selected_frame; |
| 2589 | extern Lisp_Object Vwindow_system; | ||
| 2609 | EXFUN (Fding, 1); | 2590 | EXFUN (Fding, 1); |
| 2610 | EXFUN (Fredraw_frame, 1); | 2591 | EXFUN (Fredraw_frame, 1); |
| 2611 | EXFUN (Fsleep_for, 2); | 2592 | EXFUN (Fsleep_for, 2); |
| @@ -2788,6 +2769,7 @@ EXFUN (Fprint, 2); | |||
| 2788 | EXFUN (Ferror_message_string, 1); | 2769 | EXFUN (Ferror_message_string, 1); |
| 2789 | extern Lisp_Object Qstandard_output; | 2770 | extern Lisp_Object Qstandard_output; |
| 2790 | extern Lisp_Object Qexternal_debugging_output; | 2771 | extern Lisp_Object Qexternal_debugging_output; |
| 2772 | extern void debug_output_compilation_hack (int); | ||
| 2791 | extern void temp_output_buffer_setup (const char *); | 2773 | extern void temp_output_buffer_setup (const char *); |
| 2792 | extern int print_level; | 2774 | extern int print_level; |
| 2793 | extern Lisp_Object Qprint_escape_newlines; | 2775 | extern Lisp_Object Qprint_escape_newlines; |
| @@ -2899,8 +2881,10 @@ extern Lisp_Object safe_call (int, Lisp_Object *); | |||
| 2899 | extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object); | 2881 | extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object); |
| 2900 | extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object); | 2882 | extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object); |
| 2901 | extern void init_eval (void); | 2883 | extern void init_eval (void); |
| 2884 | extern void mark_backtrace (void); | ||
| 2902 | extern void syms_of_eval (void); | 2885 | extern void syms_of_eval (void); |
| 2903 | 2886 | ||
| 2887 | /* Defined in editfns.c */ | ||
| 2904 | extern Lisp_Object Qfield; | 2888 | extern Lisp_Object Qfield; |
| 2905 | EXFUN (Fcurrent_message, 0); | 2889 | EXFUN (Fcurrent_message, 0); |
| 2906 | EXFUN (Fgoto_char, 1); | 2890 | EXFUN (Fgoto_char, 1); |
| @@ -2940,6 +2924,8 @@ extern Lisp_Object make_buffer_string (EMACS_INT, EMACS_INT, int); | |||
| 2940 | extern Lisp_Object make_buffer_string_both (EMACS_INT, EMACS_INT, EMACS_INT, | 2924 | extern Lisp_Object make_buffer_string_both (EMACS_INT, EMACS_INT, EMACS_INT, |
| 2941 | EMACS_INT, int); | 2925 | EMACS_INT, int); |
| 2942 | extern void init_editfns (void); | 2926 | extern void init_editfns (void); |
| 2927 | const char *get_system_name (void); | ||
| 2928 | const char *get_operating_system_release (void); | ||
| 2943 | extern void syms_of_editfns (void); | 2929 | extern void syms_of_editfns (void); |
| 2944 | EXFUN (Fconstrain_to_field, 5); | 2930 | EXFUN (Fconstrain_to_field, 5); |
| 2945 | EXFUN (Ffield_end, 3); | 2931 | EXFUN (Ffield_end, 3); |
| @@ -2996,12 +2982,14 @@ extern EMACS_INT marker_byte_position (Lisp_Object); | |||
| 2996 | extern void clear_charpos_cache (struct buffer *); | 2982 | extern void clear_charpos_cache (struct buffer *); |
| 2997 | extern EMACS_INT charpos_to_bytepos (EMACS_INT); | 2983 | extern EMACS_INT charpos_to_bytepos (EMACS_INT); |
| 2998 | extern EMACS_INT buf_charpos_to_bytepos (struct buffer *, EMACS_INT); | 2984 | extern EMACS_INT buf_charpos_to_bytepos (struct buffer *, EMACS_INT); |
| 2985 | extern EMACS_INT verify_bytepos (EMACS_INT charpos); | ||
| 2999 | extern EMACS_INT buf_bytepos_to_charpos (struct buffer *, EMACS_INT); | 2986 | extern EMACS_INT buf_bytepos_to_charpos (struct buffer *, EMACS_INT); |
| 3000 | extern void unchain_marker (struct Lisp_Marker *marker); | 2987 | extern void unchain_marker (struct Lisp_Marker *marker); |
| 3001 | extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object); | 2988 | extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object); |
| 3002 | extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT); | 2989 | extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT); |
| 3003 | extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object, | 2990 | extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object, |
| 3004 | EMACS_INT, EMACS_INT); | 2991 | EMACS_INT, EMACS_INT); |
| 2992 | extern int count_markers (struct buffer *); | ||
| 3005 | extern void syms_of_marker (void); | 2993 | extern 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; | |||
| 3010 | extern Lisp_Object Qfile_exists_p; | 2998 | extern Lisp_Object Qfile_exists_p; |
| 3011 | extern Lisp_Object Qfile_directory_p; | 2999 | extern Lisp_Object Qfile_directory_p; |
| 3012 | extern Lisp_Object Qinsert_file_contents; | 3000 | extern Lisp_Object Qinsert_file_contents; |
| 3001 | extern Lisp_Object Qfile_name_history; | ||
| 3013 | EXFUN (Ffind_file_name_handler, 2); | 3002 | EXFUN (Ffind_file_name_handler, 2); |
| 3014 | EXFUN (Ffile_name_as_directory, 1); | 3003 | EXFUN (Ffile_name_as_directory, 1); |
| 3015 | EXFUN (Fexpand_file_name, 2); | 3004 | EXFUN (Fexpand_file_name, 2); |
| @@ -3051,6 +3040,10 @@ EXFUN (Fset_match_data, 2); | |||
| 3051 | EXFUN (Fmatch_beginning, 1); | 3040 | EXFUN (Fmatch_beginning, 1); |
| 3052 | EXFUN (Fmatch_end, 1); | 3041 | EXFUN (Fmatch_end, 1); |
| 3053 | extern void record_unwind_save_match_data (void); | 3042 | extern void record_unwind_save_match_data (void); |
| 3043 | struct re_registers; | ||
| 3044 | extern struct re_pattern_buffer *compile_pattern (Lisp_Object, | ||
| 3045 | struct re_registers *, | ||
| 3046 | Lisp_Object, int, int); | ||
| 3054 | extern int fast_string_match (Lisp_Object, Lisp_Object); | 3047 | extern int fast_string_match (Lisp_Object, Lisp_Object); |
| 3055 | extern int fast_c_string_match_ignore_case (Lisp_Object, const char *); | 3048 | extern int fast_c_string_match_ignore_case (Lisp_Object, const char *); |
| 3056 | extern int fast_string_match_ignore_case (Lisp_Object, Lisp_Object); | 3049 | extern int fast_string_match_ignore_case (Lisp_Object, Lisp_Object); |
| @@ -3142,6 +3135,7 @@ extern void cmd_error_internal (Lisp_Object, const char *); | |||
| 3142 | extern Lisp_Object command_loop_1 (void); | 3135 | extern Lisp_Object command_loop_1 (void); |
| 3143 | extern Lisp_Object recursive_edit_1 (void); | 3136 | extern Lisp_Object recursive_edit_1 (void); |
| 3144 | extern void record_auto_save (void); | 3137 | extern void record_auto_save (void); |
| 3138 | extern void force_auto_save_soon (void); | ||
| 3145 | extern void init_keyboard (void); | 3139 | extern void init_keyboard (void); |
| 3146 | extern void syms_of_keyboard (void); | 3140 | extern void syms_of_keyboard (void); |
| 3147 | extern void keys_of_keyboard (void); | 3141 | extern void keys_of_keyboard (void); |
| @@ -3194,6 +3188,7 @@ extern Lisp_Object decode_env_path (const char *, const char *); | |||
| 3194 | extern Lisp_Object empty_unibyte_string, empty_multibyte_string; | 3188 | extern Lisp_Object empty_unibyte_string, empty_multibyte_string; |
| 3195 | extern Lisp_Object Qfile_name_handler_alist; | 3189 | extern Lisp_Object Qfile_name_handler_alist; |
| 3196 | extern void (*fatal_error_signal_hook) (void); | 3190 | extern void (*fatal_error_signal_hook) (void); |
| 3191 | extern SIGTYPE fatal_error_signal (int); | ||
| 3197 | EXFUN (Fkill_emacs, 1) NO_RETURN; | 3192 | EXFUN (Fkill_emacs, 1) NO_RETURN; |
| 3198 | #if HAVE_SETLOCALE | 3193 | #if HAVE_SETLOCALE |
| 3199 | void fixup_locale (void); | 3194 | void fixup_locale (void); |
| @@ -3341,6 +3336,8 @@ extern void child_setup_tty (int); | |||
| 3341 | extern void setup_pty (int); | 3336 | extern void setup_pty (int); |
| 3342 | extern int set_window_size (int, int, int); | 3337 | extern int set_window_size (int, int, int); |
| 3343 | extern void create_process (Lisp_Object, char **, Lisp_Object); | 3338 | extern void create_process (Lisp_Object, char **, Lisp_Object); |
| 3339 | extern long get_random (void); | ||
| 3340 | extern void seed_random (long); | ||
| 3344 | extern int emacs_open (const char *, int, int); | 3341 | extern int emacs_open (const char *, int, int); |
| 3345 | extern int emacs_close (int); | 3342 | extern int emacs_close (int); |
| 3346 | extern int emacs_read (int, char *, unsigned int); | 3343 | extern 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 */ |
| 3389 | extern int *char_ins_del_vector; | 3386 | extern int *char_ins_del_vector; |
| 3387 | extern void mark_ttys (void); | ||
| 3390 | extern void syms_of_term (void); | 3388 | extern void syms_of_term (void); |
| 3391 | extern void fatal (const char *msgid, ...) NO_RETURN; | 3389 | extern 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 |