use obstack_grow instead of obstack_printf
[libfirm] / ir / tr / mangle.c
1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 * All rights reserved.
3 *
4 * Authors: Martin Trapp, Christian Schaefer
5 *
6 */
7
8 /* $Id$ */
9
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13
14 # include "mangle.h"
15 # include "obst.h"
16 # include "misc.h"
17
18 /* Make types visible to allow most efficient access */
19 # include "entity_t.h"
20 # include "type_t.h"
21 # include "tpop_t.h"
22
23 static struct obstack mangle_obst;
24
25 ident *
26 mangle_entity (entity *ent)
27 {
28   ident *type_id;
29   char *cp;
30   int len;
31   ident *res;
32
33   type_id = mangle_type ((type *) ent->owner);
34   obstack_grow(&mangle_obst, id_to_str(type_id), id_to_strlen(type_id));
35   obstack_1grow(&mangle_obst,'_');
36   obstack_grow(&mangle_obst,id_to_str(ent->name),id_to_strlen(ent->name));
37   len = obstack_object_size (&mangle_obst);
38   cp = obstack_finish (&mangle_obst);
39   res = id_from_str(cp, len);
40   obstack_free (&mangle_obst, cp);
41   return res;
42 }
43
44 ident *
45 mangle_type (type *tp)
46 {
47   assert (tp->kind == k_type);
48   return tp->name;
49 }
50
51 /* Returns a new ident that represents firstscnd. */
52 ident *mangle (ident *first, ident* scnd) {
53   char *cp;
54   int len;
55   ident *res;
56
57   obstack_grow(&mangle_obst, id_to_str(first), id_to_strlen(first));
58   obstack_grow(&mangle_obst, id_to_str(scnd), id_to_strlen(scnd));
59   len = obstack_object_size (&mangle_obst);
60   cp = obstack_finish (&mangle_obst);
61   res = id_from_str (cp, len);
62   obstack_free (&mangle_obst, cp);
63   return res;
64 }
65
66 /* Returns a new ident that represents first_scnd. */
67 ident *mangle_u (ident *first, ident* scnd) {
68   char *cp;
69   int len;
70   ident *res;
71
72   obstack_grow(&mangle_obst, id_to_str(first), id_to_strlen(first));
73   obstack_1grow(&mangle_obst,'_');
74   obstack_grow(&mangle_obst,id_to_str(scnd),id_to_strlen(scnd));
75   len = obstack_object_size (&mangle_obst);
76   cp = obstack_finish (&mangle_obst);
77   res = id_from_str (cp, len);
78   obstack_free (&mangle_obst, cp);
79   return res;
80 }
81
82
83 void
84 init_mangle (void)
85 {
86   obstack_init(&mangle_obst);
87 }