* Incorporated fixes to interrupt deferring/allowing from Niibe.
[bpt/guile.git] / libguile / fluids.c
index b7e09c3..a5bc280 100644 (file)
@@ -1,4 +1,4 @@
-/*     Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,2000,2001 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
 #include "libguile/validate.h"
 
 static volatile int n_fluids;
-long scm_tc16_fluid;
+scm_bits_t scm_tc16_fluid;
 
 SCM
 scm_make_initial_fluids ()
 {
-  return scm_make_vector (SCM_MAKINUM (INITIAL_FLUIDS),
-                         SCM_BOOL_F);
+  return scm_c_make_vector (INITIAL_FLUIDS, SCM_BOOL_F);
 }
 
 static void
@@ -73,7 +72,7 @@ grow_fluids (scm_root_state *root_state, int new_length)
 
   old_fluids = root_state->fluids;
   old_length = SCM_VECTOR_LENGTH (old_fluids);
-  new_fluids = scm_make_vector (SCM_MAKINUM (new_length), SCM_BOOL_F);
+  new_fluids = scm_c_make_vector (new_length, SCM_BOOL_F);
   i = 0;
   while (i < old_length)
     {
@@ -96,7 +95,7 @@ scm_copy_fluids (scm_root_state *root_state)
 }
 
 static int
-print_fluid (SCM exp, SCM port, scm_print_state *pstate)
+fluid_print (SCM exp, SCM port, scm_print_state *pstate)
 {
   scm_puts ("#<fluid ", port);
   scm_intprint ((int) SCM_FLUID_NUM (exp), 10, port);
@@ -108,13 +107,9 @@ static int
 next_fluid_num ()
 {
   int n;
-#ifdef USE_THREADS
-  SCM_THREAD_CRITICAL_SECTION_START;
-#endif
+  SCM_CRITICAL_SECTION_START;
   n = n_fluids++;
-#ifdef USE_THREADS
-  SCM_THREAD_CRITICAL_SECTION_END;
-#endif
+  SCM_CRITICAL_SECTION_END;
   return n;
 }
 
@@ -131,7 +126,6 @@ SCM_DEFINE (scm_make_fluid, "make-fluid", 0, 0, 0,
 {
   int n;
 
-  SCM_DEFER_INTS;
   n = next_fluid_num ();
   SCM_RETURN_NEWSMOB (scm_tc16_fluid, n);
 }
@@ -139,7 +133,8 @@ SCM_DEFINE (scm_make_fluid, "make-fluid", 0, 0, 0,
 
 SCM_DEFINE (scm_fluid_p, "fluid?", 1, 0, 0, 
            (SCM obj),
-           "Return #t iff @var{obj} is a fluid; otherwise, return #f.")
+           "Return @code{#t} iff @var{obj} is a fluid; otherwise, return\n"
+           "@code{#f}.")
 #define FUNC_NAME s_scm_fluid_p
 {
   return SCM_BOOL(SCM_FLUIDP (obj));
@@ -148,8 +143,9 @@ SCM_DEFINE (scm_fluid_p, "fluid?", 1, 0, 0,
 
 SCM_DEFINE (scm_fluid_ref, "fluid-ref", 1, 0, 0, 
            (SCM fluid),
-           "Return the value associated with @var{fluid} in the current dynamic root.\n"
-           "If @var{fluid} has not been set, then this returns #f.")
+           "Return the value associated with @var{fluid} in the current\n"
+           "dynamic root.  If @var{fluid} has not been set, then return\n"
+           "@code{#f}.")
 #define FUNC_NAME s_scm_fluid_ref
 {
   int n;
@@ -184,7 +180,7 @@ SCM_DEFINE (scm_fluid_set_x, "fluid-set!", 2, 0, 0,
 void
 scm_swap_fluids (SCM fluids, SCM vals)
 {
-  while (SCM_NIMP (fluids))
+  while (!SCM_NULLP (fluids))
     {
       SCM fl = SCM_CAR (fluids);
       SCM old_val = scm_fluid_ref (fl);
@@ -201,7 +197,7 @@ same fluid appears multiple times in the fluids list. */
 void
 scm_swap_fluids_reverse (SCM fluids, SCM vals)
 {
-  if (SCM_NIMP (fluids))
+  if (!SCM_NULLP (fluids))
     {
       SCM fl, old_val;
 
@@ -258,8 +254,8 @@ scm_internal_with_fluids (SCM fluids, SCM values, SCM (*cproc) (), void *cdata)
 void
 scm_init_fluids ()
 {
-  scm_tc16_fluid = scm_make_smob_type_mfpe ("fluid", 0,
-                                           NULL, NULL, print_fluid, NULL);
+  scm_tc16_fluid = scm_make_smob_type ("fluid", 0);
+  scm_set_smob_print (scm_tc16_fluid, fluid_print);
 #ifndef SCM_MAGIC_SNARFER
 #include "libguile/fluids.x"
 #endif