diff -ur libguile_org/Makefile.in libguile/Makefile.in --- libguile_org/Makefile.in 2008-05-07 20:08:34.000000000 +0200 +++ libguile/Makefile.in 2008-07-09 17:59:52.000000000 +0200 @@ -298,6 +298,7 @@ SCM_I_GSC_T_UINT64 = @SCM_I_GSC_T_UINT64@ SCM_I_GSC_T_UINT8 = @SCM_I_GSC_T_UINT8@ SCM_I_GSC_T_UINTMAX = @SCM_I_GSC_T_UINTMAX@ +SCM_I_GSC_T_UINTPTR = @SCM_I_GSC_T_UINTPTR@ SCM_I_GSC_USE_NULL_THREADS = @SCM_I_GSC_USE_NULL_THREADS@ SCM_I_GSC_USE_PTHREAD_THREADS = @SCM_I_GSC_USE_PTHREAD_THREADS@ SED = @SED@ diff -ur libguile_org/__scm.h libguile/__scm.h --- libguile_org/__scm.h 2008-04-07 23:30:03.000000000 +0200 +++ libguile/__scm.h 2008-07-09 18:27:57.000000000 +0200 @@ -365,6 +365,12 @@ #define SCM_T_INT64_MAX SCM_I_TYPE_MAX(scm_t_int64,SCM_T_UINT64_MAX) #endif +#if SCM_HAVE_T_UINTPTR +#define SCM_T_UINTPTR_MAX SCM_I_UTYPE_MAX(scm_t_uintptr) +#define SCM_T_UINTPTR_MIN SCM_I_TYPE_MIN(scm_t_uintptr,SCM_T_UINTPTR_MAX) +#define SCM_T_UINTPTR_MAX SCM_I_TYPE_MAX(scm_t_uintptr,SCM_T_UINTPTR_MAX) +#endif + #if SCM_SIZEOF_LONG_LONG #define SCM_I_ULLONG_MAX SCM_I_UTYPE_MAX(unsigned long long) #define SCM_I_LLONG_MIN SCM_I_TYPE_MIN(long long,SCM_I_ULLONG_MAX) diff -ur libguile_org/gen-scmconfig.c libguile/gen-scmconfig.c --- libguile_org/gen-scmconfig.c 2008-04-24 19:35:57.000000000 +0200 +++ libguile/gen-scmconfig.c 2008-07-09 18:24:22.000000000 +0200 @@ -339,6 +339,19 @@ pf ("#define SCM_HAVE_T_UINT64 0 /* 0 or 1 */\n"); pf ("\n"); + pf ("/* unsigned integer large enough to hold pointer -- if available SCM_HAVE_T_UINTPTR will\n" + " be 1 and scm_t_uintptr will be a suitable type, otherwise\n" + " SCM_HAVE_T_UINTPTR will be 0. */\n"); + if (SCM_I_GSC_T_UINTPTR) + { + pf ("#define SCM_HAVE_T_UINTPTR 1 /* 0 or 1 */\n"); + pf ("typedef %s scm_t_intptr;\n", SCM_I_GSC_T_UINTPTR); + } + else + pf ("#define SCM_HAVE_T_UINTPTR 0 /* 0 or 1 */\n"); + + + pf ("\n"); pf ("/* scm_t_ptrdiff_t and size, always defined -- defined to long if\n" " platform doesn't have ptrdiff_t. */\n"); pf ("typedef %s scm_t_ptrdiff;\n", SCM_I_GSC_T_PTRDIFF); @@ -353,6 +366,7 @@ pf ("/* Size of uintptr_t or 0 if not available */\n"); pf ("#define SCM_SIZEOF_UINTPTR_T %d\n", SIZEOF_UINTPTR_T); + pf ("\n"); pf ("/* same as POSIX \"struct timespec\" -- always defined */\n"); #ifdef HAVE_STRUCT_TIMESPEC diff -ur libguile_org/gen-scmconfig.h.in libguile/gen-scmconfig.h.in --- libguile_org/gen-scmconfig.h.in 2008-04-07 23:30:03.000000000 +0200 +++ libguile/gen-scmconfig.h.in 2008-07-09 17:59:00.000000000 +0200 @@ -25,6 +25,7 @@ #define SCM_I_GSC_T_UINT64 @SCM_I_GSC_T_UINT64@ #define SCM_I_GSC_T_INTMAX @SCM_I_GSC_T_INTMAX@ #define SCM_I_GSC_T_UINTMAX @SCM_I_GSC_T_UINTMAX@ +#define SCM_I_GSC_T_UINTPTR @SCM_I_GSC_T_UINTPTR@ #define SCM_I_GSC_T_PTRDIFF @SCM_I_GSC_T_PTRDIFF@ #define SCM_I_GSC_USE_PTHREAD_THREADS @SCM_I_GSC_USE_PTHREAD_THREADS@ #define SCM_I_GSC_USE_NULL_THREADS @SCM_I_GSC_USE_NULL_THREADS@ diff -ur libguile_org/numbers.c libguile/numbers.c --- libguile_org/numbers.c 2008-05-07 17:29:55.000000000 +0200 +++ libguile/numbers.c 2008-07-09 18:25:29.000000000 +0200 @@ -5863,6 +5863,19 @@ #endif + +#if SCM_HAVE_T_UINTPTR + +#define TYPE scm_t_uintptr +#define TYPE_MIN 0 +#define TYPE_MAX SCM_T_UINTPTR_MAX +#define SIZEOF_TYPE 8 +#define SCM_TO_TYPE_PROTO(arg) scm_to_uintptr (arg) +#define SCM_FROM_TYPE_PROTO(arg) scm_from_uintptr (arg) +#include "libguile/conv-uinteger.i.c" + +#endif + void scm_to_mpz (SCM val, mpz_t rop) { diff -ur libguile_org/numbers.h libguile/numbers.h --- libguile_org/numbers.h 2008-04-07 23:30:03.000000000 +0200 +++ libguile/numbers.h 2008-07-09 18:31:06.000000000 +0200 @@ -331,6 +331,13 @@ #endif +#if SCM_HAVE_T_UINTPTR + +SCM_API scm_t_uintptr scm_to_uintptr (SCM x); +SCM_API SCM scm_from_uintptr (scm_t_uintptr x); + +#endif + SCM_API void scm_to_mpz (SCM x, mpz_t rop); SCM_API SCM scm_from_mpz (mpz_t rop);