diff options
Diffstat (limited to 'libguile/_scm.h')
-rw-r--r-- | libguile/_scm.h | 70 |
1 files changed, 60 insertions, 10 deletions
diff --git a/libguile/_scm.h b/libguile/_scm.h index a5c2ba800..003c36d62 100644 --- a/libguile/_scm.h +++ b/libguile/_scm.h @@ -4,7 +4,7 @@ #define SCM__SCM_H /* Copyright (C) 1995, 1996, 2000, 2001, 2002, 2006, 2008, 2009, 2010, - * 2011, 2013 Free Software Foundation, Inc. + * 2011, 2013, 2014 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -190,12 +190,69 @@ #define scm_to_off64_t scm_to_int64 #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 + + + +#define SCM_ASYNC_TICK_WITH_GUARD_CODE(thr, pre, post) \ + do \ + { \ + if (SCM_UNLIKELY (thr->pending_asyncs)) \ + { \ + pre; \ + scm_async_tick (); \ + post; \ + } \ + } \ + while (0) + +#define SCM_ASYNC_TICK_WITH_CODE(thr, stmt) \ + SCM_ASYNC_TICK_WITH_GUARD_CODE (thr, stmt, (void) 0) +#define SCM_ASYNC_TICK \ + SCM_ASYNC_TICK_WITH_CODE (SCM_I_CURRENT_THREAD, (void) 0) + + + + #if (defined __GNUC__) # define SCM_NOINLINE __attribute__ ((__noinline__)) #else # define SCM_NOINLINE /* noinline */ #endif + + /* The endianness marker in objcode. */ #ifdef WORDS_BIGENDIAN # define SCM_OBJCODE_ENDIANNESS "BE" @@ -210,8 +267,8 @@ #define SCM_OBJCODE_WORD_SIZE SCM_CPP_STRINGIFY (SIZEOF_VOID_P) /* Major and minor versions must be single characters. */ -#define SCM_OBJCODE_MAJOR_VERSION 2 -#define SCM_OBJCODE_MINOR_VERSION 0 +#define SCM_OBJCODE_MAJOR_VERSION 3 +#define SCM_OBJCODE_MINOR_VERSION 4 #define SCM_OBJCODE_MAJOR_VERSION_STRING \ SCM_CPP_STRINGIFY(SCM_OBJCODE_MAJOR_VERSION) #define SCM_OBJCODE_MINOR_VERSION_STRING \ @@ -221,13 +278,6 @@ #define SCM_OBJCODE_MACHINE_VERSION_STRING \ SCM_OBJCODE_ENDIANNESS "-" SCM_OBJCODE_WORD_SIZE "-" SCM_OBJCODE_VERSION_STRING -/* The objcode magic header. */ -#define SCM_OBJCODE_COOKIE \ - "GOOF----" SCM_OBJCODE_MACHINE_VERSION_STRING -#define SCM_OBJCODE_ENDIANNESS_OFFSET 8 -#define SCM_OBJCODE_WORD_SIZE_OFFSET 11 - - #endif /* SCM__SCM_H */ /* |