X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fident%2Fmangle.c;h=c27798edb80fbd7dd618c914ec6de467db9e8b1d;hb=f8d7cadcac7404b56a67f0c6b6cd71a76cda9bd6;hp=abe4a6b3ee63d88bc4b58c341e2b541c10bac768;hpb=d11427731d82eb4392500d59c7432eefd24e08da;p=libfirm diff --git a/ir/ident/mangle.c b/ir/ident/mangle.c index abe4a6b3e..c27798edb 100644 --- a/ir/ident/mangle.c +++ b/ir/ident/mangle.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2010 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -23,13 +23,11 @@ * @author Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Michael Beck * @version $Id$ */ -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif +#include "config.h" -# include +#include -#include "ident.h" +#include "ident_t.h" #include "obst.h" /* Make types visible to allow most efficient access */ @@ -41,12 +39,14 @@ static struct obstack mangle_obst; /** returned a mangled type name, currently no mangling */ -static INLINE ident *mangle_type(ir_type *tp) { +static inline ident *mangle_type(const ir_type *tp) +{ assert(tp->kind == k_type); return tp->name; } -ident *mangle_entity(ir_entity *ent) { +ident *id_mangle_entity(const ir_entity *ent) +{ ident *type_id; char *cp; int len; @@ -55,32 +55,34 @@ ident *mangle_entity(ir_entity *ent) { type_id = mangle_type(ent->owner); obstack_grow(&mangle_obst, get_id_str(type_id), get_id_strlen(type_id)); obstack_1grow(&mangle_obst,'_'); - obstack_grow(&mangle_obst,get_id_str(ent->name),get_id_strlen(ent->name)); - len = obstack_object_size (&mangle_obst); - cp = obstack_finish (&mangle_obst); + obstack_grow(&mangle_obst, get_id_str(ent->name), get_id_strlen(ent->name)); + len = obstack_object_size(&mangle_obst); + cp = obstack_finish(&mangle_obst); res = new_id_from_chars(cp, len); - obstack_free (&mangle_obst, cp); + obstack_free(&mangle_obst, cp); return res; } /* Returns a new ident that represents 'firstscnd'. */ -ident *mangle(ident *first, ident *scnd) { +ident *id_mangle(ident *first, ident *scnd) +{ char *cp; int len; ident *res; obstack_grow(&mangle_obst, get_id_str(first), get_id_strlen(first)); obstack_grow(&mangle_obst, get_id_str(scnd), get_id_strlen(scnd)); - len = obstack_object_size (&mangle_obst); - cp = obstack_finish (&mangle_obst); - res = new_id_from_chars (cp, len); - obstack_free (&mangle_obst, cp); + len = obstack_object_size(&mangle_obst); + cp = obstack_finish(&mangle_obst); + res = new_id_from_chars(cp, len); + obstack_free(&mangle_obst, cp); return res; } /** Returns a new ident that represents 'prefixscndsuffix'. */ -ident *mangle3(const char *prefix, ident *scnd, const char *suffix) { +ident *id_mangle3(const char *prefix, ident *scnd, const char *suffix) +{ char *cp; int len; ident *res; @@ -88,15 +90,16 @@ ident *mangle3(const char *prefix, ident *scnd, const char *suffix) { obstack_grow(&mangle_obst, prefix, strlen(prefix)); obstack_grow(&mangle_obst, get_id_str(scnd), get_id_strlen(scnd)); obstack_grow(&mangle_obst, suffix, strlen(suffix)); - len = obstack_object_size (&mangle_obst); - cp = obstack_finish (&mangle_obst); - res = new_id_from_chars (cp, len); - obstack_free (&mangle_obst, cp); + len = obstack_object_size(&mangle_obst); + cp = obstack_finish(&mangle_obst); + res = new_id_from_chars(cp, len); + obstack_free(&mangle_obst, cp); return res; } /** Returns a new ident that represents firstscnd. */ -static ident *mangle_3(ident *first, char c, ident* scnd) { +static ident *id_mangle_3(ident *first, char c, ident *scnd) +{ char *cp; int len; ident *res; @@ -104,32 +107,35 @@ static ident *mangle_3(ident *first, char c, ident* scnd) { obstack_grow(&mangle_obst, get_id_str(first), get_id_strlen(first)); obstack_1grow(&mangle_obst, c); obstack_grow(&mangle_obst,get_id_str(scnd),get_id_strlen(scnd)); - len = obstack_object_size (&mangle_obst); - cp = obstack_finish (&mangle_obst); - res = new_id_from_chars (cp, len); - obstack_free (&mangle_obst, cp); + len = obstack_object_size(&mangle_obst); + cp = obstack_finish(&mangle_obst); + res = new_id_from_chars(cp, len); + obstack_free(&mangle_obst, cp); return res; } /* Returns a new ident that represents first_scnd. */ -ident *mangle_u(ident *first, ident* scnd) { - return mangle_3(first, '_', scnd); +ident *id_mangle_u(ident *first, ident* scnd) +{ + return id_mangle_3(first, '_', scnd); } /* Returns a new ident that represents first.scnd. */ -ident *mangle_dot(ident *first, ident* scnd) { - return mangle_3(first, '.', scnd); +ident *id_mangle_dot(ident *first, ident *scnd) +{ + return id_mangle_3(first, '.', scnd); } /* returns a mangled name for a Win32 function using it's calling convention */ -ident *decorate_win32_c_fkt(ir_entity *ent, ident *id) { +ident *id_decorate_win32_c_fkt(const ir_entity *ent, ident *id) +{ ir_type *tp = get_entity_type(ent); unsigned cc_mask = get_method_calling_convention(tp); char buf[16]; int size, i; if (IS_CDECL(cc_mask)) - return mangle3("_", id, ""); + return id_mangle3("_", id, ""); else if (IS_STDCALL(cc_mask)) { size = 0; for (i = get_method_n_params(tp) - 1; i >= 0; --i) { @@ -139,13 +145,14 @@ ident *decorate_win32_c_fkt(ir_entity *ent, ident *id) { snprintf(buf, sizeof(buf), "@%d", size); if (cc_mask & cc_reg_param) - return mangle3("@", id, buf); + return id_mangle3("@", id, buf); else - return mangle3("_", id, buf); + return id_mangle3("_", id, buf); } return id; } -void firm_init_mangle(void) { +void firm_init_mangle(void) +{ obstack_init(&mangle_obst); }