This is the mail archive of the guile@sourceware.cygnus.com mailing list for the Guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

fluids.c docs


Hello,

I added doc-strings for fluids.c.  Does this look OK?
(I retrieved the documentation of make-fluid from fluids.h)

By the way, fluid-set! returns a value.  SCM_UNSPECIFIED may be better?

Index: fluids.c
===================================================================
RCS file: /cvs/guile/guile/guile-core/libguile/fluids.c,v
retrieving revision 1.17
diff -c -r1.17 fluids.c
*** fluids.c	2000/03/09 18:58:58	1.17
--- fluids.c	2000/03/15 14:33:34
***************
*** 66,72 ****
  }
  
  static void
! grow_fluids (scm_root_state *root_state,int new_length)
  {
    SCM old_fluids, new_fluids;
    int old_length, i;
--- 66,72 ----
  }
  
  static void
! grow_fluids (scm_root_state *root_state, int new_length)
  {
    SCM old_fluids, new_fluids;
    int old_length, i;
***************
*** 98,111 ****
  static int
  print_fluid (SCM exp, SCM port, scm_print_state *pstate)
  {
!     scm_puts ("#<fluid ", port);
!     scm_intprint ((int) SCM_FLUID_NUM (exp), 10, port);
!     scm_putc ('>', port);
!     return 1;
  }
  
! static
! int next_fluid_num ()
  {
    int n;
  #ifdef USE_THREADS
--- 98,111 ----
  static int
  print_fluid (SCM exp, SCM port, scm_print_state *pstate)
  {
!   scm_puts ("#<fluid ", port);
!   scm_intprint ((int) SCM_FLUID_NUM (exp), 10, port);
!   scm_putc ('>', port);
!   return 1;
  }
  
! static int
! next_fluid_num ()
  {
    int n;
  #ifdef USE_THREADS
***************
*** 119,126 ****
  }
  
  SCM_DEFINE (scm_make_fluid, "make-fluid", 0, 0, 0, 
!             (),
! "")
  #define FUNC_NAME s_scm_make_fluid
  {
    int n;
--- 119,132 ----
  }
  
  SCM_DEFINE (scm_make_fluid, "make-fluid", 0, 0, 0, 
! 	    (),
! 	    "Return a newly created fluid.\n"
! 	    "Fluids are objects of a certain type (a smob) that can hold one SCM\n"
! 	    "value per dynamic root.  That is, modifications to this value are\n"
! 	    "only visible to code that executes within the same dynamic root as\n"
! 	    "the modifying code.  When a new dynamic root is constructed, it\n"
! 	    "inherits the values from its parent.  Because each thread executes\n"
! 	    "in its own dynamic root, you can use fluids for thread local storage.")
  #define FUNC_NAME s_scm_make_fluid
  {
    int n;
***************
*** 132,155 ****
  #undef FUNC_NAME
  
  SCM_DEFINE (scm_fluid_p, "fluid?", 1, 0, 0, 
!             (SCM fl),
! "")
  #define FUNC_NAME s_scm_fluid_p
  {
!   return SCM_BOOL(SCM_FLUIDP (fl));
  }
  #undef FUNC_NAME
  
  SCM_DEFINE (scm_fluid_ref, "fluid-ref", 1, 0, 0, 
!             (SCM fl),
! "")
  #define FUNC_NAME s_scm_fluid_ref
  {
    int n;
  
!   SCM_VALIDATE_FLUID (1,fl);
  
!   n = SCM_FLUID_NUM (fl);
  
    if (SCM_LENGTH (scm_root->fluids) <= n)
      grow_fluids (scm_root, n+1);
--- 138,162 ----
  #undef FUNC_NAME
  
  SCM_DEFINE (scm_fluid_p, "fluid?", 1, 0, 0, 
! 	    (SCM obj),
! 	    "Return #t iff @var{obj} is a fluid; otherwise, return #f.")
  #define FUNC_NAME s_scm_fluid_p
  {
!   return SCM_BOOL(SCM_FLUIDP (obj));
  }
  #undef FUNC_NAME
  
  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.")
  #define FUNC_NAME s_scm_fluid_ref
  {
    int n;
  
!   SCM_VALIDATE_FLUID (1, fluid);
  
!   n = SCM_FLUID_NUM (fluid);
  
    if (SCM_LENGTH (scm_root->fluids) <= n)
      grow_fluids (scm_root, n+1);
***************
*** 158,176 ****
  #undef FUNC_NAME
  
  SCM_DEFINE (scm_fluid_set_x, "fluid-set!", 2, 0, 0,
!             (SCM fl, SCM val),
! "")
  #define FUNC_NAME s_scm_fluid_set_x
  {
    int n;
  
!   SCM_VALIDATE_FLUID (1,fl);
!   n = SCM_FLUID_NUM (fl);
  
    if (SCM_LENGTH (scm_root->fluids) <= n)
      grow_fluids (scm_root, n+1);
!   SCM_VELTS(scm_root->fluids)[n] = val;
!   return val;
  }
  #undef FUNC_NAME
  
--- 165,183 ----
  #undef FUNC_NAME
  
  SCM_DEFINE (scm_fluid_set_x, "fluid-set!", 2, 0, 0,
! 	    (SCM fluid, SCM value),
! 	    "Set the value associated with @var{fluid} in the current dynamic root.")
  #define FUNC_NAME s_scm_fluid_set_x
  {
    int n;
  
!   SCM_VALIDATE_FLUID (1, fluid);
!   n = SCM_FLUID_NUM (fluid);
  
    if (SCM_LENGTH (scm_root->fluids) <= n)
      grow_fluids (scm_root, n+1);
!   SCM_VELTS(scm_root->fluids)[n] = value;
!   return value;
  }
  #undef FUNC_NAME
  
***************
*** 214,244 ****
  }
  
  SCM_DEFINE (scm_with_fluids, "with-fluids*", 3, 0, 0, 
!             (SCM fluids, SCM vals, SCM thunk),
! "")
  #define FUNC_NAME s_scm_with_fluids
  {
!   return scm_internal_with_fluids (fluids, vals, apply_thunk, (void *)thunk);
  }
  #undef FUNC_NAME
  
  SCM
! scm_internal_with_fluids (SCM fluids, SCM vals, SCM (*cproc) (), void *cdata)
  #define FUNC_NAME "scm_internal_with_fluids"
  {
    SCM ans;
    int flen, vlen;
  
    SCM_VALIDATE_LIST_COPYLEN (1, fluids, flen);
!   SCM_VALIDATE_LIST_COPYLEN (2, vals, vlen);
    if (flen != vlen)
!     scm_out_of_range (s_scm_with_fluids, vals);
  
!   scm_swap_fluids (fluids, vals);
!   scm_dynwinds = scm_acons (fluids, vals, scm_dynwinds);
    ans = cproc (cdata);
    scm_dynwinds = SCM_CDR (scm_dynwinds);
!   scm_swap_fluids_reverse (fluids, vals);
    return ans;
  }
  #undef FUNC_NAME
--- 221,254 ----
  }
  
  SCM_DEFINE (scm_with_fluids, "with-fluids*", 3, 0, 0, 
! 	    (SCM fluids, SCM values, SCM thunk),
! 	    "Set @var{fluids} to @var{values} temporary, and call @var{thunk}.\n"
! 	    "@var{fluids} must be a list of fluids and @var{values} must be the same\n"
! 	    "number of their values to be applied.  Each substitution is done\n"
! 	    "one after another.  @var{thunk} must be a procedure with no argument.")
  #define FUNC_NAME s_scm_with_fluids
  {
!   return scm_internal_with_fluids (fluids, values, apply_thunk, (void *)thunk);
  }
  #undef FUNC_NAME
  
  SCM
! scm_internal_with_fluids (SCM fluids, SCM values, SCM (*cproc) (), void *cdata)
  #define FUNC_NAME "scm_internal_with_fluids"
  {
    SCM ans;
    int flen, vlen;
  
    SCM_VALIDATE_LIST_COPYLEN (1, fluids, flen);
!   SCM_VALIDATE_LIST_COPYLEN (2, values, vlen);
    if (flen != vlen)
!     scm_out_of_range (s_scm_with_fluids, values);
  
!   scm_swap_fluids (fluids, values);
!   scm_dynwinds = scm_acons (fluids, values, scm_dynwinds);
    ans = cproc (cdata);
    scm_dynwinds = SCM_CDR (scm_dynwinds);
!   scm_swap_fluids_reverse (fluids, values);
    return ans;
  }
  #undef FUNC_NAME

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]