summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2011-05-15 12:28:55 +0200
committerAndy Wingo <wingo@pobox.com>2011-05-15 15:34:15 +0200
commit04245bb72ff6f59ddd0a293a1cbf2a1a2fb643bb (patch)
tree3979c7ace2ca2dad67a9b512926232bca7d9e05c
parent2acdd822fb2fa788eec06938415e3b0348ea815b (diff)
downloadguile-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.h39
-rw-r--r--libguile/_scm.h35
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"