aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
authorPaul Eggert2011-12-10 16:56:50 -0800
committerPaul Eggert2011-12-10 16:56:50 -0800
commit8f50130c565eaf0ad7c49e4ad044c3291ecdfa71 (patch)
treec8129448cbbf387fe82667ccac02983592c688f1 /src/lisp.h
parent85a83e2e2585a1906dec5168ed96ad521b5849ed (diff)
parent7b9d523a07395ecea505be88f45c33d73aea7038 (diff)
downloademacs-8f50130c565eaf0ad7c49e4ad044c3291ecdfa71.tar.gz
emacs-8f50130c565eaf0ad7c49e4ad044c3291ecdfa71.zip
Merge from trunk.
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h267
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
2164extern void process_pending_signals (void); 2169extern 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
2178extern 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
2337extern int gcpro_level; 2321extern 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
3338extern void fatal_error_signal (int); 3322extern void fatal_error_signal (int);
3339#endif 3323#endif
3324extern Lisp_Object Qkill_emacs;
3340EXFUN (Fkill_emacs, 1) NO_RETURN; 3325EXFUN (Fkill_emacs, 1) NO_RETURN;
3341#if HAVE_SETLOCALE 3326#if HAVE_SETLOCALE
3342void fixup_locale (void); 3327void fixup_locale (void);