diff options
author | Andy Wingo <wingo@pobox.com> | 2011-05-15 12:28:55 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-05-15 15:34:15 +0200 |
commit | 04245bb72ff6f59ddd0a293a1cbf2a1a2fb643bb (patch) | |
tree | 3979c7ace2ca2dad67a9b512926232bca7d9e05c | |
parent | 2acdd822fb2fa788eec06938415e3b0348ea815b (diff) | |
download | guile-04245bb72ff6f59ddd0a293a1cbf2a1a2fb643bb.tar.gz |
make SCM_I_SETJMP and SCM_I_LONGJMP private
* libguile/_scm.h (SCM_I_SETJMP, SCM_I_LONGJMP): Move to this private
header.
* libguile/__scm.h (scm_i_jmp_buf): Only define the scm_i_jmp_buf type
in this public header.
-rw-r--r-- | libguile/__scm.h | 39 | ||||
-rw-r--r-- | libguile/_scm.h | 35 |
2 files changed, 44 insertions, 30 deletions
diff --git a/libguile/__scm.h b/libguile/__scm.h index b5db4dcb4..f88475c8d 100644 --- a/libguile/__scm.h +++ b/libguile/__scm.h @@ -337,54 +337,33 @@ typedef void *scm_t_subr; -/* Setjmp and longjmp +/* scm_i_jmp_buf + * + * The corresponding SCM_I_SETJMP and SCM_I_LONGJMP are defined in the + * _scm.h private header. */ #if defined (vms) -/* VMS: Implement setjmp in terms of setjump. */ -typedef int jmp_buf[17]; -extern int setjump(jmp_buf env); -extern int longjump(jmp_buf env, int ret); -# define setjmp setjump -# define longjmp longjump +typedef int scm_i_jmp_buf[17]; #elif defined (_CRAY1) -/* Cray: Implement setjmp in terms of setjump. */ -typedef int jmp_buf[112]; -extern int setjump(jmp_buf env); -extern int longjump(jmp_buf env, int ret); -# define setjmp setjump -# define longjmp longjump +typedef int scm_i_jmp_buf[112]; #elif defined (__ia64__) -/* IA64: Implement setjmp in terms of getcontext. */ # include <signal.h> # include <ucontext.h> typedef struct { ucontext_t ctx; int fresh; } scm_i_jmp_buf; -# define SCM_I_SETJMP(JB) \ - ( (JB).fresh = 1, \ - getcontext (&((JB).ctx)), \ - ((JB).fresh ? ((JB).fresh = 0, 0) : 1) ) -# define SCM_I_LONGJMP(JB,VAL) scm_ia64_longjmp (&(JB), VAL) -void scm_ia64_longjmp (scm_i_jmp_buf *, int); #else -/* All other systems just use setjmp.h. */ # include <setjmp.h> - +typedef jmp_buf scm_i_jmp_buf; #endif -/* For any platform where SCM_I_SETJMP hasn't been defined in some - special way above, map SCM_I_SETJMP, SCM_I_LONGJMP and - scm_i_jmp_buf to setjmp, longjmp and jmp_buf. */ -#ifndef SCM_I_SETJMP -#define scm_i_jmp_buf jmp_buf -#define SCM_I_SETJMP setjmp -#define SCM_I_LONGJMP longjmp -#endif + + /* If stack is not longword aligned then */ diff --git a/libguile/_scm.h b/libguile/_scm.h index 284213032..d685f9736 100644 --- a/libguile/_scm.h +++ b/libguile/_scm.h @@ -191,6 +191,41 @@ #define scm_from_off64_t scm_from_int64 + + +#if defined (vms) +/* VMS: Implement SCM_I_SETJMP in terms of setjump. */ +extern int setjump(scm_i_jmp_buf env); +extern int longjump(scm_i_jmp_buf env, int ret); +#define SCM_I_SETJMP setjump +#define SCM_I_LONGJMP longjump + +#elif defined (_CRAY1) +/* Cray: Implement SCM_I_SETJMP in terms of setjump. */ +extern int setjump(scm_i_jmp_buf env); +extern int longjump(scm_i_jmp_buf env, int ret); +#define SCM_I_SETJMP setjump +#define SCM_I_LONGJMP longjump + +#elif defined (__ia64__) +/* IA64: Implement SCM_I_SETJMP in terms of getcontext. */ +# define SCM_I_SETJMP(JB) \ + ( (JB).fresh = 1, \ + getcontext (&((JB).ctx)), \ + ((JB).fresh ? ((JB).fresh = 0, 0) : 1) ) +# define SCM_I_LONGJMP(JB,VAL) scm_ia64_longjmp (&(JB), VAL) +void scm_ia64_longjmp (scm_i_jmp_buf *, int); + +#else +/* All other systems just use setjmp and longjmp. */ + +#define SCM_I_SETJMP setjmp +#define SCM_I_LONGJMP longjmp +#endif + + + + /* The endianness marker in objcode. */ #ifdef WORDS_BIGENDIAN # define SCM_OBJCODE_ENDIANNESS "BE" |