6 /* Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2006,
7 * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public License
11 * as published by the Free Software Foundation; either version 3 of
12 * the License, or (at your option) any later version.
14 * This library is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
27 /**********************************************************************
28 This file is Guile's central public header.
30 When included by other files, this file should preceed any include
33 Under *NO* circumstances should new items be added to the global
34 namespace (via adding #define, typedef, or similar to this file) with
35 generic names. This usually means that any new names should be
36 prefixed by either SCM_ or GUILE_. i.e. do *not* #define HAVE_FOO or
37 SIZEOF_BAR. See configure.in, gen-scmconfig.h.in, and
38 gen-scmconfig.c for examples of how to properly handle this issue.
39 The main documentation is in gen-scmconfig.c.
41 "What's the difference between _scm.h and __scm.h?"
43 _scm.h is not installed; it's only visible to the libguile sources
44 themselves, and it includes config.h, the private config header.
46 __scm.h is installed, and is #included by <libguile.h>. If both
47 the client and libguile need some piece of information, and it
48 doesn't fit well into the header file for any particular module, it
49 should go in __scm.h. __scm.h includes scmconfig.h, the public
51 **********************************************************************/
53 /* What did the configure script discover about the outside world? */
54 #include "libguile/scmconfig.h"
60 * The following macros are used to provide additional information for the
61 * compiler, which may help to do better error checking and code
62 * optimization. A second benefit of these macros is, that they also provide
63 * additional information to the developers.
66 /* Return true (non-zero) if GCC version MAJ.MIN or later is being used
67 * (macro taken from glibc.) */
68 #if defined __GNUC__ && defined __GNUC_MINOR__
69 # define SCM_GNUC_PREREQ(maj, min) \
70 ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
72 # define SCM_GNUC_PREREQ(maj, min) 0
75 /* The macro SCM_NORETURN indicates that a function will never return.
77 * 1) int foo (char arg) SCM_NORETURN;
80 #define SCM_NORETURN __attribute__ ((noreturn))
85 /* The macro SCM_UNUSED indicates that a function, function argument or
86 * variable may potentially be unused.
88 * 1) static int unused_function (char arg) SCM_UNUSED;
89 * 2) int foo (char unused_argument SCM_UNUSED);
90 * 3) int unused_variable SCM_UNUSED;
93 #define SCM_UNUSED __attribute__ ((unused))
99 /* The SCM_EXPECT macros provide branch prediction hints to the compiler. To
100 * use only in places where the result of the expression under "normal"
101 * circumstances is known. */
102 #if SCM_GNUC_PREREQ (3, 0)
103 # define SCM_EXPECT __builtin_expect
105 # define SCM_EXPECT(_expr, _value) (_expr)
108 #define SCM_LIKELY(_expr) SCM_EXPECT ((_expr), 1)
109 #define SCM_UNLIKELY(_expr) SCM_EXPECT ((_expr), 0)
111 /* The SCM_INTERNAL macro makes it possible to explicitly declare a function
112 * as having "internal" linkage. However our current tack on this problem is
113 * to use GCC 4's -fvisibility=hidden, making functions internal by default,
114 * and then SCM_API marks them for export. */
115 #define SCM_INTERNAL extern
117 /* The SCM_DEPRECATED macro is used in declarations of deprecated functions
118 * or variables. Defining `SCM_BUILDING_DEPRECATED_CODE' allows deprecated
119 * functions to be implemented in terms of deprecated functions, and allows
120 * deprecated functions to be referred to by `scm_c_define_gsubr ()'. */
121 #if !defined (SCM_BUILDING_DEPRECATED_CODE) && SCM_GNUC_PREREQ (3, 0)
122 # define SCM_DEPRECATED SCM_API __attribute__ ((__deprecated__))
124 # define SCM_DEPRECATED SCM_API
127 /* The SCM_ALIGNED macro, when defined, can be used to instruct the compiler
128 * to honor the given alignment constraint. */
130 # define SCM_ALIGNED(x) __attribute__ ((aligned (x)))
131 #elif defined __INTEL_COMPILER
132 # define SCM_ALIGNED(x) __declspec (align (x))
134 /* Don't know how to align things. */
138 /* The SCM_MALLOC macro can be used in function declarations to tell the
139 * compiler that a function may be treated as if any non-NULL pointer it returns
140 * cannot alias any other pointer valid when the function returns. */
141 #if SCM_GNUC_PREREQ (3, 0)
142 # define SCM_MALLOC __attribute__ ((__malloc__))
148 /* {Supported Options}
150 * These may be defined or undefined.
153 /* #define GUILE_DEBUG_FREELIST */
156 /* Use engineering notation when converting numbers strings?
161 /* {Unsupported Options}
163 * These must be defined as given here.
167 /* Guile Scheme supports the #f/() distinction; Guile Lisp won't. We
168 have horrible plans for their unification. */
173 /* Random options (not yet supported or in final form). */
175 #define STACK_CHECKING
176 #undef NO_CEVAL_STACK_CHECKING
180 /* SCM_API is a macro prepended to all function and data definitions
181 which should be exported from libguile. */
183 #if defined BUILDING_LIBGUILE && defined HAVE_VISIBILITY
184 # define SCM_API extern __attribute__((__visibility__("default")))
185 #elif defined BUILDING_LIBGUILE && defined _MSC_VER
186 # define SCM_API __declspec(dllexport) extern
187 #elif defined _MSC_VER
188 # define SCM_API __declspec(dllimport) extern
190 # define SCM_API extern
195 /* {Debugging Options}
197 * These compile time options determine whether to include code that is only
198 * useful for debugging guile itself or C level extensions to guile. The
199 * common prefix for all option macros of this kind is "SCM_DEBUG_". It is
200 * guaranteed that a macro named SCM_DEBUG_XXX is always defined (typically to
201 * either 0 or 1), i. e. there is no need to test for the undefined case.
202 * This allows to use these definitions comfortably within code, as in the
204 * #define FOO do { if (SCM_DEBUG_XXX) bar(); else baz(); } while (0)
205 * Any sane compiler will remove the unused branch without any performance
206 * penalty for the resulting code.
208 * Note: Some SCM_DEBUG_XXX options are not settable at configure time.
209 * To change the value of such options you will have to edit this header
210 * file or give suitable options to make, like:
211 * make all CFLAGS="-DSCM_DEBUG_XXX=1 ..."
215 /* The value of SCM_DEBUG determines the default for most of the not yet
216 * defined debugging options. This allows, for example, to enable most of the
217 * debugging options by simply defining SCM_DEBUG as 1.
223 /* For debugging purposes: define this is to ensure nobody is using
224 * the mark bits outside of the marking phase. This is meant for
225 * debugging purposes only.
227 #ifndef SCM_DEBUG_MARKING_API
228 #define SCM_DEBUG_MARKING_API 0
231 /* If SCM_DEBUG_CELL_ACCESSES is set to 1, cell accesses will perform
232 * exhaustive parameter checking: It will be verified that cell parameters
233 * actually point to a valid heap cell. Note: If this option is enabled,
234 * guile will run about ten times slower than normally.
236 #ifndef SCM_DEBUG_CELL_ACCESSES
237 #define SCM_DEBUG_CELL_ACCESSES SCM_DEBUG
240 /* If SCM_DEBUG_INTERRUPTS is set to 1, with every deferring and allowing of
241 * interrupts a consistency check will be performed.
243 #ifndef SCM_DEBUG_INTERRUPTS
244 #define SCM_DEBUG_INTERRUPTS SCM_DEBUG
247 /* If SCM_DEBUG_PAIR_ACCESSES is set to 1, accesses to cons cells will be
248 * exhaustively checked. Note: If this option is enabled, guile will run
249 * slower than normally.
251 #ifndef SCM_DEBUG_PAIR_ACCESSES
252 #define SCM_DEBUG_PAIR_ACCESSES SCM_DEBUG
255 /* If SCM_DEBUG_REST_ARGUMENT is set to 1, functions that take rest arguments
256 * will check whether the rest arguments are actually passed as a proper list.
257 * Otherwise, if SCM_DEBUG_REST_ARGUMENT is 0, functions that take rest
258 * arguments will take it for granted that these are passed as a proper list.
260 #ifndef SCM_DEBUG_REST_ARGUMENT
261 #define SCM_DEBUG_REST_ARGUMENT SCM_DEBUG
264 /* The macro SCM_DEBUG_TYPING_STRICTNESS indicates what level of type checking
265 * shall be performed with respect to the use of the SCM datatype. The macro
266 * may be defined to one of the values 0, 1 and 2.
268 * A value of 0 means that there will be no compile time type checking, since
269 * the SCM datatype will be declared as an integral type. This setting should
270 * only be used on systems, where casting from integral types to pointers may
271 * lead to loss of bit information.
273 * A value of 1 means that there will an intermediate level of compile time
274 * type checking, since the SCM datatype will be declared as a pointer to an
275 * undefined struct. This setting is the default, since it does not cost
276 * anything in terms of performance or code size.
278 * A value of 2 provides a maximum level of compile time type checking since
279 * the SCM datatype will be declared as a struct. This setting should be used
280 * for _compile time_ type checking only, since the compiled result is likely
281 * to be quite inefficient. The right way to make use of this option is to do
282 * a 'make clean; make CFLAGS=-DSCM_DEBUG_TYPING_STRICTNESS=2', fix your
283 * errors, and then do 'make clean; make'.
285 #ifndef SCM_DEBUG_TYPING_STRICTNESS
286 #define SCM_DEBUG_TYPING_STRICTNESS 1
289 /* If SCM_DEBUG_DEBUGGING_SUPPORT is set to 1, guile will provide a set of
290 * special functions that support debugging with a debugger like gdb or
291 * debugging of guile internals on the scheme level. The behaviour of guile
292 * is not changed by this macro, only the set of functions that are available
293 * will differ. All functions that are introduced this way have the prefix
294 * 'scm_dbg_' on the C level and the prefix 'dbg-' on the scheme level. This
295 * allows to easily determine the set of support functions, given that your
296 * debugger or repl provide automatic name completion. Note that these
297 * functions are intended to be used during interactive debugging sessions
298 * only. They are not considered part of guile's official API. They may
299 * change or disappear without notice or deprecation phase.
301 #ifndef SCM_DEBUG_DEBUGGING_SUPPORT
302 #define SCM_DEBUG_DEBUGGING_SUPPORT SCM_DEBUG
309 * These compile time options determine whether code for certain features
310 * should be compiled into guile. The common prefix for all option macros
311 * of this kind is "SCM_ENABLE_". It is guaranteed that a macro named
312 * SCM_ENABLE_XXX is defined to be either 0 or 1, i. e. there is no need to
313 * test for the undefined case. This allows to use these definitions
314 * comfortably within code, as in the following example:
315 * #define FOO do { if (SCM_ENABLE_XXX) bar(); else baz(); } while (0)
316 * Any sane compiler will remove the unused branch without any performance
317 * penalty for the resulting code.
319 * Note: Some SCM_ENABLE_XXX options are not settable at configure time.
320 * To change the value of such options you will have to edit this header
321 * file or give suitable options to make, like:
322 * make all CFLAGS="-DSCM_ENABLE_XXX=1 ..."
325 /* If SCM_ENABLE_DEPRECATED is set to 1, deprecated code will be included in
326 * guile, as well as some functions to issue run-time warnings about uses of
327 * deprecated functions.
329 #ifndef SCM_ENABLE_DEPRECATED
330 #define SCM_ENABLE_DEPRECATED 0
335 /* {Architecture and compiler properties}
337 * Guile as of today can only work on systems which fulfill at least the
338 * following requirements:
340 * - scm_t_bits and SCM variables have at least 32 bits.
341 * Guile's type system is based on this assumption.
343 * - sizeof (scm_t_bits) >= sizeof (void*) and sizeof (SCM) >= sizeof (void*)
344 * Guile's type system is based on this assumption, since it must be
345 * possible to store pointers to cells on the heap in scm_t_bits and SCM
348 * - sizeof (scm_t_bits) >= 4 and sizeof (scm_t_bits) is a power of 2.
349 * Guile's type system is based on this assumption. In particular, it is
350 * assumed that cells, i. e. pairs of scm_t_bits variables, are eight
351 * character aligned. This is because three bits of a scm_t_bits variable
352 * that is holding a pointer to a cell on the heap must be available for
355 * - sizeof (scm_t_bits) <= sizeof (void*) and sizeof (SCM) <= sizeof (void*)
356 * In some parts of guile, scm_t_bits and SCM variables are passed to
357 * functions as void* arguments. Together with the requirement above, this
358 * requires a one-to-one correspondence between the size of a void* and the
359 * sizes of scm_t_bits and SCM variables.
361 * - numbers are encoded using two's complement.
362 * The implementation of the bitwise scheme level operations is based on
369 # define SCM_CHAR_BIT CHAR_BIT
371 # define SCM_CHAR_BIT 8
375 # define SCM_LONG_BIT LONG_BIT
377 # define SCM_LONG_BIT (SCM_CHAR_BIT * sizeof (long) / sizeof (char))
381 # define SCM_CHAR_CODE_LIMIT (UCHAR_MAX + 1L)
383 # define SCM_CHAR_CODE_LIMIT 256L
386 #define SCM_I_UTYPE_MAX(type) ((type)-1)
387 #define SCM_I_TYPE_MAX(type,umax) ((type)((umax)/2))
388 #define SCM_I_TYPE_MIN(type,umax) (-((type)((umax)/2))-1)
390 #define SCM_T_UINT8_MAX SCM_I_UTYPE_MAX(scm_t_uint8)
391 #define SCM_T_INT8_MIN SCM_I_TYPE_MIN(scm_t_int8,SCM_T_UINT8_MAX)
392 #define SCM_T_INT8_MAX SCM_I_TYPE_MAX(scm_t_int8,SCM_T_UINT8_MAX)
394 #define SCM_T_UINT16_MAX SCM_I_UTYPE_MAX(scm_t_uint16)
395 #define SCM_T_INT16_MIN SCM_I_TYPE_MIN(scm_t_int16,SCM_T_UINT16_MAX)
396 #define SCM_T_INT16_MAX SCM_I_TYPE_MAX(scm_t_int16,SCM_T_UINT16_MAX)
398 #define SCM_T_UINT32_MAX SCM_I_UTYPE_MAX(scm_t_uint32)
399 #define SCM_T_INT32_MIN SCM_I_TYPE_MIN(scm_t_int32,SCM_T_UINT32_MAX)
400 #define SCM_T_INT32_MAX SCM_I_TYPE_MAX(scm_t_int32,SCM_T_UINT32_MAX)
402 #define SCM_T_UINT64_MAX SCM_I_UTYPE_MAX(scm_t_uint64)
403 #define SCM_T_INT64_MIN SCM_I_TYPE_MIN(scm_t_int64,SCM_T_UINT64_MAX)
404 #define SCM_T_INT64_MAX SCM_I_TYPE_MAX(scm_t_int64,SCM_T_UINT64_MAX)
406 #if SCM_SIZEOF_LONG_LONG
407 #define SCM_I_ULLONG_MAX SCM_I_UTYPE_MAX(unsigned long long)
408 #define SCM_I_LLONG_MIN SCM_I_TYPE_MIN(long long,SCM_I_ULLONG_MAX)
409 #define SCM_I_LLONG_MAX SCM_I_TYPE_MAX(long long,SCM_I_ULLONG_MAX)
412 #define SCM_T_UINTMAX_MAX SCM_I_UTYPE_MAX(scm_t_uintmax)
413 #define SCM_T_INTMAX_MIN SCM_I_TYPE_MIN(scm_t_intmax,SCM_T_UINTMAX_MAX)
414 #define SCM_T_INTMAX_MAX SCM_I_TYPE_MAX(scm_t_intmax,SCM_T_UINTMAX_MAX)
416 #define SCM_T_UINTPTR_MAX SCM_I_UTYPE_MAX(scm_t_uintptr)
417 #define SCM_T_INTPTR_MIN SCM_I_TYPE_MIN(scm_t_intptr,SCM_T_UINTPTR_MAX)
418 #define SCM_T_INTPTR_MAX SCM_I_TYPE_MAX(scm_t_intptr,SCM_T_UINTPTR_MAX)
420 #define SCM_I_SIZE_MAX SCM_I_UTYPE_MAX(size_t)
421 #define SCM_I_SSIZE_MIN SCM_I_TYPE_MIN(ssize_t,SCM_I_SIZE_MAX)
422 #define SCM_I_SSIZE_MAX SCM_I_TYPE_MAX(ssize_t,SCM_I_SIZE_MAX)
426 #include "libguile/tags.h"
429 /* The type of subrs, i.e., Scheme procedures implemented in C. Empty
430 function declarators are used internally for pointers to functions of
431 any arity. However, these are equivalent to `(void)' in C++, are
432 obsolescent as of C99, and trigger `strict-prototypes' GCC warnings
435 #ifdef BUILDING_LIBGUILE
436 typedef SCM (* scm_t_subr
) ();
438 typedef void *scm_t_subr
;
443 # ifndef CHEAP_CONTINUATIONS
444 typedef int jmp_buf[17];
445 extern int setjump(jmp_buf env
);
446 extern int longjump(jmp_buf env
, int ret
);
447 # define setjmp setjump
448 # define longjmp longjump
454 typedef int jmp_buf[112];
455 extern int setjump(jmp_buf env
);
456 extern int longjump(jmp_buf env
, int ret
);
457 # define setjmp setjump
458 # define longjmp longjump
459 # else /* ndef _CRAY1 */
460 # if defined (__ia64__)
461 /* For IA64, emulate the setjmp API using getcontext. */
463 # include <ucontext.h>
468 # define SCM_I_SETJMP(JB) \
470 getcontext (&((JB).ctx)), \
471 ((JB).fresh ? ((JB).fresh = 0, 0) : 1) )
472 # define SCM_I_LONGJMP(JB,VAL) scm_ia64_longjmp (&(JB), VAL)
473 void scm_ia64_longjmp (scm_i_jmp_buf
*, int);
474 # else /* ndef __ia64__ */
476 # endif /* ndef __ia64__ */
477 # endif /* ndef _CRAY1 */
478 #endif /* ndef vms */
480 /* For any platform where SCM_I_SETJMP hasn't been defined in some
481 special way above, map SCM_I_SETJMP, SCM_I_LONGJMP and
482 scm_i_jmp_buf to setjmp, longjmp and jmp_buf. */
484 #define scm_i_jmp_buf jmp_buf
485 #define SCM_I_SETJMP setjmp
486 #define SCM_I_LONGJMP longjmp
489 /* James Clark came up with this neat one instruction fix for
490 * continuations on the SPARC. It flushes the register windows so
491 * that all the state of the process is contained in the stack.
494 #if defined (sparc) || defined (__sparc__) || defined (__sparc)
495 # define SCM_FLUSH_REGISTER_WINDOWS asm("ta 3")
497 # define SCM_FLUSH_REGISTER_WINDOWS /* empty */
500 /* If stack is not longword aligned then
503 /* #define SHORT_ALIGN */
515 typedef short SCM_STACKITEM
;
517 typedef long SCM_STACKITEM
;
520 /* Cast pointer through (void *) in order to avoid compiler warnings
521 when strict aliasing is enabled */
522 #define SCM_STACK_PTR(ptr) ((SCM_STACKITEM *) (void *) (ptr))
525 SCM_API
void scm_async_tick (void);
527 #ifdef BUILDING_LIBGUILE
529 /* FIXME: should change names */
530 # define SCM_ASYNC_TICK \
533 if (SCM_UNLIKELY (SCM_I_CURRENT_THREAD->pending_asyncs)) \
534 scm_async_click (); \
538 /* SCM_ASYNC_TICK_WITH_CODE is only available to Guile itself */
539 # define SCM_ASYNC_TICK_WITH_CODE(thr, stmt) \
542 if (SCM_UNLIKELY (thr->pending_asyncs)) \
545 scm_async_click (); \
550 #else /* !BUILDING_LIBGUILE */
552 # define SCM_ASYNC_TICK (scm_async_tick ())
554 #endif /* !BUILDING_LIBGUILE */
557 /* Anthony Green writes:
558 When the compiler sees...
562 ...it doesn't actually promise to keep the critical code within the
563 boundries of the DEFER/ALLOW_INTS instructions. It may very well
564 schedule it outside of the magic defined in those macros.
566 However, GCC's volatile asm feature forms a barrier over which code is
567 never moved. So if you add...
569 ...to each of the DEFER_INTS and ALLOW_INTS macros, the critical
570 code will always remain in place. asm's without inputs or outputs
571 are implicitly volatile. */
573 #define SCM_FENCE asm /* volatile */ ("")
574 #elif defined (__INTEL_COMPILER) && defined (__ia64)
575 #define SCM_FENCE __memory_barrier()
583 SCM_THREAD_SWITCHING_CODE; \
594 #define SCM_ASSERT(_cond, _arg, _pos, _subr)
595 #define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg)
596 #define SCM_ASRTGO(_cond, _label)
598 #define SCM_ASSERT(_cond, _arg, _pos, _subr) \
599 do { if (SCM_UNLIKELY (!(_cond))) \
600 scm_wrong_type_arg (_subr, _pos, _arg); } while (0)
601 #define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg) \
602 do { if (SCM_UNLIKELY (!(_cond))) \
603 scm_wrong_type_arg_msg(_subr, _pos, _arg, _msg); } while (0)
604 #define SCM_ASRTGO(_cond, _label) \
605 do { if (SCM_UNLIKELY (!(_cond))) \
606 goto _label; } while (0)
613 /* Dirk:FIXME:: In all of the SCM_WTA_DISPATCH_* macros it is assumed that
614 * 'gf' is zero if uninitialized. It would be cleaner if some valid SCM value
615 * like SCM_BOOL_F or SCM_UNDEFINED was chosen.
618 SCM_API SCM
scm_call_generic_0 (SCM gf
);
620 #define SCM_WTA_DISPATCH_0(gf, subr) \
621 return (SCM_UNPACK (gf) \
622 ? scm_call_generic_0 ((gf)) \
623 : (scm_error_num_args_subr ((subr)), SCM_UNSPECIFIED))
624 #define SCM_GASSERT0(cond, gf, subr) \
625 if (SCM_UNLIKELY(!(cond))) \
626 SCM_WTA_DISPATCH_0((gf), (subr))
628 SCM_API SCM
scm_call_generic_1 (SCM gf
, SCM a1
);
630 #define SCM_WTA_DISPATCH_1(gf, a1, pos, subr) \
631 return (SCM_UNPACK (gf) \
632 ? scm_call_generic_1 ((gf), (a1)) \
633 : (scm_wrong_type_arg ((subr), (pos), (a1)), SCM_UNSPECIFIED))
635 /* This form is for dispatching a subroutine. */
636 #define SCM_WTA_DISPATCH_1_SUBR(subr, a1, pos) \
637 return (SCM_UNPACK ((*SCM_SUBR_GENERIC (subr))) \
638 ? scm_call_generic_1 ((*SCM_SUBR_GENERIC (subr)), (a1)) \
639 : (scm_i_wrong_type_arg_symbol (SCM_SUBR_NAME (subr), (pos), (a1)), SCM_UNSPECIFIED))
641 #define SCM_GASSERT1(cond, gf, a1, pos, subr) \
642 if (SCM_UNLIKELY (!(cond))) \
643 SCM_WTA_DISPATCH_1((gf), (a1), (pos), (subr))
645 SCM_API SCM
scm_call_generic_2 (SCM gf
, SCM a1
, SCM a2
);
647 #define SCM_WTA_DISPATCH_2(gf, a1, a2, pos, subr) \
648 return (SCM_UNPACK (gf) \
649 ? scm_call_generic_2 ((gf), (a1), (a2)) \
650 : (scm_wrong_type_arg ((subr), (pos), \
651 (pos) == SCM_ARG1 ? (a1) : (a2)), \
653 #define SCM_GASSERT2(cond, gf, a1, a2, pos, subr) \
654 if (SCM_UNLIKELY (!(cond))) \
655 SCM_WTA_DISPATCH_2((gf), (a1), (a2), (pos), (subr))
657 SCM_API SCM
scm_apply_generic (SCM gf
, SCM args
);
659 #define SCM_WTA_DISPATCH_n(gf, args, pos, subr) \
660 return (SCM_UNPACK (gf) \
661 ? scm_apply_generic ((gf), (args)) \
662 : (scm_wrong_type_arg ((subr), (pos), \
663 scm_list_ref ((args), \
664 scm_from_int ((pos) - 1))), \
666 #define SCM_GASSERTn(cond, gf, args, pos, subr) \
667 if (SCM_UNLIKELY (!(cond))) \
668 SCM_WTA_DISPATCH_n((gf), (args), (pos), (subr))
670 #ifndef SCM_MAGIC_SNARFER
671 /* Let these macros pass through if
672 we are snarfing; thus we can tell the
673 difference between the use of an actual
674 number vs. the use of one of these macros --
675 actual numbers in SCM_VALIDATE_* and SCM_ASSERT
676 constructs must match the formal argument name,
677 but using SCM_ARG* avoids the test */
688 #endif /* SCM_MAGIC_SNARFER */
692 /* SCM_EXIT_SUCCESS is the default code to return from SCM if no errors
693 * were encountered. SCM_EXIT_FAILURE is the default code to return from
694 * SCM if errors were encountered. The return code can be explicitly
695 * specified in a SCM program with (scm_quit <n>).
698 #ifndef SCM_EXIT_SUCCESS
700 #define SCM_EXIT_SUCCESS 1
702 #define SCM_EXIT_SUCCESS 0
704 #endif /* ndef SCM_EXIT_SUCCESS */
705 #ifndef SCM_EXIT_FAILURE
707 #define SCM_EXIT_FAILURE 2
709 #define SCM_EXIT_FAILURE 1
711 #endif /* ndef SCM_EXIT_FAILURE */
713 /* Define SCM_C_INLINE_KEYWORD so that it can be used as a replacement
714 for the "inline" keyword, expanding to nothing when "inline" is not
719 #define SCM_C_INLINE_KEYWORD SCM_C_INLINE
721 #define SCM_C_INLINE_KEYWORD
724 /* Handling thread-local storage (TLS). */
726 #ifdef SCM_HAVE_THREAD_STORAGE_CLASS
727 # define SCM_THREAD_LOCAL __thread
729 # define SCM_THREAD_LOCAL
732 #endif /* SCM___SCM_H */