X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/c8a54c4b87d561a6a4cc6464846af51f8215ef1e..1f3908c46ad172c7bf024942f728726f59b6c2ef:/libguile/__scm.h diff --git a/libguile/__scm.h b/libguile/__scm.h index 6572fd979..d48ae66d6 100644 --- a/libguile/__scm.h +++ b/libguile/__scm.h @@ -63,9 +63,6 @@ /* Old async mechanism */ /* #define GUILE_OLD_ASYNC_CLICK */ -/* New scheme for garbage collection */ -#define GUILE_NEW_GC_SCHEME - /* #define GUILE_DEBUG_FREELIST */ /* If the compile FLAG `SCM_CAUTIOUS' is #defined then the number of @@ -89,11 +86,9 @@ */ #define BIGNUMS -/* GC should relinquish empty cons-pair arenas. - */ -#ifndef GUILE_NEW_GC_SCHEME -#define GC_FREE_SEGMENTS -#endif +/* GC should relinquish empty cons-pair arenas. */ +/* cmm:FIXME look at this after done mangling the GC */ +/* #define GC_FREE_SEGMENTS */ /* Provide a scheme-accessible count-down timer that * generates a pseudo-interrupt. @@ -160,6 +155,15 @@ #define SCM_DEBUG 0 #endif +/* If SCM_DEBUG_CELL_ACCESSES is set to 1, cell accesses will perform + * exhaustive parameter checking: It will be verified that cell parameters + * actually point to a valid heap cell. Note: If this option is enabled, + * guile will run about ten times slower than normally. + */ +#ifndef SCM_DEBUG_CELL_ACCESSES +#define SCM_DEBUG_CELL_ACCESSES SCM_DEBUG +#endif + /* If SCM_DEBUG_DEPRECATED is set to 1, deprecated code is not compiled. This * can be used by developers to get rid of references to deprecated code. */ @@ -167,13 +171,13 @@ #define SCM_DEBUG_DEPRECATED SCM_DEBUG #endif -/* If SCM_DEBUG_REST_ARGUMENTS is set to 1, functions that take rest arguments - * will check whether the rest arguments actually form a proper list. - * Otherwise it is assumed that the rest arguments form a proper list and only - * the parameters themselves, which are given as rest arguments, are checked. +/* If SCM_DEBUG_REST_ARGUMENT is set to 1, functions that take rest arguments + * will check whether the rest arguments are actually passed as a proper list. + * Otherwise, if SCM_DEBUG_REST_ARGUMENT is 0, functions that take rest + * arguments will take it for granted that these are passed as a proper list. */ -#ifndef SCM_DEBUG_REST_ARGUMENTS -#define SCM_DEBUG_REST_ARGUMENTS SCM_DEBUG +#ifndef SCM_DEBUG_REST_ARGUMENT +#define SCM_DEBUG_REST_ARGUMENT SCM_DEBUG #endif /* Use this for _compile time_ type checking only, since the compiled result @@ -199,35 +203,46 @@ typedef unsigned long long ulong_long; -/* Define +/* {Architecture and compiler properties} * - * SCM_CHAR_CODE_LIMIT == UCHAR_MAX + 1 - * SCM_MOST_POSITIVE_FIXNUM (LONG_MAX>>2) - * SCM_MOST_NEGATIVE_FIXNUM == SCM_SRS((long)LONG_MIN, 2) + * Guile as of today can only work on systems which fulfill at least the + * following requirements: + * - long ints have at least 32 bits. + * Guile's type system is based on this assumption. + * - long ints consist of at least four characters. + * It is assumed that cells, i. e. pairs of long ints, are eight character + * aligned, because three bits of a cell pointer are used for type data. + * - sizeof (void*) == sizeof (long int) + * Pointers are stored in SCM objects, and sometimes SCM objects are passed + * as void*. Thus, there has to be a one-to-one correspondence. + * - numbers are encoded using two's complement. + * The implementation of the bitwise scheme level operations is based on + * this assumption. + * - ... add more */ #ifdef HAVE_LIMITS_H # include -# ifdef UCHAR_MAX -# define SCM_CHAR_CODE_LIMIT (UCHAR_MAX+1L) -# else -# define SCM_CHAR_CODE_LIMIT 256L -# endif /* def UCHAR_MAX */ -# define SCM_MOST_POSITIVE_FIXNUM (LONG_MAX>>2) -# ifdef _UNICOS /* Stupid cray bug */ -# define SCM_MOST_NEGATIVE_FIXNUM ((long)LONG_MIN/4) -# else -# define SCM_MOST_NEGATIVE_FIXNUM SCM_SRS((long)LONG_MIN, 2) -# endif /* UNICOS */ +#endif + +#ifdef CHAR_BIT +# define SCM_CHAR_BIT CHAR_BIT +#else +# define SCM_CHAR_BIT 8 +#endif + +#ifdef LONG_BIT +# define SCM_LONG_BIT LONG_BIT +#else +# define SCM_LONG_BIT (SCM_CHAR_BIT * sizeof (long) / sizeof (char)) +#endif + +#ifdef UCHAR_MAX +# define SCM_CHAR_CODE_LIMIT (UCHAR_MAX + 1L) #else # define SCM_CHAR_CODE_LIMIT 256L -# define SCM_MOST_POSITIVE_FIXNUM ((long)((unsigned long)~0L>>3)) -# if (0 != ~0) -# define SCM_MOST_NEGATIVE_FIXNUM (-SCM_MOST_POSITIVE_FIXNUM-1) -# else -# define SCM_MOST_NEGATIVE_FIXNUM (-SCM_MOST_POSITIVE_FIXNUM) -# endif /* (0 != ~0) */ -#endif /* def HAVE_LIMITS_H */ +#endif + #ifdef STDC_HEADERS @@ -468,7 +483,7 @@ do { \ #ifdef SCM_RECKLESS #define SCM_ASSERT(_cond, _arg, _pos, _subr) -#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr) +#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg) #define SCM_ASRTGO(_cond, _label) #else #define SCM_ASSERT(_cond, _arg, _pos, _subr) \ @@ -546,53 +561,34 @@ extern SCM scm_apply_generic (SCM gf, SCM args); #define SCM_ARG5 5 #define SCM_ARG6 6 #define SCM_ARG7 7 - /* #define SCM_ARGERR(X) ((X) < SCM_WNA \ - ? (char *)(X) \ - : "wrong type argument") - */ -/* Following must match entry indexes in scm_errmsgs[]. - * Also, SCM_WNA must follow the last SCM_ARGn in sequence. +/* SCM_WNA must follow the last SCM_ARGn in sequence. */ #define SCM_WNA 8 - /* #define SCM_OVSCM_FLOW 9 */ -#define SCM_OUTOFRANGE 10 -#define SCM_NALLOC 11 - /* #define SCM_STACK_OVFLOW 12 */ - /* #define SCM_EXIT 13 */ -#endif /* SCM_MAGIC_SNARFER */ +#if (SCM_DEBUG_DEPRECATED == 0) -/* (...still matching scm_errmsgs) These - * are signals. Signals may become errors - * but are distinguished because they first - * try to invoke a handler that can resume - * the interrupted routine. - */ -#define SCM_HUP_SIGNAL 14 -#define SCM_INT_SIGNAL 15 -#define SCM_FPE_SIGNAL 16 -#define SCM_BUS_SIGNAL 17 -#define SCM_SEGV_SIGNAL 18 -#define SCM_ALRM_SIGNAL 19 -#define SCM_GC_SIGNAL 20 -#define SCM_TICK_SIGNAL 21 - -#define SCM_SIG_ORD(X) ((X) - SCM_HUP_SIGNAL) -#define SCM_ORD_SIG(X) ((X) + SCM_HUP_SIGNAL) -#define SCM_NUM_SIGS (SCM_SIG_ORD (SCM_TICK_SIGNAL) + 1) - -#if 0 -struct errdesc -{ - char *msg; - char *s_response; - short parent_err; -}; - - -extern struct errdesc scm_errmsgs[]; -#endif +/* Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of: */ +#define SCM_OUTOFRANGE 10 + +/* Use scm_memory_error instead of: */ +#define SCM_NALLOC 11 + +#define SCM_HUP_SIGNAL 14 +#define SCM_INT_SIGNAL 15 +#define SCM_FPE_SIGNAL 16 +#define SCM_BUS_SIGNAL 17 +#define SCM_SEGV_SIGNAL 18 +#define SCM_ALRM_SIGNAL 19 +#define SCM_GC_SIGNAL 20 +#define SCM_TICK_SIGNAL 21 +#define SCM_SIG_ORD(X) ((X) - SCM_HUP_SIGNAL) +#define SCM_ORD_SIG(X) ((X) + SCM_HUP_SIGNAL) +#define SCM_NUM_SIGS (SCM_SIG_ORD (SCM_TICK_SIGNAL) + 1) + +#endif /* SCM_DEBUG_DEPRECATED == 0 */ + +#endif /* SCM_MAGIC_SNARFER */ @@ -617,8 +613,6 @@ extern struct errdesc scm_errmsgs[]; #endif /* def vms */ #endif /* ndef SCM_EXIT_FAILURE */ - - #endif /* __SCMH */