diff options
| author | Paul Eggert | 2011-12-10 16:56:50 -0800 |
|---|---|---|
| committer | Paul Eggert | 2011-12-10 16:56:50 -0800 |
| commit | 8f50130c565eaf0ad7c49e4ad044c3291ecdfa71 (patch) | |
| tree | c8129448cbbf387fe82667ccac02983592c688f1 /src/lisp.h | |
| parent | 85a83e2e2585a1906dec5168ed96ad521b5849ed (diff) | |
| parent | 7b9d523a07395ecea505be88f45c33d73aea7038 (diff) | |
| download | emacs-8f50130c565eaf0ad7c49e4ad044c3291ecdfa71.tar.gz emacs-8f50130c565eaf0ad7c49e4ad044c3291ecdfa71.zip | |
Merge from trunk.
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 267 |
1 files changed, 126 insertions, 141 deletions
diff --git a/src/lisp.h b/src/lisp.h index 648eb6430bd..ecc2fd16267 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -163,14 +163,23 @@ extern int suppress_checking EXTERNALLY_VISIBLE; | |||
| 163 | /* First, try and define DECL_ALIGN(type,var) which declares a static | 163 | /* First, try and define DECL_ALIGN(type,var) which declares a static |
| 164 | variable VAR of type TYPE with the added requirement that it be | 164 | variable VAR of type TYPE with the added requirement that it be |
| 165 | TYPEBITS-aligned. */ | 165 | TYPEBITS-aligned. */ |
| 166 | |||
| 167 | #ifndef GCTYPEBITS | ||
| 168 | #define GCTYPEBITS 3 | ||
| 169 | #endif | ||
| 170 | |||
| 166 | #ifndef NO_DECL_ALIGN | 171 | #ifndef NO_DECL_ALIGN |
| 167 | # ifndef DECL_ALIGN | 172 | # ifndef DECL_ALIGN |
| 168 | # if HAVE_ATTRIBUTE_ALIGNED | 173 | # if HAVE_ATTRIBUTE_ALIGNED |
| 169 | # define DECL_ALIGN(type, var) \ | 174 | # define DECL_ALIGN(type, var) \ |
| 170 | type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var | 175 | type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var |
| 171 | # elif defined(_MSC_VER) | 176 | # elif defined(_MSC_VER) |
| 177 | # define ALIGN_GCTYPEBITS 8 | ||
| 178 | # if (1 << GCTYPEBITS) != ALIGN_GCTYPEBITS | ||
| 179 | # error ALIGN_GCTYPEBITS is wrong! | ||
| 180 | # endif | ||
| 172 | # define DECL_ALIGN(type, var) \ | 181 | # define DECL_ALIGN(type, var) \ |
| 173 | type __declspec(align(1 << GCTYPEBITS)) var | 182 | type __declspec(align(ALIGN_GCTYPEBITS)) var |
| 174 | # else | 183 | # else |
| 175 | /* What directives do other compilers use? */ | 184 | /* What directives do other compilers use? */ |
| 176 | # endif | 185 | # endif |
| @@ -300,10 +309,6 @@ enum Lisp_Fwd_Type | |||
| 300 | Lisp_Fwd_Kboard_Obj, /* Fwd to a Lisp_Object field of kboards. */ | 309 | Lisp_Fwd_Kboard_Obj, /* Fwd to a Lisp_Object field of kboards. */ |
| 301 | }; | 310 | }; |
| 302 | 311 | ||
| 303 | #ifndef GCTYPEBITS | ||
| 304 | #define GCTYPEBITS 3 | ||
| 305 | #endif | ||
| 306 | |||
| 307 | /* These values are overridden by the m- file on some machines. */ | 312 | /* These values are overridden by the m- file on some machines. */ |
| 308 | #ifndef VALBITS | 313 | #ifndef VALBITS |
| 309 | #define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS) | 314 | #define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS) |
| @@ -324,7 +329,7 @@ union Lisp_Object | |||
| 324 | 329 | ||
| 325 | struct | 330 | struct |
| 326 | { | 331 | { |
| 327 | /* Use explict signed, the signedness of a bit-field of type | 332 | /* Use explicit signed, the signedness of a bit-field of type |
| 328 | int is implementation defined. */ | 333 | int is implementation defined. */ |
| 329 | signed EMACS_INT val : VALBITS; | 334 | signed EMACS_INT val : VALBITS; |
| 330 | ENUM_BF (Lisp_Type) type : GCTYPEBITS; | 335 | ENUM_BF (Lisp_Type) type : GCTYPEBITS; |
| @@ -349,7 +354,7 @@ union Lisp_Object | |||
| 349 | struct | 354 | struct |
| 350 | { | 355 | { |
| 351 | ENUM_BF (Lisp_Type) type : GCTYPEBITS; | 356 | ENUM_BF (Lisp_Type) type : GCTYPEBITS; |
| 352 | /* Use explict signed, the signedness of a bit-field of type | 357 | /* Use explicit signed, the signedness of a bit-field of type |
| 353 | int is implementation defined. */ | 358 | int is implementation defined. */ |
| 354 | signed EMACS_INT val : VALBITS; | 359 | signed EMACS_INT val : VALBITS; |
| 355 | } s; | 360 | } s; |
| @@ -948,7 +953,7 @@ struct Lisp_Vector | |||
| 948 | 953 | ||
| 949 | /* Compute A OP B, using the unsigned comparison operator OP. A and B | 954 | /* Compute A OP B, using the unsigned comparison operator OP. A and B |
| 950 | should be integer expressions. This is not the same as | 955 | should be integer expressions. This is not the same as |
| 951 | mathemeatical comparison; for example, UNSIGNED_CMP (0, <, -1) | 956 | mathematical comparison; for example, UNSIGNED_CMP (0, <, -1) |
| 952 | returns 1. For efficiency, prefer plain unsigned comparison if A | 957 | returns 1. For efficiency, prefer plain unsigned comparison if A |
| 953 | and B's sizes both fit (after integer promotion). */ | 958 | and B's sizes both fit (after integer promotion). */ |
| 954 | #define UNSIGNED_CMP(a, op, b) \ | 959 | #define UNSIGNED_CMP(a, op, b) \ |
| @@ -1909,9 +1914,6 @@ typedef struct { | |||
| 1909 | CHECK_NATNUM (tmp); \ | 1914 | CHECK_NATNUM (tmp); \ |
| 1910 | XSETCDR ((x), tmp); \ | 1915 | XSETCDR ((x), tmp); \ |
| 1911 | } while (0) | 1916 | } while (0) |
| 1912 | |||
| 1913 | /* Cast pointers to this type to compare them. */ | ||
| 1914 | #define PNTR_COMPARISON_TYPE uintptr_t | ||
| 1915 | 1917 | ||
| 1916 | /* Define a built-in function for calling from Lisp. | 1918 | /* Define a built-in function for calling from Lisp. |
| 1917 | `lname' should be the name to give the function in Lisp, | 1919 | `lname' should be the name to give the function in Lisp, |
| @@ -2158,7 +2160,10 @@ extern char *stack_bottom; | |||
| 2158 | Exception: if you set immediate_quit to nonzero, | 2160 | Exception: if you set immediate_quit to nonzero, |
| 2159 | then the handler that responds to the C-g does the quit itself. | 2161 | then the handler that responds to the C-g does the quit itself. |
| 2160 | This is a good thing to do around a loop that has no side effects | 2162 | This is a good thing to do around a loop that has no side effects |
| 2161 | and (in particular) cannot call arbitrary Lisp code. */ | 2163 | and (in particular) cannot call arbitrary Lisp code. |
| 2164 | |||
| 2165 | If quit-flag is set to `kill-emacs' the SIGINT handler has received | ||
| 2166 | a request to exit Emacs when it is safe to do. */ | ||
| 2162 | 2167 | ||
| 2163 | #ifdef SYNC_INPUT | 2168 | #ifdef SYNC_INPUT |
| 2164 | extern void process_pending_signals (void); | 2169 | extern void process_pending_signals (void); |
| @@ -2170,16 +2175,11 @@ extern int pending_signals; | |||
| 2170 | #define ELSE_PENDING_SIGNALS | 2175 | #define ELSE_PENDING_SIGNALS |
| 2171 | #endif /* not SYNC_INPUT */ | 2176 | #endif /* not SYNC_INPUT */ |
| 2172 | 2177 | ||
| 2178 | extern void process_quit_flag (void); | ||
| 2173 | #define QUIT \ | 2179 | #define QUIT \ |
| 2174 | do { \ | 2180 | do { \ |
| 2175 | if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \ | 2181 | if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \ |
| 2176 | { \ | 2182 | process_quit_flag (); \ |
| 2177 | Lisp_Object flag = Vquit_flag; \ | ||
| 2178 | Vquit_flag = Qnil; \ | ||
| 2179 | if (EQ (Vthrow_on_input, flag)) \ | ||
| 2180 | Fthrow (Vthrow_on_input, Qt); \ | ||
| 2181 | Fsignal (Qquit, Qnil); \ | ||
| 2182 | } \ | ||
| 2183 | ELSE_PENDING_SIGNALS \ | 2183 | ELSE_PENDING_SIGNALS \ |
| 2184 | } while (0) | 2184 | } while (0) |
| 2185 | 2185 | ||
| @@ -2253,143 +2253,127 @@ struct gcpro | |||
| 2253 | || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS) | 2253 | || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS) |
| 2254 | 2254 | ||
| 2255 | 2255 | ||
| 2256 | #define GCPRO1(var) \ | ||
| 2257 | GCPRO1_VAR (var, gcpro) | ||
| 2258 | #define GCPRO2(var1, var2) \ | ||
| 2259 | GCPRO2_VAR (var1, var2, gcpro) | ||
| 2260 | #define GCPRO3(var1, var2, var3) \ | ||
| 2261 | GCPRO3_VAR (var1, var2, var3, gcpro) | ||
| 2262 | #define GCPRO4(var1, var2, var3, var4) \ | ||
| 2263 | GCPRO4_VAR (var1, var2, var3, var4, gcpro) | ||
| 2264 | #define GCPRO5(var1, var2, var3, var4, var5) \ | ||
| 2265 | GCPRO5_VAR (var1, var2, var3, var4, var5, gcpro) | ||
| 2266 | #define GCPRO6(var1, var2, var3, var4, var5, var6) \ | ||
| 2267 | GCPRO6_VAR (var1, var2, var3, var4, var5, var6, gcpro) | ||
| 2268 | #define UNGCPRO UNGCPRO_VAR (gcpro) | ||
| 2269 | |||
| 2270 | #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS | 2256 | #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS |
| 2271 | 2257 | ||
| 2272 | /* Do something silly with gcproN vars just so gcc shuts up. */ | 2258 | /* Do something silly with gcproN vars just so gcc shuts up. */ |
| 2273 | /* You get warnings from MIPSPro... */ | 2259 | /* You get warnings from MIPSPro... */ |
| 2274 | 2260 | ||
| 2275 | #define GCPRO1_VAR(var, gcpro) ((void) gcpro##1) | 2261 | #define GCPRO1(varname) ((void) gcpro1) |
| 2276 | #define GCPRO2_VAR(var1, var2, gcpro) \ | 2262 | #define GCPRO2(varname1, varname2) ((void) gcpro2, (void) gcpro1) |
| 2277 | ((void) gcpro##2, (void) gcpro##1) | 2263 | #define GCPRO3(varname1, varname2, varname3) \ |
| 2278 | #define GCPRO3_VAR(var1, var2, var3, gcpro) \ | 2264 | ((void) gcpro3, (void) gcpro2, (void) gcpro1) |
| 2279 | ((void) gcpro##3, (void) gcpro##2, (void) gcpro##1) | 2265 | #define GCPRO4(varname1, varname2, varname3, varname4) \ |
| 2280 | #define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \ | 2266 | ((void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1) |
| 2281 | ((void) gcpro##4, (void) gcpro##3, (void) gcpro##2, (void) gcpro##1) | 2267 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ |
| 2282 | #define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \ | 2268 | ((void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1) |
| 2283 | ((void) gcpro##5, (void) gcpro##4, (void) gcpro##3, (void) gcpro##2, \ | 2269 | #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ |
| 2284 | (void) gcpro##1) | 2270 | ((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, \ |
| 2285 | #define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \ | 2271 | (void) gcpro1) |
| 2286 | ((void) gcpro##6, (void) gcpro##5, (void) gcpro##4, (void) gcpro##3, \ | 2272 | #define UNGCPRO ((void) 0) |
| 2287 | (void) gcpro##2, (void) gcpro##1) | ||
| 2288 | #define UNGCPRO_VAR(gcpro) ((void) 0) | ||
| 2289 | 2273 | ||
| 2290 | #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ | 2274 | #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ |
| 2291 | 2275 | ||
| 2292 | #ifndef DEBUG_GCPRO | 2276 | #ifndef DEBUG_GCPRO |
| 2293 | 2277 | ||
| 2294 | #define GCPRO1_VAR(var1, gcpro) \ | 2278 | #define GCPRO1(varname) \ |
| 2295 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2279 | {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ |
| 2296 | gcprolist = &gcpro##1; } | 2280 | gcprolist = &gcpro1; } |
| 2297 | 2281 | ||
| 2298 | #define GCPRO2_VAR(var1, var2, gcpro) \ | 2282 | #define GCPRO2(varname1, varname2) \ |
| 2299 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2283 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2300 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2284 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2301 | gcprolist = &gcpro##2; } | 2285 | gcprolist = &gcpro2; } |
| 2302 | 2286 | ||
| 2303 | #define GCPRO3_VAR(var1, var2, var3, gcpro) \ | 2287 | #define GCPRO3(varname1, varname2, varname3) \ |
| 2304 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2288 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2305 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2289 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2306 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2290 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2307 | gcprolist = &gcpro##3; } | 2291 | gcprolist = &gcpro3; } |
| 2308 | 2292 | ||
| 2309 | #define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \ | 2293 | #define GCPRO4(varname1, varname2, varname3, varname4) \ |
| 2310 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2294 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2311 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2295 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2312 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2296 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2313 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2297 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2314 | gcprolist = &gcpro##4; } | 2298 | gcprolist = &gcpro4; } |
| 2315 | 2299 | ||
| 2316 | #define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \ | 2300 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ |
| 2317 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2301 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2318 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2302 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2319 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2303 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2320 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2304 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2321 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2305 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2322 | gcprolist = &gcpro##5; } | 2306 | gcprolist = &gcpro5; } |
| 2323 | 2307 | ||
| 2324 | #define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \ | 2308 | #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ |
| 2325 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2309 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2326 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2310 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2327 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2311 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2328 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2312 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2329 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2313 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2330 | gcpro##6 .next = &gcpro##5; gcpro##6 .var = &var6; gcpro##6 .nvars = 1; \ | 2314 | gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \ |
| 2331 | gcprolist = &gcpro##6; } | 2315 | gcprolist = &gcpro6; } |
| 2332 | 2316 | ||
| 2333 | #define UNGCPRO_VAR(gcpro) (gcprolist = gcpro##1 .next) | 2317 | #define UNGCPRO (gcprolist = gcpro1.next) |
| 2334 | 2318 | ||
| 2335 | #else | 2319 | #else |
| 2336 | 2320 | ||
| 2337 | extern int gcpro_level; | 2321 | extern int gcpro_level; |
| 2338 | 2322 | ||
| 2339 | #define GCPRO1_VAR(var1, gcpro) \ | 2323 | #define GCPRO1(varname) \ |
| 2340 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2324 | {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ |
| 2341 | gcpro##1 .level = gcpro_level++; \ | 2325 | gcpro1.level = gcpro_level++; \ |
| 2342 | gcprolist = &gcpro##1; } | 2326 | gcprolist = &gcpro1; } |
| 2343 | 2327 | ||
| 2344 | #define GCPRO2_VAR(var1, var2, gcpro) \ | 2328 | #define GCPRO2(varname1, varname2) \ |
| 2345 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2329 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2346 | gcpro##1 .level = gcpro_level; \ | 2330 | gcpro1.level = gcpro_level; \ |
| 2347 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2331 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2348 | gcpro##2 .level = gcpro_level++; \ | 2332 | gcpro2.level = gcpro_level++; \ |
| 2349 | gcprolist = &gcpro##2; } | 2333 | gcprolist = &gcpro2; } |
| 2350 | 2334 | ||
| 2351 | #define GCPRO3_VAR(var1, var2, var3, gcpro) \ | 2335 | #define GCPRO3(varname1, varname2, varname3) \ |
| 2352 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2336 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2353 | gcpro##1 .level = gcpro_level; \ | 2337 | gcpro1.level = gcpro_level; \ |
| 2354 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2338 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2355 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2339 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2356 | gcpro##3 .level = gcpro_level++; \ | 2340 | gcpro3.level = gcpro_level++; \ |
| 2357 | gcprolist = &gcpro##3; } | 2341 | gcprolist = &gcpro3; } |
| 2358 | 2342 | ||
| 2359 | #define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \ | 2343 | #define GCPRO4(varname1, varname2, varname3, varname4) \ |
| 2360 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2344 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2361 | gcpro##1 .level = gcpro_level; \ | 2345 | gcpro1.level = gcpro_level; \ |
| 2362 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2346 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2363 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2347 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2364 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2348 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2365 | gcpro##4 .level = gcpro_level++; \ | 2349 | gcpro4.level = gcpro_level++; \ |
| 2366 | gcprolist = &gcpro##4; } | 2350 | gcprolist = &gcpro4; } |
| 2367 | 2351 | ||
| 2368 | #define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \ | 2352 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ |
| 2369 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2353 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2370 | gcpro##1 .level = gcpro_level; \ | 2354 | gcpro1.level = gcpro_level; \ |
| 2371 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2355 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2372 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2356 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2373 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2357 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2374 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2358 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2375 | gcpro##5 .level = gcpro_level++; \ | 2359 | gcpro5.level = gcpro_level++; \ |
| 2376 | gcprolist = &gcpro##5; } | 2360 | gcprolist = &gcpro5; } |
| 2377 | 2361 | ||
| 2378 | #define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \ | 2362 | #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ |
| 2379 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2363 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2380 | gcpro##1 .level = gcpro_level; \ | 2364 | gcpro1.level = gcpro_level; \ |
| 2381 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2365 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2382 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2366 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2383 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2367 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2384 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2368 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2385 | gcpro##6 .next = &gcpro##5; gcpro##6 .var = &var6; gcpro##6 .nvars = 1; \ | 2369 | gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \ |
| 2386 | gcpro##6 .level = gcpro_level++; \ | 2370 | gcpro6.level = gcpro_level++; \ |
| 2387 | gcprolist = &gcpro##6; } | 2371 | gcprolist = &gcpro6; } |
| 2388 | 2372 | ||
| 2389 | #define UNGCPRO_VAR(gcpro) \ | 2373 | #define UNGCPRO \ |
| 2390 | ((--gcpro_level != gcpro##1 .level) \ | 2374 | ((--gcpro_level != gcpro1.level) \ |
| 2391 | ? (abort (), 0) \ | 2375 | ? (abort (), 0) \ |
| 2392 | : ((gcprolist = gcpro##1 .next), 0)) | 2376 | : ((gcprolist = gcpro1.next), 0)) |
| 2393 | 2377 | ||
| 2394 | #endif /* DEBUG_GCPRO */ | 2378 | #endif /* DEBUG_GCPRO */ |
| 2395 | #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ | 2379 | #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ |
| @@ -3337,6 +3321,7 @@ extern Lisp_Object Qfile_name_handler_alist; | |||
| 3337 | #ifdef FLOAT_CATCH_SIGILL | 3321 | #ifdef FLOAT_CATCH_SIGILL |
| 3338 | extern void fatal_error_signal (int); | 3322 | extern void fatal_error_signal (int); |
| 3339 | #endif | 3323 | #endif |
| 3324 | extern Lisp_Object Qkill_emacs; | ||
| 3340 | EXFUN (Fkill_emacs, 1) NO_RETURN; | 3325 | EXFUN (Fkill_emacs, 1) NO_RETURN; |
| 3341 | #if HAVE_SETLOCALE | 3326 | #if HAVE_SETLOCALE |
| 3342 | void fixup_locale (void); | 3327 | void fixup_locale (void); |