diff --git a/NEWS b/NEWS index c6d63a654..96c5c2a11 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,8 @@ Changes in 2.0.13 (since 2.0.12): See "File System" in the manual, for more. +** New 'scm_to_uintptr_t' and 'scm_from_uintptr_t' C functions + * Bug fixes ** 'mkdir' procedure no longer calls umask(2) () diff --git a/doc/ref/api-data.texi b/doc/ref/api-data.texi index 188b3d544..7ac8e571a 100644 --- a/doc/ref/api-data.texi +++ b/doc/ref/api-data.texi @@ -1,6 +1,6 @@ @c -*-texinfo-*- @c This is part of the GNU Guile Reference Manual. -@c Copyright (C) 1996, 1997, 2000-2004, 2006-2015 +@c Copyright (C) 1996, 1997, 2000-2004, 2006-2016 @c Free Software Foundation, Inc. @c See the file guile.texi for copying conditions. @@ -434,6 +434,7 @@ function will always succeed and will always return an exact number. @deftypefnx {C Function} {unsigned long long} scm_to_ulong_long (SCM x) @deftypefnx {C Function} size_t scm_to_size_t (SCM x) @deftypefnx {C Function} ssize_t scm_to_ssize_t (SCM x) +@deftypefnx {C Function} scm_t_uintptr scm_to_uintptr_t (SCM x) @deftypefnx {C Function} scm_t_ptrdiff scm_to_ptrdiff_t (SCM x) @deftypefnx {C Function} scm_t_int8 scm_to_int8 (SCM x) @deftypefnx {C Function} scm_t_uint8 scm_to_uint8 (SCM x) @@ -468,6 +469,7 @@ the corresponding types are. @deftypefnx {C Function} SCM scm_from_ulong_long (unsigned long long x) @deftypefnx {C Function} SCM scm_from_size_t (size_t x) @deftypefnx {C Function} SCM scm_from_ssize_t (ssize_t x) +@deftypefnx {C Function} SCM scm_from_uintptr_t (uintptr_t x) @deftypefnx {C Function} SCM scm_from_ptrdiff_t (scm_t_ptrdiff x) @deftypefnx {C Function} SCM scm_from_int8 (scm_t_int8 x) @deftypefnx {C Function} SCM scm_from_uint8 (scm_t_uint8 x) diff --git a/libguile/numbers.h b/libguile/numbers.h index 0119f167b..9afd0590e 100644 --- a/libguile/numbers.h +++ b/libguile/numbers.h @@ -528,6 +528,18 @@ SCM_API SCM scm_from_mpz (mpz_t rop); #endif #endif +#if SCM_SIZEOF_UINTPTR_T == 4 +#define scm_to_uintptr_t scm_to_uint32 +#define scm_from_uintptr_t scm_from_uint32 +#else +#if SCM_SIZEOF_UINTPTR_T == 8 +#define scm_to_uintptr_t scm_to_uint64 +#define scm_from_uintptr_t scm_from_uint64 +#else +#error sizeof(scm_t_uintptr) is not 4 or 8. +#endif +#endif + #if SCM_SIZEOF_SCM_T_PTRDIFF == 4 #define scm_to_ptrdiff_t scm_to_int32 #define scm_from_ptrdiff_t scm_from_int32