X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fident%2Fmangle.c;h=12a877c99ddc1143b37985740eedd3fbb7ddbd73;hb=2a2686741df6ab65c2ea76eeecc9fa72aed394e7;hp=cfbb4d7d36e7f9b5242c7ac3226a0998e8f373c5;hpb=bb9f2e36362333c6635b89f5258171b06c786608;p=libfirm diff --git a/ir/ident/mangle.c b/ir/ident/mangle.c index cfbb4d7d3..12a877c99 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. * @@ -21,14 +21,14 @@ * @file * @brief Methods to manipulate names. * @author Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Michael Beck - * @version $Id$ */ #include "config.h" -# include +#include -#include "ident.h" +#include "ident_t.h" #include "obst.h" +#include "irprintf.h" /* Make types visible to allow most efficient access */ #include "entity_t.h" @@ -39,46 +39,31 @@ 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 *type_id; - char *cp; - int len; - ident *res; - - 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); - res = new_id_from_chars(cp, len); - 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 = (char*)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; @@ -86,15 +71,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 = (char*)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; @@ -102,48 +88,31 @@ 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 = (char*)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) { - 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, ""); - else if (IS_STDCALL(cc_mask)) { - size = 0; - for (i = get_method_n_params(tp) - 1; i >= 0; --i) { - size += get_type_size_bytes(get_method_param_type(tp, i)); - } - - snprintf(buf, sizeof(buf), "@%d", size); - - if (cc_mask & cc_reg_param) - return mangle3("@", id, buf); - else - return mangle3("_", id, buf); - } - return id; +void firm_init_mangle(void) +{ + obstack_init(&mangle_obst); } -void firm_init_mangle(void) { - obstack_init(&mangle_obst); +void firm_finish_mangle(void) +{ + obstack_free(&mangle_obst, NULL); }