diff options
Diffstat (limited to 'libguile/keywords.c')
-rw-r--r-- | libguile/keywords.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/libguile/keywords.c b/libguile/keywords.c index ff86b582f..f17eedacc 100644 --- a/libguile/keywords.c +++ b/libguile/keywords.c @@ -71,24 +71,21 @@ SCM_DEFINE (scm_make_keyword_from_dash_symbol, "make-keyword-from-dash-symbol", "Make a keyword object from a @var{symbol} that starts with a dash.") #define FUNC_NAME s_scm_make_keyword_from_dash_symbol { - SCM vcell; + SCM keyword; SCM_ASSERT (SCM_SYMBOLP (symbol) && ('-' == SCM_SYMBOL_CHARS(symbol)[0]), symbol, SCM_ARG1, FUNC_NAME); SCM_DEFER_INTS; - vcell = scm_sym2ovcell_soft (symbol, scm_keyword_obarray); - if (SCM_FALSEP (vcell)) + keyword = scm_hashq_ref (scm_keyword_obarray, symbol, SCM_BOOL_F); + if (SCM_FALSEP (keyword)) { - SCM keyword; SCM_NEWSMOB (keyword, scm_tc16_keyword, SCM_UNPACK (symbol)); - scm_intern_symbol (scm_keyword_obarray, symbol); - vcell = scm_sym2ovcell_soft (symbol, scm_keyword_obarray); - SCM_SETCDR (vcell, keyword); + scm_hashq_set_x (scm_keyword_obarray, symbol, keyword); } SCM_ALLOW_INTS; - return SCM_CDR (vcell); + return keyword; } #undef FUNC_NAME |