X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=ir%2Fident%2Fident.c;h=38e37a4f76665c8b20655e61c03781e93fcc400d;hb=c4765b0ab72acdca97ee8acce32f467614440d9c;hp=3d014a71293ad278613ba33382535b633fcbdbbc;hpb=109b367e18cda22744a532c734ecfbf6220d6c2d;p=libfirm diff --git a/ir/ident/ident.c b/ir/ident/ident.c index 3d014a712..38e37a4f7 100644 --- a/ir/ident/ident.c +++ b/ir/ident/ident.c @@ -1,27 +1,46 @@ /* - * Project: libFIRM - * File name: ir/common/ident.c - * Purpose: Hash table to store names. - * Author: Goetz Lindenmaier - * Modified by: - * Created: - * CVS-ID: $Id$ - * Copyright: (c) 1999-2003 Universität Karlsruhe - * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. */ -#ifdef HAVE_CONFIG_H -# include -#endif +/** + * @file + * @brief Hash table to store names. + * @author Goetz Lindenmaier + * @version $Id$ + */ +#include "config.h" #include #include +#include #include #include #include #include "ident_t.h" #include "set.h" +#include "xmalloc.h" + +/* for debugging only, not the real implementation */ +struct _ident { + char reserved[sizeof(unsigned) + sizeof(size_t)]; + char data[1]; +}; /** The current ident module implementation. */ static ident_if_t impl; @@ -31,6 +50,7 @@ static ident_if_t impl; * * @param handle the handle for the set * @param str the string which shall be stored + * @param len length of str in bytes * * @return id - a handle for the generated ident * @@ -40,8 +60,9 @@ static ident *set_new_id_from_chars(void *handle, const char *str, int len) { set *id_set = handle; - assert(len > 0); - return (ident *)set_hinsert0(id_set, str, len, ID_HASH(str, len)); + /* GL: Who added this assert? And why? */ + //assert(len > 0); + return (ident *)set_hinsert0(id_set, str, len, ID_HASH(unsigned char, str, len)); } /** @@ -49,14 +70,13 @@ static ident *set_new_id_from_chars(void *handle, const char *str, int len) * * @param handle the handle for the set * @param str the string (or whatever) which shall be stored - * @param len the length of the data in bytes * * Default implementation using libfirm sets. */ static ident *set_new_id_from_str(void *handle, const char *str) { assert(str); - return (ident *)set_new_id_from_chars(handle, str, strlen(str)); + return set_new_id_from_chars(handle, str, strlen(str)); } /** @@ -70,6 +90,7 @@ static ident *set_new_id_from_str(void *handle, const char *str) static const char *set_get_id_str(void *handle, ident *id) { struct set_entry *entry = (struct set_entry *)id; + (void) handle; return (const char *)entry->dptr; } @@ -85,6 +106,7 @@ static const char *set_get_id_str(void *handle, ident *id) static int set_get_id_strlen(void *handle, ident *id) { struct set_entry *entry = (struct set_entry *)id; + (void) handle; return entry->size; } @@ -124,14 +146,14 @@ void init_ident(ident_if_t *id_if, int initial_n_idents) impl.new_id_from_str = def_new_id_from_str; if (! impl.get_id_strlen) impl.get_id_strlen = def_get_id_strlen; - } - else { - impl.new_id_from_str = set_new_id_from_str; - impl.new_id_from_chars = set_new_id_from_chars; - impl.get_id_str = set_get_id_str; - impl.get_id_strlen = set_get_id_strlen; - impl.finish_ident = set_finish_ident; - + } else { + impl.new_id_from_str = set_new_id_from_str; + impl.new_id_from_chars = set_new_id_from_chars; + impl.get_id_str = set_get_id_str; + impl.get_id_strlen = set_get_id_strlen; + impl.finish_ident = set_finish_ident; + + /* it's ok to use memcmp here, we check only strings */ impl.handle = new_set(memcmp, initial_n_idents); } } @@ -188,12 +210,12 @@ int id_contains_char(ident *id, char c) return strchr(get_id_str(id), c) != NULL; } -int print_id (ident *id) +ident *id_unique(const char *tag) { - return printf("%s", get_id_str(id)); -} + static unsigned unique_id = 0; + char buf[256]; -int fprint_id (FILE *F, ident *id) -{ - return fprintf(F, "%s", get_id_str(id)); + snprintf(buf, sizeof(buf), tag, unique_id); + unique_id++; + return new_id_from_str(buf); }