add with-fluids objects and primitive syntax
authorAndy Wingo <wingo@pobox.com>
Thu, 18 Feb 2010 16:10:29 +0000 (17:10 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 18 Feb 2010 21:15:43 +0000 (22:15 +0100)
commitbb0229b51d53c10164f58cebbeeed85cd9dfe0b8
tree4c63470d420dd669612828357481bfc518ddab47
parent27bd1deced05d096915d47c6ea46d3b22d692e19
add with-fluids objects and primitive syntax

* libguile/tags.h (scm_tc7_with_fluids): Allocate a tc7 for
  "with-fluids" objects, which will only live on the dynamic stack (wind
  list), not in normal scheme-land.

* libguile/fluids.h (SCM_WITH_FLUIDS_P, SCM_WITH_FLUIDS_LEN)
  (SCM_WITH_FLUIDS_NTH_FLUID, SCM_WITH_FLUIDS_NTH_VAL)
  (SCM_WITH_FLUIDS_SET_NTH_VAL): Add some accessors.
* libguile/fluids.c (scm_i_make_with_fluids, scm_i_swap_with_fluids):
  New internal functions.
  (scm_c_with_fluids, scm_c_with_fluid): Push with-fluids objects on the
  dynwind list, not winders.

* libguile/dynwind.c (scm_i_dowinds): Add cases for winding and
  unwinding with-fluids objects.

* libguile/memoize.h (scm_sym_with_fluids, SCM_M_BEGIN): New public
  data.
* libguile/memoize.c (scm_m_with_fluids): Define with-fluids as a
  primitive syntax.
  (unmemoize): Add with-fluids case.

* libguile/eval.c (eval):
* module/ice-9/eval.scm (primitive-eval): Add with-fluids cases.

* test-suite/tests/fluids.test
  ("fluids not modified if nonfluid passed to with-fluids"): Enable a
  now-passing test.
libguile/dynwind.c
libguile/eval.c
libguile/fluids.c
libguile/fluids.h
libguile/memoize.c
libguile/memoize.h
libguile/tags.h
module/ice-9/eval.scm
test-suite/tests/fluids.test