diff options
Diffstat (limited to 'libguile/fluids.c')
-rw-r--r-- | libguile/fluids.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/libguile/fluids.c b/libguile/fluids.c index c3dd1c9ea..472f92a06 100644 --- a/libguile/fluids.c +++ b/libguile/fluids.c @@ -343,22 +343,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); - 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); + return SCM_PACK (entry->value); - if (SCM_UNBNDP (val)) - val = SCM_I_FLUID_DEFAULT (fluid); + if (SCM_I_FLUID_THREAD_LOCAL_P (fluid)) + val = scm_hashq_ref (dynamic_state->thread_local_values, fluid, + SCM_I_FLUID_DEFAULT (fluid)); + else + val = scm_weak_table_refq (dynamic_state->values, fluid, + 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; } |