X-Git-Url: http://git.hcoop.net/bpt/guile.git/blobdiff_plain/e9b8556ec92039396e740620238d56a3748f2a99..81b80b9610798ea910daad78cf525dec211639f9:/libguile/keywords.c diff --git a/libguile/keywords.c b/libguile/keywords.c index 831c2cc28..e4a79ac4d 100644 --- a/libguile/keywords.c +++ b/libguile/keywords.c @@ -1,22 +1,26 @@ -/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006, 2008, 2009, 2011 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 3 of + * the License, or (at your option) any later version. * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301 USA */ +#ifdef HAVE_CONFIG_H +# include +#endif #include @@ -33,6 +37,8 @@ +static SCM keyword_obarray; + scm_t_bits scm_tc16_keyword; #define KEYWORDP(X) (SCM_SMOB_PREDICATE (scm_tc16_keyword, (X))) @@ -41,7 +47,7 @@ scm_t_bits scm_tc16_keyword; static int keyword_print (SCM exp, SCM port, scm_print_state *pstate SCM_UNUSED) { - scm_puts ("#:", port); + scm_puts_unlocked ("#:", port); scm_display (KEYWORDSYM (exp), port); return 1; } @@ -67,11 +73,11 @@ SCM_DEFINE (scm_symbol_to_keyword, "symbol->keyword", 1, 0, 0, SCM_CRITICAL_SECTION_START; /* njrev: NEWSMOB and hashq_set_x can raise errors */ - keyword = scm_hashq_ref (scm_keyword_obarray, symbol, SCM_BOOL_F); + keyword = scm_hashq_ref (keyword_obarray, symbol, SCM_BOOL_F); if (scm_is_false (keyword)) { SCM_NEWSMOB (keyword, scm_tc16_keyword, SCM_UNPACK (symbol)); - scm_hashq_set_x (scm_keyword_obarray, symbol, keyword); + scm_hashq_set_x (keyword_obarray, symbol, keyword); } SCM_CRITICAL_SECTION_END; return keyword; @@ -95,15 +101,27 @@ scm_is_keyword (SCM val) } SCM -scm_from_locale_keyword (const char *str) +scm_from_locale_keyword (const char *name) +{ + return scm_symbol_to_keyword (scm_from_locale_symbol (name)); +} + +SCM +scm_from_locale_keywordn (const char *name, size_t len) +{ + return scm_symbol_to_keyword (scm_from_locale_symboln (name, len)); +} + +SCM +scm_from_latin1_keyword (const char *name) { - return scm_symbol_to_keyword (scm_from_locale_symbol (str)); + return scm_symbol_to_keyword (scm_from_latin1_symbol (name)); } SCM -scm_from_locale_keywordn (const char *str, size_t len) +scm_from_utf8_keyword (const char *name) { - return scm_symbol_to_keyword (scm_from_locale_symboln (str, len)); + return scm_symbol_to_keyword (scm_from_utf8_symbol (name)); } /* njrev: critical sections reviewed so far up to here */ @@ -113,7 +131,7 @@ scm_init_keywords () scm_tc16_keyword = scm_make_smob_type ("keyword", 0); scm_set_smob_print (scm_tc16_keyword, keyword_print); - scm_keyword_obarray = scm_c_make_hash_table (0); + keyword_obarray = scm_c_make_hash_table (0); #include "libguile/keywords.x" }