diff --git a/libguile/fluids.c b/libguile/fluids.c index f62693338..ebdb48fbc 100644 --- a/libguile/fluids.c +++ b/libguile/fluids.c @@ -350,22 +350,17 @@ fluid_ref (scm_t_dynamic_state *dynamic_state, SCM fluid) entry = scm_cache_lookup (&dynamic_state->cache, fluid); if (scm_is_eq (SCM_PACK (entry->key), fluid)) - val = SCM_PACK (entry->value); + return SCM_PACK (entry->value); + + if (SCM_I_FLUID_THREAD_LOCAL_P (fluid)) + val = scm_hashq_ref (dynamic_state->thread_local_values, fluid, + SCM_I_FLUID_DEFAULT (fluid)); else - { - if (SCM_I_FLUID_THREAD_LOCAL_P (fluid)) - val = scm_hashq_ref (dynamic_state->thread_local_values, fluid, - SCM_UNDEFINED); - else - val = scm_weak_table_refq (dynamic_state->values, fluid, - SCM_UNDEFINED); + val = scm_weak_table_refq (dynamic_state->values, fluid, + SCM_I_FLUID_DEFAULT (fluid)); - if (SCM_UNBNDP (val)) - val = SCM_I_FLUID_DEFAULT (fluid); - - /* Cache this lookup. */ - fluid_set_x (dynamic_state, fluid, val); - } + /* Cache this lookup. */ + fluid_set_x (dynamic_state, fluid, val); return val; } diff --git a/test-suite/tests/fluids.test b/test-suite/tests/fluids.test index a5ca8857e..949d50410 100644 --- a/test-suite/tests/fluids.test +++ b/test-suite/tests/fluids.test @@ -49,8 +49,18 @@ (interaction-environment)))) (with-test-prefix "initial fluid values" - (pass-if "fluid-ref uninitialized fluid is #f" - (not (fluid-ref a))) + + (pass-if "fluid-ref returns #f for uninitialized fluid" + (eq? #f (fluid-ref (make-fluid)))) + + (pass-if "fluid-ref returns #f for uninitialized thread local fluid" + (eq? #f (fluid-ref (make-thread-local-fluid)))) + + (pass-if "fluid-ref returns default" + (eq? #t (fluid-ref (make-fluid #t)))) + + (pass-if "fluid-ref returns thread local default" + (eq? #t (fluid-ref (make-thread-local-fluid #t)))) (pass-if "initial value is inherited from parent thread" (if (provided? 'threads)