* dynwind.c (scm_swap_bindings): Ditto.
[bpt/guile.git] / libguile / __scm.h
index cd04599..9c530ca 100644 (file)
@@ -2,7 +2,7 @@
 
 #ifndef __SCMH
 #define __SCMH
-/*     Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
+/*     Copyright (C) 1995, 1996, 1998, 1999, 2000 Free Software Foundation, Inc.
  * 
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * whether to permit this exception to apply to your modifications.
  * If you do not wish that, delete this exception notice.  */
 \f
+
+/* "What's the difference between _scm.h and __scm.h?"
+
+   _scm.h is not installed; it's only visible to the libguile sources
+   themselves.
+
+   __scm.h is installed, and is #included by <libguile.h>.  If both
+   the client and libguile need some piece of information, and it
+   doesn't fit well into the header file for any particular module, it
+   should go in __scm.h.  */
+
+
 /* {Supported Options}
  *
  * These may be defined or undefined.
  */
 
+/* Old async mechanism */
+/* #define GUILE_OLD_ASYNC_CLICK */
+
+/* New scheme for garbage collection */
+#define GUILE_NEW_GC_SCHEME
+
+/* #define GUILE_DEBUG_FREELIST */
+
 /* If the compile FLAG `SCM_CAUTIOUS' is #defined then the number of
  * arguments is always checked for application of closures.  If the
  * compile FLAG `SCM_RECKLESS' is #defined then they are not checked.
 
 /* All the number support there is.
  */
-#define SCM_FLOATS
 #define BIGNUMS
 
 /* GC should relinquish empty cons-pair arenas. 
  */
+#ifndef GUILE_NEW_GC_SCHEME
 #define GC_FREE_SEGMENTS
+#endif
 
 /* Provide a scheme-accessible count-down timer that
  * generates a pseudo-interrupt.
 #define STACK_CHECKING
 #undef NO_CEVAL_STACK_CHECKING
 
+\f
+/* What did the configure script discover about the outside world?  */
+#include "libguile/scmconfig.h"
+
+#ifdef HAVE_LONG_LONGS
+
 /* Some auto-generated .h files contain unused prototypes
  * that need these typedefs.
  */
 typedef long long long_long;
 typedef unsigned long long ulong_long;
 
-
-\f
-/* What did the configure script discover about the outside world?  */
-#include "libguile/scmconfig.h"
-
-\f
-/* Write prototype declarations like this:
-     int foo SCM_P ((int a, int b));
-   At definitions, use K&R style declarations, but make sure there's a
-   declarative prototype (as above) in scope.  This will give you
-   argument type checking, when available, and be harmless otherwise.  */
-#ifdef __STDC__
-#  define SCM_P(x) x
-#else
-#  define SCM_P(x) ()
-#endif
+#endif /* HAVE_LONG_LONGS */
 
 \f
 
@@ -238,11 +250,10 @@ typedef long SCM_STACKITEM;
 #define SCM_THREAD_DEFER
 #define SCM_THREAD_ALLOW
 #define SCM_THREAD_REDEFER
-#define SCM_THREAD_REALLOW_1
-#define SCM_THREAD_REALLOW_2
 #define SCM_THREAD_SWITCHING_CODE
 #endif
 
+#ifdef GUILE_OLD_ASYNC_CLICK
 extern unsigned int scm_async_clock;
 
 #define SCM_ASYNC_TICK \
@@ -250,6 +261,15 @@ do { \
   if (0 == --scm_async_clock) \
     scm_async_click (); \
 } while(0)
+#else
+extern int scm_asyncs_pending_p;
+
+#define SCM_ASYNC_TICK /*fixme* should change names */ \
+do { \
+  if (scm_asyncs_pending_p) \
+    scm_async_click (); \
+} while (0)
+#endif
 
 #ifdef SCM_CAREFUL_INTS
 #define SCM_CHECK_NOT_DISABLED \
@@ -314,7 +334,6 @@ do { \
   scm_ints_disabled = 0; \
   SCM_FENCE; \
   SCM_THREAD_ALLOW; \
-  SCM_ASYNC_TICK; \
   SCM_FENCE; \
 } while (0)
 
@@ -331,15 +350,9 @@ do { \
 #define SCM_REALLOW_INTS \
 do { \
   SCM_FENCE; \
-  SCM_THREAD_REALLOW_1; \
   SCM_THREAD_SWITCHING_CODE; \
   SCM_FENCE; \
   --scm_ints_disabled; \
-  if (!scm_ints_disabled) \
-    { \
-      SCM_THREAD_REALLOW_2; \
-      SCM_ASYNC_TICK; \
-    } \
   SCM_FENCE; \
 } while (0)
 
@@ -348,6 +361,7 @@ do { \
 do { \
   SCM_DEFER_INTS; \
   SCM_ALLOW_INTS; \
+  SCM_ASYNC_TICK; \
 } while (0)
 
 \f
@@ -397,11 +411,15 @@ do { \
 
 #ifdef SCM_RECKLESS
 #define SCM_ASSERT(_cond, _arg, _pos, _subr)
+#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr)
 #define SCM_ASRTGO(_cond, _label)
 #else
 #define SCM_ASSERT(_cond, _arg, _pos, _subr) \
        if (!(_cond)) \
           scm_wta(_arg, (char *)(_pos), _subr)
+#define SCM_ASSERT_TYPE(_cond, _arg, _pos, _subr, _msg) \
+       if (!(_cond)) \
+          scm_wrong_type_arg_msg(_subr, _pos, _arg, _msg)
 #define SCM_ASRTGO(_cond, _label) \
         if (!(_cond)) \
           goto _label
@@ -542,3 +560,9 @@ extern struct errdesc scm_errmsgs[];
 \f
 
 #endif  /* __SCMH */
+
+/*
+  Local Variables:
+  c-file-style: "gnu"
+  End:
+*/