diff options
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 247 |
1 files changed, 118 insertions, 129 deletions
diff --git a/src/lisp.h b/src/lisp.h index 2056b7caff8..6b19396111c 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; |
| @@ -2222,143 +2227,127 @@ struct gcpro | |||
| 2222 | || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS) | 2227 | || GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS) |
| 2223 | 2228 | ||
| 2224 | 2229 | ||
| 2225 | #define GCPRO1(var) \ | ||
| 2226 | GCPRO1_VAR (var, gcpro) | ||
| 2227 | #define GCPRO2(var1, var2) \ | ||
| 2228 | GCPRO2_VAR (var1, var2, gcpro) | ||
| 2229 | #define GCPRO3(var1, var2, var3) \ | ||
| 2230 | GCPRO3_VAR (var1, var2, var3, gcpro) | ||
| 2231 | #define GCPRO4(var1, var2, var3, var4) \ | ||
| 2232 | GCPRO4_VAR (var1, var2, var3, var4, gcpro) | ||
| 2233 | #define GCPRO5(var1, var2, var3, var4, var5) \ | ||
| 2234 | GCPRO5_VAR (var1, var2, var3, var4, var5, gcpro) | ||
| 2235 | #define GCPRO6(var1, var2, var3, var4, var5, var6) \ | ||
| 2236 | GCPRO6_VAR (var1, var2, var3, var4, var5, var6, gcpro) | ||
| 2237 | #define UNGCPRO UNGCPRO_VAR (gcpro) | ||
| 2238 | |||
| 2239 | #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS | 2230 | #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS |
| 2240 | 2231 | ||
| 2241 | /* Do something silly with gcproN vars just so gcc shuts up. */ | 2232 | /* Do something silly with gcproN vars just so gcc shuts up. */ |
| 2242 | /* You get warnings from MIPSPro... */ | 2233 | /* You get warnings from MIPSPro... */ |
| 2243 | 2234 | ||
| 2244 | #define GCPRO1_VAR(var, gcpro) ((void) gcpro##1) | 2235 | #define GCPRO1(varname) ((void) gcpro1) |
| 2245 | #define GCPRO2_VAR(var1, var2, gcpro) \ | 2236 | #define GCPRO2(varname1, varname2) ((void) gcpro2, (void) gcpro1) |
| 2246 | ((void) gcpro##2, (void) gcpro##1) | 2237 | #define GCPRO3(varname1, varname2, varname3) \ |
| 2247 | #define GCPRO3_VAR(var1, var2, var3, gcpro) \ | 2238 | ((void) gcpro3, (void) gcpro2, (void) gcpro1) |
| 2248 | ((void) gcpro##3, (void) gcpro##2, (void) gcpro##1) | 2239 | #define GCPRO4(varname1, varname2, varname3, varname4) \ |
| 2249 | #define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \ | 2240 | ((void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1) |
| 2250 | ((void) gcpro##4, (void) gcpro##3, (void) gcpro##2, (void) gcpro##1) | 2241 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ |
| 2251 | #define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \ | 2242 | ((void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1) |
| 2252 | ((void) gcpro##5, (void) gcpro##4, (void) gcpro##3, (void) gcpro##2, \ | 2243 | #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ |
| 2253 | (void) gcpro##1) | 2244 | ((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, \ |
| 2254 | #define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \ | 2245 | (void) gcpro1) |
| 2255 | ((void) gcpro##6, (void) gcpro##5, (void) gcpro##4, (void) gcpro##3, \ | 2246 | #define UNGCPRO ((void) 0) |
| 2256 | (void) gcpro##2, (void) gcpro##1) | ||
| 2257 | #define UNGCPRO_VAR(gcpro) ((void) 0) | ||
| 2258 | 2247 | ||
| 2259 | #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ | 2248 | #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ |
| 2260 | 2249 | ||
| 2261 | #ifndef DEBUG_GCPRO | 2250 | #ifndef DEBUG_GCPRO |
| 2262 | 2251 | ||
| 2263 | #define GCPRO1_VAR(var1, gcpro) \ | 2252 | #define GCPRO1(varname) \ |
| 2264 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2253 | {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ |
| 2265 | gcprolist = &gcpro##1; } | 2254 | gcprolist = &gcpro1; } |
| 2266 | 2255 | ||
| 2267 | #define GCPRO2_VAR(var1, var2, gcpro) \ | 2256 | #define GCPRO2(varname1, varname2) \ |
| 2268 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2257 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2269 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2258 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2270 | gcprolist = &gcpro##2; } | 2259 | gcprolist = &gcpro2; } |
| 2271 | 2260 | ||
| 2272 | #define GCPRO3_VAR(var1, var2, var3, gcpro) \ | 2261 | #define GCPRO3(varname1, varname2, varname3) \ |
| 2273 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2262 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2274 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2263 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2275 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2264 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2276 | gcprolist = &gcpro##3; } | 2265 | gcprolist = &gcpro3; } |
| 2277 | 2266 | ||
| 2278 | #define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \ | 2267 | #define GCPRO4(varname1, varname2, varname3, varname4) \ |
| 2279 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2268 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2280 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2269 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2281 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2270 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2282 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2271 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2283 | gcprolist = &gcpro##4; } | 2272 | gcprolist = &gcpro4; } |
| 2284 | 2273 | ||
| 2285 | #define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \ | 2274 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ |
| 2286 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2275 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2287 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2276 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2288 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2277 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2289 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2278 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2290 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2279 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2291 | gcprolist = &gcpro##5; } | 2280 | gcprolist = &gcpro5; } |
| 2292 | 2281 | ||
| 2293 | #define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \ | 2282 | #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ |
| 2294 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2283 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2295 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2284 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2296 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2285 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2297 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2286 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2298 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2287 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2299 | gcpro##6 .next = &gcpro##5; gcpro##6 .var = &var6; gcpro##6 .nvars = 1; \ | 2288 | gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \ |
| 2300 | gcprolist = &gcpro##6; } | 2289 | gcprolist = &gcpro6; } |
| 2301 | 2290 | ||
| 2302 | #define UNGCPRO_VAR(gcpro) (gcprolist = gcpro##1 .next) | 2291 | #define UNGCPRO (gcprolist = gcpro1.next) |
| 2303 | 2292 | ||
| 2304 | #else | 2293 | #else |
| 2305 | 2294 | ||
| 2306 | extern int gcpro_level; | 2295 | extern int gcpro_level; |
| 2307 | 2296 | ||
| 2308 | #define GCPRO1_VAR(var1, gcpro) \ | 2297 | #define GCPRO1(varname) \ |
| 2309 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2298 | {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \ |
| 2310 | gcpro##1 .level = gcpro_level++; \ | 2299 | gcpro1.level = gcpro_level++; \ |
| 2311 | gcprolist = &gcpro##1; } | 2300 | gcprolist = &gcpro1; } |
| 2312 | 2301 | ||
| 2313 | #define GCPRO2_VAR(var1, var2, gcpro) \ | 2302 | #define GCPRO2(varname1, varname2) \ |
| 2314 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2303 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2315 | gcpro##1 .level = gcpro_level; \ | 2304 | gcpro1.level = gcpro_level; \ |
| 2316 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2305 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2317 | gcpro##2 .level = gcpro_level++; \ | 2306 | gcpro2.level = gcpro_level++; \ |
| 2318 | gcprolist = &gcpro##2; } | 2307 | gcprolist = &gcpro2; } |
| 2319 | 2308 | ||
| 2320 | #define GCPRO3_VAR(var1, var2, var3, gcpro) \ | 2309 | #define GCPRO3(varname1, varname2, varname3) \ |
| 2321 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2310 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2322 | gcpro##1 .level = gcpro_level; \ | 2311 | gcpro1.level = gcpro_level; \ |
| 2323 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2312 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2324 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2313 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2325 | gcpro##3 .level = gcpro_level++; \ | 2314 | gcpro3.level = gcpro_level++; \ |
| 2326 | gcprolist = &gcpro##3; } | 2315 | gcprolist = &gcpro3; } |
| 2327 | 2316 | ||
| 2328 | #define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \ | 2317 | #define GCPRO4(varname1, varname2, varname3, varname4) \ |
| 2329 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2318 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2330 | gcpro##1 .level = gcpro_level; \ | 2319 | gcpro1.level = gcpro_level; \ |
| 2331 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2320 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2332 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2321 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2333 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2322 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2334 | gcpro##4 .level = gcpro_level++; \ | 2323 | gcpro4.level = gcpro_level++; \ |
| 2335 | gcprolist = &gcpro##4; } | 2324 | gcprolist = &gcpro4; } |
| 2336 | 2325 | ||
| 2337 | #define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \ | 2326 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \ |
| 2338 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2327 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2339 | gcpro##1 .level = gcpro_level; \ | 2328 | gcpro1.level = gcpro_level; \ |
| 2340 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2329 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2341 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2330 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2342 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2331 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2343 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2332 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2344 | gcpro##5 .level = gcpro_level++; \ | 2333 | gcpro5.level = gcpro_level++; \ |
| 2345 | gcprolist = &gcpro##5; } | 2334 | gcprolist = &gcpro5; } |
| 2346 | 2335 | ||
| 2347 | #define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \ | 2336 | #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \ |
| 2348 | {gcpro##1 .next = gcprolist; gcpro##1 .var = &var1; gcpro##1 .nvars = 1; \ | 2337 | {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \ |
| 2349 | gcpro##1 .level = gcpro_level; \ | 2338 | gcpro1.level = gcpro_level; \ |
| 2350 | gcpro##2 .next = &gcpro##1; gcpro##2 .var = &var2; gcpro##2 .nvars = 1; \ | 2339 | gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \ |
| 2351 | gcpro##3 .next = &gcpro##2; gcpro##3 .var = &var3; gcpro##3 .nvars = 1; \ | 2340 | gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \ |
| 2352 | gcpro##4 .next = &gcpro##3; gcpro##4 .var = &var4; gcpro##4 .nvars = 1; \ | 2341 | gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \ |
| 2353 | gcpro##5 .next = &gcpro##4; gcpro##5 .var = &var5; gcpro##5 .nvars = 1; \ | 2342 | gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \ |
| 2354 | gcpro##6 .next = &gcpro##5; gcpro##6 .var = &var6; gcpro##6 .nvars = 1; \ | 2343 | gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \ |
| 2355 | gcpro##6 .level = gcpro_level++; \ | 2344 | gcpro6.level = gcpro_level++; \ |
| 2356 | gcprolist = &gcpro##6; } | 2345 | gcprolist = &gcpro6; } |
| 2357 | 2346 | ||
| 2358 | #define UNGCPRO_VAR(gcpro) \ | 2347 | #define UNGCPRO \ |
| 2359 | ((--gcpro_level != gcpro##1 .level) \ | 2348 | ((--gcpro_level != gcpro1.level) \ |
| 2360 | ? (abort (), 0) \ | 2349 | ? (abort (), 0) \ |
| 2361 | : ((gcprolist = gcpro##1 .next), 0)) | 2350 | : ((gcprolist = gcpro1.next), 0)) |
| 2362 | 2351 | ||
| 2363 | #endif /* DEBUG_GCPRO */ | 2352 | #endif /* DEBUG_GCPRO */ |
| 2364 | #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ | 2353 | #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ |